From 2b892932119917385cc974a3998e86399c7fac5e Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Tue, 14 Mar 2023 09:44:43 -0400 Subject: [PATCH 1/6] multiple choics for more grid_types and resolutions --- .../Utils/Raster/makebcs/bcs_utils.py | 393 +++++++++--------- 1 file changed, 199 insertions(+), 194 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py index 2e70bdbd5..8a0538ae8 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py @@ -24,165 +24,114 @@ def get_account(): accounts = accounts.decode().split() return accounts[0] -def get_config_from_answers(answers): +def get_user(): + cmd = 'whoami' + p = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) + (user, err) = p.communicate() + p_status = p.wait() + user = user.decode().split() + return user[0] - grid_type = answers['grid_type'] - lbcsv = answers['bcs_version'] - resolution = answers['resolution'] - orslvs = answers['orslvs'] +def get_configs_from_answers(answers): - im = {} - imo = {} - jm = {} - jmo = {} - NX = 8640 - NY = 4320 - NT = 232000000 + lbcsv = answers['bcs_version'] hostname = socket.gethostname() - input_dir = '' + make_bcs_input_dir = '' if 'discover' in hostname: - input_dir = '/discover/nobackup/projects/gmao/bcs_shared/make_bcs_inputs/' + make_bcs_input_dir = '/discover/nobackup/projects/gmao/bcs_shared/make_bcs_inputs/' else: - input_dir = '/nobackup/gmao_SIteam/ModelData/l_data/LandBCs_files_for_mkCatchParam/V001/' - - maskfile = '' - - if orslvs in['O1','T2','T3','T4','T1MOM6','T2MOM6','T4MOM6']: - maskfile = 'shared/mask/GEOS5_10arcsec_mask_freshwater-lakes.nc' - if lbcsv in ['F25', 'GM4', 'ICA']: - maskfile = 'global.cat_id.catch.DL' - - if orslvs in['O2','O3','CS']: - maskfile = 'shared/mask/GEOS5_10arcsec_mask.nc' - if lbcsv in ['F25', 'GM4', 'ICA']: - maskfile = 'global.cat_id.catch.GreatLakesCaspian_Updated.DL' - - if grid_type in ['EASEv1', 'EASEv2']: - maskfile = 'shared/mask/GEOS5_10arcsec_mask.nc' - - imo['O1'] = 360 - jmo['O1'] = 180 - - imo['O2'] = 1440 - jmo['O2'] = 720 - - imo['O3'] = 2880 - jmo['O3'] = 1440 - - imo['T2'] = 360 - jmo['T2'] = 200 - - imo['T3'] = 720 - jmo['T3'] = 410 - - imo['T4'] = 1440 - jmo['T4'] = 1080 - - imo['T1MOM6'] = 72 - jmo['T1MOM6'] = 36 - - imo['T2MOM6'] = 360 - jmo['T2MOM6'] = 210 - - imo['T4MOM6'] = 1440 - jmo['T4MOM6'] = 1080 - - im['b'] = 144 - jm['b'] = 91 - - im['c'] = 288 - jm['c'] = 181 - - im['d'] = 576 - jm['d'] = 361 - - im['e'] = 1152 - jm['e'] = 721 - - cubed = [12,24,48, 90, 180,360,720, 768,1000,1152, 1440,1536,2880,3072,5760] - for i in cubed: - key = 'c'+str(i) - im[key] = i - jm[key] = i*6 - - if grid_type == 'EASEv2' : - im['M01'] = 34704 - jm['M01'] = 14616 - - im['M03'] = 11568 - jm['M03'] = 4872 - - im['M09'] = 3856 - jm['M09'] = 1624 - - im['M25'] = 1388 - jm['M25'] = 584 - - im['M36'] = 964 - jm['M36'] = 406 - - if grid_type == 'EASEv1' : - im['M01'] = 34668 - jm['M01'] = 14688 - - im['M03'] = 11556 - jm['M03'] = 4896 - - im['M09'] = 3852 - jm['M09'] = 1632 - - im['M25'] = 1383 - jm['M25'] = 586 - - im['M36'] = 963 - jm['M36'] = 408 - - if resolution in ['c768','c1440'] : - NX = 17280 - NY = 8640 - if resolution == 'c2800': - NX = 21600 - NY = 10800 - if resolution in ['c1536', 'c3072','c5760'] : - NX = 43200 - NY = 21600 - - if 'GEOS5_10arcsec_mask' in maskfile: - NX = 43200 - NY = 21600 - - config = {} - config['grid_type'] = grid_type - config['lbcsv'] = lbcsv - config['resolution']= resolution - config['orslvs'] = orslvs - config ['im'] = im[resolution] - config ['jm'] = jm[resolution] - config ['imo'] = imo[orslvs] - config ['jmo'] = jmo[orslvs] - config ['NX'] = NX - config ['NY'] = NY - config ['NT'] = NT - config ['MASKFILE'] = maskfile - user = os.getlogin() - config ['expdir'] = '/discover/nobackup/'+user+'/BCS_PACKAGE/'+lbcsv+'/' - now = datetime.now() - config ['outdir'] =now.strftime("%Y%m%d%H%M%S") - config ['inputdir'] = input_dir - config ['NCPUS'] = 20 - - return config + make_bcs_input_dir = '/nobackup/gmao_SIteam/ModelData/make_bcs_inputs/' + + configs = [] + print(answers['grid_type']) + for grid_type in answers['grid_type']: + print('Grid_type: ' + grid_type) + for orslv in answers.get('Ocean'): + print('orslv: ' + orslv) + for resolution in answers.get(grid_type,[]): + print('resolution: ' + resolution) + + NX = 8640 + NY = 4320 + NT = 232000000 + + maskfile = '' + + if orslv in['O1','T2','T3','T4','T1MOM6','T3MOM6','T4MOM6']: + maskfile = make_bcs_input_dir+'shared/mask/GEOS5_10arcsec_mask_freshwater-lakes.nc' + if lbcsv in ['F25', 'GM4', 'ICA']: + maskfile = make_bcs_input_dir+'shared/mask/global.cat_id.catch.DL' + + if orslv in['O2','O3','CS']: + maskfile = make_bcs_input_dir+'shared/mask/GEOS5_10arcsec_mask.nc' + if lbcsv in ['F25', 'GM4', 'ICA']: + maskfile = make_bcs_input_dir + 'shared/mask/global.cat_id.catch.GreatLakesCaspian_Updated.DL' + if (maskfile == ''): + print(" \!\!\!\! Invalid Ocean Resolution, stopping ") + exit() + + if 'EASEv1' == grid_type or 'EASEv2' == grid_type: + maskfile = 'shared/mask/GEOS5_10arcsec_mask.nc' + + if resolution in ['c768','c1440'] : + NX = 17280 + NY = 8640 + if resolution == 'c2800': + NX = 21600 + NY = 10800 + if resolution in ['c1536', 'c3072','c5760'] : + NX = 43200 + NY = 21600 + + if 'GEOS5_10arcsec_mask' in maskfile: + NX = 43200 + NY = 21600 + + config = {} + config['grid_type'] = grid_type + config['lbcsv'] = lbcsv + config['resolution']= resolution + config['orslvs'] = orslv + config ['im'] = im[resolution] + config ['jm'] = jm[resolution] + config ['imo'] = im[orslv] + config ['jmo'] = jm[orslv] + config ['NX'] = NX + config ['NY'] = NY + config ['NT'] = NT + config ['MASKFILE'] = maskfile + user = os.getlogin() + config ['expdir'] = '/discover/nobackup/'+user+'/BCS_PACKAGE/'+lbcsv+'/' + now = datetime.now() + config ['outdir'] =now.strftime("%Y%m%d%H%M%S") + config ['inputdir'] = make_bcs_input_dir + config ['NCPUS'] = 20 + + configs = configs + [config] + return configs def ask_questions(): - + + user_name = get_user() questions = [ + { + "type": "select", + "name": "withland", + "message": "Generate land parameter files ?: \n \ + This option saves time when additional bcs are created that have \n \ + the exact same land parameters as an existing set of bcs because \n \ + the only difference between the two sets of bcs is the [non-tripolar] \n \ + ocean resolution. ", + "choices": ["Yes", "No"], + "default": "Yes", + }, { "type": "select", "name": "bcs_version", "message": "Select land BCS version: \n \ - *BCs produced by this code will differ from BCs in archived directories!!! \n \ + BCs with 'archived*' produced by this code will differ from BCs in archived directories!!! \n \ These differences are caused by compiler changes, code improvements and bug \n \ fixes that were implemented since the archived BCs in the above-mentioned \n \ directories were originally created. The impact of these differences on \n \ @@ -193,32 +142,36 @@ def ask_questions(): "GM4 : Ganymed-4_0 (archived*: /discover/nobackup/ltakacs/bcs/Ganymed-4_0/)", \ "ICA : Icarus (archived*: /discover/nobackup/ltakacs/bcs/Icarus/)", \ "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/ltakacs/bcs/Icarus-NLv3/)", \ - "NL4 : NLv4 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/bcs_NLv4/NLv4/)", \ - "NL5 : NLv5 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/SMAP_L4/L4_SM/bcs/CLSM_params/Icarus-NLv5_EASE/)", \ - "DEV : Development version"], + "NL4 : NLv4 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/bcs_NLv4/NLv4/) \n\ + = NL3 + JPL veg height", \ + "NL5 : NLv5 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/SMAP_L4/L4_SM/bcs/CLSM_params/Icarus-NLv5_EASE/)\n \ + = NL3 + JPL veg height + PEATMAP", \ + "v06 : NL3 + JPL veg height + PEATMAP + MODIS snow alb", \ + "v07 : NL3 + PEATMAP", \ + "v08 : NL3 + MODIS snow alb", \ + "v09 : NL3 + PEATMAP + MODIS snow alb"], "default": "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/ltakacs/bcs/Icarus-NLv3/)", }, { - "type": "select", + "type": "checkbox", "name": "grid_type", - "message": "Select grid type: \n ", + "message": "Select grid types( select one or none of EASEv1 and EASEv2): \n ", "choices": ["Lat-Lon", "Cubed-Sphere", "EASEv2", "EASEv1"], "default": "Cubed-Sphere", }, { - "type": "select", - "name": "resolution", - "message": "Select lat-lon resolution: \n ", - "choices": ["b -- 2 deg", "c -- 1 deg", "d -- 1/2 deg","e -- 1/4 deg"], - "default": "d -- 1/2 deg", - "when": lambda x: x['grid_type'] == "Lat-Lon", + "type": "checkbox", + "name": "Lat-Lon", + "message": "Select lat-lon resolution (multiple choices): \n ", + "choices": ["b -- 2 deg $144x91$", "c -- 1 deg $288x181$", "d -- 1/2 deg $576x361$","e -- 1/4 deg $1152x721$"], + "when": lambda x: "Lat-Lon" in x['grid_type'], }, { - "type": "select", - "name": "resolution", + "type": "checkbox", + "name": "Cubed-Sphere", "message": "Select cubed-sphere resolution: \n ", "choices": [ \ "c12 -- 8 deg", \ @@ -236,53 +189,100 @@ def ask_questions(): "c2880 -- 1/32 deg ( 3 km)", \ "c3072 -- 1/32 deg ( 3 km)", \ "c5760 -- 1/64 deg ( 1.5 km)"], - "default": "c360 -- 1/4 deg ( 28 km)", - "when": lambda x: x['grid_type'] == "Cubed-Sphere", + "when": lambda x: "Cubed-Sphere" in x['grid_type'], }, { - "type": "select", - "name": "resolution", - "message": "Select EASE grid resolution: \n ", + "type": "checkbox", + "name": "EASEv1", + "message": "Select EASEv1 grid resolution: \n ", + "choices": [ \ + "M01 -- 1km $34668x14688$", \ + "M03 -- 3km $11556x4896$", \ + "M09 -- 9km $3852x1632$", \ + "M25 -- 25km $1383x586$", \ + "M36 -- 36km $963x408$"], + "when": lambda x: "EASEv1" in x['grid_type'] , + }, + { + "type": "checkbox", + "name": "EASEv2", + "message": "Select EASEv2 grid resolution: \n ", "choices": [ \ - "M01 -- 1km", \ - "M03 -- 3km", \ - "M09 -- 9km", \ - "M25 -- 25km", \ - "M36 -- 36km"], - "default": "M09 -- 9km", - "when": lambda x: x['grid_type'] == "EASEv2" or x['grid_type'] == "EASEv1", + "M01 -- 1km $34704x14616$", \ + "M03 -- 3km $11568x4872$", \ + "M09 -- 9km $3856x1624$", \ + "M25 -- 25km $1388x584$", \ + "M36 -- 36km $964x406$"], + "when": lambda x: "EASEv2" in x['grid_type'], }, { - "type": "select", - "name": "orslvs", + "type": "checkbox", + "name": "Ocean", "message": "Select ocean resolution: \n ", "choices": [ \ - "O1 -- Low-Resolution Reynolds 1 deg (Lon/Lat Data-Ocean: 360x180 )", \ - "O2 -- Med-Resolution Reynolds 1/4 deg (Lon/Lat Data-Ocean: 1440x720 )", \ - "O3 -- High-Resolution OSTIA 1/8 deg (Lon/Lat Data-Ocean: 2880x1440)", \ - "T2 -- Med-Resolution Tripolar 1 deg (MOM-Tripolar-Ocean: 360x200 )", \ - "T3 -- High-Resolution Tripolar 1/2 deg (MOM-Tripolar-Ocean: 720x410 )", \ - "T4 -- High-Resolution Tripolar 1/4 deg (MOM-Tripolar-Ocean: 1440x1080)", \ - "T1MOM6 -- Low-Resolution Tripolar 5 deg (MOM6-Tripolar-Ocean: 72x36 )", \ - "T2MOM6 -- Med-Resolution Tripolar 1 deg (MOM6-Tripolar-Ocean: 360x210 )", \ - "T4MOM6 -- High-Resolution Tripolar 1/4 deg (MOM6-Tripolar-Ocean: 1440x1080)", \ - "CS -- Cubed-Sphere Ocean (Cubed-Sphere Data-Ocean )"], - "when": lambda x: x['grid_type'] == "Lat-Lon" or x['grid_type'] == "Cubed-Sphere", + "O1 -- Reynolds (Lon/Lat Data-Ocean: $360x180$ )", \ + "O2 -- Reynolds (Lon/Lat Data-Ocean: $1440x720$ )", \ + "O3 -- OSTIA (Lon/Lat Data-Ocean: $2880x1440$)", \ + "T2 -- Tripolar (MOM5-Tripolar-Ocean: $360x200$ )", \ + "T3 -- Tripolar (MOM5-Tripolar-Ocean: $720x410$ )", \ + "T4 -- Tripolar (MOM5-Tripolar-Ocean: $1440x1080$)", \ + "T1MOM6 -- Tripolar (MOM6-Tripolar-Ocean: $72x36$ )", \ + "T3MOM6 -- Tripolar (MOM6-Tripolar-Ocean: $580x458$ )", \ + "T4MOM6 -- Tripolar (MOM6-Tripolar-Ocean: $1440x1080$)", \ + "CS -- Cubed-Sphere Ocean (Cubed-Sphere Data-Ocean)"], + "when": lambda x: "EASEv1" not in x['grid_type'] and "EASEv2" not in x['grid_type'], }, - - ] - answers_ = questionary.prompt(questions) - answers = {} - for key, value in answers_.items(): - answers[key] = value.split()[0] - if 'EASE' in answers['grid_type'] : answers['orslvs'] = 'O1' + answers = questionary.prompt(questions) + if 'EASEv1' in answers['grid_type'] or 'EASEv2' in answers['grid_type'] : answers['Ocean'] = ['O1 $360x180$'] + answers['bcs_version'] = answers['bcs_version'].split()[0] + + path_q = [ + { + "type": "path", + "name": "out_path", + "message": "Enter desired BCS output directory (incl. full path) or press ENTER to use the default:", + "default": "/discover/nobackup/"+user_name+"/BCS_PACKAGE/"+answers['bcs_version']+'/' + }, + ] + path_ = questionary.prompt(path_q) + + answers["out_path"] = path_["out_path"] - return answers + im = {} + jm = {} + + for name_ in ['Lat-Lon', 'EASEv1', 'EASEv2', 'Ocean']: + long_res = answers.get(name_,[]) + res = [] + for x in long_res: + short_res = x.split()[0] + res = res + [short_res] + imxjm = x.split('$') + if len(imxjm) == 1 : + im[short_res] = "CS" + jm[short_res] = "CS" + else: + strings = imxjm[1].split('x') + im[short_res] = int(strings[0]) + jm[short_res] = int(strings[1]) + answers[name_] = res + + res = [] + for x in answers.get('Cubed-Sphere',[]): + short_res = x.split()[0] + res = res + [short_res] + i = int(short_res[1:]) + im[short_res] = i + jm[short_res] = 6*i + answers['Cubed-Sphere'] = res + + return answers, im, jm def print_config( config, indent = 0 ): + print('\n') for k, v in config.items(): if isinstance(v, dict): print(" " * indent, f"{k}:") @@ -292,10 +292,15 @@ def print_config( config, indent = 0 ): if __name__ == "__main__": - answers = ask_questions() + answers, im, jm = ask_questions() for key, value in answers.items(): print(key, value) + for key, value in im.items(): + print(key, value) + for key, value in jm.items(): + print(key, value) - config = get_config_from_answers(answers) + configs = get_configs_from_answers(answers) print('\n print config file:\n') - print_config(config) + for config in configs: + print_config(config) From 4b229fb627a4627121ff98bf1701d1c4482c42fc Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 17 Mar 2023 14:06:22 -0400 Subject: [PATCH 2/6] rename to questionnaire_bcs.py --- .../Utils/Raster/makebcs/CMakeLists.txt | 1 + .../Utils/Raster/makebcs/make_bcs.py | 2 +- .../Utils/Raster/makebcs/make_cube_bcs.py | 2 +- .../Utils/Raster/makebcs/make_ease_bcs.py | 2 +- .../Utils/Raster/makebcs/make_latlon_bcs.py | 2 +- .../{bcs_utils.py => questionnarie_bcs.py} | 20 +++++++++++-------- 6 files changed, 17 insertions(+), 12 deletions(-) rename GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/{bcs_utils.py => questionnarie_bcs.py} (96%) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/CMakeLists.txt b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/CMakeLists.txt index 6d7b0328e..7573af540 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/CMakeLists.txt +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/CMakeLists.txt @@ -47,3 +47,4 @@ ecbuild_add_executable (TARGET mk_runofftbl.x SOURCES mk_runofftbl.F90 LIBS MAPL ecbuild_add_executable (TARGET mkEASETilesParam.x SOURCES mkEASETilesParam.F90 LIBS MAPL ${this}) install(PROGRAMS make_bcs clsm_plots.pro create_README.csh DESTINATION bin) +install(PROGRAMS make_bcs.py make_cube_bcs.py make_ease_bcs.py make_latlon_bcs.py questionnarie_bcs.py DESTINATION bin) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py index b0466dd35..8be48ba69 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py @@ -7,7 +7,7 @@ import argparse import textwrap import ruamel.yaml -from bcs_utils import * +from questionnarie_bcs import * from make_ease_bcs import * # Define the argument parser diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py index 80709d048..23a1a3ef9 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py @@ -3,7 +3,7 @@ # source install/bin/g5_modules import os -from bcs_utils import * +from questionnarie_bcs import * cube_template = """ #!/bin/csh -x diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py index 257997090..fa488bacb 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py @@ -3,7 +3,7 @@ # source install/bin/g5_modules import os -from bcs_utils import * +from questionnarie_bcs import * ease_template = """#!/bin/csh -x diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py index 0f120958f..65832a28b 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py @@ -3,7 +3,7 @@ # source install/bin/g5_modules import os -from bcs_utils import * +from questionnarie_bcs import * ease_template = """#!/bin/csh -x diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py similarity index 96% rename from GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py rename to GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py index 8a0538ae8..b64873e31 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/bcs_utils.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py @@ -41,13 +41,18 @@ def get_configs_from_answers(answers): if 'discover' in hostname: make_bcs_input_dir = '/discover/nobackup/projects/gmao/bcs_shared/make_bcs_inputs/' else: - make_bcs_input_dir = '/nobackup/gmao_SIteam/ModelData/make_bcs_inputs/' + make_bcs_input_dir = '/nobackup/gmao_SIteam/ModelData/make_bcs_inputs/' + + user = os.getlogin() + expdir = '/discover/nobackup/'+user+'/BCS_PACKAGE/'+lbcsv+'/' + now = datetime.now() + outdir = now.strftime("%Y%m%d%H%M%S") configs = [] - print(answers['grid_type']) + for grid_type in answers['grid_type']: print('Grid_type: ' + grid_type) - for orslv in answers.get('Ocean'): + for orslv in answers['Ocean']: print('orslv: ' + orslv) for resolution in answers.get(grid_type,[]): print('resolution: ' + resolution) @@ -101,14 +106,13 @@ def get_configs_from_answers(answers): config ['NY'] = NY config ['NT'] = NT config ['MASKFILE'] = maskfile - user = os.getlogin() - config ['expdir'] = '/discover/nobackup/'+user+'/BCS_PACKAGE/'+lbcsv+'/' - now = datetime.now() - config ['outdir'] =now.strftime("%Y%m%d%H%M%S") - config ['inputdir'] = make_bcs_input_dir + config ['expdir'] = expdir + config ['outdir'] = outdir + config ['inputdir'] = make_bcs_input_dir config ['NCPUS'] = 20 configs = configs + [config] + return configs def ask_questions(): From ad1d38b00b905362f0c6b652883fd8f6dcbab9b7 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Tue, 21 Mar 2023 09:08:46 -0400 Subject: [PATCH 3/6] batch scrpts are created --- .../Utils/Raster/makebcs/make_bcs.py | 17 +- .../Utils/Raster/makebcs/make_cube_bcs.py | 279 ++++-------------- .../Utils/Raster/makebcs/make_ease_bcs.py | 12 +- .../Utils/Raster/makebcs/make_latlon_bcs.py | 103 ++++--- .../Utils/Raster/makebcs/questionnarie_bcs.py | 69 +++-- 5 files changed, 192 insertions(+), 288 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py index 8be48ba69..474c109d7 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py @@ -55,22 +55,27 @@ def parse_args(): def main(): question_flag = False - config = '' # Parse the command line arguments from parse_args() capturing the arguments and the rest command_line_args, extra_args = parse_args() print(f'command_line_args: {command_line_args}') config_yaml = command_line_args.config_file + configs = [] if config_yaml: config = yaml_to_config(config_yaml) + configs = [config] else: answers = ask_questions() - config = get_config_from_answers(answers) - - make_ease_bcs(config) - - + configs = get_configs_from_answers(answers) + for config in configs : + if 'EASE' in config['grid_type']: + make_ease_bcs(config) + if 'Lat-Lon' in config['grid_type']: + make_latlon_bcs(config) + if 'Cubed-Sphere' in config['grid_type']: + make_cube_bcs(config) + if __name__ == '__main__' : exit("The python version of make_bcs is not yet ready for general use. Until further notice, please use csh script make_bcs") main() diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py index 23a1a3ef9..4ebb36c28 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py @@ -21,64 +21,68 @@ /bin/ln -s {bin_dir} source bin/g5_modules mkdir -p til rst data/MOM5 data/MOM6 clsm/plots -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/360x200 data/MOM5/360x200 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/720x410 data/MOM5/720x410 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/1440x1080 data/MOM5/1440x1080 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/72x36 data/MOM6/72x36 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/1440x1080 data/MOM6/1440x1080 -cd data +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/360x200 data/MOM5/360x200 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/720x410 data/MOM5/720x410 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/1440x1080 data/MOM5/1440x1080 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/72x36 data/MOM6/72x36 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/540x458 data/MOM6/540x458 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/1440x1080 data/MOM6/1440x1080 + +cd data cd ../ + if( -e CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout ) /bin/rm -f CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout setenv MASKFILE {MASKFILE} limit stacksize unlimited -bin/mkCubeFVRaster.x -x {NX} -y {NY} {NC} >/dev/null +bin/mkCubeFVRaster.x -x {NX} -y {NY} {NC} >/dev/null bin/mkLandRaster.x -x {NX} -y {NY} -v -t {NT} -if( {LATLON_OCEAN} == TRUE ) then +if( {LATLON_OCEAN} == True ) then bin/mkLatLonRaster.x -x {NX} -y {NY} -b DE -p PE -t 0 {IMO} {JMO} >/dev/null bin/CombineRasters.x -f 0 -t {NT} DE{IMO}xPE{JMO} Pfafstetter >/dev/null bin/CombineRasters.x -t {NT} CF{NC}x6C DE{IMO}xPE{JMO}-Pfafstetter setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} chmod 755 bin/create_README.csh bin/create_README.csh endif -if( {TRIPOL_OCEAN} == TRUE ) then +if( {TRIPOL_OCEAN} == True ) then bin/mkMOMAquaRaster.x -x {NX} -y {NY} data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc > /dev/null /bin/cp til/Pfafstetter.til til/Pfafstetter-ORIG.til /bin/cp rst/Pfafstetter.rst rst/Pfafstetter-ORIG.rst - bin/FillMomGrid.x -f 0 -g Pfafstetter-M {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc + bin/FillMomGrid.x -f 0 -g Pfafstetter-M {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc /bin/mv til/Pfafstetter-M.til til/Pfafstetter.til /bin/mv rst/Pfafstetter-M.rst rst/Pfafstetter.rst bin/CombineRasters.x -f 0 -t {NT} {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter >/dev/null bin/CombineRasters.x -t {NT} CF{NC}x6C {DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter bin/mk_runofftbl.x CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} chmod 755 bin/create_README.csh bin/create_README.csh endif -if( {CUBED_SPHERE_OCEAN} == TRUE ) then + +if( {CUBED_SPHERE_OCEAN} == True ) then bin/CombineRasters.x -f 0 -t {NT} CF{NC}x6C Pfafstetter >/dev/null bin/CombineRasters.x -t {NT} CF{NC}x6C CF{NC}x6C-Pfafstetter setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} chmod 755 bin/create_README.csh bin/create_README.csh endif /bin/mv clsm clsm.C{NC} /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til clsm.C{NC} -if( {TRIPOL_OCEAN} == TRUE ) /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.C{NC} +if( {TRIPOL_OCEAN} == True ) /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.C{NC} /bin/rm clsm.C{NC}/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.file cd clsm.C{NC} @@ -92,7 +96,7 @@ /bin/mv ndvi.dat ndvi_clim_{RC}.data /bin/rm -f sedfile -if( {CUBED_SPHERE_OCEAN} == TRUE ) then +if( {CUBED_SPHERE_OCEAN} == True ) then cat > sedfile << EOF s/{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter/OC{nc}x{nc6}-CF/g s/CF{NC}x6C/PE{nc}x{nc6}-CF/g @@ -138,7 +142,7 @@ catchcn_params.nc4 \ country_and_state_code.data \ clsm - cd ../ + cd ../ /bin/mv rst CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} /bin/mv til CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} @@ -146,185 +150,13 @@ cd ../../ /bin/mv {BCDIR}/{BCNAME} . /bin/mv {BCJOB} {BCNAME} -/bin/mv {EXPDIR}/{OUTDIR}/logs {BCNAME}/. -/bin/mv {BCNAME}/clsm/mkCatchParam.log {BCNAME}/logs/mkCatchParam.log -/bin/rm -r {OUTDIR} -""" - -cube_template_1 = """ -#!/bin/csh -x - -#SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME}.log -#SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME}.err -#SBATCH --account={account} -#SBATCH --time=12:00:00 -#SBATCH --ntasks=1 -#SBATCH --job-name={BCNAME}.j -#SBATCH --constraint=sky - -cd {BCDIR} - -/bin/ln -s {bin_dir} -source bin/g5_modules -mkdir -p til rst data/MOM5 data/MOM6 clsm/plots -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/360x200 data/MOM5/360x200 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/720x410 data/MOM5/720x410 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/1440x1080 data/MOM5/1440x1080 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/72x36 data/MOM6/72x36 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/1440x1080 data/MOM6/1440x1080 - -cd data -cd ../ - -if( -e CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout ) /bin/rm -f CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout -setenv MASKFILE {MASKFILE} -setenv MAKE_BCS_INPUT_DIR {MAKE_BCS_INPUT_DIR} -limit stacksize unlimited -bin/mkCubeFVRaster.x -x {NX} -y {NY} {NC} >/dev/null -bin/mkLandRaster.x -x {NX} -y {NY} -v -t {NT} -if( {LATLON_OCEAN} == TRUE ) then - bin/mkLatLonRaster.x -x {NX} -y {NY} -b DE -p PE -t 0 {IMO} {JMO} >/dev/null - bin/CombineRasters.x -f 0 -t {NT} DE{IMO}xPE{JMO} Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C DE{IMO}xPE{JMO}-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} -endif - -if( {TRIPOL_OCEAN} == TRUE ) then - bin/mkMOMAquaRaster.x -x {NX} -y {NY} data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc > /dev/null - /bin/cp til/Pfafstetter.til til/Pfafstetter-ORIG.til - /bin/cp rst/Pfafstetter.rst rst/Pfafstetter-ORIG.rst - bin/FillMomGrid.x -f 0 -g Pfafstetter-M {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc - /bin/mv til/Pfafstetter-M.til til/Pfafstetter.til - /bin/mv rst/Pfafstetter-M.rst rst/Pfafstetter.rst - bin/CombineRasters.x -f 0 -t {NT} {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C {DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter - bin/mk_runofftbl.x CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} -endif - -if( {CUBED_SPHERE_OCEAN} == TRUE ) then - bin/CombineRasters.x -f 0 -t {NT} CF{NC}x6C Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C CF{NC}x6C-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} -endif -""" - -cube_template_2 = """ -#!/bin/csh -x - -#SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME}-2.log -#SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME}-2.err -#SBATCH --account={account} -#SBATCH --time=12:00:00 -#SBATCH --ntasks=28 -#SBATCH --job-name={BCNAME}-2.j -#SBATCH --constraint=sky - -cd {BCDIR} - -source bin/g5_modules - -setenv MASKFILE {MASKFILE} -setenv MAKE_BCS_INPUT_DIR $input_dir -limit stacksize unlimited - -if( {LATLON_OCEAN} == TRUE ) then - setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh -endif - -if( {TRIPOL_OCEAN} == TRUE ) then - setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh -endif - -if( {CUBED_SPHERE_OCEAN} == TRUE ) then - setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh -endif -/bin/mv clsm clsm.C{NC} -/bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til clsm.C{NC} -if( {TRIPOL_OCEAN} == TRUE ) /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.C{NC} -/bin/rm clsm.C{NC}/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.file - -cd clsm.C{NC} - /bin/mv irrig.dat irrigation_{RC}.dat - /bin/mv vegdyn.data vegdyn_{RC}.dat - /bin/mv nirdf.dat nirdf_{RC}.dat - /bin/mv visdf.dat visdf_{RC}.dat - /bin/mv lai.dat lai_clim_{RC}.data - /bin/mv green.dat green_clim_{RC}.data - /bin/mv lnfm.dat lnfm_clim_{RC}.data - /bin/mv ndvi.dat ndvi_clim_{RC}.data - -/bin/rm -f sedfile -if( {CUBED_SPHERE_OCEAN} == TRUE ) then -cat > sedfile << EOF -s/{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter/OC{nc}x{nc6}-CF/g -s/CF{NC}x6C/PE{nc}x{nc6}-CF/g -EOF -sed -f sedfile CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til > tile.file -/bin/mv -f tile.file CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til -/bin/rm -f sedfile -else -cat > sedfile << EOF -s/CF{NC}x6C/PE{nc}x{nc6}-CF/g -s/{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter/PE{imo}x{jmo}-{DATENAME}/g -EOF -sed -f sedfile CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til > tile.file -/bin/mv -f tile.file CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til -/bin/rm -f sedfile -endif -cd ../ - -/bin/rm -rf CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} -/bin/mv clsm.C{NC} CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} - cd CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} - mkdir clsm - /bin/mv ar.new \ - bf.dat \ - ts.dat \ - catchment.def \ - cti_stats.dat \ - tau_param.dat \ - soil_param.dat \ - mosaic_veg_typs_fracs \ - soil_param.first \ - README \ - bad_sat_param.tiles \ - lai.* \ - AlbMap* \ - plots \ - CLM_veg_typs_fracs \ - mkCatchParam.log \ - CLM_NDep_SoilAlb_T2m \ - CLM4.5_abm_peatf_gdp_hdm_fc \ - catch_params.nc4 \ - catchcn_params.nc4 \ - country_and_state_code.data \ - clsm - cd ../ -/bin/mv rst CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} -/bin/mv til CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO} -/bin/mv {BCJOB}-2 CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}/. -cd ../../ -/bin/mv {BCDIR}/{BCNAME} . -/bin/mv {BCJOB}-2 {BCNAME} -/bin/mv {EXPDIR}/{OUTDIR}/logs {BCNAME}/. +/bin/mv {EXPDIR}/{OUTDIR}/logs {BCNAME}/. /bin/mv {BCNAME}/clsm/mkCatchParam.log {BCNAME}/logs/mkCatchParam.log /bin/rm -r {OUTDIR} """ def make_cube_bcs(config): + bin_dir = os.getcwd() if 'install/bin' not in bin_dir: print(" please run this program in installed bin directory") @@ -342,18 +174,22 @@ def make_cube_bcs(config): JMO = '%04d'%config['jmo'] NC = '%04d'%config['im'] imo = config['imo'] - jmo = config['imo'] + jmo = config['jmo'] nc = config['im'] + nc6 = nc*6 + RC = str(nc)+'x'+str(nc6) + + DATENAME = config['DATENAME'] + POLENAME = config['POLENAME'] + bcname = 'CF'+NC+'x6C_'+DATENAME+IMO+'x'+POLENAME+JMO + SKIPLAND = config['skipland'] - bcname = 'CF'+NC+'x6C_'+DATENAME+imo+'x'+POLENAME+jmo if config['CUBED_SPHERE_OCEAN'] : - bcname = 'CF'+NC'x6_CF'+NC+'6C' + bcname = 'CF'+ NC+'x6_CF'+NC+'x6C' DATENAME = 'CF' POLENAME = '' - imo = NC - jmo = '6C' - - + IMO = NC + JMO = '6C' now = datetime.now() tmp_dir =now.strftime("%Y%m%d%H%M%S") @@ -367,29 +203,41 @@ def make_cube_bcs(config): return os.makedirs(scratch_dir) - os.makedirs(log_dir) + if not os.path.exists(log_dir): + os.makedirs(log_dir) - job_script = ease_template.format(\ + job_script = cube_template.format(\ account = account, \ EXPDIR = config['expdir'], \ OUTDIR = tmp_dir, \ BCNAME = bcname, \ + BCDIR = scratch_dir, \ bin_dir = bin_dir, \ MAKE_BCS_INPUT_DIR = config['inputdir'], \ BCJOB = bcjob, \ - EASEVERSION = grid_type, \ - HRCODE = resolution, \ - IM = config['im'], \ - JM = config['jm'], \ + DATENAME = DATENAME, \ + POLENAME = POLENAME, \ + SKIPLAND = SKIPLAND, \ + MOM_VERSION = config['MOM_VERSION'], \ + LATLON_OCEAN= config['LATLON_OCEAN'], \ + TRIPOL_OCEAN= config['TRIPOL_OCEAN'], \ + CUBED_SPHERE_OCEAN = config['CUBED_SPHERE_OCEAN'], \ + nc = nc, \ + nc6 = nc6, \ + imo = config['imo'], \ + jmo = config['jmo'], \ + IRRIGTHRES = 2, \ + IMO = IMO, \ + JMO = JMO, \ + NC = NC, \ MASKFILE = config['MASKFILE'], \ lbcsv = config['lbcsv'], \ NX = config['NX'], \ NY = config['NY'], \ - RS = RS,\ - BCDIR = scratch_dir, \ + NT = config['NT'], \ + RC = RC,\ NCPUS = config['NCPUS']) - ease_job = open(bcjob,'wt') ease_job.write(job_script) ease_job.close() @@ -406,7 +254,7 @@ def make_cube_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - subprocess.call(['sbatch', bcjob]) + #subprocess.call(['sbatch', bcjob]) print( "cd " + bin_dir) os.chdir(bin_dir) @@ -416,7 +264,10 @@ def make_cube_bcs(config): if __name__ == "__main__": answers = ask_questions() - config = get_config_from_answers(answers) - print("make_ease_bcs") - make_ease_bcs(config) + configs = get_configs_from_answers(answers) + print("make_latlon_bcs") + for config in configs: + if 'Cubed-Sphere' in config['grid_type']: + print_config(config) + make_cube_bcs(config) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py index fa488bacb..2f648a21a 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py @@ -90,7 +90,6 @@ /bin/mv {BCJOB} {BCNAME} /bin/mv {EXPDIR}/{OUTDIR}/logs {BCNAME}/. /bin/mv {BCNAME}/clsm/mkCatchParam.log {BCNAME}/logs/mkCatchParam.log -/bin/rm -r {OUTDIR} """ @@ -119,7 +118,8 @@ def make_ease_bcs(config): return os.makedirs(scratch_dir) - os.makedirs(log_dir) + if not os.path.exists(log_dir): + os.makedirs(log_dir) account = get_account() ims = '%04d'%config['im'] @@ -162,7 +162,7 @@ def make_ease_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - subprocess.call(['sbatch', bcjob]) + # subprocess.call(['sbatch', bcjob]) print( "cd " + bin_dir) os.chdir(bin_dir) @@ -172,7 +172,9 @@ def make_ease_bcs(config): if __name__ == "__main__": answers = ask_questions() - config = get_config_from_answers(answers) + configs = get_configs_from_answers(answers) print("make_ease_bcs") - make_ease_bcs(config) + for config in configs: + if 'EASE' in config['grid_type']: + make_ease_bcs(config) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py index 65832a28b..53f17a5ba 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py @@ -6,7 +6,7 @@ from questionnarie_bcs import * -ease_template = """#!/bin/csh -x +latlon_template = """#!/bin/csh -x #SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME}.log #SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME}.err @@ -17,15 +17,15 @@ #SBATCH --constraint=sky cd {BCDIR} - -source bin/g5_modules /bin/ln -s {bin_dir} +source bin/g5_modules mkdir -p til rst data/MOM5 data/MOM6 clsm/plots -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/360x200 data/MOM5/360x200 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/720x410 data/MOM5/720x410 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM5/1440x1080 data/MOM5/1440x1080 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/72x36 data/MOM6/72x36 -ln -s /discover/nobackup/projects/gmao/ssd/aogcm/ocean_bcs/MOM6/1440x1080 data/MOM6/1440x1080 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/360x200 data/MOM5/360x200 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/720x410 data/MOM5/720x410 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/1440x1080 data/MOM5/1440x1080 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/72x36 data/MOM6/72x36 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/540x458 data/MOM6/540x458 +ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/1440x1080 data/MOM6/1440x1080 cd data cd ../ @@ -37,18 +37,18 @@ bin/mkLatLonRaster.x -x {NX} -y {NY} -t -1 {IM} {JM} >/dev/null bin/mkLandRaster.x -x {NX} -y {NY} -v -t {NT} -if( {LATLON_OCEAN} == TRUE ) then +if( {LATLON_OCEAN} == True ) then bin/mkLatLonRaster.x -x {NX} -y {NY} -b DE -p PE -t 0 {IMO} {JMO} >/dev/null bin/CombineRasters.x -f 0 -t {NT} DE{IMO}xPE{JMO} Pfafstetter >/dev/null bin/CombineRasters.x -t {NT} DC{IM}xPC{JM} DE{IMO}xPE{JMO}-Pfafstetter setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g DC{IM}xPC{JM}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g DC{IM}xPC{JM}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g DC{IM}xPC{JM}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g DC{IM}xPC{JM}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} chmod 755 bin/create_README.csh bin/create_README.csh endif -if( {TRIPOL_OCEAN} == TRUE ) then +if( {TRIPOL_OCEAN} == True ) then bin/mkMOMAquaRaster.x -x {NX} -y {NY} data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc > /dev/null /bin/cp til/Pfafstetter.til til/Pfafstetter-ORIG.til /bin/cp rst/Pfafstetter.rst rst/Pfafstetter-ORIG.rst @@ -59,16 +59,16 @@ bin/CombineRasters.x -t {NT} DC{IM}xPC{JM} {DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter bin/mk_runofftbl.x DC{IM}xPC{JM}_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g DE{IMO}xPE{JMO}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g DE{IMO}xPE{JMO}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != YES) bin/mkCatchParam.x -x {NX} -y {NY} -g DE{IMO}xPE{JMO}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g DE{IMO}xPE{JMO}_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} chmod 755 bin/create_README.csh bin/create_README.csh endif /bin/mv clsm clsm.{IM}x{JM} /bin/cp til/DC{IM}xPC{JM}_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til clsm.{IM}x{JM} -if( {TRIPOL_OCEAN} == TRUE ) /bin/cp til/DC{IM}xPC{JM}_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.{IM}x{JM} +if( {TRIPOL_OCEAN} == True ) /bin/cp til/DC{IM}xPC{JM}_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.{IM}x{JM} /bin/rm clsm.{IM}x{JM}/DC{IM}xPC{JM}_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.file cd clsm.{IM}x{JM} @@ -131,33 +131,28 @@ """ -def make_cube_bcs(config): +def make_latlon_bcs(config): bin_dir = os.getcwd() if 'install/bin' not in bin_dir: print(" please run this program in installed bin directory") return - grid_type = config['grid_type'] - if 'Cubed' not in grid_type : - print('This is not a Cubed-Sphere grid') - return - resolution = config['resolution'] account = get_account() - imo = '%04d'%config['imo'] - jmo = '%04d'%config['jmo'] - NC = '%04d'%config['im'] - - bcname = 'CF'+NC+'x6C_'+DATENAME+imo+'x'+POLENAME+jmo - if config['CUBED_SPHERE_OCEAN'] : - bcname = 'CF'+NC'x6_CF'+NC+'6C' - DATENAME = 'CF' - POLENAME = '' - imo = NC - jmo = '6C' - - + IMO = '%04d'%config['imo'] + JMO = '%04d'%config['jmo'] + IM = '%04d'%config['im'] + JM = '%04d'%config['jm'] + + RS = str(config['im']) +'_' +str(config['jm']) + + DATENAME = config['DATENAME'] + POLENAME = config['POLENAME'] + + bcname = 'DC'+IM+'xPC'+JM+'_'+ DATENAME+IMO+'x'+POLENAME+JMO + + SKIPLAND = config['skipland'] now = datetime.now() tmp_dir =now.strftime("%Y%m%d%H%M%S") @@ -167,30 +162,43 @@ def make_cube_bcs(config): bcjob = scratch_dir+'/'+bcname+'.j' if os.path.exists(bcjob): - print('please remove the run temprory directory: ' + expdir+'/'+ tmp_dir) + print('please remove the run temprory directory: ' + scratch_dir) return os.makedirs(scratch_dir) - os.makedirs(log_dir) + if not os.path.exists(log_dir): + os.makedirs(log_dir) - job_script = ease_template.format(\ + job_script = latlon_template.format(\ account = account, \ EXPDIR = config['expdir'], \ OUTDIR = tmp_dir, \ BCNAME = bcname, \ + BCDIR = scratch_dir, \ bin_dir = bin_dir, \ MAKE_BCS_INPUT_DIR = config['inputdir'], \ BCJOB = bcjob, \ - EASEVERSION = grid_type, \ - HRCODE = resolution, \ - IM = config['im'], \ - JM = config['jm'], \ + DATENAME = DATENAME, \ + POLENAME = POLENAME, \ + SKIPLAND = SKIPLAND, \ + MOM_VERSION = config['MOM_VERSION'], \ + LATLON_OCEAN= config['LATLON_OCEAN'], \ + TRIPOL_OCEAN= config['TRIPOL_OCEAN'], \ + im = config['im'], \ + jm = config['jm'], \ + imo = config['imo'], \ + jmo = config['jmo'], \ + IRRIGTHRES = 2, \ + IM = IM, \ + JM = JM, \ + IMO = IMO, \ + JMO = JMO, \ MASKFILE = config['MASKFILE'], \ lbcsv = config['lbcsv'], \ NX = config['NX'], \ NY = config['NY'], \ + NT = config['NT'], \ RS = RS,\ - BCDIR = scratch_dir, \ NCPUS = config['NCPUS']) @@ -210,7 +218,7 @@ def make_cube_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - subprocess.call(['sbatch', bcjob]) + #subprocess.call(['sbatch', bcjob]) print( "cd " + bin_dir) os.chdir(bin_dir) @@ -220,7 +228,10 @@ def make_cube_bcs(config): if __name__ == "__main__": answers = ask_questions() - config = get_config_from_answers(answers) - print("make_ease_bcs") - make_ease_bcs(config) + configs = get_configs_from_answers(answers) + print("make_latlon_bcs") + for config in configs: + if 'Lat-Lon' in config['grid_type']: + print_config(config) + make_latlon_bcs(config) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py index b64873e31..55ea0b659 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py @@ -34,8 +34,8 @@ def get_user(): def get_configs_from_answers(answers): - lbcsv = answers['bcs_version'] - + lbcsv = answers['bcs_version'] + skipland = answers['skipland'] == 'Yes' hostname = socket.gethostname() make_bcs_input_dir = '' if 'discover' in hostname: @@ -92,16 +92,48 @@ def get_configs_from_answers(answers): if 'GEOS5_10arcsec_mask' in maskfile: NX = 43200 NY = 21600 + + LATLON_OCEAN = False + TRIPOL_OCEAN = False + CUBED_SPHERE_OCEAN = False + DATENAME = 'DE' + POLENAME = 'PE' + MOM_VERSION = 'UNDEF' + if orslv in['O2','O3','O1']: + LATLON_OCEAN = True + DATENAME = 'DE' + POLENAME = 'PE' + if orslv in['T2','T3','T4']: + TRIPOL_OCEAN = True + MOM_VERSION = 'MOM5' + DATENAME = 'TM' + POLENAME = 'TM' + if 'MOM6' in orslv: + TRIPOL_OCEAN = True + MOM_VERSION = 'MOM6' + DATENAME = 'TM' + POLENAME = 'TM' + if orslv == 'CS' : + CUBED_SPHERE_OCEAN = True config = {} + + config['LATLON_OCEAN'] = LATLON_OCEAN + config['TRIPOL_OCEAN'] = TRIPOL_OCEAN + config['CUBED_SPHERE_OCEAN'] = CUBED_SPHERE_OCEAN + config['DATENAME'] = DATENAME + config['POLENAME'] = POLENAME + config['MOM_VERSION'] = MOM_VERSION + + config['skipland'] = skipland config['grid_type'] = grid_type config['lbcsv'] = lbcsv config['resolution']= resolution config['orslvs'] = orslv - config ['im'] = im[resolution] - config ['jm'] = jm[resolution] - config ['imo'] = im[orslv] - config ['jmo'] = jm[orslv] + config ['im'] = answers['im'][resolution] + config ['jm'] = answers['jm'][resolution] + config ['imo'] = answers['im'][orslv] + config ['jmo'] = answers['jm'][orslv] config ['NX'] = NX config ['NY'] = NY config ['NT'] = NT @@ -111,6 +143,7 @@ def get_configs_from_answers(answers): config ['inputdir'] = make_bcs_input_dir config ['NCPUS'] = 20 + configs = configs + [config] return configs @@ -121,8 +154,8 @@ def ask_questions(): questions = [ { "type": "select", - "name": "withland", - "message": "Generate land parameter files ?: \n \ + "name": "skipland", + "message": "Skip land parameter files ?: \n \ This option saves time when additional bcs are created that have \n \ the exact same land parameters as an existing set of bcs because \n \ the only difference between the two sets of bcs is the [non-tripolar] \n \ @@ -266,8 +299,9 @@ def ask_questions(): res = res + [short_res] imxjm = x.split('$') if len(imxjm) == 1 : - im[short_res] = "CS" - jm[short_res] = "CS" + #'CS' will be filled later on + im[short_res] = 0 + jm[short_res] = 0 else: strings = imxjm[1].split('x') im[short_res] = int(strings[0]) @@ -283,7 +317,10 @@ def ask_questions(): jm[short_res] = 6*i answers['Cubed-Sphere'] = res - return answers, im, jm + answers['im'] = im + answers['jm'] = jm + + return answers def print_config( config, indent = 0 ): print('\n') @@ -296,13 +333,11 @@ def print_config( config, indent = 0 ): if __name__ == "__main__": - answers, im, jm = ask_questions() + answers = ask_questions() for key, value in answers.items(): - print(key, value) - for key, value in im.items(): - print(key, value) - for key, value in jm.items(): - print(key, value) + if (key == 'im' or key) =='jm' : + for key1, value1 in answers[key].items(): + print(key1, value1) configs = get_configs_from_answers(answers) print('\n print config file:\n') From 5a6b4100836d7a325886d983799289eb5dd94cfd Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Tue, 21 Mar 2023 10:38:43 -0400 Subject: [PATCH 4/6] split high resolution of cube jobs --- .../Utils/Raster/makebcs/make_bcs.py | 4 +- .../Utils/Raster/makebcs/make_cube_bcs.py | 184 +++++++++++++----- .../Utils/Raster/makebcs/make_latlon_bcs.py | 6 +- 3 files changed, 136 insertions(+), 58 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py index 474c109d7..fa450202a 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_bcs.py @@ -9,6 +9,8 @@ import ruamel.yaml from questionnarie_bcs import * from make_ease_bcs import * +from make_latlon_bcs import * +from make_cube_bcs import * # Define the argument parser def parse_args(): @@ -77,6 +79,6 @@ def main(): make_cube_bcs(config) if __name__ == '__main__' : - exit("The python version of make_bcs is not yet ready for general use. Until further notice, please use csh script make_bcs") + #exit("The python version of make_bcs is not yet ready for general use. Until further notice, please use csh script make_bcs") main() diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py index 4ebb36c28..6ec6e6176 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py @@ -8,78 +8,99 @@ cube_template = """ #!/bin/csh -x -#SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME}.log -#SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME}.err +#SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME2}.log +#SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME2}.err #SBATCH --account={account} #SBATCH --time=12:00:00 #SBATCH --ntasks=28 -#SBATCH --job-name={BCNAME}.j +#SBATCH --job-name={BCNAME2}.j #SBATCH --constraint=sky cd {BCDIR} -/bin/ln -s {bin_dir} -source bin/g5_modules -mkdir -p til rst data/MOM5 data/MOM6 clsm/plots +if ( {STEP1} == True ) then + /bin/ln -s {bin_dir} -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/360x200 data/MOM5/360x200 -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/720x410 data/MOM5/720x410 -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/1440x1080 data/MOM5/1440x1080 -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/72x36 data/MOM6/72x36 -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/540x458 data/MOM6/540x458 -ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/1440x1080 data/MOM6/1440x1080 + mkdir -p til rst data/MOM5 data/MOM6 clsm/plots -cd data + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/360x200 data/MOM5/360x200 + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/720x410 data/MOM5/720x410 + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM5/1440x1080 data/MOM5/1440x1080 + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/72x36 data/MOM6/72x36 + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/540x458 data/MOM6/540x458 + ln -s {MAKE_BCS_INPUT_DIR}/ocean/MOM6/1440x1080 data/MOM6/1440x1080 -cd ../ - -if( -e CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout ) /bin/rm -f CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout + if( -e CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout ) /bin/rm -f CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}.stdout + +endif + +source bin/g5_modules setenv MASKFILE {MASKFILE} limit stacksize unlimited -bin/mkCubeFVRaster.x -x {NX} -y {NY} {NC} >/dev/null -bin/mkLandRaster.x -x {NX} -y {NY} -v -t {NT} + +if ( {STEP1} == True ) then + bin/mkCubeFVRaster.x -x {NX} -y {NY} {NC} >/dev/null + bin/mkLandRaster.x -x {NX} -y {NY} -v -t {NT} +endif if( {LATLON_OCEAN} == True ) then - bin/mkLatLonRaster.x -x {NX} -y {NY} -b DE -p PE -t 0 {IMO} {JMO} >/dev/null - bin/CombineRasters.x -f 0 -t {NT} DE{IMO}xPE{JMO} Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C DE{IMO}xPE{JMO}-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} - setenv OMP_NUM_THREADS {NCPUS} - if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh + + if ( {STEP1} == True ) then + bin/mkLatLonRaster.x -x {NX} -y {NY} -b DE -p PE -t 0 {IMO} {JMO} >/dev/null + bin/CombineRasters.x -f 0 -t {NT} DE{IMO}xPE{JMO} Pfafstetter >/dev/null + bin/CombineRasters.x -t {NT} CF{NC}x6C DE{IMO}xPE{JMO}-Pfafstetter + setenv OMP_NUM_THREADS 1 + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + endif + + if ( {STEP2} == True ) then + setenv OMP_NUM_THREADS {NCPUS} + if ( {SKIPLAND} != True ) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_DE{IMO}xPE{JMO}-Pfafstetter -v {lbcsv} + chmod 755 bin/create_README.csh + bin/create_README.csh + endif endif if( {TRIPOL_OCEAN} == True ) then - bin/mkMOMAquaRaster.x -x {NX} -y {NY} data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc > /dev/null - /bin/cp til/Pfafstetter.til til/Pfafstetter-ORIG.til - /bin/cp rst/Pfafstetter.rst rst/Pfafstetter-ORIG.rst - bin/FillMomGrid.x -f 0 -g Pfafstetter-M {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc - /bin/mv til/Pfafstetter-M.til til/Pfafstetter.til - /bin/mv rst/Pfafstetter-M.rst rst/Pfafstetter.rst - bin/CombineRasters.x -f 0 -t {NT} {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C {DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter - bin/mk_runofftbl.x CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} - setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh + if ( {STEP1} == True ) then + bin/mkMOMAquaRaster.x -x {NX} -y {NY} data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc > /dev/null + /bin/cp til/Pfafstetter.til til/Pfafstetter-ORIG.til + /bin/cp rst/Pfafstetter.rst rst/Pfafstetter-ORIG.rst + bin/FillMomGrid.x -f 0 -g Pfafstetter-M {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter data/{MOM_VERSION}/{imo}x{jmo}/MAPL_Tripolar.nc + /bin/mv til/Pfafstetter-M.til til/Pfafstetter.til + /bin/mv rst/Pfafstetter-M.rst rst/Pfafstetter.rst + bin/CombineRasters.x -f 0 -t {NT} {DATENAME}{IMO}x{POLENAME}{JMO} Pfafstetter >/dev/null + bin/CombineRasters.x -t {NT} CF{NC}x6C {DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter + bin/mk_runofftbl.x CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter + setenv OMP_NUM_THREADS 1 + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} + endif + + if ( {STEP2} == True ) then + setenv OMP_NUM_THREADS {NCPUS} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter -v {lbcsv} + chmod 755 bin/create_README.csh + bin/create_README.csh + endif endif if( {CUBED_SPHERE_OCEAN} == True ) then - bin/CombineRasters.x -f 0 -t {NT} CF{NC}x6C Pfafstetter >/dev/null - bin/CombineRasters.x -t {NT} CF{NC}x6C CF{NC}x6C-Pfafstetter - setenv OMP_NUM_THREADS 1 - if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} - setenv OMP_NUM_THREADS {NCPUS} - if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} - chmod 755 bin/create_README.csh - bin/create_README.csh + if ( {STEP1} == True ) then + bin/CombineRasters.x -f 0 -t {NT} CF{NC}x6C Pfafstetter >/dev/null + bin/CombineRasters.x -t {NT} CF{NC}x6C CF{NC}x6C-Pfafstetter + setenv OMP_NUM_THREADS 1 + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} + endif + + if ( {STEP2} == True ) then + setenv OMP_NUM_THREADS {NCPUS} + if ({SKIPLAND} != True) bin/mkCatchParam.x -x {NX} -y {NY} -g CF{NC}x6C_CF{NC}x6C-Pfafstetter -v {lbcsv} + chmod 755 bin/create_README.csh + bin/create_README.csh + endif endif +if ( {STEP2} == True ) then /bin/mv clsm clsm.C{NC} /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.til clsm.C{NC} if( {TRIPOL_OCEAN} == True ) /bin/cp til/CF{NC}x6C_{DATENAME}{IMO}x{POLENAME}{JMO}-Pfafstetter.TRN clsm.C{NC} @@ -153,6 +174,8 @@ /bin/mv {EXPDIR}/{OUTDIR}/logs {BCNAME}/. /bin/mv {BCNAME}/clsm/mkCatchParam.log {BCNAME}/logs/mkCatchParam.log /bin/rm -r {OUTDIR} + +endif # STEP2 """ def make_cube_bcs(config): @@ -206,11 +229,64 @@ def make_cube_bcs(config): if not os.path.exists(log_dir): os.makedirs(log_dir) + STEP1 = True + STEP2 = True + BCNAME2 = bcname + if resolution in ['c2880', 'c3072', 'c5760'] : + STEP1 = True + STEP2 = False job_script = cube_template.format(\ account = account, \ EXPDIR = config['expdir'], \ OUTDIR = tmp_dir, \ - BCNAME = bcname, \ + BCNAME = bcname, \ + BCNAME2 = BCNAME2, \ + STEP1 = STEP1, \ + STEP2 = STEP2, \ + BCDIR = scratch_dir, \ + bin_dir = bin_dir, \ + MAKE_BCS_INPUT_DIR = config['inputdir'], \ + BCJOB = bcjob, \ + DATENAME = DATENAME, \ + POLENAME = POLENAME, \ + SKIPLAND = SKIPLAND, \ + MOM_VERSION = config['MOM_VERSION'], \ + LATLON_OCEAN= config['LATLON_OCEAN'], \ + TRIPOL_OCEAN= config['TRIPOL_OCEAN'], \ + CUBED_SPHERE_OCEAN = config['CUBED_SPHERE_OCEAN'], \ + nc = nc, \ + nc6 = nc6, \ + imo = config['imo'], \ + jmo = config['jmo'], \ + IRRIGTHRES = 2, \ + IMO = IMO, \ + JMO = JMO, \ + NC = NC, \ + MASKFILE = config['MASKFILE'], \ + lbcsv = config['lbcsv'], \ + NX = config['NX'], \ + NY = config['NY'], \ + NT = config['NT'], \ + RC = RC,\ + NCPUS = config['NCPUS']) + + cube_job = open(bcjob,'wt') + cube_job.write(job_script) + cube_job.close() + + if resolution in ['c2880', 'c3072', 'c5760'] : + STEP1 = False + STEP2 = True + BCNAME2 = bcname+'-2' + bcjob = bcjob +'-2' + job_script = cube_template.format(\ + account = account, \ + EXPDIR = config['expdir'], \ + OUTDIR = tmp_dir, \ + BCNAME = bcname, \ + BCNAME2 = BCNAME2, \ + STEP1 = STEP1, \ + STEP2 = STEP2, \ BCDIR = scratch_dir, \ bin_dir = bin_dir, \ MAKE_BCS_INPUT_DIR = config['inputdir'], \ @@ -238,9 +314,9 @@ def make_cube_bcs(config): RC = RC,\ NCPUS = config['NCPUS']) - ease_job = open(bcjob,'wt') - ease_job.write(job_script) - ease_job.close() + cube_job = open(bcjob,'wt') + cube_job.write(job_script) + cube_job.close() interactive = os.getenv('SLURM_JOB_ID', default = None) if ( interactive ) : diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py index 53f17a5ba..8eaca63d1 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py @@ -202,9 +202,9 @@ def make_latlon_bcs(config): NCPUS = config['NCPUS']) - ease_job = open(bcjob,'wt') - ease_job.write(job_script) - ease_job.close() + latlon_job = open(bcjob,'wt') + latlon_job.write(job_script) + latlon_job.close() interactive = os.getenv('SLURM_JOB_ID', default = None) if ( interactive ) : From 11953270cfe13a32a82957acc6a28beeeba8387f Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Tue, 21 Mar 2023 13:38:29 -0400 Subject: [PATCH 5/6] submit jobs --- .../Utils/Raster/makebcs/make_cube_bcs.py | 15 ++++++++------- .../Utils/Raster/makebcs/make_ease_bcs.py | 2 +- .../Utils/Raster/makebcs/make_latlon_bcs.py | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py index 6ec6e6176..ba70f4455 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_cube_bcs.py @@ -5,8 +5,7 @@ import os from questionnarie_bcs import * -cube_template = """ -#!/bin/csh -x +cube_template = """#!/bin/csh -x #SBATCH --output={EXPDIR}/{OUTDIR}/logs/{BCNAME2}.log #SBATCH --error={EXPDIR}/{OUTDIR}/logs/{BCNAME2}.err @@ -278,7 +277,6 @@ def make_cube_bcs(config): STEP1 = False STEP2 = True BCNAME2 = bcname+'-2' - bcjob = bcjob +'-2' job_script = cube_template.format(\ account = account, \ EXPDIR = config['expdir'], \ @@ -290,7 +288,7 @@ def make_cube_bcs(config): BCDIR = scratch_dir, \ bin_dir = bin_dir, \ MAKE_BCS_INPUT_DIR = config['inputdir'], \ - BCJOB = bcjob, \ + BCJOB = bcjob+'-2', \ DATENAME = DATENAME, \ POLENAME = POLENAME, \ SKIPLAND = SKIPLAND, \ @@ -314,7 +312,7 @@ def make_cube_bcs(config): RC = RC,\ NCPUS = config['NCPUS']) - cube_job = open(bcjob,'wt') + cube_job = open(bcjob+'2','wt') cube_job.write(job_script) cube_job.close() @@ -330,8 +328,11 @@ def make_cube_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - #subprocess.call(['sbatch', bcjob]) - + out = subprocess.check_output(['sbatch', bcjob]) + jobid = int(out.split()[3]) + if resolution in ['c2880', 'c3072', 'c5760']: + subprocess.call(['sbatch', '--dependency=afterok:'+str(jobid), bcjob+'-2']) + print( "cd " + bin_dir) os.chdir(bin_dir) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py index 2f648a21a..ae34da06d 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_ease_bcs.py @@ -162,7 +162,7 @@ def make_ease_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - # subprocess.call(['sbatch', bcjob]) + subprocess.call(['sbatch', bcjob]) print( "cd " + bin_dir) os.chdir(bin_dir) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py index 8eaca63d1..9097af6ac 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/make_latlon_bcs.py @@ -218,7 +218,7 @@ def make_latlon_bcs(config): os.system(bcjob + ' 1>' + log_name+ ' 2>&1') else: print("sbatch " + bcjob +"\n") - #subprocess.call(['sbatch', bcjob]) + subprocess.call(['sbatch', bcjob]) print( "cd " + bin_dir) os.chdir(bin_dir) From c3b6d0bf654876c4aa5fbc8a919777093f4757df Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Wed, 22 Mar 2023 14:34:10 -0400 Subject: [PATCH 6/6] change the directory location for bc version --- .../Utils/Raster/makebcs/questionnarie_bcs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py index 55ea0b659..942461aad 100755 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/Utils/Raster/makebcs/questionnarie_bcs.py @@ -176,9 +176,9 @@ def ask_questions(): code are scientifically equivalent to the corresponding archived BCs. \n", "choices": [ \ "F25 : Fortuna-2_5 (archived*: n/a)", \ - "GM4 : Ganymed-4_0 (archived*: /discover/nobackup/ltakacs/bcs/Ganymed-4_0/)", \ - "ICA : Icarus (archived*: /discover/nobackup/ltakacs/bcs/Icarus/)", \ - "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/ltakacs/bcs/Icarus-NLv3/)", \ + "GM4 : Ganymed-4_0 (archived*: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Ganymed-4_0/)", \ + "ICA : Icarus (archived*: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus/)", \ + "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus-NLv3/)", \ "NL4 : NLv4 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/bcs_NLv4/NLv4/) \n\ = NL3 + JPL veg height", \ "NL5 : NLv5 [SMAPL4] (archived*: /discover/nobackup/projects/gmao/smap/SMAP_L4/L4_SM/bcs/CLSM_params/Icarus-NLv5_EASE/)\n \ @@ -187,7 +187,7 @@ def ask_questions(): "v07 : NL3 + PEATMAP", \ "v08 : NL3 + MODIS snow alb", \ "v09 : NL3 + PEATMAP + MODIS snow alb"], - "default": "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/ltakacs/bcs/Icarus-NLv3/)", + "default": "NL3 : Icarus-NLv3 (archived*: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus-NLv3/)", }, {