#! /usr/bin/env python import os, sys, glob, shutil, fileinput import produtil.setup, produtil.run, produtil.fileop, produtil.cd, produtil.batchsystem, produtil.config from produtil.fileop import remove_file, make_symlink, isnonempty, chdir, fortlink from produtil.run import run, exe, checkrun, mpi, mpirun import nmmbUsh import logging from nmmbUsh import logger produtil.setup.setup() logger.info("forecast started") workdir=os.environ.get('WORKhmon') parmdir=os.environ.get('PARMhmon') chdir(workdir + "/forecast") conf=produtil.config.from_file(parmdir + "/hmon.conf") conf.cycle=os.environ.get('CYCLE') fixdir=conf.get('dir','FIXhmon') exedir=conf.get('dir','EXEChmon') comdir=conf.get('dir','COM') with open(workdir + "/get_storm_info/storm_info", 'r') as f: for line in f: if "STORM_NAME=" in line: STORM_NAME = line.replace("STORM_NAME=", "") STORM_NAME = STORM_NAME.strip('\n') if "START_DATE=" in line: START_DATE = line.replace("START_DATE=", "") START_DATE = START_DATE.strip('\n') if "STORM_ID=" in line: STORM_ID = line.replace("STORM_ID=","") STORM_ID = STORM_ID.strip('\n') astr = STORM_NAME storm_name = astr.lower() astr = STORM_ID storm_id = astr.lower() for filename in glob.glob(os.path.join(fixdir + "/nmmb/", '*')): produtil.fileop.deliver_file(filename, ".") produtil.fileop.deliver_file("IGBP_VEGPARM.TBL", "VEGPARM.TBL",logger=logger) produtil.fileop.deliver_file("IGBP_LANDUSE.TBL", "LANDUSE.TBL",logger=logger) produtil.fileop.deliver_file(parmdir + "/solver_state.txt", "solver_state.txt",logger=logger) produtil.fileop.deliver_file(parmdir + "/nests.txt", "nests.txt",logger=logger) produtil.fileop.deliver_file(parmdir + "/cpl_nml_uncoupled", "cpl_nml",logger=logger) atmos_d = comdir for filename in ['ALBASE', 'FIS', 'ISLTYP', 'IVGTYP', 'MXSNAL', 'SM', 'TG', 'VEGFRC']: make_symlink(atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + filename + "_3.nc", filename + "_3.nc", True) make_symlink(atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + filename + "_9.nc", filename + "_9.nc", True) for d in ['01', '02', '03']: filename = 'input_domain_' + d + '_nemsio' make_symlink(atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + filename, filename, True) fahr = 0 while (fahr < 127): hr='{0:0>4}'.format(fahr) filename = 'boco.' + hr make_symlink(atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + filename, filename, True) fahr=fahr+6 nmmbUsh.make_symlinks(atmos_d + "/GWD_bin_*",".") nmmbUsh.make_symlinks(atmos_d + "/*.configure_nest_details_0*",".") for d in ['01', '02', '03']: f = open(storm_name + storm_id + "." + START_DATE + ".configure_nest_details_"+d, "r") text = f.read() f.close() with open("configure_file_" + d + ".in",'a') as f: f.write(text) nmmbUsh.rm_glob('core*','PET*','nmmb_hst_*','nmmb_rst_*') for d in ['01', '02', '03']: cf = "configure_file_"+d produtil.fileop.deliver_file("configure_file_"+d+".in",cf,logger=logger) for line in fileinput.FileInput(cf,inplace=1): line = line.replace("_RESTART_","false") line = line.replace("_COUPLE_","false") print(line, end=' ') make_symlink("configure_file_01", "configure_file", True) make_symlink("configure_file_01", "model_configure", True) make_symlink("global_o3prdlos.f77", "fort.28", True) make_symlink("global_o3clim.txt", "fort.48", True) os.environ['ATP_ENABLED']='1' os.environ['FORT_BUFFERED']='TRUE' os.environ['INSIDE_APRUN']='1' #os.environ['KMP_AFFINITY']='disabled' os.environ['OMP_NUM_THREADS']='1' #os.environ['ESMF_RUNTIME_COMPLIANCECHECK']='OFF' #os.environ['depth']='4' os.environ['MALLOC_MMAP_MAX_']='0' os.environ['MALLOC_TRIM_THRESHOLD_']='$(( 128 * 1024 * 1024 ))' os.environ['MPICH_ABORT_ON_ERROR']='1' os.environ['MPICH_ENV_DISPLAY']='1' os.environ['MPICH_RANK_REORDER_DISPLAY']='1' os.environ['MPICH_VERSION_DISPLAY']='1' logger.info("mpirun" + " " + "/NMMB.x 1>out.nmmb 2>err.nmmb") checkrun(mpirun(mpi(exedir+"/hmon_NMMB").rpn(12)*434).out('out.nmmb').err('err.nmmb'),logger=logger) #produtil.run.checkrun(produtil.run.mpirun(produtil.run.mpi(exedir+"/hmon_NMMB").rpn(12)*412).out('out.forecast').err('err.forecast'),logger=logger) ## copy data to COM directory produtil.fileop.deliver_file("./configure_file_01.in",atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + "configure_file_01.in",logger=logger) produtil.fileop.deliver_file("./configure_file_02.in",atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + "configure_file_02.in",logger=logger) produtil.fileop.deliver_file("./configure_file_03.in",atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + "configure_file_03.in",logger=logger) produtil.fileop.deliver_file("./nmmb_hst_01_nio_0006h_00m_00.00s",atmos_d + "/" + STORM_ID + "." + START_DATE + ".nmmb_hst_01_nio_0006h_00m_00.00s",logger=logger) produtil.fileop.deliver_file("./nmmb_hst_02_nio_0006h_00m_00.00s",atmos_d + "/" + STORM_ID + "." + START_DATE + ".nmmb_hst_02_nio_0006h_00m_00.00s",logger=logger) produtil.fileop.deliver_file("./nmmb_hst_03_nio_0006h_00m_00.00s",atmos_d + "/" + STORM_ID + "." + START_DATE + ".nmmb_hst_03_nio_0006h_00m_00.00s",logger=logger) produtil.fileop.deliver_file("./swath_d02",atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + "swath_d02",logger=logger) produtil.fileop.deliver_file("./swath_d03",atmos_d + "/" + storm_name + storm_id + "." + START_DATE + "." + "swath_d03",logger=logger) logger.info("run_nmmb finished")