diff --git a/.gitignore b/.gitignore index b25c15b8..0d547507 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,179 @@ -*~ +gcmpy/sync.sh +gcmpy/jinjafy.py + +####################### generic ######################### + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +#uv.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc diff --git a/AGCM.rc.tmpl b/AGCM.rc.tmpl index cad6a26e..da8f8bd5 100644 --- a/AGCM.rc.tmpl +++ b/AGCM.rc.tmpl @@ -10,33 +10,33 @@ # 4) if you want fewer cores, half NX (for 0.5), then half NY for (0.25) and so on... # 5) when you hit an odd number we need to get more creative # 6) if you have questions send Bill Putman a Teams message -NX: @NX -NY: @NY - -IOSERVER_NODES: @NUM_OSERVER_NODES -NUM_BACKEND_PES: @NUM_BACKEND_PES - -DATAATM.GRID_TYPE: @GRID_TYPE -DATAATM.GRIDNAME: @AGCM_GRIDNAME -DATAATM.NF: @AGCM_NF -DATAATM.LM: @AGCM_LM -DATAATM.IM_WORLD: @AGCM_IM - -AGCM_IM: @AGCM_IM -AGCM_JM: @AGCM_JM -AGCM_LM: @AGCM_LM -AGCM_GRIDNAME: @AGCM_GRIDNAME - -AGCM.GRID_TYPE: @GRID_TYPE -AGCM.GRIDNAME: @AGCM_GRIDNAME -@CUBE_AGCM AGCM.NF: @AGCM_NF -AGCM.LM: @AGCM_LM -AGCM.IM_WORLD: @AGCM_IM -@LATLON_AGCM AGCM.JM_WORLD: @AGCM_JM - -@CONUS AGCM.STRETCH_FACTOR: @STRETCH_FACTOR -@CONUS AGCM.TARGET_LAT: 39.5 -@CONUS AGCM.TARGET_LON: -98.35 +NX: {{ NX }} +NY: {{ NY }} + +IOSERVER_NODES: {{ NUM_OSERVER_NODES }} +NUM_BACKEND_PES: {{ NUM_BACKEND_PES }} + +DATAATM.GRID_TYPE: {{ GRID_TYPE }} +DATAATM.GRIDNAME: {{ AGCM_GRIDNAME }} +DATAATM.NF: {{ AGCM_NF }} +DATAATM.LM: {{ AGCM_LM }} +DATAATM.IM_WORLD: {{ AGCM_IM }} + +AGCM_IM: {{ AGCM_IM }} +AGCM_JM: {{ AGCM_JM }} +AGCM_LM: {{ AGCM_LM }} +AGCM_GRIDNAME: {{ AGCM_GRIDNAME }} + +AGCM.GRID_TYPE: {{ GRID_TYPE }} +AGCM.GRIDNAME: {{ AGCM_GRIDNAME }} +{{ CUBE_AGCM }} AGCM.NF: {{ AGCM_NF }} +AGCM.LM: {{ AGCM_LM }} +AGCM.IM_WORLD: {{ AGCM_IM }} +{{ LATLON_AGCM }} AGCM.JM_WORLD: {{ AGCM_JM }} + +{{ CONUS }} AGCM.STRETCH_FACTOR: {{ STRETCH_FACTOR }} +{{ CONUS }} AGCM.TARGET_LAT: 39.5 +{{ CONUS }} AGCM.TARGET_LON: -98.35 ########################################################### # debug options @@ -56,27 +56,27 @@ AGCM.IM_WORLD: @AGCM_IM # the defaults are most ideal # ---------------------------------------- ADJUST_DT: .FALSE. -GOCART2G_DT: @CHEM_DT -GOCART_DT: @CHEM_DT -HEMCO_DT: @CHEM_DT -ACHEM_DT: @CHEM_DT -PCHEM_DT: @CHEM_DT -GF_DT: @CONV_DT -UW_DT: @CONV_DT +GOCART2G_DT: {{ CHEM_DT }} +GOCART_DT: {{ CHEM_DT }} +HEMCO_DT: {{ CHEM_DT }} +ACHEM_DT: {{ CHEM_DT }} +PCHEM_DT: {{ CHEM_DT }} +GF_DT: {{ CONV_DT }} +UW_DT: {{ CONV_DT }} ########################################################### ########################################################### # dynamics options # ---------------------------------------- -DYCORE: @DYCORE +DYCORE: {{ DYCORE }} ########################################################### ########################################################### # radiation options # ---------------------------------------- - SOLAR_DT: @SOLAR_DT - IRRAD_DT: @IRRAD_DT -SATSIM_DT: @IRRAD_DT + SOLAR_DT: {{ SOLAR_DT }} + IRRAD_DT: {{ IRRAD_DT }} +SATSIM_DT: {{ IRRAD_DT }} SOLARAvrg: 0 IRRADAvrg: 0 EOT: .TRUE. @@ -86,21 +86,21 @@ ORBIT_ANAL2B: .TRUE. ########################################################### # BACM_1M microphysics options # ---------------------------------------- -@BACM_1M_CLDMICR_OPTION: BACM_1M +{{ BACM_1M_ }}CLDMICR_OPTION: BACM_1M ########################################################### ########################################################### # GFDL_1M microphysics options # ---------------------------------------- -@GFDL_1M_CLDMICR_OPTION: GFDL_1M +{{ GFDL_1M_ }}CLDMICR_OPTION: GFDL_1M #Restrict GFDL-MP below 1 hPa -@GFDL_1M_GFDL_MP_KLID: @KLID +{{ GFDL_1M_ }}GFDL_MP_KLID: {{ KLID }} ########################################################### ########################################################### # MGB2_2M microphysics options # ---------------------------------------- -@MGB2_2M_CLDMICR_OPTION: MGB2_2M +{{ MGB2_2M_ }}CLDMICR_OPTION: MGB2_2M ########################################################### ########################################################### @@ -112,8 +112,8 @@ SHALLOW_OPTION: UW ########################################################### # convection scheme options # ---------------------------------------- -CONVPAR_OPTION: @CONVPAR_OPTION -# @BACM_1M_USE_GF2020: 0 +CONVPAR_OPTION: {{ CONVPAR_OPTION }} +{{ BACM_1M_}}USE_GF2020: 0 # Convective plumes to be activated (1 true, 0 false) DEEP: 1 SHALLOW: 0 @@ -130,64 +130,63 @@ CLOSURE_CONGESTUS: 3 ########################################################### # TRB/GWD Parameterization # ------------------------ -NCAR_NRDG: @NCAR_NRDG +NCAR_NRDG: {{ NCAR_NRDG }} # The below settings are only for v14 BCs currently being tested #v14 NCAR_EFFGWORO: 0.35 #v14 NCAR_ORO_TNDMAX: 250 # For BACM_1M we revert to v11 TURB settings -@BACM_1M_TURBULENCE_LAMBDAH: 160.0 -@BACM_1M_TURBULENCE_LAMBDAM: 160.0 +{{ BACM_1M_ }}TURBULENCE_LAMBDAH: 160.0 +{{ BACM_1M_ }}TURBULENCE_LAMBDAM: 160.0 ########################################################### -########################################################### # Enable wet scavenging diagnostics # NOTE: this section should be commented out when running gocart.data # 2D mass weighted vertical integrated moist scavenging increments -@HIST_GOCARTMCHEMTRI_increments:: -@HIST_GOCARTDU::DU default -@HIST_GOCARTSS::SS default -@HIST_GOCARTSU::SO4 default -@HIST_GOCARTCA.bc::CA.bcphilic default -@HIST_GOCARTCA.br::CA.brphilic default -@HIST_GOCARTCA.oc::CA.ocphilic default -@HIST_GOCARTNI::NO3an1 "NI::NO3an2,NI::NO3an3" -@HIST_GOCARTPCHEM::OX default -@HIST_GOCARTNI::NH3 default -@HIST_GOCARTNI::NH4a default -@HIST_GOCART:: +{{ HIST_GOCART }}MCHEMTRI_increments:: +{{ HIST_GOCART }}DU::DU default +{{ HIST_GOCART }}SS::SS default +{{ HIST_GOCART }}SU::SO4 default +{{ HIST_GOCART }}CA.bc::CA.bcphilic default +{{ HIST_GOCART }}CA.br::CA.brphilic default +{{ HIST_GOCART }}CA.oc::CA.ocphilic default +{{ HIST_GOCART }}NI::NO3an1 "NI::NO3an2,NI::NO3an3" +{{ HIST_GOCART }}PCHEM::OX default +{{ HIST_GOCART }}NI::NH3 default +{{ HIST_GOCART }}NI::NH4a default +{{ HIST_GOCART }}:: # 3D moist scavenging increments -@HIST_GOCARTMTRI_increments:: -@HIST_GOCARTDU::DU default -@HIST_GOCARTSS::SS default -@HIST_GOCARTSU::SO4 default -@HIST_GOCARTCA.bc::CA.bcphilic default -@HIST_GOCARTCA.br::CA.brphilic default -@HIST_GOCARTCA.oc::CA.ocphilic default -@HIST_GOCARTNI::NO3an1 "NI::NO3an2,NI::NO3an3" -@HIST_GOCARTPCHEM::OX default -@HIST_GOCART:: +{{ HIST_GOCART }}MTRI_increments:: +{{ HIST_GOCART }}DU::DU default +{{ HIST_GOCART }}SS::SS default +{{ HIST_GOCART }}SU::SO4 default +{{ HIST_GOCART }}CA.bc::CA.bcphilic default +{{ HIST_GOCART }}CA.br::CA.brphilic default +{{ HIST_GOCART }}CA.oc::CA.ocphilic default +{{ HIST_GOCART }}NI::NO3an1 "NI::NO3an2,NI::NO3an3" +{{ HIST_GOCART }}PCHEM::OX default +{{ HIST_GOCART }}:: ########################################################### ########################################################### # Ocean Model Configuration Parameters # ------------------------------------ -OGCM.GRID_TYPE: @OGCM_GRID_TYPE -OGCM.GRIDNAME: @OGCM_GRIDNAME -OGCM.IM_WORLD: @OGCM_IM -OGCM.JM_WORLD: @OGCM_JM -OGCM.LM: @OGCM_LM -@COUPLED OGCM.NX: @OGCM_NX -@COUPLED OGCM.NY: @OGCM_NY -@MOM5 OGCM.GRIDSPEC: MAPL_Tripolar.nc -@MOM6 OGCM.GRIDSPEC: MAPL_Tripolar.nc -@MIT OGCM.GRIDSPEC: mit.ascii -@MIT OCEAN_DIR: mitocean_run -@DATAOCEAN @LATLON_OGCM OGCM.POLE: 'PE' -@DATAOCEAN @LATLON_OGCM OGCM.DATELINE: 'DE' -@DATAOCEAN @CUBE_OGCM OGCM.NF: @OGCM_NF -OGCM_RUN_DT: @OCEAN_DT +OGCM.GRID_TYPE: {{ OGCM_GRID_TYPE }} +OGCM.GRIDNAME: {{ OGCM_GRIDNAME }} +OGCM.IM_WORLD: {{ OGCM_IM }} +OGCM.JM_WORLD: {{ OGCM_JM }} +OGCM.LM: {{ OGCM_LM }} +{{ COUPLED }} OGCM.NX: {{ OGCM_NX }} +{{ COUPLED }} OGCM.NY: {{ OGCM_NY }} +{{ MOM5 }} OGCM.GRIDSPEC: MAPL_Tripolar.nc +{{ MOM6 }} OGCM.GRIDSPEC: MAPL_Tripolar.nc +{{ MIT }} OGCM.GRIDSPEC: mit.ascii +{{ MIT }} OCEAN_DIR: mitocean_run +{{ DATAOCEAN }} {{ LATLON_OGCM }} OGCM.POLE: 'PE' +{{ DATAOCEAN }} {{ LATLON_OGCM }} OGCM.DATELINE: 'DE' +{{ DATAOCEAN }} {{ CUBE_OGCM }} OGCM.NF: {{ OGCM_NF }} +OGCM_RUN_DT: {{ OCEAN_DT }} ########################################################### ############################################################################################## #### #### @@ -215,7 +214,7 @@ PRINTRC: 1 #--------------------------------------------------------------- PARALLEL_READFORCING: 0 # The num_readers should be set to multiple of 6 if READ_RESTART_BY_FACE is set to YES -NUM_READERS: @NUM_READERS +NUM_READERS: {{ NUM_READERS }} # The num_writers should be set to multiple of 6 if WRITE_RESTART_BY_FACE is set to YES NUM_WRITERS: 1 @@ -226,16 +225,16 @@ READ_RESTART_BY_FACE: NO WRITE_RESTART_BY_FACE: NO # Write restarts by oserver (Default: NO) -WRITE_RESTART_BY_OSERVER: @RESTART_BY_OSERVER +WRITE_RESTART_BY_OSERVER: {{ RESTART_BY_OSERVER }} # Active observer when desired # ---------------------------- -BKG_FREQUENCY: @OBSERVER_FRQ +BKG_FREQUENCY: {{ OBSERVER_FRQ }} # Resolution of state passed to atmos analysis # -------------------------------------------- -ANA_GRIDNAME: PC@AGCM_IMx@AGCM_JM-DC -ANA_LM: @AGCM_LM +ANA_GRIDNAME: PC{{ AGCM_IM }}x{{ AGCM_JM }}-DC +ANA_LM: {{ AGCM_LM }} # Restart Record Parameters # ------------------------- @@ -367,23 +366,23 @@ RECORD_REF_TIME: >>>REFTIME<<< >>>FCSTIME<<< # Typical Exact REPLAY Configuration # ---------------------------------- # REPLAY_MODE: Exact -# REPLAY_FILE: rs/Y%y4/M%m2/@REPLAY_ANA_EXPID.agcm_import_rst.%y4%m2%d2_%h2z.bin -# REPLAY_FILE09: rs/Y%y4/M%m2/@REPLAY_ANA_EXPID.agcm09_import_rst.%y4%m2%d2_%h2z.bin +# REPLAY_FILE: rs/Y%y4/M%m2/{{ REPLAY_ANA_EXPID }}.agcm_import_rst.%y4%m2%d2_%h2z.bin +# REPLAY_FILE09: rs/Y%y4/M%m2/{{ REPLAY_ANA_EXPID }}.agcm09_import_rst.%y4%m2%d2_%h2z.bin # REPLAY_FILE_FREQUENCY: 10800 # REPLAY_FILE_REFERENCE_TIME: 000000 # Typical Regular REPLAY Configuration # ------------------------------------ # REPLAY_MODE: Regular -# REPLAY_FILE: ana/Y%y4/M%m2/@REPLAY_ANA_EXPID.ana.eta.%y4%m2%d2_%h2z.nc4 -# REPLAY_FILE09: ana/Y%y4/M%m2/@REPLAY_ANA_EXPID.ana09.eta.%y4%m2%d2_%h2z.nc4 +# REPLAY_FILE: ana/Y%y4/M%m2/{{ REPLAY_ANA_EXPID }}.ana.eta.%y4%m2%d2_%h2z.nc4 +# REPLAY_FILE09: ana/Y%y4/M%m2/{{ REPLAY_ANA_EXPID }}.ana09.eta.%y4%m2%d2_%h2z.nc4 # REPLAY_FILE_FREQUENCY: 10800 # REPLAY_FILE_REFERENCE_TIME: 000000 # MERRA-2 Regular REPLAY Configuration # -------------------------------------------- #M2 REPLAY_ANA_EXPID: MERRA-2 -#M2 REPLAY_ANA_LOCATION: @M2_REPLAY_ANA_LOCATION +#M2 REPLAY_ANA_LOCATION: {{ M2_REPLAY_ANA_LOCATION }} #M2 REPLAY_MODE: Regular #M2 REPLAY_FILE: ana/MERRA2_all/Y%y4/M%m2/MERRA2.ana.eta.%y4%m2%d2_%h2z.nc4 #M2 MKIAU_JCAP: 62 @@ -426,21 +425,21 @@ RECORD_REF_TIME: >>>REFTIME<<< >>>FCSTIME<<< # 4DIAU (recreate analysis tendency on the fly) # --------------------------------------------- -#@4DIAUDAS AINC_FILE: @EXPID.ana.eta.%y4%m2%d2_%h2%n2z.nc4 -#@4DIAUDAS NUDGE_STATE: YES -##@4DIAUDAS TAUANL: 3600 -#@4DIAUDAS AGCM_IMPORT_RESTART_FILE: agcm_import_rst.>>>ANA0YYYYMMDDHHMN<<>>ANA0YYYYMMDDHHMN<<>>REFTIME<<< >>>FCSTIME<<< # REPLAY_V: YES or NO # (Default: YES) # REPLAY_T: YES or NO # (Default: YES) # REPLAY_QV: YES or NO # (Default: YES) -@REGULAR_REPLAY_GMAO REPLAY_O3: YES or NO # (Default: YES) -@REGULAR_REPLAY_NCEP REPLAY_O3: YES or NO # (Default: YES) -@REGULAR_REPLAY_ECMWF REPLAY_O3: YES or NO # (Default: YES) +{{ REGULAR_REPLAY_GMAO }} REPLAY_O3: YES or NO # (Default: YES) +{{ REGULAR_REPLAY_NCEP }} REPLAY_O3: YES or NO # (Default: YES) +{{ REGULAR_REPLAY_ECMWF }} REPLAY_O3: YES or NO # (Default: YES) # REPLAY_TS: YES or NO # (Default: NO) # # Regular REPLAY Remapping and Blending Variables # ----------------------------------------------- # REPLAY_REMAP: YES # Default = YES, Remap ANA Data to BKG Topography -@REGULAR_REPLAY_ECMWF REPLAY_DAMPBEG: 1000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY_ECMWF REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY_GMAO REPLAY_DAMPBEG: 100.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY_GMAO REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY_NCEP REPLAY_DAMPBEG: 1000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY_NCEP REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) -@REGULAR_REPLAY REPLAY_SHUTOFF: 21600 # ShutOff Replay after 6-hours of Integration -@REGULAR_REPLAY REPLAY_WINDFIX: YES # Apply windfix to force vertically-integrated analysis divergence increment to zero +{{ REGULAR_REPLAY_ECMWF }} REPLAY_DAMPBEG: 1000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY_ECMWF }} REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY_GMAO }} REPLAY_DAMPBEG: 100.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY_GMAO }} REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY_NCEP }} REPLAY_DAMPBEG: 1000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY_NCEP }} REPLAY_DAMPEND: 5000.0 # Default = 1, Linearly Damp Increments between DAMPBEG & DAMPEND (Pascals) +{{ REGULAR_REPLAY }} REPLAY_SHUTOFF: 21600 # ShutOff Replay after 6-hours of Integration +{{ REGULAR_REPLAY }} REPLAY_WINDFIX: YES # Apply windfix to force vertically-integrated analysis divergence increment to zero # # REPLAY_BLEND_QV_AT_TP: .FALSE. # Default = FALSE, Blend QV to BKG upwards from tropopause # @@ -596,7 +595,7 @@ RECORD_REF_TIME: >>>REFTIME<<< >>>FCSTIME<<< # 1 : Catchment # 2 : CatchmentCNCLM40 # ------------------------------------------------------------ -LSM_CHOICE: @LSM_CHOICE +LSM_CHOICE: {{ LSM_CHOICE }} # Apply increments from LDAS? # 0 : no (default) @@ -631,233 +630,233 @@ LSM_CHOICE: @LSM_CHOICE # AGCM_INTERNAL = BIAS Correction Increment: BIAS(n+1) = ALPHA*IAU(n) + BETA*BIAS(n) # ---------------------------------------------------------------------------------- -@FORCEDASAGCM_IMPORT_RESTART_FILE: agcm_import_rst +{{ FORCEDAS }}AGCM_IMPORT_RESTART_FILE: agcm_import_rst -@FORCEGCMAGCM_INTERNAL_RESTART_FILE: agcm_internal_rst -@FORCEGCMAGCM_INTERNAL_CHECKPOINT_FILE: agcm_internal_checkpoint -@FORCEGCMAGCM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ FORCEGCM }}AGCM_INTERNAL_RESTART_FILE: agcm_internal_rst +{{ FORCEGCM }}AGCM_INTERNAL_CHECKPOINT_FILE: agcm_internal_checkpoint +{{ FORCEGCM }}AGCM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@FORCEGCMAGCM_ALPHA: 0.000 -@FORCEGCMAGCM_BETA: 1.000 +{{ FORCEGCM }}AGCM_ALPHA: 0.000 +{{ FORCEGCM }}AGCM_BETA: 1.000 -MAPL_ENABLE_BOOTSTRAP: @BOOT +MAPL_ENABLE_BOOTSTRAP: {{ BOOT }} # Required AGCM Model Restart Files # --------------------------------- -@MODELATMDYN_INTERNAL_RESTART_FILE: fvcore_internal_rst -@MODELATMDYN_INTERNAL_CHECKPOINT_FILE: fvcore_internal_checkpoint -@MODELATMDYN_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE -@MODELATMDYN_INTERNAL_HEADER: 1 +{{ MODELATM }}DYN_INTERNAL_RESTART_FILE: fvcore_internal_rst +{{ MODELATM }}DYN_INTERNAL_CHECKPOINT_FILE: fvcore_internal_checkpoint +{{ MODELATM }}DYN_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} +{{ MODELATM }}DYN_INTERNAL_HEADER: 1 -@MODELATMGWD_INTERNAL_RESTART_FILE: gwd_internal_rst +{{ MODELATM }}GWD_INTERNAL_RESTART_FILE: gwd_internal_rst -@MODELATMLAKE_INTERNAL_RESTART_FILE: lake_internal_rst -@MODELATMLAKE_INTERNAL_CHECKPOINT_FILE: lake_internal_checkpoint -@MODELATMLAKE_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}LAKE_INTERNAL_RESTART_FILE: lake_internal_rst +{{ MODELATM }}LAKE_INTERNAL_CHECKPOINT_FILE: lake_internal_checkpoint +{{ MODELATM }}LAKE_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMLANDICE_INTERNAL_RESTART_FILE: landice_internal_rst -@MODELATMLANDICE_INTERNAL_CHECKPOINT_FILE: landice_internal_checkpoint -@MODELATMLANDICE_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}LANDICE_INTERNAL_RESTART_FILE: landice_internal_rst +{{ MODELATM }}LANDICE_INTERNAL_CHECKPOINT_FILE: landice_internal_checkpoint +{{ MODELATM }}LANDICE_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCATCH_INTERNAL_RESTART_FILE: catch_internal_rst -@MODELATMCATCH_INTERNAL_CHECKPOINT_FILE: catch_internal_checkpoint -@MODELATMCATCH_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CATCH_INTERNAL_RESTART_FILE: catch_internal_rst +{{ MODELATM }}CATCH_INTERNAL_CHECKPOINT_FILE: catch_internal_checkpoint +{{ MODELATM }}CATCH_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCATCHCNCLM40_INTERNAL_RESTART_FILE: catchcn_internal_rst -@MODELATMCATCHCNCLM40_INTERNAL_CHECKPOINT_FILE: catchcn_internal_checkpoint -@MODELATMCATCHCNCLM40_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CATCHCNCLM40_INTERNAL_RESTART_FILE: catchcn_internal_rst +{{ MODELATM }}CATCHCNCLM40_INTERNAL_CHECKPOINT_FILE: catchcn_internal_checkpoint +{{ MODELATM }}CATCHCNCLM40_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMMOIST_INTERNAL_RESTART_FILE: moist_internal_rst -@MODELATMMOIST_INTERNAL_CHECKPOINT_FILE: moist_internal_checkpoint -@MODELATMMOIST_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}MOIST_INTERNAL_RESTART_FILE: moist_internal_rst +{{ MODELATM }}MOIST_INTERNAL_CHECKPOINT_FILE: moist_internal_checkpoint +{{ MODELATM }}MOIST_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} # Boot-Strapable AGCM Model Restart Files # --------------------------------------- -@MODELATMAIAU_IMPORT_RESTART_FILE: aiau_import_rst -@MODELATMAIAU_IMPORT_CHECKPOINT_FILE: aiau_import_checkpoint -@MODELATMAIAU_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}AIAU_IMPORT_RESTART_FILE: aiau_import_rst +{{ MODELATM }}AIAU_IMPORT_CHECKPOINT_FILE: aiau_import_checkpoint +{{ MODELATM }}AIAU_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMGWD_IMPORT_RESTART_FILE: gwd_import_rst -@MODELATMGWD_IMPORT_CHECKPOINT_FILE: gwd_import_checkpoint -@MODELATMGWD_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}GWD_IMPORT_RESTART_FILE: gwd_import_rst +{{ MODELATM }}GWD_IMPORT_CHECKPOINT_FILE: gwd_import_checkpoint +{{ MODELATM }}GWD_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMMOIST_IMPORT_RESTART_FILE: moist_import_rst -@MODELATMMOIST_IMPORT_CHECKPOINT_FILE: moist_import_checkpoint -@MODELATMMOIST_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}MOIST_IMPORT_RESTART_FILE: moist_import_rst +{{ MODELATM }}MOIST_IMPORT_CHECKPOINT_FILE: moist_import_checkpoint +{{ MODELATM }}MOIST_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} SURFACE_IMPORT_RESTART_FILE: surf_import_rst SURFACE_IMPORT_CHECKPOINT_FILE: surf_import_checkpoint -SURFACE_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +SURFACE_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMSOLAR_INTERNAL_RESTART_FILE: solar_internal_rst -@MODELATMSOLAR_INTERNAL_CHECKPOINT_FILE: solar_internal_checkpoint -@MODELATMSOLAR_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}SOLAR_INTERNAL_RESTART_FILE: solar_internal_rst +{{ MODELATM }}SOLAR_INTERNAL_CHECKPOINT_FILE: solar_internal_checkpoint +{{ MODELATM }}SOLAR_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMIRRAD_INTERNAL_RESTART_FILE: irrad_internal_rst -@MODELATMIRRAD_INTERNAL_CHECKPOINT_FILE: irrad_internal_checkpoint -@MODELATMIRRAD_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}IRRAD_INTERNAL_RESTART_FILE: irrad_internal_rst +{{ MODELATM }}IRRAD_INTERNAL_CHECKPOINT_FILE: irrad_internal_checkpoint +{{ MODELATM }}IRRAD_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMTURBULENCE_INTERNAL_RESTART_FILE: turb_internal_rst -@MODELATMTURBULENCE_INTERNAL_CHECKPOINT_FILE: turb_internal_checkpoint -@MODELATMTURBULENCE_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}TURBULENCE_INTERNAL_RESTART_FILE: turb_internal_rst +{{ MODELATM }}TURBULENCE_INTERNAL_CHECKPOINT_FILE: turb_internal_checkpoint +{{ MODELATM }}TURBULENCE_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMTURBULENCE_IMPORT_RESTART_FILE: turb_import_rst -@MODELATMTURBULENCE_IMPORT_CHECKPOINT_FILE: turb_import_checkpoint -@MODELATMTURBULENCE_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}TURBULENCE_IMPORT_RESTART_FILE: turb_import_rst +{{ MODELATM }}TURBULENCE_IMPORT_CHECKPOINT_FILE: turb_import_checkpoint +{{ MODELATM }}TURBULENCE_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMPCHEM_INTERNAL_RESTART_FILE: pchem_internal_rst -@MODELATMPCHEM_INTERNAL_CHECKPOINT_FILE: pchem_internal_checkpoint -@MODELATMPCHEM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}PCHEM_INTERNAL_RESTART_FILE: pchem_internal_rst +{{ MODELATM }}PCHEM_INTERNAL_CHECKPOINT_FILE: pchem_internal_checkpoint +{{ MODELATM }}PCHEM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMH2O_INTERNAL_RESTART_FILE: h2o_internal_rst -@MODELATMH2O_INTERNAL_CHECKPOINT_FILE: h2o_internal_checkpoint -@MODELATMH2O_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}H2O_INTERNAL_RESTART_FILE: h2o_internal_rst +{{ MODELATM }}H2O_INTERNAL_CHECKPOINT_FILE: h2o_internal_checkpoint +{{ MODELATM }}H2O_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} # Chemistry/AEROSOL Model Restart Files # ------------------------------------- -@MODELATMGOCART_IMPORT_RESTART_FILE: gocart_import_rst -@MODELATMGOCART_IMPORT_CHECKPOINT_FILE: gocart_import_checkpoint -@MODELATMGOCART_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}GOCART_IMPORT_RESTART_FILE: gocart_import_rst +{{ MODELATM }}GOCART_IMPORT_CHECKPOINT_FILE: gocart_import_checkpoint +{{ MODELATM }}GOCART_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMGOCART_INTERNAL_RESTART_FILE: gocart_internal_rst -@MODELATMGOCART_INTERNAL_CHECKPOINT_FILE: gocart_internal_checkpoint -@MODELATMGOCART_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}GOCART_INTERNAL_RESTART_FILE: gocart_internal_rst +{{ MODELATM }}GOCART_INTERNAL_CHECKPOINT_FILE: gocart_internal_checkpoint +{{ MODELATM }}GOCART_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMGOCART.data_INTERNAL_RESTART_FILE: gocartdata_internal_rst -@MODELATMGOCART.data_INTERNAL_CHECKPOINT_FILE: gocartdata_internal_checkpoint -@MODELATMGOCART.data_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}GOCART.data_INTERNAL_RESTART_FILE: gocartdata_internal_rst +{{ MODELATM }}GOCART.data_INTERNAL_CHECKPOINT_FILE: gocartdata_internal_checkpoint +{{ MODELATM }}GOCART.data_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMDU_INTERNAL_RESTART_FILE: du_internal_rst -@MODELATMDU_INTERNAL_CHECKPOINT_FILE: du_internal_checkpoint -@MODELATMDU_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}DU_INTERNAL_RESTART_FILE: du_internal_rst +{{ MODELATM }}DU_INTERNAL_CHECKPOINT_FILE: du_internal_checkpoint +{{ MODELATM }}DU_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMSS_INTERNAL_RESTART_FILE: ss_internal_rst -@MODELATMSS_INTERNAL_CHECKPOINT_FILE: ss_internal_checkpoint -@MODELATMSS_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}SS_INTERNAL_RESTART_FILE: ss_internal_rst +{{ MODELATM }}SS_INTERNAL_CHECKPOINT_FILE: ss_internal_checkpoint +{{ MODELATM }}SS_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCA.oc_INTERNAL_RESTART_FILE: caoc_internal_rst -@MODELATMCA.oc_INTERNAL_CHECKPOINT_FILE: caoc_internal_checkpoint -@MODELATMCA.oc_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CA.oc_INTERNAL_RESTART_FILE: caoc_internal_rst +{{ MODELATM }}CA.oc_INTERNAL_CHECKPOINT_FILE: caoc_internal_checkpoint +{{ MODELATM }}CA.oc_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCA.bc_INTERNAL_RESTART_FILE: cabc_internal_rst -@MODELATMCA.bc_INTERNAL_CHECKPOINT_FILE: cabc_internal_checkpoint -@MODELATMCA.bc_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CA.bc_INTERNAL_RESTART_FILE: cabc_internal_rst +{{ MODELATM }}CA.bc_INTERNAL_CHECKPOINT_FILE: cabc_internal_checkpoint +{{ MODELATM }}CA.bc_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCA.br_INTERNAL_RESTART_FILE: cabr_internal_rst -@MODELATMCA.br_INTERNAL_CHECKPOINT_FILE: cabr_internal_checkpoint -@MODELATMCA.br_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CA.br_INTERNAL_RESTART_FILE: cabr_internal_rst +{{ MODELATM }}CA.br_INTERNAL_CHECKPOINT_FILE: cabr_internal_checkpoint +{{ MODELATM }}CA.br_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMNI_INTERNAL_RESTART_FILE: ni_internal_rst -@MODELATMNI_INTERNAL_CHECKPOINT_FILE: ni_internal_checkpoint -@MODELATMNI_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}NI_INTERNAL_RESTART_FILE: ni_internal_rst +{{ MODELATM }}NI_INTERNAL_CHECKPOINT_FILE: ni_internal_checkpoint +{{ MODELATM }}NI_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMSU_INTERNAL_RESTART_FILE: su_internal_rst -@MODELATMSU_INTERNAL_CHECKPOINT_FILE: su_internal_checkpoint -@MODELATMSU_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}SU_INTERNAL_RESTART_FILE: su_internal_rst +{{ MODELATM }}SU_INTERNAL_CHECKPOINT_FILE: su_internal_checkpoint +{{ MODELATM }}SU_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMCARMA_INTERNAL_RESTART_FILE: carma_internal_rst -@MODELATMCARMA_INTERNAL_CHECKPOINT_FILE: carma_internal_checkpoint -@MODELATMCARMA_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}CARMA_INTERNAL_RESTART_FILE: carma_internal_rst +{{ MODELATM }}CARMA_INTERNAL_CHECKPOINT_FILE: carma_internal_checkpoint +{{ MODELATM }}CARMA_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #STRATCHEM_INTERNAL_RESTART_FILE: stratchem_internal_rst #STRATCHEM_INTERNAL_CHECKPOINT_FILE: stratchem_internal_checkpoint -#STRATCHEM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#STRATCHEM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #STRATCHEM_IMPORT_RESTART_FILE: stratchem_import_rst #STRATCHEM_IMPORT_CHECKPOINT_FILE: stratchem_import_checkpoint -#STRATCHEM_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#STRATCHEM_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #GMICHEM_INTERNAL_RESTART_FILE: gmichem_internal_rst #GMICHEM_INTERNAL_CHECKPOINT_FILE: gmichem_internal_checkpoint -#GMICHEM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#GMICHEM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #GMICHEM_IMPORT_RESTART_FILE: gmichem_import_rst #GMICHEM_IMPORT_CHECKPOINT_FILE: gmichem_import_checkpoint -#GMICHEM_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#GMICHEM_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #GEOSCHEMCHEM_INTERNAL_RESTART_FILE: geoschemchem_internal_rst #GEOSCHEMCHEM_INTERNAL_CHECKPOINT_FILE: geoschemchem_internal_checkpoint -#GEOSCHEMCHEM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#GEOSCHEMCHEM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #GEOSCHEMCHEM_IMPORT_RESTART_FILE: geoschemchem_import_rst #GEOSCHEMCHEM_IMPORT_CHECKPOINT_FILE: geoschemchem_import_checkpoint -#GEOSCHEMCHEM_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#GEOSCHEMCHEM_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMMAM_INTERNAL_RESTART_FILE: mam_internal_rst -@MODELATMMAM_INTERNAL_CHECKPOINT_FILE: mam_internal_checkpoint -@MODELATMMAM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}MAM_INTERNAL_RESTART_FILE: mam_internal_rst +{{ MODELATM }}MAM_INTERNAL_CHECKPOINT_FILE: mam_internal_checkpoint +{{ MODELATM }}MAM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMACHEM_INTERNAL_RESTART_FILE: achem_internal_rst -@MODELATMACHEM_INTERNAL_CHECKPOINT_FILE: achem_internal_checkpoint -@MODELATMACHEM_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}ACHEM_INTERNAL_RESTART_FILE: achem_internal_rst +{{ MODELATM }}ACHEM_INTERNAL_CHECKPOINT_FILE: achem_internal_checkpoint +{{ MODELATM }}ACHEM_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMTR_INTERNAL_RESTART_FILE: tr_internal_rst -@MODELATMTR_INTERNAL_CHECKPOINT_FILE: tr_internal_checkpoint -@MODELATMTR_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}TR_INTERNAL_RESTART_FILE: tr_internal_rst +{{ MODELATM }}TR_INTERNAL_CHECKPOINT_FILE: tr_internal_checkpoint +{{ MODELATM }}TR_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMTR_IMPORT_RESTART_FILE: tr_import_rst -@MODELATMTR_IMPORT_CHECKPOINT_FILE: tr_import_checkpoint -@MODELATMTR_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}TR_IMPORT_RESTART_FILE: tr_import_rst +{{ MODELATM }}TR_IMPORT_CHECKPOINT_FILE: tr_import_checkpoint +{{ MODELATM }}TR_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMHEMCO_INTERNAL_RESTART_FILE: hemco_internal_rst -@MODELATMHEMCO_INTERNAL_CHECKPOINT_FILE: hemco_internal_checkpoint -@MODELATMHEMCO_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}HEMCO_INTERNAL_RESTART_FILE: hemco_internal_rst +{{ MODELATM }}HEMCO_INTERNAL_CHECKPOINT_FILE: hemco_internal_checkpoint +{{ MODELATM }}HEMCO_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@MODELATMHEMCO_IMPORT_RESTART_FILE: hemco_import_rst -@MODELATMHEMCO_IMPORT_CHECKPOINT_FILE: hemco_import_checkpoint -@MODELATMHEMCO_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ MODELATM }}HEMCO_IMPORT_RESTART_FILE: hemco_import_rst +{{ MODELATM }}HEMCO_IMPORT_CHECKPOINT_FILE: hemco_import_checkpoint +{{ MODELATM }}HEMCO_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #OH_INTERNAL_RESTART_FILE: oh_internal_rst #OH_INTERNAL_CHECKPOINT_FILE: oh_internal_checkpoint -#OH_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#OH_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #OH_IMPORT_RESTART_FILE: oh_import_rst #OH_IMPORT_CHECKPOINT_FILE: oh_import_checkpoint -#OH_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#OH_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} #RRG_INTERNAL_RESTART_FILE: rrg_internal_rst #RRG_INTERNAL_CHECKPOINT_FILE: rrg_internal_checkpoint -#RRG_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#RRG_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} # OCEAN Model Restart Files # ------------------------- SALTWATER_IMPORT_RESTART_FILE: saltwater_import_rst SALTWATER_IMPORT_CHECKPOINT_FILE: saltwater_import_checkpoint -SALTWATER_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +SALTWATER_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} OPENWATER_INTERNAL_RESTART_FILE: openwater_internal_rst OPENWATER_INTERNAL_CHECKPOINT_FILE: openwater_internal_checkpoint -OPENWATER_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +OPENWATER_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@CICE6SEAICETHERMO_IMPORT_RESTART_FILE: seaicethermo_import_rst -@CICE6SEAICETHERMO_IMPORT_CHECKPOINT_FILE: seaicethermo_import_checkpoint -@CICE6SEAICETHERMO_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ CICE6 }}SEAICETHERMO_IMPORT_RESTART_FILE: seaicethermo_import_rst +{{ CICE6 }}SEAICETHERMO_IMPORT_CHECKPOINT_FILE: seaicethermo_import_checkpoint +{{ CICE6 }}SEAICETHERMO_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} SEAICETHERMO_INTERNAL_RESTART_FILE: seaicethermo_internal_rst SEAICETHERMO_INTERNAL_CHECKPOINT_FILE: seaicethermo_internal_checkpoint -SEAICETHERMO_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +SEAICETHERMO_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@CICE4CICE4_IMPORT_RESTART_FILE: seaice_import_rst -@CICE4CICE4_IMPORT_CHECKPOINT_FILE: seaice_import_checkpoint -@CICE4CICE4_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE -@CICE6CICE6_IMPORT_RESTART_FILE: seaice_import_rst -@CICE6CICE6_IMPORT_CHECKPOINT_FILE: seaice_import_checkpoint -@CICE6CICE6_IMPORT_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ CICE4 }}CICE4_IMPORT_RESTART_FILE: seaice_import_rst +{{ CICE4 }}CICE4_IMPORT_CHECKPOINT_FILE: seaice_import_checkpoint +{{ CICE4 }}CICE4_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} +{{ CICE6 }}CICE6_IMPORT_RESTART_FILE: seaice_import_rst +{{ CICE6 }}CICE6_IMPORT_CHECKPOINT_FILE: seaice_import_checkpoint +{{ CICE6 }}CICE6_IMPORT_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@CICE4CICE4_INTERNAL_RESTART_FILE: seaice_internal_rst -@CICE4CICE4_INTERNAL_CHECKPOINT_FILE: seaice_internal_checkpoint -@CICE4CICE4_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ CICE4 }}CICE4_INTERNAL_RESTART_FILE: seaice_internal_rst +{{ CICE4 }}CICE4_INTERNAL_CHECKPOINT_FILE: seaice_internal_checkpoint +{{ CICE4 }}CICE4_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} -@COUPLEDOCEAN_INTERNAL_RESTART_FILE: ocean_internal_rst -@COUPLEDOCEAN_INTERNAL_CHECKPOINT_FILE: ocean_internal_checkpoint -@COUPLEDOCEAN_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +{{ COUPLED }}OCEAN_INTERNAL_RESTART_FILE: ocean_internal_rst +{{ COUPLED }}OCEAN_INTERNAL_CHECKPOINT_FILE: ocean_internal_checkpoint +{{ COUPLED }}OCEAN_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} # GIGATRAJ RUN CONFIG # ------------------------- #GIGATRAJ_INTERNAL_RESTART_FILE: gigatraj_internal_rst #GIGATRAJ_INTERNAL_CHECKPOINT_FILE: gigatraj_internal_checkpoint -#GIGATRAJ_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#GIGATRAJ_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} GIGATRAJ_REGRID_TO_LATLON: NO #GIGATRAJ_PARCELS_FILE: parcels.nc4 # time interval (minutes) for integration. Default is heart beat and it must be a multiple of heart beat. @@ -883,7 +882,7 @@ GIGATRAJ_EXTRA_FIELDS: DYN%TH|Theta;DYN%ZL|PAlt # ------------------ #IGNI_INTERNAL_RESTART_FILE: igni_internal_rst #IGNI_INTERNAL_CHECKPOINT_FILE: igni_internal_checkpoint -#IGNI_INTERNAL_CHECKPOINT_TYPE: @CHECKPOINT_TYPE +#IGNI_INTERNAL_CHECKPOINT_TYPE: {{ CHECKPOINT_TYPE }} # Boundary Datasets # ----------------- @@ -898,16 +897,16 @@ TILING_FILE: tile.bin VISDF_FILE: visdf.dat NIRDF_FILE: nirdf.dat LNFM_FILE: lnfm.data -@MODELATM@COUPLED ROUTING_FILE: runoff.bin +{{ MODELATM }}{{ COUPLED }} ROUTING_FILE: runoff.bin -@MODELATMVEGDYN_INTERNAL_RESTART_FILE: vegdyn.data +{{ MODELATM }}VEGDYN_INTERNAL_RESTART_FILE: vegdyn.data KPAR_FILE: SEAWIFS_KPAR_mon_clim.data # AeroChem Environment # -------------------- - OX_RELAXTIME: @OX_RELAXTIME # Standard Options: GCM: 259200., DAS: 0.000 + OX_RELAXTIME: {{ OX_RELAXTIME }} # Standard Options: GCM: 259200., DAS: 0.000 CH4_RELAXTIME: 259200. N2O_RELAXTIME: 259200. CFC11_RELAXTIME: 259200. @@ -922,7 +921,7 @@ KPAR_FILE: SEAWIFS_KPAR_mon_clim.data H2O_FRIENDLIES: DYNAMICS:TURBULENCE:MOIST HCFC22_FRIENDLIES: DYNAMICS:TURBULENCE:MOIST pchem_clim: species.data - pchem_clim_years: @PCHEM_CLIM_YEARS + pchem_clim_years: {{ PCHEM_CLIM_YEARS }} # Age-of-Air Parameters # --------------------- @@ -930,16 +929,16 @@ HCFC22_FRIENDLIES: DYNAMICS:TURBULENCE:MOIST # Set RADIATION Parameterizations # ------------------------------- -@RRTMGP_RADIATION USE_RRTMGP_IRRAD: 1.0 -@RRTMGP_RADIATION USE_RRTMGP_SORAD: 1.0 -@RRTMGP_RADIATION RRTMGP_GAS_LW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-gas-lw-g128.nc -@RRTMGP_RADIATION RRTMGP_GAS_SW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-gas-sw-g112.nc -@RRTMGP_RADIATION RRTMGP_CLOUD_OPTICS_LW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-clouds-lw.nc -@RRTMGP_RADIATION RRTMGP_CLOUD_OPTICS_SW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-clouds-sw.nc -@RRTMGP_RADIATION SOLAR_LB_MAX_PASSES: 10 +{{ RRTMGP_RADIATION }} USE_RRTMGP_IRRAD: 1.0 +{{ RRTMGP_RADIATION }} USE_RRTMGP_SORAD: 1.0 +{{ RRTMGP_RADIATION }} RRTMGP_GAS_LW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-gas-lw-g128.nc +{{ RRTMGP_RADIATION }} RRTMGP_GAS_SW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-gas-sw-g112.nc +{{ RRTMGP_RADIATION }} RRTMGP_CLOUD_OPTICS_LW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-clouds-lw.nc +{{ RRTMGP_RADIATION }} RRTMGP_CLOUD_OPTICS_SW: ExtData/g5gcm/radiation/RRTMGP/v1.8/rrtmgp-clouds-sw.nc +{{ RRTMGP_RADIATION }} SOLAR_LB_MAX_PASSES: 10 -@RRTMG_RADIATION USE_RRTMG_IRRAD: 1.0 -@RRTMG_RADIATION USE_RRTMG_SORAD: 1.0 +{{ RRTMG_RADIATION }} USE_RRTMG_IRRAD: 1.0 +{{ RRTMG_RADIATION }} USE_RRTMG_SORAD: 1.0 ISOLVAR: 2 USE_NRLSSI2: .TRUE. @@ -954,16 +953,16 @@ NUM_BANDS: 30 DIURNAL_BIOMASS_BURNING: yes - RATS_PROVIDER: @RATS_PROVIDER # options: PCHEM, GMICHEM, STRATCHEM (Radiatively active tracers) - AERO_PROVIDER: @AERO_PROVIDER # options: GOCART2G, MAM, none (Radiatively active aerosols) -ANALYSIS_OX_PROVIDER: @OANA_PROVIDER # options: PCHEM, GMICHEM, STRATCHEM, GOCART - CH4_PROVIDER: @CH4_PROVIDER # options: GOCART, RRG, none - CO2_PROVIDER: @CO2_PROVIDER # options: GOCART, RRG, none + RATS_PROVIDER: {{ RATS_PROVIDER }} # options: PCHEM, GMICHEM, STRATCHEM (Radiatively active tracers) + AERO_PROVIDER: {{ AERO_PROVIDER }} # options: GOCART2G, MAM, none (Radiatively active aerosols) +ANALYSIS_OX_PROVIDER: {{ OANA_PROVIDER }} # options: PCHEM, GMICHEM, STRATCHEM, GOCART + CH4_PROVIDER: {{ CH4_PROVIDER }} # options: GOCART, RRG, none + CO2_PROVIDER: {{ CO2_PROVIDER }} # options: GOCART, RRG, none # Flag for real-time forecasts (persisted SST) OGCM_IS_FCST: 1 (AMIP-Style Default: 0) # ------------------------------------------------------------------------------- - OGCM_IS_FCST: @OGCM_IS_FCST + OGCM_IS_FCST: {{ OGCM_IS_FCST }} # Time step for aerosol assimilation (GAAS) @@ -972,16 +971,16 @@ ANALYSIS_OX_PROVIDER: @OANA_PROVIDER # options: PCHEM, GMICHEM, STRATCHEM, GOC # DATAOCEAN Parameters for AMIP-Style Run # ---------------------------------------- -@DATAOCEAN DATA_SST_FILE: sst.data -@DATAOCEAN DATA_FRT_FILE: fraci.data -@DATAOCEAN MIN_SEAICE_DEPTH: 0.07 -@DATAOCEAN MAX_SEAICE_DEPTH: 0.07 -@DATAOCEAN TAU_SIT: 86400 +{{ DATAOCEAN }} DATA_SST_FILE: sst.data +{{ DATAOCEAN }} DATA_FRT_FILE: fraci.data +{{ DATAOCEAN }} MIN_SEAICE_DEPTH: 0.07 +{{ DATAOCEAN }} MAX_SEAICE_DEPTH: 0.07 +{{ DATAOCEAN }} TAU_SIT: 86400 # To compute skin SST over water (or to use SST Analysis Increment) set values to 1 # --------------------------------------------------------------------------------- -USE_SKIN_LAYER: @USE_SKIN_LAYER - ANALYZE_TS: @ANALYZE_TS +USE_SKIN_LAYER: {{ USE_SKIN_LAYER }} + ANALYZE_TS: {{ ANALYZE_TS }} # Model Tuning Parameters (For CMIP5 recommended SOLAR_CONSTANT and CO2 values, use -1) # ------------------------------------------------------------------------------------- @@ -992,31 +991,31 @@ RATS_DIAGNOSTICS: # Set one or more LW diagnostic analysis for specific RATS in # Flags for SATSIM Output # ----------------------- -USE_SATSIM: @SATSIM -USE_SATSIM_ISCCP: @ISCCP_SATSIM -USE_SATSIM_MODIS: @MODIS_SATSIM -USE_SATSIM_RADAR: @RADAR_SATSIM -USE_SATSIM_LIDAR: @LIDAR_SATSIM -USE_SATSIM_MISR: @MISR_SATSIM +USE_SATSIM: {{ SATSIM }} +USE_SATSIM_ISCCP: {{ ISCCP_SATSIM }} +USE_SATSIM_MODIS: {{ MODIS_SATSIM }} +USE_SATSIM_RADAR: {{ RADAR_SATSIM }} +USE_SATSIM_LIDAR: {{ LIDAR_SATSIM }} +USE_SATSIM_MISR: {{ MISR_SATSIM }} # Flags to enable wave code # ------------------------- USE_WAVES: 0 -@COUPLED INTERPOLATE_ATMLM: 0 -@COUPLED INTERPOLATE_ATMTAU: 1 -@COUPLED INTERPOLATE_OCEAN_ICE_CURRENTS: 0 +{{ COUPLED }} INTERPOLATE_ATMLM: 0 +{{ COUPLED }} INTERPOLATE_ATMTAU: 1 +{{ COUPLED }} INTERPOLATE_OCEAN_ICE_CURRENTS: 0 -@COUPLED CLDMICRO: @CLDMICRO +{{ COUPLED }} CLDMICRO: {{ CLDMICRO }} -@COUPLED # Section for ocean -@COUPLED # ---------------- -@COUPLED USE_DATASEA:0 -@COUPLED OCEAN_NAME: @OCEAN_NAME -@COUPLED USE_DATA_ATM4OCN: @USE_DATA_ATM4OCN -@COUPLED USE_DATASEAICE:0 -@COUPLED steady_state_ocean: 0 -@COUPLED OCEAN_PICE_SCALING: 0.0 +{{ COUPLED }} # Section for ocean +{{ COUPLED }} # ---------------- +{{ COUPLED }} USE_DATASEA:0 +{{ COUPLED }} OCEAN_NAME: {{ OCEAN_NAME }} +{{ COUPLED }} USE_DATA_ATM4OCN: {{ USE_DATA_ATM4OCN }} +{{ COUPLED }} USE_DATASEAICE:0 +{{ COUPLED }} steady_state_ocean: 0 +{{ COUPLED }} OCEAN_PICE_SCALING: 0.0 # For running MOM5 coupled model in dual ocean mode, uncomment three lines below, # make sure that regular replay is enabled, proper PRECIP_FILE is chosen, @@ -1024,28 +1023,28 @@ USE_WAVES: 0 # the run starts at 21z/03z/09z/15z, # HISTORY.rc collections have proper ref_time field # --------------------------------------------------------------------------- -@MOM5#DUAL_OCEAN: 1 -@MOM5#DATA_SST_FILE: sst.data -@MOM5#DATA_FRT_FILE: fraci.data - -@COUPLED -@COUPLED# Section for CICE -@COUPLED# ----------------- -@CICE4USE_CICE_Thermo: 1 -@CICE6USE_CICE_Thermo: 2 -@CICE6SEAICE_NAME: CICE6 -@CICE4PRESCRIBED_ICE: 0 -@CICE4CICE_DT: @OCEAN_DT -@CICE4CICE_NDTE: 300 -@CICE4CICE_GRID: grid_cice.bin -@CICE4CICE_KMT: kmt_cice.bin -@COUPLEDCICE_N_ICE_CATEGORIES:5 -@CICE4CICE_N_ICE_LAYERS:4 -@CICE4CICE_MU_RDG: 3.0 -@CICE4CICE_AH_MAX: 0.3 -@CICE4CICE_STRENGTH: 0 -@CICE4ALBICEV: 0.78 -@CICE4ALBICEI: 0.36 -@CICE4ALBSNOWV: 0.98 -@CICE4ALBSNOWI: 0.7 -@CICE4MIN_FREEZE_SALINITY: 5.0 +{{ MOM5 }}#DUAL_OCEAN: 1 +{{ MOM5 }}#DATA_SST_FILE: sst.data +{{ MOM5 }}#DATA_FRT_FILE: fraci.data + +{{ COUPLED }} +{{ COUPLED }}# Section for CICE +{{ COUPLED }}# ----------------- +{{ CICE4 }}USE_CICE_Thermo: 1 +{{ CICE6 }}USE_CICE_Thermo: 2 +{{ CICE6 }}SEAICE_NAME: CICE6 +{{ CICE4 }}PRESCRIBED_ICE: 0 +{{ CICE4 }}CICE_DT: {{ OCEAN_DT }} +{{ CICE4 }}CICE_NDTE: 300 +{{ CICE4 }}CICE_GRID: grid_cice.bin +{{ CICE4 }}CICE_KMT: kmt_cice.bin +{{ COUPLED }}CICE_N_ICE_CATEGORIES:5 +{{ CICE4 }}CICE_N_ICE_LAYERS:4 +{{ CICE4 }}CICE_MU_RDG: 3.0 +{{ CICE4 }}CICE_AH_MAX: 0.3 +{{ CICE4 }}CICE_STRENGTH: 0 +{{ CICE4 }}ALBICEV: 0.78 +{{ CICE4 }}ALBICEI: 0.36 +{{ CICE4 }}ALBSNOWV: 0.98 +{{ CICE4 }}ALBSNOWI: 0.7 +{{ CICE4 }}MIN_FREEZE_SALINITY: 5.0 diff --git a/CAP.rc.tmpl b/CAP.rc.tmpl index 5a3aab48..c33f85b8 100644 --- a/CAP.rc.tmpl +++ b/CAP.rc.tmpl @@ -2,13 +2,13 @@ ROOT_NAME: GCM ROOT_CF: AGCM.rc HIST_CF: HISTORY.rc -BEG_DATE: @BEG_DATE -END_DATE: @END_DATE -JOB_SGMT: @JOB_SGMT -NUM_SGMT: @NUM_SGMT -HEARTBEAT_DT: @DT +BEG_DATE: {{ BEG_DATE }} +END_DATE: {{ END_DATE }} +JOB_SGMT: {{ JOB_SGMT }} +NUM_SGMT: {{ NUM_SGMT }} +HEARTBEAT_DT: {{ DT }} -USE_SHMEM: @USE_SHMEM +USE_SHMEM: {{ USE_SHMEM }} USE_EXTDATA2G: .TRUE. # Parameters for Cycled REPLAY Forecasts diff --git a/CMakeLists.txt b/CMakeLists.txt index c1d0d9d9..7066cd0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,3 +78,4 @@ endforeach () configure_file(.AGCM_VERSION .AGCM_VERSION @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/.AGCM_VERSION DESTINATION etc) +add_subdirectory(gcmpy) diff --git a/HISTORY.AGCM.rc.tmpl b/HISTORY.AGCM.rc.tmpl index 5a2040e7..99d09b41 100644 --- a/HISTORY.AGCM.rc.tmpl +++ b/HISTORY.AGCM.rc.tmpl @@ -1,7 +1,7 @@ VERSION: 1 -EXPID: @EXPID -EXPDSC: @EXPDSC -EXPSRC: @EXPSRC +EXPID: {{ EXPID }} +EXPDSC: {{ EXPDSC }} +EXPSRC: {{ EXPSRC }} CONTACT: 'http://gmao.gsfc.nasa.gov' @@ -20,10 +20,10 @@ COLLECTIONS: 'geosgcm_prog' 'geosgcm_meltwtr' 'geosgcm_snowlayer' 'geosgcm_tracer' -@HIST_GOCART 'tavg2d_aer_x' -@HIST_GOCART 'tavg3d_aer_p' -#@HIST_GOCART 'inst3d_aer_v' -#@HIST_GOCART 'inst2d_hwl_x' + {{ HIST_GOCART }} 'tavg2d_aer_x' + {{ HIST_GOCART }} 'tavg3d_aer_p' +#{{ HIST_GOCART }} 'inst3d_aer_v' +#{{ HIST_GOCART }} 'inst2d_hwl_x' # 'geosgcm_iau' # 'geosgcm_conv' # 'goswim_catch' @@ -45,32 +45,32 @@ COLLECTIONS: 'geosgcm_prog' # list of COLLECTIONS for scripting purposes. # ################################################## -GRID_LABELS: PC@HIST_IMx@HIST_JM-DC - PC@CLIM_IMx@CLIM_JM-DC +GRID_LABELS: PC{{ HIST_IM }}x{{ HIST_JM }}-DC + PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC :: # High Resolution Global Fields for Synoptic Meteorology -PC@HIST_IMx@HIST_JM-DC.GRID_TYPE: LatLon -PC@HIST_IMx@HIST_JM-DC.IM_WORLD: @HIST_IM -PC@HIST_IMx@HIST_JM-DC.JM_WORLD: @HIST_JM -PC@HIST_IMx@HIST_JM-DC.POLE: PC -PC@HIST_IMx@HIST_JM-DC.DATELINE: DC -PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.GRID_TYPE: LatLon +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.IM_WORLD: {{ HIST_IM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.JM_WORLD: {{ HIST_JM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.POLE: PC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.DATELINE: DC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.LM: {{ AGCM_LM }} # Coarse Resolution GLobal Fields for Climatology -PC@CLIM_IMx@CLIM_JM-DC.GRID_TYPE: LatLon -PC@CLIM_IMx@CLIM_JM-DC.IM_WORLD: @CLIM_IM -PC@CLIM_IMx@CLIM_JM-DC.JM_WORLD: @CLIM_JM -PC@CLIM_IMx@CLIM_JM-DC.POLE: PC -PC@CLIM_IMx@CLIM_JM-DC.DATELINE: DC -PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.GRID_TYPE: LatLon +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.IM_WORLD: {{ CLIM_IM }} +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.JM_WORLD: {{ CLIM_JM }} +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.POLE: PC +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.DATELINE: DC +PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC.LM: {{ AGCM_LM }} geosgcm_prog.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_prog.archive: '%c/Y%y4' , geosgcm_prog.format: 'CFIO' , geosgcm_prog.deflate: 1 , - geosgcm_prog.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_prog.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_prog.regrid_method: 'BILINEAR', geosgcm_prog.frequency: 060000 , geosgcm_prog.vscale: 100.0 , @@ -102,7 +102,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM prog.eta.archive: '%c/Y%y4' , prog.eta.format: 'CFIO' , prog.eta.deflate: 1 , - prog.eta.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + prog.eta.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , prog.eta.regrid_method: 'BILINEAR', prog.eta.mode: 'instantaneous' , prog.eta.frequency: 060000 , @@ -136,7 +136,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_surf.archive: '%c/Y%y4' , geosgcm_surf.format: 'CFIO' , geosgcm_surf.deflate: 1 , - geosgcm_surf.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_surf.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_surf.regrid_method: 'BILINEAR', geosgcm_surf.mode: 'time-averaged' , geosgcm_surf.monthly: 1 , @@ -298,51 +298,51 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM 'PHIW' , 'SURFACE' , 'TAUTW' , 'SURFACE' , 'ZETA_W' , 'SURFACE' , -@HIST_CATCHCN 'CNLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNSAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNVEGC' , 'SURFACE' , -@HIST_CATCHCN 'CNROOT' , 'SURFACE' , -@HIST_CATCHCN 'CNFROOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNNPP' , 'SURFACE' , -@HIST_CATCHCN 'CNGPP' , 'SURFACE' , -@HIST_CATCHCN 'CNSR' , 'SURFACE' , -@HIST_CATCHCN 'CNNEE' , 'SURFACE' , -@HIST_CATCHCN 'CNXSMR' , 'SURFACE' , -@HIST_CATCHCN 'CNADD' , 'SURFACE' , -@HIST_CATCHCN 'PARABS' , 'SURFACE' , -@HIST_CATCHCN 'PARINC' , 'SURFACE' , -@HIST_CATCHCN 'SCSAT' , 'SURFACE' , -@HIST_CATCHCN 'SCUNS' , 'SURFACE' , -@HIST_CATCHCN 'BTRANT' , 'SURFACE' , 'BTRAN' , -@HIST_CATCHCN 'SIF' , 'SURFACE' , -@HIST_CATCHCN 'CNLOSS' , 'SURFACE' , 'CLOSS' , -@HIST_CATCHCN 'CNBURN' , 'SURFACE' , 'BURN' , -@HIST_CATCHCN 'CNFSEL' , 'SURFACE' , 'FSEL' , -@HIST_CATCHCN 'EVPICE' , 'SURFACE' , -@HIST_CATCHCN 'EVPSNO' , 'SURFACE' , -@HIST_CATCHCN 'EVPINT' , 'SURFACE' , -@HIST_CATCHCN 'EVPSOI' , 'SURFACE' , -@HIST_CATCHCN 'EVPVEG' , 'SURFACE' , -@HIST_CATCHCN 'FRSAT' , 'SURFACE' , -@HIST_CATCHCN 'FRUST' , 'SURFACE' , -@HIST_CATCHCN 'FRWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSAT' , 'SURFACE' , -@HIST_CATCHCN 'TPUNST' , 'SURFACE' , -@HIST_CATCHCN 'TPWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSURF' , 'SURFACE' , 'TSURF' , -@HIST_CATCHCN 'GHTSKIN' , 'SURFACE' , -@HIST_CATCHCN 'WAT10CM' , 'SURFACE' , -@HIST_CATCHCN 'WATSOI' , 'SURFACE' , -@HIST_CATCHCN 'ICESOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNVEGC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNROOT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNFROOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNGPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNEE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNXSMR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNADD' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARABS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARINC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCUNS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'BTRANT' , 'SURFACE' , 'BTRAN' , +{{ HIST_CATCHCN }} 'SIF' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLOSS' , 'SURFACE' , 'CLOSS' , +{{ HIST_CATCHCN }} 'CNBURN' , 'SURFACE' , 'BURN' , +{{ HIST_CATCHCN }} 'CNFSEL' , 'SURFACE' , 'FSEL' , +{{ HIST_CATCHCN }} 'EVPICE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSNO' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPINT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPVEG' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRUST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPUNST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSURF' , 'SURFACE' , 'TSURF' , +{{ HIST_CATCHCN }} 'GHTSKIN' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WAT10CM' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WATSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'ICESOI' , 'SURFACE' , :: geosgcm_ocn.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_ocn.archive: '%c/Y%y4' , geosgcm_ocn.format: 'CFIO' , geosgcm_ocn.deflate: 1 , - geosgcm_ocn.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_ocn.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_ocn.regrid_method: 'BILINEAR', geosgcm_ocn.mode: 'time-averaged' , geosgcm_ocn.monthly: 1 , @@ -401,9 +401,9 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_meltwtr.archive: '%c/Y%y4' , geosgcm_meltwtr.format: 'CFIO' , geosgcm_meltwtr.deflate: 1 , - geosgcm_meltwtr.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_meltwtr.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_meltwtr.regrid_exch: 'tile.bin' , - geosgcm_meltwtr.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_meltwtr.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_meltwtr.regrid_method: 'BILINEAR', geosgcm_meltwtr.mode: 'time-averaged' , geosgcm_meltwtr.monthly: 1 , @@ -416,9 +416,9 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_landice.archive: '%c/Y%y4' , geosgcm_landice.format: 'CFIO' , geosgcm_landice.deflate: 1 , - geosgcm_landice.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_landice.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_landice.regrid_exch: 'tile.bin' , - geosgcm_landice.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_landice.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_landice.regrid_method: 'BILINEAR', geosgcm_landice.mode: 'time-averaged' , geosgcm_landice.monthly: 1 , @@ -451,9 +451,9 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_snowlayer.archive: '%c/Y%y4' , geosgcm_snowlayer.format: 'CFIO' , geosgcm_snowlayer.deflate: 1 , - geosgcm_snowlayer.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_snowlayer.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_snowlayer.regrid_exch: 'tile.bin' , - geosgcm_snowlayer.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_snowlayer.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_snowlayer.regrid_method: 'BILINEAR', geosgcm_snowlayer.mode: 'time-averaged' , geosgcm_snowlayer.monthly: 1 , @@ -475,7 +475,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_moist.archive: '%c/Y%y4' , geosgcm_moist.format: 'CFIO' , geosgcm_moist.deflate: 1 , - geosgcm_moist.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_moist.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_moist.regrid_method: 'BILINEAR', geosgcm_moist.mode: 'time-averaged' , geosgcm_moist.monthly: 1 , @@ -578,7 +578,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_turb.archive: '%c/Y%y4' , geosgcm_turb.format: 'CFIO' , geosgcm_turb.deflate: 1 , - geosgcm_turb.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_turb.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_turb.regrid_method: 'BILINEAR', geosgcm_turb.mode: 'time-averaged' , geosgcm_turb.monthly: 1 , @@ -609,7 +609,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_gwd.archive: '%c/Y%y4' , geosgcm_gwd.format: 'CFIO' , geosgcm_gwd.deflate: 1 , - geosgcm_gwd.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_gwd.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_gwd.regrid_method: 'BILINEAR', geosgcm_gwd.mode: 'time-averaged' , geosgcm_gwd.monthly: 1 , @@ -634,7 +634,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_tend.archive: '%c/Y%y4' , geosgcm_tend.format: 'CFIO' , geosgcm_tend.deflate: 1 , - geosgcm_tend.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_tend.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_tend.regrid_method: 'BILINEAR', geosgcm_tend.mode: 'time-averaged' , geosgcm_tend.monthly: 1 , @@ -672,7 +672,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_budi.archive: '%c/Y%y4' , geosgcm_budi.format: 'CFIO' , geosgcm_budi.deflate: 1 , - geosgcm_budi.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_budi.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_budi.regrid_method: 'CONSERVE', geosgcm_budi.frequency: 030000 , geosgcm_budi.ref_time: 210000 , @@ -690,7 +690,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_buda.archive: '%c/Y%y4' , geosgcm_buda.format: 'CFIO' , geosgcm_buda.deflate: 1 , - geosgcm_buda.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_buda.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_buda.regrid_method: 'CONSERVE', geosgcm_buda.mode: 'time-averaged' , geosgcm_buda.monthly: 1 , @@ -719,18 +719,18 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM 'DOXDTCHMINT' , 'PHYSICS' , 'DOXDTCHM' , :: - geosgcm_iau.template: '%y4%m2%d2_%h2%n2z.nc4' , - geosgcm_iau.archive: '%c/Y%y4' , - geosgcm_iau.format: 'CFIO' , - geosgcm_iau.deflate: 1 , - geosgcm_iau.grid_label: PC@CLIM_IMx@CLIM_JM-DC , - geosgcm_iau.regrid_method: 'BILINEAR' , - geosgcm_iau.mode: 'time-averaged' , -# geosgcm_iau.monthly: 1 , - geosgcm_iau.frequency: 060000 , - geosgcm_iau.ref_time: 210000 , - geosgcm_iau.vscale: 100.0 , - geosgcm_iau.vunit: 'hPa' , + geosgcm_iau.template: '%y4%m2%d2_%h2%n2z.nc4', + geosgcm_iau.archive: '%c/Y%y4', + geosgcm_iau.format: 'CFIO', + geosgcm_iau.deflate: 1, + geosgcm_iau.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC, + geosgcm_iau.regrid_method: 'BILINEAR', + geosgcm_iau.mode: 'time-averaged', +# geosgcm_iau.monthly: 1, + geosgcm_iau.frequency: 060000, + geosgcm_iau.ref_time: 210000, + geosgcm_iau.vscale: 100.0, + geosgcm_iau.vunit: 'hPa', geosgcm_iau.vvars: 'log(PLE)' , 'DYN' , geosgcm_iau.levels: 1000 975 950 925 900 875 850 825 800 775 750 725 700 650 600 550 500 450 400 350 300 250 200 150 100 70 50 40 30 20 10 7 5 4 3 2 1 0.7 0.5 0.4 0.3 0.2 0.1 0.07 0.05 0.04 0.03 0.02, geosgcm_iau.fields: 'DUDT_ANA;DVDT_ANA' , 'AGCM' , 'DUDTANA;DVDTANA' , @@ -752,7 +752,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_conv.archive: '%c/Y%y4' , geosgcm_conv.format: 'CFIO' , geosgcm_conv.deflate: 1 , - geosgcm_conv.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_conv.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_conv.regrid_method: 'BILINEAR', geosgcm_conv.frequency: 010000 , geosgcm_conv.ref_time: 210000 , @@ -778,7 +778,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_bud.archive: '%c/Y%y4' , geosgcm_bud.format: 'CFIO' , geosgcm_bud.deflate: 1 , - geosgcm_bud.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_bud.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_bud.regrid_method: 'BILINEAR', geosgcm_bud.mode: 'time-averaged' , geosgcm_bud.frequency: 240000 , @@ -829,9 +829,9 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM goswim_catch.archive: '%c/Y%y4' , goswim_catch.format: 'CFIO' , goswim_catch.deflate: 1 , - goswim_catch.regrid_name: '@AGCM_GRIDNAME' , + goswim_catch.regrid_name: '{{ AGCM_GRIDNAME }}' , goswim_catch.regrid_exch: 'tile.bin' , - goswim_catch.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + goswim_catch.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , goswim_catch.regrid_method: 'BILINEAR', goswim_catch.mode: 'time-averaged' , goswim_catch.frequency: 240000 , @@ -863,7 +863,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM goswim_land.archive: '%c/Y%y4' , goswim_land.format: 'CFIO' , goswim_land.deflate: 1 , - goswim_land.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + goswim_land.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , goswim_land.regrid_method: 'BILINEAR', goswim_land.mode: 'time-averaged' , goswim_land.frequency: 240000 , @@ -892,9 +892,9 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM goswim_landice.archive: '%c/Y%y4' , goswim_landice.format: 'CFIO' , goswim_landice.deflate: 1 , - goswim_landice.regrid_name: '@AGCM_GRIDNAME' + goswim_landice.regrid_name: '{{ AGCM_GRIDNAME }}' goswim_landice.regrid_exch: 'tile.bin' , - goswim_landice.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + goswim_landice.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , goswim_landice.regrid_method: 'BILINEAR', goswim_landice.mode: 'time-averaged' , goswim_landice.frequency: 240000 , @@ -917,17 +917,17 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM # #### GOCART - tavg2d_aer_x.template: '%y4%m2%d2_%h2%n2z.nc4' , - tavg2d_aer_x.archive: '%c/Y%y4' , - tavg2d_aer_x.format: 'CFIO' , - tavg2d_aer_x.deflate: 1 , - tavg2d_aer_x.grid_label: PC@CLIM_IMx@CLIM_JM-DC , - tavg2d_aer_x.mode: 'time-averaged' , - tavg2d_aer_x.monthly: 1 , -# tavg2d_aer_x.frequency: 240000 , -# tavg2d_aer_x.ref_time: 210000 , - tavg2d_aer_x.regrid_method: 'CONSERVE' , - tavg2d_aer_x.splitField: 1 , + tavg2d_aer_x.template: '%y4%m2%d2_%h2%n2z.nc4', + tavg2d_aer_x.archive: '%c/Y%y4', + tavg2d_aer_x.format: 'CFIO', + tavg2d_aer_x.deflate: 1, + tavg2d_aer_x.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC, + tavg2d_aer_x.mode: 'time-averaged', + tavg2d_aer_x.monthly: 1, +# tavg2d_aer_x.frequency: 240000, +# tavg2d_aer_x.ref_time: 210000, + tavg2d_aer_x.regrid_method: 'CONSERVE', + tavg2d_aer_x.splitField: 1, tavg2d_aer_x.fields: 'LWI' , 'SURFACE' , 'TOTEXTTAU' , 'GOCART2G' , 'TOTSCATAU' , 'GOCART2G' , @@ -1102,7 +1102,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM tavg3d_aer_p.archive: '%c/Y%y4' , tavg3d_aer_p.format: 'CFIO' , tavg3d_aer_p.deflate: 1 , - tavg3d_aer_p.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + tavg3d_aer_p.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , tavg3d_aer_p.mode: 'time-averaged' , tavg3d_aer_p.monthly: 1 , # tavg3d_aer_p.frequency: 240000 , @@ -1148,7 +1148,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM inst3d_aer_v.archive: '%c/Y%y4', inst3d_aer_v.frequency: 030000, inst3d_aer_v.ref_time: 000000, - inst3d_aer_v.grid_label: PC@HIST_IMx@HIST_JM-DC + inst3d_aer_v.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC inst3d_aer_v.mode: 'instantaneous', inst3d_aer_v.nbits: 12, # inst3d_aer_v.chunksize: 120 91 1 1, @@ -1195,7 +1195,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM inst2d_hwl_x.frequency: 010000, inst2d_hwl_x.duration: 010000, inst2d_hwl_x.ref_time: 000000, - inst2d_hwl_x.grid_label: PC@HIST_IMx@HIST_JM-DC + inst2d_hwl_x.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC inst2d_hwl_x.splitField: 1, inst2d_hwl_x.fields: 'SLP' , 'DYN' , 'TOTEXTTAU' , 'GOCART2G' , 'TOTEXTTAU470;TOTEXTTAU550;TOTEXTTAU870' , @@ -1236,7 +1236,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_tracer.archive: '%c/Y%y4' , geosgcm_tracer.format: 'CFIO' , geosgcm_tracer.deflate: 1 , - geosgcm_tracer.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_tracer.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_tracer.regrid_method: 'BILINEAR', geosgcm_tracer.mode: 'time-averaged' , geosgcm_tracer.monthly: 1 , @@ -1266,7 +1266,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_lidar.archive: '%c/Y%y4' , geosgcm_lidar.format: 'CFIO' , geosgcm_lidar.deflate: 1 , - geosgcm_lidar.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_lidar.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_lidar.regrid_method: 'BILINEAR', geosgcm_lidar.mode: 'time-averaged' , geosgcm_lidar.frequency: 030000 , @@ -1309,7 +1309,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_parasol.archive: '%c/Y%y4' , geosgcm_parasol.format: 'CFIO' , geosgcm_parasol.deflate: 1 , - geosgcm_parasol.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_parasol.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_parasol.regrid_method: 'BILINEAR', geosgcm_parasol.mode: 'time-averaged' , geosgcm_parasol.frequency: 030000 , @@ -1325,7 +1325,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_radar.archive: '%c/Y%y4' , geosgcm_radar.format: 'CFIO' , geosgcm_radar.deflate: 1 , - geosgcm_radar.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_radar.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_radar.regrid_method: 'BILINEAR', geosgcm_radar.mode: 'time-averaged' , geosgcm_radar.frequency: 030000 , @@ -1368,7 +1368,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_isccp.archive: '%c/Y%y4' , geosgcm_isccp.format: 'CFIO' , geosgcm_isccp.deflate: 1 , - geosgcm_isccp.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_isccp.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_isccp.regrid_method: 'BILINEAR', geosgcm_isccp.mode: 'time-averaged' , geosgcm_isccp.frequency: 030000 , @@ -1438,7 +1438,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_modis.archive: '%c/Y%y4' , geosgcm_modis.format: 'CFIO' , geosgcm_modis.deflate: 1 , - geosgcm_modis.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_modis.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_modis.regrid_method: 'BILINEAR', geosgcm_modis.mode: 'time-averaged' , geosgcm_modis.frequency: 030000 , @@ -1520,7 +1520,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_misr.archive: '%c/Y%y4' , geosgcm_misr.format: 'CFIO' , geosgcm_misr.deflate: 1 , - geosgcm_misr.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_misr.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_misr.regrid_method: 'BILINEAR', geosgcm_misr.mode: 'time-averaged' , geosgcm_misr.frequency: 030000 , @@ -1548,7 +1548,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM tavg6_2d_flx_Nx.format: 'CFIO' , - tavg6_2d_flx_Nx.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg6_2d_flx_Nx.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg6_2d_flx_Nx.template: '%y4%m2%d2_%h2%n2z.nc4' , tavg6_2d_flx_Nx.mode: 'time-averaged' , tavg6_2d_flx_Nx.frequency: 060000 , @@ -1603,7 +1603,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM :: inst3_2d_asm_Nx.format: 'CFIO' , - inst3_2d_asm_Nx.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_2d_asm_Nx.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_2d_asm_Nx.template: '%y4%m2%d2_%h2%n2z.nc4' , inst3_2d_asm_Nx.mode: 'instantaneous' , inst3_2d_asm_Nx.frequency: 030000 , @@ -1684,7 +1684,7 @@ PC@CLIM_IMx@CLIM_JM-DC.LM: @AGCM_LM geosgcm_tropvar.mode: 'time-averaged' , geosgcm_tropvar.frequency: 240000 , geosgcm_tropvar.ref_time: 210000 , - geosgcm_tropvar.grid_label: PC@CLIM_IMx@CLIM_JM-DC , + geosgcm_tropvar.grid_label: PC{{ CLIM_IM }}x{{ CLIM_JM }}-DC , geosgcm_tropvar.vscale: 100.0 , geosgcm_tropvar.vunit: 'hPa' , geosgcm_tropvar.vvars: 'log(PLE)' , 'DYN' , diff --git a/HISTORY.AOGCM-MOM5.rc.tmpl b/HISTORY.AOGCM-MOM5.rc.tmpl index b6b5ba4f..2b47ed0f 100644 --- a/HISTORY.AOGCM-MOM5.rc.tmpl +++ b/HISTORY.AOGCM-MOM5.rc.tmpl @@ -1,7 +1,7 @@ VERSION: 1 -EXPID: @EXPID -EXPDSC: @EXPDSC -EXPSRC: @EXPSRC +EXPID: {{ EXPID }} +EXPDSC: {{ EXPDSC }} +EXPSRC: {{ EXPSRC }} CONTACT: 'http://gmao.gsfc.nasa.gov' @@ -20,8 +20,8 @@ COLLECTIONS: 'geosgcm_prog' # 'geosgcm_meltwtr' # 'geosgcm_snowlayer' 'geosgcm_tracer' -@HIST_GOCART 'tavg2d_aer_x' -@HIST_GOCART 'tavg3d_aer_p' + {{ HIST_GOCART }} 'tavg2d_aer_x' + {{ HIST_GOCART }} 'tavg3d_aer_p' # 'geosgcm_iau' # 'geosgcm_conv' # 'goswim_catch' @@ -56,22 +56,22 @@ COLLECTIONS: 'geosgcm_prog' # list of COLLECTIONS for scripting purposes. # ################################################## -GRID_LABELS: PC@HIST_IMx@HIST_JM-DC +GRID_LABELS: PC{{ HIST_IM }}x{{ HIST_JM }}-DC :: -PC@HIST_IMx@HIST_JM-DC.GRID_TYPE: LatLon -PC@HIST_IMx@HIST_JM-DC.IM_WORLD: @HIST_IM -PC@HIST_IMx@HIST_JM-DC.JM_WORLD: @HIST_JM -PC@HIST_IMx@HIST_JM-DC.POLE: PC -PC@HIST_IMx@HIST_JM-DC.DATELINE: DC -PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.GRID_TYPE: LatLon +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.IM_WORLD: {{ HIST_IM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.JM_WORLD: {{ HIST_JM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.POLE: PC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.DATELINE: DC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.LM: {{ AGCM_LM }} geosgcm_prog.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_prog.archive: '%c/Y%y4' , geosgcm_prog.format: 'CFIO' , geosgcm_prog.deflate: 1 , - geosgcm_prog.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_prog.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_prog.regrid_method: 'BILINEAR', geosgcm_prog.frequency: 060000 , geosgcm_prog.vscale: 100.0 , @@ -96,7 +96,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM prog.eta.archive: '%c/Y%y4' , prog.eta.format: 'CFIO' , prog.eta.deflate: 1 , - prog.eta.grid_label: PC@HIST_IMx@HIST_JM-DC , + prog.eta.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , prog.eta.regrid_method: 'BILINEAR', prog.eta.mode: 'instantaneous' , prog.eta.frequency: 060000 , @@ -126,7 +126,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_surf.archive: '%c/Y%y4' , geosgcm_surf.format: 'CFIO' , geosgcm_surf.deflate: 1 , - geosgcm_surf.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_surf.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_surf.regrid_method: 'BILINEAR', geosgcm_surf.mode: 'time-averaged' , geosgcm_surf.monthly: 1 , @@ -280,51 +280,51 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM 'PHIW' , 'SURFACE' , 'TAUTW' , 'SURFACE' , 'ZETA_W' , 'SURFACE' , -@HIST_CATCHCN 'CNLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNSAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNVEGC' , 'SURFACE' , -@HIST_CATCHCN 'CNROOT' , 'SURFACE' , -@HIST_CATCHCN 'CNFROOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNNPP' , 'SURFACE' , -@HIST_CATCHCN 'CNGPP' , 'SURFACE' , -@HIST_CATCHCN 'CNSR' , 'SURFACE' , -@HIST_CATCHCN 'CNNEE' , 'SURFACE' , -@HIST_CATCHCN 'CNXSMR' , 'SURFACE' , -@HIST_CATCHCN 'CNADD' , 'SURFACE' , -@HIST_CATCHCN 'PARABS' , 'SURFACE' , -@HIST_CATCHCN 'PARINC' , 'SURFACE' , -@HIST_CATCHCN 'SCSAT' , 'SURFACE' , -@HIST_CATCHCN 'SCUNS' , 'SURFACE' , -@HIST_CATCHCN 'BTRANT' , 'SURFACE' , 'BTRAN' , -@HIST_CATCHCN 'SIF' , 'SURFACE' , -@HIST_CATCHCN 'CNLOSS' , 'SURFACE' , 'CLOSS' , -@HIST_CATCHCN 'CNBURN' , 'SURFACE' , 'BURN' , -@HIST_CATCHCN 'CNFSEL' , 'SURFACE' , 'FSEL' , -@HIST_CATCHCN 'EVPICE' , 'SURFACE' , -@HIST_CATCHCN 'EVPSNO' , 'SURFACE' , -@HIST_CATCHCN 'EVPINT' , 'SURFACE' , -@HIST_CATCHCN 'EVPSOI' , 'SURFACE' , -@HIST_CATCHCN 'EVPVEG' , 'SURFACE' , -@HIST_CATCHCN 'FRSAT' , 'SURFACE' , -@HIST_CATCHCN 'FRUST' , 'SURFACE' , -@HIST_CATCHCN 'FRWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSAT' , 'SURFACE' , -@HIST_CATCHCN 'TPUNST' , 'SURFACE' , -@HIST_CATCHCN 'TPWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSURF' , 'SURFACE' , 'TSURF' , -@HIST_CATCHCN 'GHTSKIN' , 'SURFACE' , -@HIST_CATCHCN 'WAT10CM' , 'SURFACE' , -@HIST_CATCHCN 'WATSOI' , 'SURFACE' , -@HIST_CATCHCN 'ICESOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNVEGC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNROOT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNFROOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNGPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNEE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNXSMR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNADD' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARABS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARINC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCUNS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'BTRANT' , 'SURFACE' , 'BTRAN' , +{{ HIST_CATCHCN }} 'SIF' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLOSS' , 'SURFACE' , 'CLOSS' , +{{ HIST_CATCHCN }} 'CNBURN' , 'SURFACE' , 'BURN' , +{{ HIST_CATCHCN }} 'CNFSEL' , 'SURFACE' , 'FSEL' , +{{ HIST_CATCHCN }} 'EVPICE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSNO' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPINT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPVEG' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRUST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPUNST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSURF' , 'SURFACE' , 'TSURF' , +{{ HIST_CATCHCN }} 'GHTSKIN' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WAT10CM' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WATSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'ICESOI' , 'SURFACE' , :: geosgcm_ocn.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_ocn.archive: '%c/Y%y4' , geosgcm_ocn.format: 'CFIO' , geosgcm_ocn.deflate: 1 , - geosgcm_ocn.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_ocn.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_ocn.regrid_method: 'BILINEAR', geosgcm_ocn.mode: 'time-averaged' , geosgcm_ocn.monthly: 1 , @@ -383,9 +383,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_meltwtr.archive: '%c/Y%y4' , geosgcm_meltwtr.format: 'CFIO' , geosgcm_meltwtr.deflate: 1 , - geosgcm_meltwtr.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_meltwtr.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_meltwtr.regrid_exch: 'tile.bin' , - geosgcm_meltwtr.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_meltwtr.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_meltwtr.regrid_method: 'BILINEAR', geosgcm_meltwtr.mode: 'time-averaged' , geosgcm_meltwtr.monthly: 1 , @@ -398,9 +398,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_landice.archive: '%c/Y%y4' , geosgcm_landice.format: 'CFIO' , geosgcm_landice.deflate: 1 , - geosgcm_landice.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_landice.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_landice.regrid_exch: 'tile.bin' , - geosgcm_landice.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_landice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_landice.regrid_method: 'BILINEAR', geosgcm_landice.mode: 'time-averaged' , geosgcm_landice.monthly: 1 , @@ -433,9 +433,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_snowlayer.archive: '%c/Y%y4' , geosgcm_snowlayer.format: 'CFIO' , geosgcm_snowlayer.deflate: 1 , - geosgcm_snowlayer.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_snowlayer.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_snowlayer.regrid_exch: 'tile.bin' , - geosgcm_snowlayer.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_snowlayer.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_snowlayer.regrid_method: 'BILINEAR', geosgcm_snowlayer.mode: 'time-averaged' , geosgcm_snowlayer.monthly: 1 , @@ -457,7 +457,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_moist.archive: '%c/Y%y4' , geosgcm_moist.format: 'CFIO' , geosgcm_moist.deflate: 1 , - geosgcm_moist.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_moist.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_moist.regrid_method: 'BILINEAR', geosgcm_moist.mode: 'time-averaged' , geosgcm_moist.monthly: 1 , @@ -498,7 +498,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_turb.archive: '%c/Y%y4' , geosgcm_turb.format: 'CFIO' , geosgcm_turb.deflate: 1 , - geosgcm_turb.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_turb.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_turb.regrid_method: 'BILINEAR', geosgcm_turb.mode: 'time-averaged' , geosgcm_turb.monthly: 1 , @@ -529,7 +529,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_gwd.archive: '%c/Y%y4' , geosgcm_gwd.format: 'CFIO' , geosgcm_gwd.deflate: 1 , - geosgcm_gwd.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_gwd.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_gwd.regrid_method: 'BILINEAR', geosgcm_gwd.mode: 'time-averaged' , geosgcm_gwd.monthly: 1 , @@ -553,7 +553,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_tend.archive: '%c/Y%y4' , geosgcm_tend.format: 'CFIO' , geosgcm_tend.deflate: 1 , - geosgcm_tend.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_tend.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_tend.regrid_method: 'BILINEAR', geosgcm_tend.mode: 'time-averaged' , geosgcm_tend.monthly: 1 , @@ -590,7 +590,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_budi.archive: '%c/Y%y4' , geosgcm_budi.format: 'CFIO' , geosgcm_budi.deflate: 1 , - geosgcm_budi.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_budi.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_budi.regrid_method: 'CONSERVE', geosgcm_budi.frequency: 030000 , geosgcm_budi.fields: 'TQV' , 'AGCM' , @@ -604,7 +604,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_buda.archive: '%c/Y%y4' , geosgcm_buda.format: 'CFIO' , geosgcm_buda.deflate: 1 , - geosgcm_buda.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_buda.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_buda.regrid_method: 'CONSERVE', geosgcm_buda.mode: 'time-averaged' , geosgcm_buda.monthly: 1 , @@ -636,7 +636,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iau.archive: '%c/Y%y4' , geosgcm_iau.format: 'CFIO' , geosgcm_iau.deflate: 1 , - geosgcm_iau.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_iau.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_iau.regrid_method: 'BILINEAR', geosgcm_iau.mode: 'time-averaged' , # geosgcm_iau.monthly: 1 , @@ -660,7 +660,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_conv.archive: '%c/Y%y4' , geosgcm_conv.format: 'CFIO' , geosgcm_conv.deflate: 1 , - geosgcm_conv.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_conv.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_conv.regrid_method: 'BILINEAR', geosgcm_conv.frequency: 010000 , geosgcm_conv.fields: 'TQV' , 'AGCM' , @@ -685,7 +685,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_bud.archive: '%c/Y%y4' , geosgcm_bud.format: 'CFIO' , geosgcm_bud.deflate: 1 , - geosgcm_bud.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_bud.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_bud.regrid_method: 'BILINEAR', geosgcm_bud.mode: 'time-averaged' , geosgcm_bud.frequency: 240000 , @@ -736,9 +736,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_catch.archive: '%c/Y%y4' , goswim_catch.format: 'CFIO' , goswim_catch.deflate: 1 , - goswim_catch.regrid_name: '@AGCM_GRIDNAME' , + goswim_catch.regrid_name: '{{ AGCM_GRIDNAME }}' , goswim_catch.regrid_exch: 'tile.bin' , - goswim_catch.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_catch.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_catch.regrid_method: 'BILINEAR', goswim_catch.mode: 'time-averaged' , goswim_catch.frequency: 240000 , @@ -770,7 +770,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_land.archive: '%c/Y%y4' , goswim_land.format: 'CFIO' , goswim_land.deflate: 1 , - goswim_land.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_land.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_land.regrid_method: 'BILINEAR', goswim_land.mode: 'time-averaged' , goswim_land.frequency: 240000 , @@ -799,9 +799,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_landice.archive: '%c/Y%y4' , goswim_landice.format: 'CFIO' , goswim_landice.deflate: 1 , - goswim_landice.regrid_name: '@AGCM_GRIDNAME' + goswim_landice.regrid_name: '{{ AGCM_GRIDNAME }}' goswim_landice.regrid_exch: 'tile.bin' , - goswim_landice.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_landice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_landice.regrid_method: 'BILINEAR', goswim_landice.mode: 'time-averaged' , goswim_landice.frequency: 240000 , @@ -828,7 +828,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM tavg2d_aer_x.archive: '%c/Y%y4', tavg2d_aer_x.format: 'CFIO', tavg2d_aer_x.deflate: 1, - tavg2d_aer_x.grid_label: PC@HIST_IMx@HIST_JM-DC, + tavg2d_aer_x.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, tavg2d_aer_x.mode: 'time-averaged', tavg2d_aer_x.monthly: 1, # tavg2d_aer_x.frequency: 240000, @@ -1007,7 +1007,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM tavg3d_aer_p.archive: '%c/Y%y4', tavg3d_aer_p.format: 'CFIO', tavg3d_aer_p.deflate: 1, - tavg3d_aer_p.grid_label: PC@HIST_IMx@HIST_JM-DC, + tavg3d_aer_p.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, tavg3d_aer_p.mode: 'time-averaged', tavg3d_aer_p.monthly: 1, # tavg3d_aer_p.frequency: 240000, @@ -1027,17 +1027,17 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM 'CA.bcMASS' , 'CA.bc' , 'BC' , 'CA.ocMASS' , 'CA.oc' , 'OC' , 'CA.brMASS' , 'CA.br' , 'BR' , - 'SO2' , 'SU' , - 'SO4' , 'SU' , + 'SO2' , 'SU' , + 'SO4' , 'SU' , 'NH3MASS' , 'NI' , 'NH3' , 'NH4MASS' , 'NI' , 'NH4' , 'NIMASS' , 'NI' , 'NI' , 'HNO3CONC' , 'NI' , 'NICONC' , 'NI' , - 'DUEXTCOEF' , 'DU' , - 'SSEXTCOEF' , 'SS' , - 'SUEXTCOEF' , 'SU' , - 'NIEXTCOEF' , 'NI' , + 'DUEXTCOEF' , 'DU' , + 'SSEXTCOEF' , 'SS' , + 'SUEXTCOEF' , 'SU' , + 'NIEXTCOEF' , 'NI' , 'CA.bcEXTCOEF' , 'CA.bc' , 'BCEXTCOEF' , 'CA.brEXTCOEF' , 'CA.br' , 'BREXTCOEF' , 'CA.ocEXTCOEF' , 'CA.oc' , 'OCEXTCOEF' , @@ -1052,7 +1052,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_tracer.archive: '%c/Y%y4' , geosgcm_tracer.format: 'CFIO' , geosgcm_tracer.deflate: 1 , - geosgcm_tracer.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_tracer.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_tracer.regrid_method: 'BILINEAR', geosgcm_tracer.mode: 'time-averaged' , geosgcm_tracer.monthly: 1 , @@ -1082,7 +1082,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_lidar.archive: '%c/Y%y4' , geosgcm_lidar.format: 'CFIO' , geosgcm_lidar.deflate: 1 , - geosgcm_lidar.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_lidar.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_lidar.regrid_method: 'BILINEAR', geosgcm_lidar.mode: 'time-averaged' , geosgcm_lidar.frequency: 030000 , @@ -1125,7 +1125,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_parasol.archive: '%c/Y%y4' , geosgcm_parasol.format: 'CFIO' , geosgcm_parasol.deflate: 1 , - geosgcm_parasol.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_parasol.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_parasol.regrid_method: 'BILINEAR', geosgcm_parasol.mode: 'time-averaged' , geosgcm_parasol.frequency: 030000 , @@ -1141,7 +1141,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_radar.archive: '%c/Y%y4' , geosgcm_radar.format: 'CFIO' , geosgcm_radar.deflate: 1 , - geosgcm_radar.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_radar.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_radar.regrid_method: 'BILINEAR', geosgcm_radar.mode: 'time-averaged' , geosgcm_radar.frequency: 030000 , @@ -1184,7 +1184,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_isccp.archive: '%c/Y%y4' , geosgcm_isccp.format: 'CFIO' , geosgcm_isccp.deflate: 1 , - geosgcm_isccp.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_isccp.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_isccp.regrid_method: 'BILINEAR', geosgcm_isccp.mode: 'time-averaged' , geosgcm_isccp.frequency: 030000 , @@ -1254,7 +1254,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_modis.archive: '%c/Y%y4' , geosgcm_modis.format: 'CFIO' , geosgcm_modis.deflate: 1 , - geosgcm_modis.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_modis.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_modis.regrid_method: 'BILINEAR', geosgcm_modis.mode: 'time-averaged' , geosgcm_modis.frequency: 030000 , @@ -1336,7 +1336,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_misr.archive: '%c/Y%y4' , geosgcm_misr.format: 'CFIO' , geosgcm_misr.deflate: 1 , - geosgcm_misr.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_misr.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_misr.regrid_method: 'BILINEAR', geosgcm_misr.mode: 'time-averaged' , geosgcm_misr.frequency: 030000 , @@ -1370,7 +1370,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_rad.archive: '%c/Y%y4', geosgcm_rad.format: 'CFIO', geosgcm_rad.deflate: 1 , - geosgcm_rad.grid_label: PC@HIST_IMx@HIST_JM-DC, + geosgcm_rad.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, geosgcm_rad.regrid_method: 'BILINEAR', geosgcm_rad.mode: 'time-averaged', geosgcm_rad.monthly: 1, @@ -1423,7 +1423,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_int.archive: '%c/Y%y4', geosgcm_int.format: 'CFIO' , geosgcm_int.deflate: 1 , - geosgcm_int.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_int.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_int.regrid_method: 'BILINEAR', geosgcm_int.mode: 'time-averaged' , geosgcm_int.monthly: 1 , @@ -1449,7 +1449,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_seaice.archive: '%c/Y%y4', geosgcm_seaice.format: 'CFIO', geosgcm_seaice.deflate: 1 , -# geosgcm_seaice.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_seaice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_seaice.regrid_method: 'BILINEAR', geosgcm_seaice.mode: 'time-averaged' , geosgcm_seaice.monthly: 1 , @@ -1497,13 +1497,13 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_icethm.archive: '%c/Y%y4', geosgcm_icethm.format: 'CFIO', geosgcm_icethm.deflate: 1 , -# geosgcm_icethm.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_icethm.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_icethm.regrid_method: 'BILINEAR', geosgcm_icethm.mode: 'time-averaged' , geosgcm_icethm.monthly: 1 , # geosgcm_icethm.frequency: 240000, geosgcm_icethm.regrid_exch:'tile.bin', - geosgcm_icethm.regrid_name:'@OGCM_GRIDNAME', + geosgcm_icethm.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_icethm.fields: 'DVIDTT' , 'SEAICETHERMO', 'dvidtt', 'DAIDTT' , 'SEAICETHERMO', 'daidtt', 'FBOT' , 'SEAICETHERMO', 'fbot', @@ -1526,11 +1526,11 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_ocn3d.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_ocn3d.archive: '%c/Y%y4', - geosgcm_ocn3d.format: 'CFIO', + geosgcm_ocn3d.format: 'CFIO', geosgcm_ocn3d.deflate: 1 , geosgcm_ocn3d.monthly: 1 , geosgcm_ocn3d.mode: 'time-averaged', - geosgcm_ocn3d.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_ocn3d.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_ocn3d.levels: 'vgrid.ascii' geosgcm_ocn3d.fields: 'DH' , 'MOM', 'T' , 'MOM', @@ -1549,7 +1549,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_ocn2d.deflate: 1 , geosgcm_ocn2d.monthly: 1 , geosgcm_ocn2d.mode: 'time-averaged', - geosgcm_ocn2d.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_ocn2d.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_ocn2d.fields: 'UW' , 'MOM', 'US' 'VW' , 'MOM', 'VS' 'TW' , 'MOM', 'TS' @@ -1579,7 +1579,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_ocn3dT.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_ocn3dT.archive: '%c/Y%y4', - geosgcm_ocn3dT.format: 'CFIO', + geosgcm_ocn3dT.format: 'CFIO', geosgcm_ocn3dT.deflate: 1 , geosgcm_ocn3dT.monthly: 1 , geosgcm_ocn3dT.mode: 'time-averaged', @@ -1633,13 +1633,13 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_aoflux.archive: '%c/Y%y4', geosgcm_aoflux.format: 'CFIO', geosgcm_aoflux.deflate: 1 , -# geosgcm_aoflux.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_aoflux.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_aoflux.regrid_method: 'BILINEAR', geosgcm_aoflux.mode: 'time-averaged' , geosgcm_aoflux.monthly: 1 , geosgcm_aoflux.frequency: 240000, # geosgcm_aoflux.regrid_exch:'tile.bin', - geosgcm_aoflux.regrid_name:'@OGCM_GRIDNAME', + geosgcm_aoflux.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_aoflux.fields: 'TS_FOUND' , 'OPENWATER', 'SS_FOUND' , 'OPENWATER', 'AO_DRNIR' , 'OPENWATER', @@ -1703,7 +1703,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iceflxn.mode: 'time-averaged', # geosgcm_iceflxn.frequency: 240000, geosgcm_iceflxn.regrid_exch:'tile.bin', - geosgcm_iceflxn.regrid_name:'@OGCM_GRIDNAME', + geosgcm_iceflxn.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_iceflxn.fields: 'FCONDBOTN' , 'SEAICETHERMO', 'fcondbotn', 'SHICEN' , 'SEAICETHERMO', 'FSWSFCN' , 'SEAICETHERMO', @@ -1719,12 +1719,12 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iceflx.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_iceflx.archive: '%c/Y%y4', geosgcm_iceflx.format: 'CFIO', - geosgcm_iceflx.deflate: 1, - geosgcm_iceflx.monthly: 1, + geosgcm_iceflx.deflate: 1, + geosgcm_iceflx.monthly: 1, geosgcm_iceflx.mode: 'time-averaged', # geosgcm_iceflx.frequency: 240000, geosgcm_iceflx.regrid_exch:'tile.bin', - geosgcm_iceflx.regrid_name:'@OGCM_GRIDNAME', + geosgcm_iceflx.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_iceflx.fields: 'LWDNSRF' , 'SEAICETHERMO', 'SWDNSRF' , 'SEAICETHERMO', 'HLWUPICE' , 'SEAICETHERMO', diff --git a/HISTORY.AOGCM.rc.tmpl b/HISTORY.AOGCM.rc.tmpl index 834a2b2d..4f5f94e9 100644 --- a/HISTORY.AOGCM.rc.tmpl +++ b/HISTORY.AOGCM.rc.tmpl @@ -1,7 +1,7 @@ VERSION: 1 -EXPID: @EXPID -EXPDSC: @EXPDSC -EXPSRC: @EXPSRC +EXPID: {{ EXPID }} +EXPDSC: {{ EXPDSC }} +EXPSRC: {{ EXPSRC }} CONTACT: 'http://gmao.gsfc.nasa.gov' @@ -20,8 +20,8 @@ COLLECTIONS: 'geosgcm_prog' # 'geosgcm_meltwtr' # 'geosgcm_snowlayer' 'geosgcm_tracer' -@HIST_GOCART 'tavg2d_aer_x' -@HIST_GOCART 'tavg3d_aer_p' + {{ HIST_GOCART }} 'tavg2d_aer_x' + {{ HIST_GOCART }} 'tavg3d_aer_p' # 'geosgcm_iau' # 'geosgcm_conv' # 'goswim_catch' @@ -39,7 +39,7 @@ COLLECTIONS: 'geosgcm_prog' 'geosgcm_rad' # 'geosgcm_int' 'geosgcm_seaice' -@HIST_CICE4 'geosgcm_icethm' + {{ HIST_CICE4 }} 'geosgcm_icethm' 'geosgcm_ocn2dT' # 'geosgcm_aoflux' # 'geosgcm_icecat' @@ -53,22 +53,22 @@ COLLECTIONS: 'geosgcm_prog' # list of COLLECTIONS for scripting purposes. # ################################################## -GRID_LABELS: PC@HIST_IMx@HIST_JM-DC +GRID_LABELS: PC{{ HIST_IM }}x{{ HIST_JM }}-DC :: -PC@HIST_IMx@HIST_JM-DC.GRID_TYPE: LatLon -PC@HIST_IMx@HIST_JM-DC.IM_WORLD: @HIST_IM -PC@HIST_IMx@HIST_JM-DC.JM_WORLD: @HIST_JM -PC@HIST_IMx@HIST_JM-DC.POLE: PC -PC@HIST_IMx@HIST_JM-DC.DATELINE: DC -PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.GRID_TYPE: LatLon +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.IM_WORLD: {{ HIST_IM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.JM_WORLD: {{ HIST_JM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.POLE: PC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.DATELINE: DC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.LM: {{ AGCM_LM }} geosgcm_prog.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_prog.archive: '%c/Y%y4' , geosgcm_prog.format: 'CFIO' , geosgcm_prog.deflate: 1 , - geosgcm_prog.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_prog.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_prog.regrid_method: 'BILINEAR', geosgcm_prog.frequency: 060000 , geosgcm_prog.vscale: 100.0 , @@ -93,7 +93,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM prog.eta.archive: '%c/Y%y4' , prog.eta.format: 'CFIO' , prog.eta.deflate: 1 , - prog.eta.grid_label: PC@HIST_IMx@HIST_JM-DC , + prog.eta.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , prog.eta.regrid_method: 'BILINEAR', prog.eta.mode: 'instantaneous' , prog.eta.frequency: 060000 , @@ -123,7 +123,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_surf.archive: '%c/Y%y4' , geosgcm_surf.format: 'CFIO' , geosgcm_surf.deflate: 1 , - geosgcm_surf.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_surf.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_surf.regrid_method: 'BILINEAR', geosgcm_surf.mode: 'time-averaged' , geosgcm_surf.monthly: 1 , @@ -277,51 +277,51 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM 'PHIW' , 'SURFACE' , 'TAUTW' , 'SURFACE' , 'ZETA_W' , 'SURFACE' , -@HIST_CATCHCN 'CNLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTLAI' , 'SURFACE' , -@HIST_CATCHCN 'CNSAI' , 'SURFACE' , -@HIST_CATCHCN 'CNTOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNVEGC' , 'SURFACE' , -@HIST_CATCHCN 'CNROOT' , 'SURFACE' , -@HIST_CATCHCN 'CNFROOTC' , 'SURFACE' , -@HIST_CATCHCN 'CNNPP' , 'SURFACE' , -@HIST_CATCHCN 'CNGPP' , 'SURFACE' , -@HIST_CATCHCN 'CNSR' , 'SURFACE' , -@HIST_CATCHCN 'CNNEE' , 'SURFACE' , -@HIST_CATCHCN 'CNXSMR' , 'SURFACE' , -@HIST_CATCHCN 'CNADD' , 'SURFACE' , -@HIST_CATCHCN 'PARABS' , 'SURFACE' , -@HIST_CATCHCN 'PARINC' , 'SURFACE' , -@HIST_CATCHCN 'SCSAT' , 'SURFACE' , -@HIST_CATCHCN 'SCUNS' , 'SURFACE' , -@HIST_CATCHCN 'BTRANT' , 'SURFACE' , 'BTRAN' , -@HIST_CATCHCN 'SIF' , 'SURFACE' , -@HIST_CATCHCN 'CNLOSS' , 'SURFACE' , 'CLOSS' , -@HIST_CATCHCN 'CNBURN' , 'SURFACE' , 'BURN' , -@HIST_CATCHCN 'CNFSEL' , 'SURFACE' , 'FSEL' , -@HIST_CATCHCN 'EVPICE' , 'SURFACE' , -@HIST_CATCHCN 'EVPSNO' , 'SURFACE' , -@HIST_CATCHCN 'EVPINT' , 'SURFACE' , -@HIST_CATCHCN 'EVPSOI' , 'SURFACE' , -@HIST_CATCHCN 'EVPVEG' , 'SURFACE' , -@HIST_CATCHCN 'FRSAT' , 'SURFACE' , -@HIST_CATCHCN 'FRUST' , 'SURFACE' , -@HIST_CATCHCN 'FRWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSAT' , 'SURFACE' , -@HIST_CATCHCN 'TPUNST' , 'SURFACE' , -@HIST_CATCHCN 'TPWLT' , 'SURFACE' , -@HIST_CATCHCN 'TPSURF' , 'SURFACE' , 'TSURF' , -@HIST_CATCHCN 'GHTSKIN' , 'SURFACE' , -@HIST_CATCHCN 'WAT10CM' , 'SURFACE' , -@HIST_CATCHCN 'WATSOI' , 'SURFACE' , -@HIST_CATCHCN 'ICESOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTLAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSAI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNTOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNVEGC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNROOT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNFROOTC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNGPP' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNSR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNNEE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNXSMR' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNADD' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARABS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'PARINC' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'SCUNS' , 'SURFACE' , +{{ HIST_CATCHCN }} 'BTRANT' , 'SURFACE' , 'BTRAN' , +{{ HIST_CATCHCN }} 'SIF' , 'SURFACE' , +{{ HIST_CATCHCN }} 'CNLOSS' , 'SURFACE' , 'CLOSS' , +{{ HIST_CATCHCN }} 'CNBURN' , 'SURFACE' , 'BURN' , +{{ HIST_CATCHCN }} 'CNFSEL' , 'SURFACE' , 'FSEL' , +{{ HIST_CATCHCN }} 'EVPICE' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSNO' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPINT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'EVPVEG' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRUST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'FRWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSAT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPUNST' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPWLT' , 'SURFACE' , +{{ HIST_CATCHCN }} 'TPSURF' , 'SURFACE' , 'TSURF' , +{{ HIST_CATCHCN }} 'GHTSKIN' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WAT10CM' , 'SURFACE' , +{{ HIST_CATCHCN }} 'WATSOI' , 'SURFACE' , +{{ HIST_CATCHCN }} 'ICESOI' , 'SURFACE' , :: geosgcm_ocn.template: '%y4%m2%d2_%h2%n2z.nc4' , geosgcm_ocn.archive: '%c/Y%y4' , geosgcm_ocn.format: 'CFIO' , geosgcm_ocn.deflate: 1 , - geosgcm_ocn.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_ocn.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_ocn.regrid_method: 'BILINEAR', geosgcm_ocn.mode: 'time-averaged' , geosgcm_ocn.monthly: 1 , @@ -380,9 +380,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_meltwtr.archive: '%c/Y%y4' , geosgcm_meltwtr.format: 'CFIO' , geosgcm_meltwtr.deflate: 1 , - geosgcm_meltwtr.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_meltwtr.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_meltwtr.regrid_exch: 'tile.bin' , - geosgcm_meltwtr.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_meltwtr.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_meltwtr.regrid_method: 'BILINEAR', geosgcm_meltwtr.mode: 'time-averaged' , geosgcm_meltwtr.monthly: 1 , @@ -395,9 +395,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_landice.archive: '%c/Y%y4' , geosgcm_landice.format: 'CFIO' , geosgcm_landice.deflate: 1 , - geosgcm_landice.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_landice.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_landice.regrid_exch: 'tile.bin' , - geosgcm_landice.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_landice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_landice.regrid_method: 'BILINEAR', geosgcm_landice.mode: 'time-averaged' , geosgcm_landice.monthly: 1 , @@ -430,9 +430,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_snowlayer.archive: '%c/Y%y4' , geosgcm_snowlayer.format: 'CFIO' , geosgcm_snowlayer.deflate: 1 , - geosgcm_snowlayer.regrid_name: '@AGCM_GRIDNAME' , + geosgcm_snowlayer.regrid_name: '{{ AGCM_GRIDNAME }}' , geosgcm_snowlayer.regrid_exch: 'tile.bin' , - geosgcm_snowlayer.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_snowlayer.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_snowlayer.regrid_method: 'BILINEAR', geosgcm_snowlayer.mode: 'time-averaged' , geosgcm_snowlayer.monthly: 1 , @@ -454,7 +454,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_moist.archive: '%c/Y%y4' , geosgcm_moist.format: 'CFIO' , geosgcm_moist.deflate: 1 , - geosgcm_moist.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_moist.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_moist.regrid_method: 'BILINEAR', geosgcm_moist.mode: 'time-averaged' , geosgcm_moist.monthly: 1 , @@ -495,7 +495,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_turb.archive: '%c/Y%y4' , geosgcm_turb.format: 'CFIO' , geosgcm_turb.deflate: 1 , - geosgcm_turb.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_turb.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_turb.regrid_method: 'BILINEAR', geosgcm_turb.mode: 'time-averaged' , geosgcm_turb.monthly: 1 , @@ -526,7 +526,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_gwd.archive: '%c/Y%y4' , geosgcm_gwd.format: 'CFIO' , geosgcm_gwd.deflate: 1 , - geosgcm_gwd.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_gwd.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_gwd.regrid_method: 'BILINEAR', geosgcm_gwd.mode: 'time-averaged' , geosgcm_gwd.monthly: 1 , @@ -550,7 +550,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_tend.archive: '%c/Y%y4' , geosgcm_tend.format: 'CFIO' , geosgcm_tend.deflate: 1 , - geosgcm_tend.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_tend.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_tend.regrid_method: 'BILINEAR', geosgcm_tend.mode: 'time-averaged' , geosgcm_tend.monthly: 1 , @@ -587,7 +587,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_budi.archive: '%c/Y%y4' , geosgcm_budi.format: 'CFIO' , geosgcm_budi.deflate: 1 , - geosgcm_budi.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_budi.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_budi.regrid_method: 'CONSERVE', geosgcm_budi.frequency: 030000 , geosgcm_budi.fields: 'TQV' , 'AGCM' , @@ -601,7 +601,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_buda.archive: '%c/Y%y4' , geosgcm_buda.format: 'CFIO' , geosgcm_buda.deflate: 1 , - geosgcm_buda.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_buda.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_buda.regrid_method: 'CONSERVE', geosgcm_buda.mode: 'time-averaged' , geosgcm_buda.monthly: 1 , @@ -633,7 +633,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iau.archive: '%c/Y%y4' , geosgcm_iau.format: 'CFIO' , geosgcm_iau.deflate: 1 , - geosgcm_iau.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_iau.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_iau.regrid_method: 'BILINEAR', geosgcm_iau.mode: 'time-averaged' , # geosgcm_iau.monthly: 1 , @@ -657,7 +657,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_conv.archive: '%c/Y%y4' , geosgcm_conv.format: 'CFIO' , geosgcm_conv.deflate: 1 , - geosgcm_conv.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_conv.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_conv.regrid_method: 'BILINEAR', geosgcm_conv.frequency: 010000 , geosgcm_conv.fields: 'TQV' , 'AGCM' , @@ -682,7 +682,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_bud.archive: '%c/Y%y4' , geosgcm_bud.format: 'CFIO' , geosgcm_bud.deflate: 1 , - geosgcm_bud.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_bud.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_bud.regrid_method: 'BILINEAR', geosgcm_bud.mode: 'time-averaged' , geosgcm_bud.frequency: 240000 , @@ -733,9 +733,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_catch.archive: '%c/Y%y4' , goswim_catch.format: 'CFIO' , goswim_catch.deflate: 1 , - goswim_catch.regrid_name: '@AGCM_GRIDNAME' , + goswim_catch.regrid_name: '{{ AGCM_GRIDNAME }}' , goswim_catch.regrid_exch: 'tile.bin' , - goswim_catch.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_catch.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_catch.regrid_method: 'BILINEAR', goswim_catch.mode: 'time-averaged' , goswim_catch.frequency: 240000 , @@ -767,7 +767,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_land.archive: '%c/Y%y4' , goswim_land.format: 'CFIO' , goswim_land.deflate: 1 , - goswim_land.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_land.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_land.regrid_method: 'BILINEAR', goswim_land.mode: 'time-averaged' , goswim_land.frequency: 240000 , @@ -796,9 +796,9 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM goswim_landice.archive: '%c/Y%y4' , goswim_landice.format: 'CFIO' , goswim_landice.deflate: 1 , - goswim_landice.regrid_name: '@AGCM_GRIDNAME' + goswim_landice.regrid_name: '{{ AGCM_GRIDNAME }}' goswim_landice.regrid_exch: 'tile.bin' , - goswim_landice.grid_label: PC@HIST_IMx@HIST_JM-DC , + goswim_landice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , goswim_landice.regrid_method: 'BILINEAR', goswim_landice.mode: 'time-averaged' , goswim_landice.frequency: 240000 , @@ -825,7 +825,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM tavg2d_aer_x.archive: '%c/Y%y4', tavg2d_aer_x.format: 'CFIO', tavg2d_aer_x.deflate: 1, - tavg2d_aer_x.grid_label: PC@HIST_IMx@HIST_JM-DC, + tavg2d_aer_x.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, tavg2d_aer_x.mode: 'time-averaged', tavg2d_aer_x.monthly: 1, # tavg2d_aer_x.frequency: 240000, @@ -1004,7 +1004,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM tavg3d_aer_p.archive: '%c/Y%y4', tavg3d_aer_p.format: 'CFIO', tavg3d_aer_p.deflate: 1, - tavg3d_aer_p.grid_label: PC@HIST_IMx@HIST_JM-DC, + tavg3d_aer_p.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, tavg3d_aer_p.mode: 'time-averaged', tavg3d_aer_p.monthly: 1, # tavg3d_aer_p.frequency: 240000, @@ -1024,17 +1024,17 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM 'CA.bcMASS' , 'CA.bc' , 'BC' , 'CA.ocMASS' , 'CA.oc' , 'OC' , 'CA.brMASS' , 'CA.br' , 'BR' , - 'SO2' , 'SU' , - 'SO4' , 'SU' , + 'SO2' , 'SU' , + 'SO4' , 'SU' , 'NH3MASS' , 'NI' , 'NH3' , 'NH4MASS' , 'NI' , 'NH4' , 'NIMASS' , 'NI' , 'NI' , 'HNO3CONC' , 'NI' , 'NICONC' , 'NI' , - 'DUEXTCOEF' , 'DU' , - 'SSEXTCOEF' , 'SS' , - 'SUEXTCOEF' , 'SU' , - 'NIEXTCOEF' , 'NI' , + 'DUEXTCOEF' , 'DU' , + 'SSEXTCOEF' , 'SS' , + 'SUEXTCOEF' , 'SU' , + 'NIEXTCOEF' , 'NI' , 'CA.bcEXTCOEF' , 'CA.bc' , 'BCEXTCOEF' , 'CA.brEXTCOEF' , 'CA.br' , 'BREXTCOEF' , 'CA.ocEXTCOEF' , 'CA.oc' , 'OCEXTCOEF' , @@ -1049,7 +1049,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_tracer.archive: '%c/Y%y4' , geosgcm_tracer.format: 'CFIO' , geosgcm_tracer.deflate: 1 , - geosgcm_tracer.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_tracer.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_tracer.regrid_method: 'BILINEAR', geosgcm_tracer.mode: 'time-averaged' , geosgcm_tracer.monthly: 1 , @@ -1079,7 +1079,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_lidar.archive: '%c/Y%y4' , geosgcm_lidar.format: 'CFIO' , geosgcm_lidar.deflate: 1 , - geosgcm_lidar.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_lidar.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_lidar.regrid_method: 'BILINEAR', geosgcm_lidar.mode: 'time-averaged' , geosgcm_lidar.frequency: 030000 , @@ -1122,7 +1122,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_parasol.archive: '%c/Y%y4' , geosgcm_parasol.format: 'CFIO' , geosgcm_parasol.deflate: 1 , - geosgcm_parasol.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_parasol.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_parasol.regrid_method: 'BILINEAR', geosgcm_parasol.mode: 'time-averaged' , geosgcm_parasol.frequency: 030000 , @@ -1138,7 +1138,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_radar.archive: '%c/Y%y4' , geosgcm_radar.format: 'CFIO' , geosgcm_radar.deflate: 1 , - geosgcm_radar.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_radar.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_radar.regrid_method: 'BILINEAR', geosgcm_radar.mode: 'time-averaged' , geosgcm_radar.frequency: 030000 , @@ -1181,7 +1181,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_isccp.archive: '%c/Y%y4' , geosgcm_isccp.format: 'CFIO' , geosgcm_isccp.deflate: 1 , - geosgcm_isccp.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_isccp.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_isccp.regrid_method: 'BILINEAR', geosgcm_isccp.mode: 'time-averaged' , geosgcm_isccp.frequency: 030000 , @@ -1251,7 +1251,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_modis.archive: '%c/Y%y4' , geosgcm_modis.format: 'CFIO' , geosgcm_modis.deflate: 1 , - geosgcm_modis.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_modis.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_modis.regrid_method: 'BILINEAR', geosgcm_modis.mode: 'time-averaged' , geosgcm_modis.frequency: 030000 , @@ -1333,7 +1333,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_misr.archive: '%c/Y%y4' , geosgcm_misr.format: 'CFIO' , geosgcm_misr.deflate: 1 , - geosgcm_misr.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_misr.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_misr.regrid_method: 'BILINEAR', geosgcm_misr.mode: 'time-averaged' , geosgcm_misr.frequency: 030000 , @@ -1367,7 +1367,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_rad.archive: '%c/Y%y4', geosgcm_rad.format: 'CFIO', geosgcm_rad.deflate: 1 , - geosgcm_rad.grid_label: PC@HIST_IMx@HIST_JM-DC, + geosgcm_rad.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC, geosgcm_rad.regrid_method: 'BILINEAR', geosgcm_rad.mode: 'time-averaged', geosgcm_rad.monthly: 1, @@ -1420,7 +1420,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_int.archive: '%c/Y%y4', geosgcm_int.format: 'CFIO' , geosgcm_int.deflate: 1 , - geosgcm_int.grid_label: PC@HIST_IMx@HIST_JM-DC , + geosgcm_int.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , geosgcm_int.regrid_method: 'BILINEAR', geosgcm_int.mode: 'time-averaged' , geosgcm_int.monthly: 1 , @@ -1446,61 +1446,61 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_seaice.archive: '%c/Y%y4', geosgcm_seaice.format: 'CFIO', geosgcm_seaice.deflate: 1 , -# geosgcm_seaice.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_seaice.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_seaice.regrid_method: 'BILINEAR', geosgcm_seaice.mode: 'time-averaged' , geosgcm_seaice.monthly: 1 , # geosgcm_seaice.frequency: 240000, geosgcm_seaice.fields: 'UI' , 'SEAICE', 'VI' , 'SEAICE', -@HIST_CICE4 'VEL' , 'SEAICE', -@HIST_CICE4 'STRENGTH' , 'SEAICE', -@HIST_CICE4 'SHEAR' , 'SEAICE', -@HIST_CICE4 'DIVU' , 'SEAICE', - 'HICE' , 'SEAICE', -@HIST_CICE4 'HICE0' , 'SEAICE', - 'HSNO' , 'SEAICE', -@HIST_CICE4 'HSNO0' , 'SEAICE', -@HIST_CICE4 'DRAFT' , 'SEAICE', -@HIST_CICE4 'DRAFT0' , 'SEAICE', - 'AICE' , 'SEAICE', -@HIST_CICE4 'DVIDTD' , 'SEAICE', -@HIST_CICE4 'DAIDTD' , 'SEAICE', -@HIST_CICE4 'DVIRDGDT' , 'SEAICE', -@HIST_CICE4 'STRCORX' , 'SEAICE', -@HIST_CICE4 'STRCORY' , 'SEAICE', -@HIST_CICE4 'STRTLTX' , 'SEAICE', -@HIST_CICE4 'STRTLTY' , 'SEAICE', -@HIST_CICE4 'STRINTX' , 'SEAICE', -@HIST_CICE4 'STRINTY' , 'SEAICE', -@HIST_CICE4 'TAUXOCNB' , 'SEAICE', -@HIST_CICE4 'TAUYOCNB' , 'SEAICE', -@HIST_CICE4 'TAUXI' , 'SEAICE', -@HIST_CICE4 'TAUYI' , 'SEAICE', -@HIST_CICE4 'TAUXIB' , 'SEAICE', -@HIST_CICE4 'TAUYIB' , 'SEAICE', - 'TAUXBOT' , 'SEAICE', - 'TAUYBOT' , 'SEAICE', -@HIST_CICE4 'UOCN' , 'SEAICE', -@HIST_CICE4 'VOCN' , 'SEAICE', -@HIST_CICE4 'SSH' , 'SEAICE', -@HIST_CICE4 'SLV' , 'SEAICE', -@HIST_CICE4 'AREA' , 'SEAICE', -@HIST_CICE4 'FROCEAN' , 'SEAICE', -@HIST_CICE4 'TMASK' , 'SEAICE', +{{ HIST_CICE4 }} 'VEL' , 'SEAICE', +{{ HIST_CICE4 }} 'STRENGTH' , 'SEAICE', +{{ HIST_CICE4 }} 'SHEAR' , 'SEAICE', +{{ HIST_CICE4 }} 'DIVU' , 'SEAICE', + 'HICE' , 'SEAICE', +{{ HIST_CICE4 }} 'HICE0' , 'SEAICE', + 'HSNO' , 'SEAICE', +{{ HIST_CICE4 }} 'HSNO0' , 'SEAICE', +{{ HIST_CICE4 }} 'DRAFT' , 'SEAICE', +{{ HIST_CICE4 }} 'DRAFT0' , 'SEAICE', + 'AICE' , 'SEAICE', +{{ HIST_CICE4 }} 'DVIDTD' , 'SEAICE', +{{ HIST_CICE4 }} 'DAIDTD' , 'SEAICE', +{{ HIST_CICE4 }} 'DVIRDGDT' , 'SEAICE', +{{ HIST_CICE4 }} 'STRCORX' , 'SEAICE', +{{ HIST_CICE4 }} 'STRCORY' , 'SEAICE', +{{ HIST_CICE4 }} 'STRTLTX' , 'SEAICE', +{{ HIST_CICE4 }} 'STRTLTY' , 'SEAICE', +{{ HIST_CICE4 }} 'STRINTX' , 'SEAICE', +{{ HIST_CICE4 }} 'STRINTY' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUXOCNB' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUYOCNB' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUXI' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUYI' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUXIB' , 'SEAICE', +{{ HIST_CICE4 }} 'TAUYIB' , 'SEAICE', + 'TAUXBOT' , 'SEAICE', + 'TAUYBOT' , 'SEAICE', +{{ HIST_CICE4 }} 'UOCN' , 'SEAICE', +{{ HIST_CICE4 }} 'VOCN' , 'SEAICE', +{{ HIST_CICE4 }} 'SSH' , 'SEAICE', +{{ HIST_CICE4 }} 'SLV' , 'SEAICE', +{{ HIST_CICE4 }} 'AREA' , 'SEAICE', +{{ HIST_CICE4 }} 'FROCEAN' , 'SEAICE', +{{ HIST_CICE4 }} 'TMASK' , 'SEAICE', :: geosgcm_icethm.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_icethm.archive: '%c/Y%y4', geosgcm_icethm.format: 'CFIO', geosgcm_icethm.deflate: 1 , -# geosgcm_icethm.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_icethm.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_icethm.regrid_method: 'BILINEAR', geosgcm_icethm.mode: 'time-averaged' , geosgcm_icethm.monthly: 1 , # geosgcm_icethm.frequency: 240000, geosgcm_icethm.regrid_exch:'tile.bin', - geosgcm_icethm.regrid_name:'@OGCM_GRIDNAME', + geosgcm_icethm.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_icethm.fields: 'DVIDTT' , 'SEAICETHERMO', 'dvidtt', 'DAIDTT' , 'SEAICETHERMO', 'daidtt', 'FBOT' , 'SEAICETHERMO', 'fbot', @@ -1558,13 +1558,13 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_aoflux.archive: '%c/Y%y4', geosgcm_aoflux.format: 'CFIO', geosgcm_aoflux.deflate: 1 , -# geosgcm_aoflux.grid_label: PC@HIST_IMx@HIST_JM-DC , +# geosgcm_aoflux.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , # geosgcm_aoflux.regrid_method: 'BILINEAR', geosgcm_aoflux.mode: 'time-averaged' , geosgcm_aoflux.monthly: 1 , geosgcm_aoflux.frequency: 240000, # geosgcm_aoflux.regrid_exch:'tile.bin', - geosgcm_aoflux.regrid_name:'@OGCM_GRIDNAME', + geosgcm_aoflux.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_aoflux.fields: 'TS_FOUND' , 'OPENWATER', 'SS_FOUND' , 'OPENWATER', 'AO_DRNIR' , 'OPENWATER', @@ -1628,7 +1628,7 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iceflxn.mode: 'time-averaged', # geosgcm_iceflxn.frequency: 240000, geosgcm_iceflxn.regrid_exch:'tile.bin', - geosgcm_iceflxn.regrid_name:'@OGCM_GRIDNAME', + geosgcm_iceflxn.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_iceflxn.fields: 'FCONDBOTN' , 'SEAICETHERMO', 'fcondbotn', 'SHICEN' , 'SEAICETHERMO', 'FSWSFCN' , 'SEAICETHERMO', @@ -1644,12 +1644,12 @@ PC@HIST_IMx@HIST_JM-DC.LM: @AGCM_LM geosgcm_iceflx.template: '%y4%m2%d2_%h2%n2z.nc4', geosgcm_iceflx.archive: '%c/Y%y4', geosgcm_iceflx.format: 'CFIO', - geosgcm_iceflx.deflate: 1, - geosgcm_iceflx.monthly: 1, + geosgcm_iceflx.deflate: 1, + geosgcm_iceflx.monthly: 1, geosgcm_iceflx.mode: 'time-averaged', # geosgcm_iceflx.frequency: 240000, geosgcm_iceflx.regrid_exch:'tile.bin', - geosgcm_iceflx.regrid_name:'@OGCM_GRIDNAME', + geosgcm_iceflx.regrid_name:'{{ OGCM_GRIDNAME }}', geosgcm_iceflx.fields: 'LWDNSRF' , 'SEAICETHERMO', 'SWDNSRF' , 'SEAICETHERMO', 'HLWUPICE' , 'SEAICETHERMO', diff --git a/HISTORY.AOGCM_MITgcm.rc.tmpl b/HISTORY.AOGCM_MITgcm.rc.tmpl index 1f20fb0e..3550ecb7 100755 --- a/HISTORY.AOGCM_MITgcm.rc.tmpl +++ b/HISTORY.AOGCM_MITgcm.rc.tmpl @@ -1,7 +1,7 @@ VERSION: 1 -EXPID: @EXPID -EXPDSC: @EXPDSC -EXPSRC: @EXPSRC +EXPID: {{ EXPID }} +EXPDSC: {{ EXPDSC }} +EXPSRC: {{ EXPSRC }} CONTACT: 'http://gmao.gsfc.nasa.gov' diff --git a/HISTORY.rc.tmpl b/HISTORY.rc.tmpl index e7d95bd5..8e1f3533 100644 --- a/HISTORY.rc.tmpl +++ b/HISTORY.rc.tmpl @@ -3,12 +3,12 @@ ####################################################################### VERSION: 1 -EXPID: @EXPID -EXPDSC: @EXPDSC -EXPSRC: @EXPSRC +EXPID: {{ EXPID }} +EXPDSC: {{ EXPDSC }} +EXPSRC: {{ EXPSRC }} Allow_Overwrite: .true. -GRID_LABELS: PC@HIST_IMx@HIST_JM-DC +GRID_LABELS: PC{{ HIST_IM }}x{{ HIST_JM }}-DC PC@HISTC_IMx@HISTC_JM-DC PE@APERT_IMx@APERT_JM-CF PE@BJEDI_IMx@BJEDI_JM-CF @@ -18,12 +18,12 @@ GRID_LABELS: PC@HIST_IMx@HIST_JM-DC PC540x361-DC :: -PC@HIST_IMx@HIST_JM-DC.GRID_TYPE: LatLon -PC@HIST_IMx@HIST_JM-DC.IM_WORLD: @HIST_IM -PC@HIST_IMx@HIST_JM-DC.JM_WORLD: @HIST_JM -PC@HIST_IMx@HIST_JM-DC.POLE: PC -PC@HIST_IMx@HIST_JM-DC.DATELINE: DC -PC@HIST_IMx@HIST_JM-DC.LM: 72 +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.GRID_TYPE: LatLon +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.IM_WORLD: {{ HIST_IM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.JM_WORLD: {{ HIST_JM }} +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.POLE: PC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.DATELINE: DC +PC{{ HIST_IM }}x{{ HIST_JM }}-DC.LM: 72 PC@HISTC_IMx@HISTC_JM-DC.GRID_TYPE: LatLon @@ -174,7 +174,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_asm_Np-.regrid_method: 'BILINEAR_MONOTONIC' , inst3_3d_asm_Np-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_asm_Np-.mode: 'instantaneous' , - inst3_3d_asm_Np-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_asm_Np-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_asm_Np-.frequency: 030000 , inst3_3d_asm_Np-.duration: 030000 , inst3_3d_asm_Np-.end_date: >>>IOEDATE<<< , @@ -209,7 +209,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_asm_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , inst3_3d_asm_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_asm_Nv-.mode: 'instantaneous' , - inst3_3d_asm_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_asm_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_asm_Nv-.frequency: 030000 , inst3_3d_asm_Nv-.duration: 030000 , inst3_3d_asm_Nv-.end_date: >>>IOEDATE<<< , @@ -240,7 +240,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst1_2d_asm_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , inst1_2d_asm_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst1_2d_asm_Nx-.mode: 'instantaneous' , - inst1_2d_asm_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst1_2d_asm_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst1_2d_asm_Nx-.frequency: 010000 , inst1_2d_asm_Nx-.duration: 010000 , inst1_2d_asm_Nx-.end_date: >>>IOEDATE<<< , @@ -283,7 +283,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_cld_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_cld_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_cld_Nv-.mode: 'time-averaged' , - tavg3_3d_cld_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_cld_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_cld_Nv-.frequency: 030000 , tavg3_3d_cld_Nv-.duration: 030000 , tavg3_3d_cld_Nv-.end_date: >>>IOEDATE<<< , @@ -340,7 +340,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_mst_Ne-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_mst_Ne-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_mst_Ne-.mode: 'time-averaged' , - tavg3_3d_mst_Ne-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_mst_Ne-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_mst_Ne-.frequency: 030000 , tavg3_3d_mst_Ne-.duration: 030000 , tavg3_3d_mst_Ne-.end_date: >>>IOEDATE<<< , @@ -361,7 +361,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_mst_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_mst_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_mst_Nv-.mode: 'time-averaged' , - tavg3_3d_mst_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_mst_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_mst_Nv-.frequency: 030000 , tavg3_3d_mst_Nv-.duration: 030000 , tavg3_3d_mst_Nv-.end_date: >>>IOEDATE<<< , @@ -419,7 +419,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_rad_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_rad_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_rad_Nv-.mode: 'time-averaged' , - tavg3_3d_rad_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_rad_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_rad_Nv-.frequency: 030000 , tavg3_3d_rad_Nv-.duration: 030000 , tavg3_3d_rad_Nv-.end_date: >>>IOEDATE<<< , @@ -463,7 +463,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_trb_Ne-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_trb_Ne-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_trb_Ne-.mode: 'time-averaged' , - tavg3_3d_trb_Ne-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_trb_Ne-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_trb_Ne-.frequency: 030000 , tavg3_3d_trb_Ne-.duration: 030000 , tavg3_3d_trb_Ne-.end_date: >>>IOEDATE<<< , @@ -519,7 +519,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_tdt_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_tdt_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_tdt_Nv-.mode: 'time-averaged' , - tavg3_3d_tdt_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_tdt_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_tdt_Nv-.frequency: 030000 , tavg3_3d_tdt_Nv-.duration: 030000 , tavg3_3d_tdt_Nv-.end_date: >>>IOEDATE<<< , @@ -573,7 +573,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_udt_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_udt_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_udt_Nv-.mode: 'time-averaged' , - tavg3_3d_udt_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_udt_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_udt_Nv-.frequency: 030000 , tavg3_3d_udt_Nv-.duration: 030000 , tavg3_3d_udt_Nv-.end_date: >>>IOEDATE<<< , @@ -621,7 +621,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_qdt_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_qdt_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_qdt_Nv-.mode: 'time-averaged' , - tavg3_3d_qdt_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_qdt_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_qdt_Nv-.frequency: 030000 , tavg3_3d_qdt_Nv-.duration: 030000 , tavg3_3d_qdt_Nv-.end_date: >>>IOEDATE<<< , @@ -679,7 +679,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_odt_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_odt_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_odt_Nv-.mode: 'time-averaged' , - tavg3_3d_odt_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_odt_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_odt_Nv-.frequency: 030000 , tavg3_3d_odt_Nv-.duration: 030000 , tavg3_3d_odt_Nv-.end_date: >>>IOEDATE<<< , @@ -725,7 +725,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_lsf_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_lsf_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_lsf_Nv-.mode: 'time-averaged' , - tavg3_3d_lsf_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_lsf_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_lsf_Nv-.frequency: 030000 , tavg3_3d_lsf_Nv-.duration: 030000 , tavg3_3d_lsf_Nv-.end_date: >>>IOEDATE<<< , @@ -743,7 +743,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_lsf_Ne-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_lsf_Ne-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_lsf_Ne-.mode: 'time-averaged' , - tavg3_3d_lsf_Ne-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_lsf_Ne-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_lsf_Ne-.frequency: 030000 , tavg3_3d_lsf_Ne-.duration: 030000 , tavg3_3d_lsf_Ne-.end_date: >>>IOEDATE<<< , @@ -759,7 +759,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_slv_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_slv_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_slv_Nx-.mode: 'time-averaged' , - tavg1_2d_slv_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_slv_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_slv_Nx-.frequency: 010000 , tavg1_2d_slv_Nx-.duration: 010000 , tavg1_2d_slv_Nx-.end_date: >>>IOEDATE<<< , @@ -811,7 +811,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_flx_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_flx_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_flx_Nx-.mode: 'time-averaged' , - tavg1_2d_flx_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_flx_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_flx_Nx-.frequency: 010000 , tavg1_2d_flx_Nx-.duration: 010000 , tavg1_2d_flx_Nx-.end_date: >>>IOEDATE<<< , @@ -870,7 +870,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_rad_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_rad_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_rad_Nx-.mode: 'time-averaged' , - tavg1_2d_rad_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_rad_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_rad_Nx-.frequency: 010000 , tavg1_2d_rad_Nx-.duration: 010000 , tavg1_2d_rad_Nx-.end_date: >>>IOEDATE<<< , @@ -919,7 +919,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_lnd_Nx-.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Assimilation,Land Surface Diagnostics' , tavg1_2d_lnd_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_lnd_Nx-.mode: 'time-averaged' , - tavg1_2d_lnd_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_lnd_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_lnd_Nx-.frequency: 010000 , tavg1_2d_lnd_Nx-.duration: 010000 , tavg1_2d_lnd_Nx-.end_date: >>>IOEDATE<<< , @@ -983,7 +983,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' # tavg1_2d_lfo_Nx-.nbits: 10, tavg1_2d_lfo_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_lfo_Nx-.mode: 'time-averaged' , - tavg1_2d_lfo_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_lfo_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_lfo_Nx-.frequency: 010000 , tavg1_2d_lfo_Nx-.duration: 010000 , tavg1_2d_lfo_Nx-.end_date: >>>IOEDATE<<< , @@ -1002,7 +1002,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' # inst1_2d_lfo_Nx-.nbits: 10, inst1_2d_lfo_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst1_2d_lfo_Nx-.mode: 'instantaneous' , - inst1_2d_lfo_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst1_2d_lfo_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst1_2d_lfo_Nx-.frequency: 010000 , inst1_2d_lfo_Nx-.duration: 010000 , inst1_2d_lfo_Nx-.end_date: >>>IOEDATE<<< , @@ -1021,7 +1021,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_ocn_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_ocn_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_ocn_Nx-.mode: 'time-averaged' , - tavg1_2d_ocn_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_ocn_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_ocn_Nx-.frequency: 010000 , tavg1_2d_ocn_Nx-.duration: 010000 , tavg1_2d_ocn_Nx-.end_date: >>>IOEDATE<<< , @@ -1081,7 +1081,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst1_2d_ocn_Nx-.regrid_method: 'BILINEAR_MONOTONIC' , inst1_2d_ocn_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst1_2d_ocn_Nx-.mode: 'instantaneous' , - inst1_2d_ocn_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst1_2d_ocn_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst1_2d_ocn_Nx-.frequency: 010000 , inst1_2d_ocn_Nx-.duration: 010000 , inst1_2d_ocn_Nx-.end_date: >>>IOEDATE<<< , @@ -1292,11 +1292,11 @@ COLLECTIONS: 'inst3_3d_asm_Np-' :: ####################################################################### -# Ldas bkg forcing +# Ldas bkg forcing ####################################################################### bkg.lfo_tavg.format: 'CFIO' , - bkg.lfo_tavg.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Land Surface Forcings' , + bkg.lfo_tavg.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Land Surface Forcings' , bkg.lfo_tavg.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , bkg.lfo_tavg.mode: 'time-averaged' , bkg.lfo_tavg.frequency: 010000 , @@ -1345,7 +1345,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' gaas_bkg.sfc.frequency: 030000 , gaas_bkg.sfc.duration: 030000 , gaas_bkg.sfc.mode: 'instantaneous' , - gaas_bkg.sfc.grid_label: PC@HIST_IMx@HIST_JM-DC , + gaas_bkg.sfc.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , gaas_bkg.sfc.fields: 'U10M;V10M' , 'SURFACE' , 'DUEXTTAU' , 'DU' , 'SSEXTTAU' , 'SS' , @@ -1367,7 +1367,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_2d_gas_Nx-.frequency: 030000 , inst3_2d_gas_Nx-.duration: 030000 , inst3_2d_gas_Nx-.mode: 'instantaneous' , - inst3_2d_gas_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_2d_gas_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_2d_gas_Nx-.fields: 'AODANA' , 'GAAS' , 'AODINC' , 'GAAS' , :: @@ -1385,7 +1385,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_gas_Nv-.frequency: 030000 , inst3_3d_gas_Nv-.duration: 030000 , inst3_3d_gas_Nv-.mode: 'instantaneous' , - inst3_3d_gas_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_gas_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_gas_Nv-.fields: 'DELP' , 'DYN' , 'delp' , 'AIRDENS' , 'CHEMENV' , 'DUINC' , 'GAAS' , @@ -1401,8 +1401,8 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst1_2d_aer_Nx-.descr: '2d,1-Hourly,Instantaneous,Single-Level,Analysis,Aerosol Diagnostics' , inst1_2d_aer_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst1_2d_aer_Nx-.mode: 'instantaneous' , - inst1_2d_aer_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , - inst1_2d_aer_Nx-.regrid_method: 'CONSERVE' , + inst1_2d_aer_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , + inst1_2d_aer_Nx-.regrid_method: 'CONSERVE' , inst1_2d_aer_Nx-.splitField: 1 , inst1_2d_aer_Nx-.frequency: 010000 , inst1_2d_aer_Nx-.duration: 010000 , @@ -1514,7 +1514,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_adg_Nx-.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Analysis,Aerosol Diagnostics (extended)' , tavg1_2d_adg_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_adg_Nx-.mode: 'time-averaged' , - tavg1_2d_adg_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_adg_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_adg_Nx-.frequency: 010000 , tavg1_2d_adg_Nx-.duration: 010000 , tavg1_2d_adg_Nx-.end_date: >>>IOEDATE<<< , @@ -1604,7 +1604,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_2d_chm_Nx-.descr: '2d,3-Hourly,Time-Averaged,Single-Level,Analysis,Constituent Diagnostics' , tavg3_2d_chm_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_2d_chm_Nx-.mode: 'time-averaged' , - tavg3_2d_chm_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_2d_chm_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_2d_chm_Nx-.frequency: 030000 , tavg3_2d_chm_Nx-.duration: 030000 , tavg3_2d_chm_Nx-.end_date: >>>IOEDATE<<< , @@ -1631,7 +1631,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst1_2d_hwl_Nx-.descr: '2d,1-Hourly,Instantaneous,Single-Level,Analysis,Hyperwall' , inst1_2d_hwl_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst1_2d_hwl_Nx-.mode: 'instantaneous' , - inst1_2d_hwl_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst1_2d_hwl_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst1_2d_hwl_Nx-.splitField: 1 , inst1_2d_hwl_Nx-.frequency: 010000 , inst1_2d_hwl_Nx-.duration: 010000 , @@ -1649,7 +1649,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_aer_Nv-.descr: '3d,3-Hourly,Instantaneous,Model-Level,Analysis,Aerosol Concentrations' , inst3_3d_aer_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_aer_Nv-.mode: 'instantaneous' , - inst3_3d_aer_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_aer_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_aer_Nv-.frequency: 030000 , inst3_3d_aer_Nv-.duration: 030000 , inst3_3d_aer_Nv-.ref_time: 000000 , @@ -1702,7 +1702,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_chm_Nv-.descr: '3d,3-Hourly,Instantaneous,Model-Level,Analysis,Chemistry' , inst3_3d_chm_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_chm_Nv-.mode: 'instantaneous' , - inst3_3d_chm_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_chm_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_chm_Nv-.frequency: 030000 , inst3_3d_chm_Nv-.duration: 030000 , inst3_3d_chm_Nv-.ref_time: 000000 , @@ -1722,7 +1722,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_tag_Nv-.descr: '3d,3-Hourly,Instantaneous,Model-Level,Analysis,Tag Tracers' , inst3_3d_tag_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_tag_Nv-.mode: 'instantaneous' , - inst3_3d_tag_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_tag_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_tag_Nv-.frequency: 030000 , inst3_3d_tag_Nv-.duration: 030000 , inst3_3d_tag_Nv-.ref_time: 000000 , @@ -1751,7 +1751,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_2d_tag_Nx-.descr: '2d,3-Hourly,Time-Averaged,Single-Level,Analysis,Constituent Diagnostics' , tavg3_2d_tag_Nx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_2d_tag_Nx-.mode: 'time-averaged' , - tavg3_2d_tag_Nx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_2d_tag_Nx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_2d_tag_Nx-.frequency: 030000 , tavg3_2d_tag_Nx-.duration: 030000 , tavg3_2d_tag_Nx-.end_date: >>>IOEDATE<<< , @@ -1820,7 +1820,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_ctm_Cv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_ctm_Cv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_ctm_Cv-.mode: 'time-averaged' , - tavg3_3d_ctm_Cv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_ctm_Cv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_ctm_Cv-.frequency: 030000 , tavg3_3d_ctm_Cv-.duration: 030000 , tavg3_3d_ctm_Cv-.end_date: >>>IOEDATE<<< , @@ -1851,7 +1851,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_ctm_Ce-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_ctm_Ce-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_ctm_Ce-.mode: 'time-averaged' , - tavg3_3d_ctm_Ce-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_ctm_Ce-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_ctm_Ce-.frequency: 030000 , tavg3_3d_ctm_Ce-.duration: 030000 , tavg3_3d_ctm_Ce-.end_date: >>>IOEDATE<<< , @@ -1872,7 +1872,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_2d_ctm_Cx-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_2d_ctm_Cx-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_2d_ctm_Cx-.mode: 'time-averaged' , - tavg3_2d_ctm_Cx-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_2d_ctm_Cx-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_2d_ctm_Cx-.frequency: 030000 , tavg3_2d_ctm_Cx-.duration: 030000 , tavg3_2d_ctm_Cx-.end_date: >>>IOEDATE<<< , @@ -1916,7 +1916,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_nav_Nv-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_nav_Nv-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_nav_Nv-.mode: 'time-averaged' , - tavg3_3d_nav_Nv-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_nav_Nv-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_nav_Nv-.frequency: 030000 , tavg3_3d_nav_Nv-.duration: 030000 , tavg3_3d_nav_Nv-.end_date: >>>IOEDATE<<< , @@ -1932,7 +1932,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_nav_Ne-.regrid_method: 'BILINEAR_MONOTONIC' , tavg3_3d_nav_Ne-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg3_3d_nav_Ne-.mode: 'time-averaged' , - tavg3_3d_nav_Ne-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_nav_Ne-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_nav_Ne-.frequency: 030000 , tavg3_3d_nav_Ne-.duration: 030000 , tavg3_3d_nav_Ne-.end_date: >>>IOEDATE<<< , @@ -1947,7 +1947,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_trc_Np-.frequency: 030000 , tavg3_3d_trc_Np-.duration: 030000 , tavg3_3d_trc_Np-.mode: 'time-averaged' , - tavg3_3d_trc_Np-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_trc_Np-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_trc_Np-.vscale: 100.0 , tavg3_3d_trc_Np-.vunit: 'hPa' , tavg3_3d_trc_Np-.vvars: 'log(PLE)' , 'DYN' , @@ -1973,7 +1973,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' vtx.mix.end_date: >>>IOEBKGD<<< , vtx.mix.end_time: >>>IOEBKGT<<< , vtx.mix.mode: 'instantaneous' , - vtx.mix.grid_label: PC@HIST_IMx@HIST_JM-DC , + vtx.mix.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , vtx.mix.fields: 'PHIS' , 'AGCM' , 'SLP' , 'DYN' , 'PS' , 'DYN' , @@ -2000,7 +2000,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' vtx.prs.end_date: >>>IOEBKGD<<< , vtx.prs.end_time: >>>IOEBKGT<<< , vtx.prs.mode: 'instantaneous' , - vtx.prs.grid_label: PC@HIST_IMx@HIST_JM-DC , + vtx.prs.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , vtx.prs.vscale: 100.0 , vtx.prs.vunit: 'hPa' , vtx.prs.vvars: 'log(PLE)' , 'DYN' , @@ -2036,7 +2036,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg2_3d_aiau_Np+-.regrid_method: 'BILINEAR_MONOTONIC' , tavg2_3d_aiau_Np+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg2_3d_aiau_Np+-.mode: 'time-averaged' , - tavg2_3d_aiau_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg2_3d_aiau_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg2_3d_aiau_Np+-.frequency: 020000 , tavg2_3d_aiau_Np+-.duration: 020000 , tavg2_3d_aiau_Np+-.reftime: 010000 , @@ -2073,7 +2073,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_asm_Np+-.regrid_method: 'BILINEAR_MONOTONIC' , inst3_3d_asm_Np+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_asm_Np+-.mode: 'instantaneous' , - inst3_3d_asm_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_asm_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_asm_Np+-.frequency: 030000 , inst3_3d_asm_Np+-.duration: 030000 , inst3_3d_asm_Np+-.ref_date: >>>IOBBKGD<<< , @@ -2108,7 +2108,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_3d_asm_Nv+-.regrid_method: 'BILINEAR_MONOTONIC' , inst3_3d_asm_Nv+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_3d_asm_Nv+-.mode: 'instantaneous' , - inst3_3d_asm_Nv+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_3d_asm_Nv+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_3d_asm_Nv+-.frequency: 030000 , inst3_3d_asm_Nv+-.duration: 030000 , inst3_3d_asm_Nv+-.ref_date: >>>IOBBKGD<<< , @@ -2139,7 +2139,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_slv_Nx+-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_slv_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_slv_Nx+-.mode: 'time-averaged' , - tavg1_2d_slv_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_slv_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_slv_Nx+-.frequency: 010000 , tavg1_2d_slv_Nx+-.duration: 010000 , tavg1_2d_slv_Nx+-.ref_date: >>>IOBBKGD<<< , @@ -2189,7 +2189,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_flx_Nx+-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_flx_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_flx_Nx+-.mode: 'time-averaged' , - tavg1_2d_flx_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_flx_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_flx_Nx+-.frequency: 010000 , tavg1_2d_flx_Nx+-.duration: 010000 , tavg1_2d_flx_Nx+-.ref_date: >>>IOBBKGD<<< , @@ -2240,7 +2240,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_lnd_Nx+-.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Forecast,Land Surface Diagnostics' , tavg1_2d_lnd_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_lnd_Nx+-.mode: 'time-averaged' , - tavg1_2d_lnd_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_lnd_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_lnd_Nx+-.frequency: 010000 , tavg1_2d_lnd_Nx+-.duration: 010000 , tavg1_2d_lnd_Nx+-.ref_date: >>>IOBBKGD<<< , @@ -2278,7 +2278,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' 'SMLAND' , 'SURFACE' , 'QINFIL' , 'SURFACE' , 'QINFILLAND', 'FRUST' , 'SURFACE' , 'FRLANDUNST', - 'FRSAT' , 'SURFACE' , 'FRLANDSAT' , + 'FRSAT' , 'SURFACE' , 'FRLANDSAT' , 'ASNOW' , 'SURFACE' , 'FRLANDSNO' , 'FRWLT' , 'SURFACE' , 'FRLANDWLT' , 'DFPARLAND' , 'SURFACE' , 'PARDFLAND' , @@ -2306,7 +2306,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg1_2d_rad_Nx+-.regrid_method: 'BILINEAR_MONOTONIC' , tavg1_2d_rad_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , tavg1_2d_rad_Nx+-.mode: 'time-averaged' , - tavg1_2d_rad_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg1_2d_rad_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg1_2d_rad_Nx+-.frequency: 010000 , tavg1_2d_rad_Nx+-.duration: 010000 , tavg1_2d_rad_Nx+-.ref_date: >>>IOBBKGD<<< , @@ -2358,7 +2358,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst3_2d_met_Nx+-.regrid_method: 'BILINEAR_MONOTONIC' , inst3_2d_met_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , inst3_2d_met_Nx+-.mode: 'instantaneous' , - inst3_2d_met_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst3_2d_met_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst3_2d_met_Nx+-.frequency: 030000 , inst3_2d_met_Nx+-.duration: 030000 , inst3_2d_met_Nx+-.ref_date: >>>IOBBKGD<<< , @@ -2499,7 +2499,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_ext_Np+-.frequency: 030000 , tavg3_3d_ext_Np+-.duration: 030000 , tavg3_3d_ext_Np+-.mode: 'time-averaged' , - tavg3_3d_ext_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_ext_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_ext_Np+-.splitField: 1 , tavg3_3d_ext_Np+-.regrid_method: 'CONSERVE' , tavg3_3d_ext_Np+-.vscale: 100.0 , @@ -2534,7 +2534,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_aer_Np+-.frequency: 030000 , tavg3_3d_aer_Np+-.duration: 030000 , tavg3_3d_aer_Np+-.mode: 'time-averaged' , - tavg3_3d_aer_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_aer_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_aer_Np+-.splitField: 1 , tavg3_3d_aer_Np+-.regrid_method: 'CONSERVE' , tavg3_3d_aer_Np+-.vscale: 100.0 , @@ -2559,7 +2559,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_chm_Np+-.frequency: 030000 , tavg3_3d_chm_Np+-.duration: 030000 , tavg3_3d_chm_Np+-.mode: 'time-averaged' , - tavg3_3d_chm_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_chm_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_chm_Np+-.vscale: 100.0 , tavg3_3d_chm_Np+-.vunit: 'hPa' , tavg3_3d_chm_Np+-.vvars: 'log(PLE)' , 'DYN' , @@ -2581,7 +2581,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' tavg3_3d_tag_Np+-.frequency: 030000 , tavg3_3d_tag_Np+-.duration: 030000 , tavg3_3d_tag_Np+-.mode: 'time-averaged' , - tavg3_3d_tag_Np+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + tavg3_3d_tag_Np+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , tavg3_3d_tag_Np+-.vscale: 100.0 , tavg3_3d_tag_Np+-.vunit: 'hPa' , tavg3_3d_tag_Np+-.vvars: 'log(PLE)' , 'DYN' , @@ -2613,7 +2613,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' inst1_2d_hwl_Nx+-.deflate: 2 , inst1_2d_hwl_Nx+-.regrid_method: 'BILINEAR_MONOTONIC' , inst1_2d_hwl_Nx+-.mode: 'instantaneous' , - inst1_2d_hwl_Nx+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + inst1_2d_hwl_Nx+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , inst1_2d_hwl_Nx+-.splitField: 1 , inst1_2d_hwl_Nx+-.frequency: 010000 , inst1_2d_hwl_Nx+-.duration: 010000 , @@ -2645,7 +2645,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' prog.eta+-.frequency: 060000 , prog.eta+-.duration: 060000 , prog.eta+-.mode: 'instantaneous' , - prog.eta+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + prog.eta+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , prog.eta+-.fields: 'PHIS' , 'AGCM' , 'phis' , 'SGH' , 'AGCM' , 'hs_stdv' , 'PS' , 'DYN' , 'ps' , @@ -2673,7 +2673,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' prog.sfc+-.frequency: 060000 , prog.sfc+-.duration: 060000 , prog.sfc+-.mode: 'instantaneous' , - prog.sfc+-.grid_label: PC@HIST_IMx@HIST_JM-DC , + prog.sfc+-.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , prog.sfc+-.fields: 'PHIS' , 'AGCM' , 'US;VS' , 'DYN' , 'UA;VA' , 'TA' , 'DYN' , @@ -2723,7 +2723,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' const_2d_asm_Nx.format: 'CFIO' , const_2d_asm_Nx.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' , const_2d_asm_Nx.mode: 'instantaneous' , - const_2d_asm_Nx.grid_label: PC@HIST_IMx@HIST_JM-DC , + const_2d_asm_Nx.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , const_2d_asm_Nx.frequency: 240000 , const_2d_asm_Nx.duration: 240000 , const_2d_asm_Nx.ref_time: >>>IOBBKGT<<< , @@ -2780,7 +2780,7 @@ COLLECTIONS: 'inst3_3d_asm_Np-' asm.eta.frequency: @ASYNFRQ , asm.eta.duration: @ASYNFRQ , asm.eta.mode: 'instantaneous' , - asm.eta.grid_label: PC@HIST_IMx@HIST_JM-DC , + asm.eta.grid_label: PC{{ HIST_IM }}x{{ HIST_JM }}-DC , asm.eta.fields: 'PHIS' , 'AGCM' , 'phis' , 'SGH' , 'AGCM' , 'hs_stdv' , 'TS' , 'SURFACE' , 'ts' , diff --git a/fvcore_layout.rc b/fvcore_layout.rc index 009e050b..54fa8d97 100644 --- a/fvcore_layout.rc +++ b/fvcore_layout.rc @@ -1,10 +1,10 @@ &fv_core_nml range_warn = .F. fv_debug = .F. - @FV_SCHMIDT - @FV_STRETCH_FAC - @FV_TARGET_LON - @FV_TARGET_LAT + {{ FV_SCHMIDT }} + {{ FV_STRETCH_FAC }} + {{ FV_TARGET_LON }} + {{ FV_TARGET_LAT }} / &main_nml diff --git a/gcm_archive.j b/gcm_archive.j index a4a8ffcb..a6d58a36 100644 --- a/gcm_archive.j +++ b/gcm_archive.j @@ -4,12 +4,12 @@ # Batch Parameters for Archive Job ####################################################################### -#@BATCH_TIME@ARCHIVE_T -#@ARCHIVE_P -#@BATCH_JOBNAME@ARCHIVE_N -#@ARCHIVE_Q -#@BATCH_GROUP -#@BATCH_OUTPUTNAMEOUTPUT +#{{ BATCH_TIME }}{{ ARCHIVE_T }} +#{{ ARCHIVE_P }} +#{{ BATCH_JOBNAME }}{{ ARCHIVE_N }} +#{{ ARCHIVE_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_OUTPUTNAME }}OUTPUT ####################################################################### # System Environment Variables @@ -19,9 +19,9 @@ umask 022 limit stacksize unlimited -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} ####################################################################### # Architecture Specific Environment Variables @@ -29,13 +29,13 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSBIN @GEOSBIN +setenv SITE {{ SITE }} +setenv GEOSBIN {{ GEOSBIN }} source $GEOSBIN/g5_modules -setenv @LD_LIBRARY_PATH_CMD ${LD_LIBRARY_PATH} +setenv {{ LD_LIBRARY_PATH_CMD }} ${LD_LIBRARY_PATH} if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} ${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib endif ####################################################################### diff --git a/gcm_emip.setup b/gcm_emip.setup index 53f75c14..6b5d7275 100755 --- a/gcm_emip.setup +++ b/gcm_emip.setup @@ -30,6 +30,6 @@ sed -f sedfile gcm_run.tmp > gcm_run.j$RSTDATE /bin/rm -f sedfile /bin/rm -f gcm_run.tmp -echo @BATCH_CMD gcm_run.j$RSTDATE +echo {{ BATCH_CMD }} gcm_run.j$RSTDATE end diff --git a/gcm_forecast.setup b/gcm_forecast.setup index bce27a19..88417308 100755 --- a/gcm_forecast.setup +++ b/gcm_forecast.setup @@ -5,12 +5,12 @@ ####################################################################### setenv ARCH `uname` -setenv SITE @SITE +setenv SITE {{ SITE }} -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR -setenv GEOSUTIL @GEOSUTIL +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} +setenv GEOSUTIL {{ GEOSUTIL }} ####################################################################### # Parameters for Forecasts @@ -107,7 +107,7 @@ s?&FHRS?$FHRS?g EOF sed -f sedfile $EXPDIR/forecasts/gcm_forecast.tmp > $EXPDIR/forecasts/gcm_forecast_${FCST_LABL}.j${date}-${nymde} -if( $QSUB != 'FALSE' ) @BATCH_CMD $EXPDIR/forecasts/gcm_forecast_${FCST_LABL}.j${date}-${nymde} +if( $QSUB != 'FALSE' ) {{ BATCH_CMD }} $EXPDIR/forecasts/gcm_forecast_${FCST_LABL}.j${date}-${nymde} set date = $test end diff --git a/gcm_forecast.tmpl b/gcm_forecast.tmpl index 7890b4f2..38b0643a 100755 --- a/gcm_forecast.tmpl +++ b/gcm_forecast.tmpl @@ -4,12 +4,12 @@ # Batch Parameters for Run Job ####################################################################### -#@BATCH_TIME@RUN_FT -#@RUN_FP -#@BATCH_JOBNAME@RUN_FN_&DATE -#@RUN_Q -#@BATCH_GROUP -#@BATCH_OUTPUTNAMEFCSTOUT +#{{ BATCH_TIME }}{{ RUN_FT }} +#{{ RUN_FP }} +#{{ BATCH_JOBNAME }}{{ RUN_FN }}_&DATE +#{{ RUN_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_OUTPUTNAME }}FCSTOUT ####################################################################### # System Settings @@ -25,19 +25,19 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSDIR @GEOSDIR -setenv GEOSBIN @GEOSBIN -setenv GEOSETC @GEOSETC -setenv GEOSUTIL @GEOSSRC +setenv SITE {{ SITE }} +setenv GEOSDIR {{ GEOSDIR }} +setenv GEOSBIN {{ GEOSBIN }} +setenv GEOSETC {{ GEOSETC }} +setenv GEOSUTIL {{ GEOSSRC }} source $GEOSBIN/g5_modules -setenv @LD_LIBRARY_PATH_CMD ${LD_LIBRARY_PATH}:${GEOSDIR}/lib +setenv {{ LD_LIBRARY_PATH_CMD }} ${LD_LIBRARY_PATH}:${GEOSDIR}/lib if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} ${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib endif -setenv RUN_CMD "@RUN_CMD" +setenv RUN_CMD "{{ RUN_CMD }}" setenv GCMVER `cat $GEOSETC/.AGCM_VERSION` echo VERSION: $GCMVER @@ -47,9 +47,9 @@ echo VERSION: $GCMVER ####################################################################### -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} ####################################################################### # Set Forecast Run Parameters @@ -160,14 +160,14 @@ set AGCM_LM = `grep '^\s*AGCM_LM:' $HOMDIR/AGCM.rc | cut -d: -f2` set OGCM_IM = `grep '^\s*OGCM\.IM_WORLD:' $HOMDIR/AGCM.rc | cut -d: -f2` set OGCM_JM = `grep '^\s*OGCM\.JM_WORLD:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set OGCM_LM = `grep '^\s*OGCM\.LM:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set NX = `grep '^\s*OGCM\.NX:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set NY = `grep '^\s*OGCM\.NY:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set OGCM_LM = `grep '^\s*OGCM\.LM:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set NX = `grep '^\s*OGCM\.NX:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set NY = `grep '^\s*OGCM\.NY:' $HOMDIR/AGCM.rc | cut -d: -f2` # Calculate number of cores/nodes for IOSERVER # -------------------------------------------- -set USE_IOSERVER = @USE_IOSERVER +set USE_IOSERVER = {{ USE_IOSERVER }} set NUM_OSERVER_NODES = `grep '^\s*IOSERVER_NODES:' $HOMDIR/AGCM.rc | cut -d: -f2` set NUM_BACKEND_PES = `grep '^\s*NUM_BACKEND_PES:' $HOMDIR/AGCM.rc | cut -d: -f2` @@ -193,7 +193,7 @@ else if ($?PBS_NODEFILE) then else # This is the default value if nothing is specified that is used # for desktops and laptops from gcm_setup - set NCPUS_PER_NODE = @NCPUS_PER_NODE + set NCPUS_PER_NODE = {{ NCPUS_PER_NODE }} endif set NUM_MODEL_NODES=`echo "scale=6;($MODEL_NPES / $NCPUS_PER_NODE)" | bc | awk 'function ceil(x, y){y=int(x); return(x>y?y+1:y)} {print ceil($1)}'` @@ -429,22 +429,22 @@ done: # Link Boundary Datasets ####################################################################### -setenv BCSDIR @BCSDIR -@DATAOCEANsetenv SSTDIR @SSTDIR -setenv BCRSLV @ATMOStag_@OCEANtag -@MOM5setenv SSTDIR @COUPLEDIR/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 -@MOM6setenv SSTDIR @COUPLEDIR/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 +setenv BCSDIR {{ BCSDIR }} +{{ DATAOCEAN }}setenv SSTDIR {{ SSTDIR }} +setenv BCRSLV {{ ATMOStag }}_{{ OCEANtag }} +{{ MOM5 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 +{{ MOM6 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 #this is hard-wired for NAS for now - should make it more general -@DATAOCEANsetenv BCTAG `basename $BCSDIR` -@COUPLEDsetenv BCTAG `basename @COUPLEDIR/@OCNMODEL/${OGCM_IM}x${OGCM_JM}` -setenv EMISSIONS @EMISSIONS +{{ DATAOCEAN }}setenv BCTAG `basename $BCSDIR` +{{ COUPLED }}setenv BCTAG `basename {{ COUPLEDIR }}/{{ OCNMODEL }}/${OGCM_IM}x${OGCM_JM}` +setenv EMISSIONS {{ EMISSIONS }} chmod +x linkbcs -@GCMRUN_CATCHCNset LSM_CHOICE = `grep LSM_CHOICE: AGCM.rc | cut -d':' -f2` -@GCMRUN_CATCHCNif ($LSM_CHOICE == 2) then -@GCMRUN_CATCHCN grep -v "'CNFROOTC'" HISTORY.rc > Hist_tmp.rc && mv Hist_tmp.rc HISTORY.rc -@GCMRUN_CATCHCNendif +{{ GCMRUN_CATCHCN }}set LSM_CHOICE = `grep LSM_CHOICE: AGCM.rc | cut -d':' -f2` +{{ GCMRUN_CATCHCN }}if ($LSM_CHOICE == 2) then +{{ GCMRUN_CATCHCN }} grep -v "'CNFROOTC'" HISTORY.rc > Hist_tmp.rc && mv Hist_tmp.rc HISTORY.rc +{{ GCMRUN_CATCHCN }}endif ####################################################################### # Get Executable and RESTARTS @@ -645,16 +645,16 @@ if ( $DNA_TRUE == 0 && -e DNA_ExtData.rc ) /bin/mv set ACHEM_TRUE = `grep -i '^\s*ENABLE_ACHEM:\s*\.TRUE\.' GEOS_ChemGridComp.rc | wc -l` if ( $ACHEM_TRUE == 0 && -e ACHEM_ExtData.rc ) /bin/mv ACHEM_ExtData.rc ACHEM_ExtData.rc.NOT_USED -@MP_TURN_OFF_WSUB_EXTDATA# 1MOM and GFDL microphysics do not use WSUB_CLIM -@MP_TURN_OFF_WSUB_EXTDATA# ------------------------------------------------- +{{ MP_TURN_OFF_WSUB_EXTDATA }}# 1MOM and GFDL microphysics do not use WSUB_CLIM +{{ MP_TURN_OFF_WSUB_EXTDATA }}# ------------------------------------------------- if ($EXTDATA2G_TRUE == 0 ) then - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc else - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml endif -@MP_TURN_OFF_WSUB_EXTDATA/bin/rm WSUB_ExtData.tmp +{{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/rm WSUB_ExtData.tmp # Generate the complete ExtData.rc # -------------------------------- @@ -706,7 +706,7 @@ endif if (! -e tile.bin) then $GEOSBIN/binarytile.x tile.data tile.bin -@MOM5 $GEOSBIN/binarytile.x tile_hist.data tile_hist.bin +{{ MOM5 }} $GEOSBIN/binarytile.x tile_hist.data tile_hist.bin endif # If running in dual ocean mode, link sst and fraci data here @@ -736,8 +736,8 @@ else # Run the script # -------------- - @SINGULARITY_BUILD $RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst - @NATIVE_BUILD $RUN_CMD 1 $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst + {{ SINGULARITY_BUILD }} $RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst + {{ NATIVE_BUILD }} $RUN_CMD 1 $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst # Move restarts # ------------- @@ -775,8 +775,8 @@ endif if ( -x $GEOSBIN/rs_numtiles.x ) then set N_OPENW_TILES_EXPECTED = `grep '^\s*0' tile.data | wc -l` - @SINGULARITY_BUILD set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` - @NATIVE_BUILD set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` + {{ SINGULARITY_BUILD }} set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` + {{ NATIVE_BUILD }} set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` if ( $N_OPENW_TILES_EXPECTED != $N_OPENW_TILES_FOUND ) then echo "Error! Found $N_OPENW_TILES_FOUND tiles in openwater. Expect to find $N_OPENW_TILES_EXPECTED tiles." @@ -820,9 +820,9 @@ endif # Environment variables for MPI, etc # ---------------------------------- -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} # Run bundleParser.py #--------------------- @@ -867,8 +867,8 @@ else set IOSERVER_EXTRA = "" endif -@SINGULARITY_BUILD @OCEAN_PRELOAD $RUN_CMD $TOTAL_PES $SINGULARITY_RUN $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' -@NATIVE_BUILD @OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $TOTAL_PES $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' +{{ SINGULARITY_BUILD }} {{ OCEAN_PRELOAD }} $RUN_CMD $TOTAL_PES $SINGULARITY_RUN $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' +{{ NATIVE_BUILD }} {{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $TOTAL_PES $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' if( $USE_SHMEM == 1 ) $GEOSBIN/RmShmKeys_sshmpi.csh >& /dev/null diff --git a/gcm_moveplot.j b/gcm_moveplot.j index cfe19f21..2624022d 100755 --- a/gcm_moveplot.j +++ b/gcm_moveplot.j @@ -4,12 +4,12 @@ # Batch Parameters for Plot Job ####################################################################### -#@BATCH_TIME1:00:00 -#@MOVE_P -#@BATCH_JOBNAME@MOVE_N -#@MOVE_Q -#@BATCH_GROUP -#@BATCH_OUTPUTNAMEgcm_moveplot.o +#{{ BATCH_TIME }}1:00:00 +#{{ MOVE_P }} +#{{ BATCH_JOBNAME }}{{ MOVE_N }} +#{{ MOVE_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_OUTPUTNAME }}gcm_moveplot.o ####################################################################### # System Environment Variables @@ -19,9 +19,9 @@ umask 022 limit stacksize unlimited -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} ####################################################################### # Architecture Specific Environment Variables @@ -29,23 +29,23 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSBIN @GEOSBIN -setenv GEOSUTIL @GEOSSRC +setenv SITE {{ SITE }} +setenv GEOSBIN {{ GEOSBIN }} +setenv GEOSUTIL {{ GEOSSRC }} source $GEOSBIN/g5_modules -setenv @LD_LIBRARY_PATH_CMD ${LD_LIBRARY_PATH} +setenv {{ LD_LIBRARY_PATH_CMD }} ${LD_LIBRARY_PATH} if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} ${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib endif ####################################################################### # Experiment Specific Environment Variables ####################################################################### -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} ####################################################################### # MOVE Commands diff --git a/gcm_plot.tmpl b/gcm_plot.tmpl index e202c413..17f6c479 100755 --- a/gcm_plot.tmpl +++ b/gcm_plot.tmpl @@ -4,12 +4,12 @@ # Batch Parameters for Plot Job ####################################################################### -#@BATCH_TIME@PLOT_T -#@PLOT_P -#@BATCH_JOBNAME@NAME -#@PLOT_Q -#@BATCH_GROUP -#@BATCH_OUTPUTNAMEOUTPUT +#{{ BATCH_TIME }}{{ PLOT_T }} +#{{ PLOT_P }} +#{{ BATCH_JOBNAME }}@NAME +#{{ PLOT_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_OUTPUTNAME }}OUTPUT ####################################################################### # System Environment Variables @@ -19,9 +19,9 @@ umask 022 limit stacksize unlimited -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} ####################################################################### # Architecture Specific Environment Variables @@ -29,23 +29,23 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSBIN @GEOSBIN -setenv GEOSUTIL @GEOSSRC +setenv SITE {{ SITE }} +setenv GEOSBIN {{ GEOSBIN }} +setenv GEOSUTIL {{ GEOSSRC }} source $GEOSBIN/g5_modules -setenv @LD_LIBRARY_PATH_CMD ${LD_LIBRARY_PATH} +setenv {{ LD_LIBRARY_PATH_CMD }} ${LD_LIBRARY_PATH} if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} ${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib endif ####################################################################### # Experiment Specific Environment Variables ####################################################################### -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} ####################################################################### # Quickplot Commands @@ -64,5 +64,5 @@ endif ####################################################################### set MOVE = `grep PLOT_MOVE: $EXPDIR/plot/plot.rc | cut -d'#' -f1 | cut -d':' -f2` -if( $MOVE[1] == 'ON' ) @BATCH_CMD $EXPDIR/plot/gcm_moveplot.j +if( $MOVE[1] == 'ON' ) {{ BATCH_CMD }} $EXPDIR/plot/gcm_moveplot.j diff --git a/gcm_post.j b/gcm_post.j index 7cc0be91..97a4a10f 100755 --- a/gcm_post.j +++ b/gcm_post.j @@ -4,13 +4,13 @@ # Batch Parameters for Post-Processing Job ####################################################################### -#@BATCH_TIME@POST_T -#@POST_P -#@BATCH_JOBNAME@POST_N_@COLLECTION.@YYYYMM -#@POST_Q -#@BATCH_GROUP -#@BATCH_OUTPUTNAME@POST_O -#@BATCH_JOINOUTERR +#{{ BATCH_TIME }}{{ POST_T }} +#{{ POST_P }} +#{{ BATCH_JOBNAME }}{{ POST_N }}_@COLLECTION.@YYYYMM +#{{ POST_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_OUTPUTNAME }}@POST_O +#{{ BATCH_JOINOUTERR }} ####################################################################### # System Environment Variables @@ -20,9 +20,9 @@ umask 022 limit stacksize unlimited -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} ####################################################################### # Architecture Specific Environment Variables @@ -30,22 +30,22 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSBIN @GEOSBIN -setenv GEOSUTIL @GEOSSRC -setenv BATCHNAME "@POST_N" +setenv SITE {{ SITE }} +setenv GEOSBIN {{ GEOSBIN }} +setenv GEOSUTIL {{ GEOSSRC }} +setenv BATCHNAME "{{ POST_N }}" source $GEOSBIN/g5_modules -setenv @LD_LIBRARY_PATH_CMD ${LD_LIBRARY_PATH} +setenv {{ LD_LIBRARY_PATH_CMD }} ${LD_LIBRARY_PATH} if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} ${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib endif if( $?SLURM_NTASKS ) then - setenv RUN_CMD "@RUN_CMD" + setenv RUN_CMD "{{ RUN_CMD }}" set NCPUS = $SLURM_NTASKS else if( $?PBS_NODEFILE ) then - setenv RUN_CMD "@RUN_CMD" + setenv RUN_CMD "{{ RUN_CMD }}" set NCPUS = `cat $PBS_NODEFILE | wc -l` else set NCPUS = NULL @@ -55,6 +55,6 @@ endif # Perform Post Processing ####################################################################### -$GEOSUTIL/post/gcmpost.script -source @EXPDIR -ncpus $NCPUS -collections @COLLECTION -rec_plt @YYYYMM +$GEOSUTIL/post/gcmpost.script -source {{ EXPDIR }} -ncpus $NCPUS -collections @COLLECTION -rec_plt @YYYYMM exit diff --git a/gcm_regress.j b/gcm_regress.j index 7eb336c5..ce42f842 100755 --- a/gcm_regress.j +++ b/gcm_regress.j @@ -4,11 +4,11 @@ # Batch Parameters for Regress Job ####################################################################### -#@BATCH_TIME@RUN_T -#@REGRESS_P -#@BATCH_JOBNAME@REGRESS_N -#@RUN_Q -#@BATCH_GROUP +#{{ BATCH_TIME }}{{ RUN_T }} +#{{ REGRESS_P }} +#{{ BATCH_JOBNAME }}{{ REGRESS_N }} +#{{ RUN_Q }} +#{{ BATCH_GROUP }} ####################################################################### # System Environment Variables @@ -18,9 +18,9 @@ umask 022 limit stacksize unlimited -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} # Establish safe default number of OpenMP threads # ----------------------------------------------- @@ -94,33 +94,31 @@ set argv = () setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSDIR @GEOSDIR -setenv GEOSBIN @GEOSBIN +setenv SITE {{ SITE }} +setenv GEOSDIR {{ GEOSDIR }} +setenv GEOSBIN {{ GEOSBIN }} source $GEOSBIN/g5_modules - # We only prepend to DY/LD_LIBRARY_PATH if it exists -if ( $?@LD_LIBRARY_PATH_CMD ) then - setenv @LD_LIBRARY_PATH_CMD "${@LD_LIBRARY_PATH_CMD}:${GEOSDIR}/lib" +if ( $?{{ LD_LIBRARY_PATH_CMD }} ) then + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${GEOSDIR}/lib" else - setenv @LD_LIBRARY_PATH_CMD "${GEOSDIR}/lib" + setenv {{ LD_LIBRARY_PATH_CMD }} "${GEOSDIR}/lib" endif - -# We only add BASEDIR to the @LD_LIBRARY_PATH_CMD if BASEDIR is defined (i.e., not running with Spack) +# We only add BASEDIR to the {{ LD_LIBRARY_PATH_CMD }} if BASEDIR is defined (i.e., not running with Spack) if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD ${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib" endif -setenv RUN_CMD "@RUN_CMD" +setenv RUN_CMD "{{ RUN_CMD }}" ####################################################################### # Experiment Specific Environment Variables ####################################################################### -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} setenv SCRDIR $EXPDIR/scratch ####################################################################### @@ -146,9 +144,9 @@ cp $EXPDIR/RC/*.yaml $EXPDIR/regress cp $EXPDIR/GEOSgcm.x $EXPDIR/regress cp $EXPDIR/linkbcs $EXPDIR/regress cp $HOMDIR/*.yaml $EXPDIR/regress -@COUPLED cp $HOMDIR/*.nml $EXPDIR/regress -@MOM6cp $HOMDIR/MOM_input $EXPDIR/regress -@MOM6cp $HOMDIR/MOM_override $EXPDIR/regress +{{ COUPLED }} cp $HOMDIR/*.nml $EXPDIR/regress +{{ MOM6 }}cp $HOMDIR/MOM_input $EXPDIR/regress +{{ MOM6 }}cp $HOMDIR/MOM_override $EXPDIR/regress cat fvcore_layout.rc >> input.nml @@ -185,8 +183,8 @@ foreach rst ( $rst_file_names ) end cp $EXPDIR/cap_restart $EXPDIR/regress -@COUPLED /bin/mkdir INPUT -@COUPLED cp $EXPDIR/RESTART/* INPUT +{{ COUPLED }} /bin/mkdir INPUT +{{ COUPLED }} cp $EXPDIR/RESTART/* INPUT setenv YEAR `cat cap_restart | cut -c1-4` ./linkbcs @@ -264,23 +262,23 @@ COLLECTIONS: test_collection test_collection.grid_label: PC180x91-DC , test_collection.deflate: 1 , test_collection.frequency: 060000 , -@DATAOCEAN test_collection.fields: 'PHIS', 'AGCM' , -@DATAOCEAN 'SLP' , 'DYN' , -@DATAOCEAN 'T' , 'DYN' , -@DATAOCEAN 'U;V' , 'DYN' , -@DATAOCEAN 'Q' , 'MOIST', 'QV', -@MOM5 test_collection.fields: 'UW' ,'MOM' , 'US', -@MOM5 'VW' ,'MOM' , 'VS', -@MOM5 'TW' ,'MOM' , 'TS', -@MOM5 'SW' ,'MOM' , 'SS', -@MOM5 'SLV' ,'MOM' , -@MOM5 'QFLUX','OCEAN' , -@MOM6 test_collection.fields: 'UW' ,'MOM6' , 'US', -@MOM6 'VW' ,'MOM6' , 'VS', -@MOM6 'TW' ,'MOM6' , 'TS', -@MOM6 'SW' ,'MOM6' , 'SS', -@MOM6 'SLV' ,'MOM6' , -@MOM6 'QFLUX','OCEAN' , +{{ DATAOCEAN }} test_collection.fields: 'PHIS', 'AGCM' , +{{ DATAOCEAN }} 'SLP' , 'DYN' , +{{ DATAOCEAN }} 'T' , 'DYN' , +{{ DATAOCEAN }} 'U;V' , 'DYN' , +{{ DATAOCEAN }} 'Q' , 'MOIST', 'QV', +{{ MOM5 }} test_collection.fields: 'UW' ,'MOM' , 'US', +{{ MOM5 }} 'VW' ,'MOM' , 'VS', +{{ MOM5 }} 'TW' ,'MOM' , 'TS', +{{ MOM5 }} 'SW' ,'MOM' , 'SS', +{{ MOM5 }} 'SLV' ,'MOM' , +{{ MOM5 }} 'QFLUX','OCEAN' , +{{ MOM6 }} test_collection.fields: 'UW' ,'MOM6' , 'US', +{{ MOM6 }} 'VW' ,'MOM6' , 'VS', +{{ MOM6 }} 'TW' ,'MOM6' , 'TS', +{{ MOM6 }} 'SW' ,'MOM6' , 'SS', +{{ MOM6 }} 'SLV' ,'MOM6' , +{{ MOM6 }} 'QFLUX','OCEAN' , :: _EOF_ @@ -329,8 +327,8 @@ set EXTDATA2G_TRUE = `grep -i '^\s*USE_EXTDATA2G:\s*\.TRUE\.' CAP.rc | wc -l # Select proper AMIP GOCART Emission RC Files # ------------------------------------------- -setenv EMISSIONS @EMISSIONS -if( @EMISSIONS == AMIP_EMISSIONS ) then +setenv EMISSIONS {{ EMISSIONS }} +if( {{ EMISSIONS }} == AMIP_EMISSIONS ) then if( $EXTDATA2G_TRUE == 0 ) then set AMIP_Transition_Date = 20000301 @@ -357,16 +355,16 @@ if( @EMISSIONS == AMIP_EMISSIONS ) then endif endif -@MP_TURN_OFF_WSUB_EXTDATA# 1MOM and GFDL microphysics do not use WSUB_CLIM -@MP_TURN_OFF_WSUB_EXTDATA# ------------------------------------------------- +{{ MP_TURN_OFF_WSUB_EXTDATA }}# 1MOM and GFDL microphysics do not use WSUB_CLIM +{{ MP_TURN_OFF_WSUB_EXTDATA }}# ------------------------------------------------- if ($EXTDATA2G_TRUE == 0 ) then - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc else - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml endif -@MP_TURN_OFF_WSUB_EXTDATA/bin/rm WSUB_ExtData.tmp +{{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/rm WSUB_ExtData.tmp # Generate the complete ExtData.rc # -------------------------------- @@ -410,14 +408,14 @@ if( $LM != 72 ) then endif endif -@RRTMGP_RADIATION # Move GOCART to use RRTMGP Bands -@RRTMGP_RADIATION # ------------------------------- -@RRTMGP_RADIATION set instance_files = `/bin/ls -1 *_instance*.rc` -@RRTMGP_RADIATION foreach instance ($instance_files) - @RRTMGP_RADIATION /bin/mv $instance $instance.tmp - @RRTMGP_RADIATION cat $instance.tmp | sed -e '/\bRRTMG\b/ s#RRTMG#RRTMGP#' > $instance - @RRTMGP_RADIATION /bin/rm $instance.tmp -@RRTMGP_RADIATION end +{{ RRTMGP_RADIATION }} # Move GOCART to use RRTMGP Bands +{{ RRTMGP_RADIATION }} # ------------------------------- +{{ RRTMGP_RADIATION }} set instance_files = `/bin/ls -1 *_instance*.rc` +{{ RRTMGP_RADIATION }} foreach instance ($instance_files) + {{ RRTMGP_RADIATION }} /bin/mv $instance $instance.tmp + {{ RRTMGP_RADIATION }} cat $instance.tmp | sed -e '/\bRRTMG\b/ s#RRTMG#RRTMGP#' > $instance + {{ RRTMGP_RADIATION }} /bin/rm $instance.tmp +{{ RRTMGP_RADIATION }} end # If REPLAY, link necessary forcing files # --------------------------------------- @@ -514,7 +512,7 @@ if( $RUN_STARTSTOP == TRUE ) then echo "=== Running test of duration ${test_duration_step1} with NX = $NX and NY = $NY starting at $nymd0 $nhms0 ===" - @OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' + {{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' set date = `cat cap_restart` set nymde1 = $date[1] @@ -533,7 +531,7 @@ if( $RUN_STARTSTOP == TRUE ) then /bin/mv -v $chk ${chk}.${nymde1}_${nhmse1}.1 end - @MOM6/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.1 + {{ MOM6 }}/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.1 # Move history as well set hist_file_names = `ls -1 ${EXPID}.test_collection.*.nc4` @@ -562,9 +560,9 @@ cp CAP.rc.orig CAP.rc cp AGCM.rc.orig AGCM.rc cp HISTORY.rc0 HISTORY.rc -@COUPLED /bin/rm -rf INPUT -@COUPLED /bin/mkdir INPUT -@COUPLED cp $EXPDIR/RESTART/* INPUT +{{ COUPLED }} /bin/rm -rf INPUT +{{ COUPLED }} /bin/mkdir INPUT +{{ COUPLED }} cp $EXPDIR/RESTART/* INPUT ./strip CAP.rc set oldstring = `cat CAP.rc | grep JOB_SGMT:` @@ -580,7 +578,7 @@ set NY = `grep "^ *NY": AGCM.rc | cut -d':' -f2` echo "=== Running test of duration ${test_duration_step2} with NX = $NX and NY = $NY starting at $nymd0 $nhms0 ===" -@OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' +{{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' set date = `cat cap_restart` set nymde2 = $date[1] @@ -607,7 +605,7 @@ foreach chk ( $replay_chk_file_names ) $MOVE_OR_COPY $chk ${chk}.${nymde1}_${nhmse1}.2 end -@MOM6 $MOVE_OR_COPY RESTART/MOM.res.nc MOM.res.nc.2 +{{ MOM6 }} $MOVE_OR_COPY RESTART/MOM.res.nc MOM.res.nc.2 # *Copy* history as well set hist_file_names = `ls -1 ${EXPID}.test_collection.*.nc4` @@ -648,7 +646,7 @@ while ( $n <= $numchk ) @ n = $n + 1 end -@COUPLED cp RESTART/* INPUT +{{ COUPLED }} cp RESTART/* INPUT ################################################################## ###### @@ -663,10 +661,10 @@ if ($RUN_STARTSTOP == TRUE) then cp HISTORY.rc0 HISTORY.rc - @MOM6# When you restart in MOM6 mode, you must change input_filename - @MOM6# in the input.nml file from 'n' to 'r' - @MOM6 /bin/cp input.nml input.nml.orig - @MOM6 sed -i -e "s/input_filename = 'n'/input_filename = 'r'/g" input.nml + {{ MOM6 }}# When you restart in MOM6 mode, you must change input_filename + {{ MOM6 }}# in the input.nml file from 'n' to 'r' + {{ MOM6 }} /bin/cp input.nml input.nml.orig + {{ MOM6 }} sed -i -e "s/input_filename = 'n'/input_filename = 'r'/g" input.nml ./strip CAP.rc set oldstring = `cat CAP.rc | grep JOB_SGMT:` @@ -699,7 +697,7 @@ if ($RUN_STARTSTOP == TRUE) then echo "=== Running test of duration ${test_duration_step3} with NX = $NX and NY = $NY starting at $nymdb $nhmsb ===" - @OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' + {{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' set date = `cat cap_restart` set nymde3 = $date[1] @@ -715,7 +713,7 @@ if ($RUN_STARTSTOP == TRUE) then foreach chk ( $replay_chk_file_names ) /bin/mv -v $chk ${chk}.${nymde1}_${nhmse1}.3 end - @MOM6/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.3 + {{ MOM6 }}/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.3 # Move history as well set hist_file_names = `ls -1 ${EXPID}.test_collection.*.nc4` @@ -751,12 +749,12 @@ if ( $RUN_LAYOUT == TRUE) then cp $EXPDIR/$rst $EXPDIR/regress end - @COUPLED /bin/rm -rf INPUT - @COUPLED /bin/mkdir INPUT - @COUPLED cp $EXPDIR/RESTART/* INPUT + {{ COUPLED }} /bin/rm -rf INPUT + {{ COUPLED }} /bin/mkdir INPUT + {{ COUPLED }} cp $EXPDIR/RESTART/* INPUT - @COUPLED # restore original input.nml - @COUPLED /bin/mv input.nml.orig input.nml + {{ COUPLED }} # restore original input.nml + {{ COUPLED }} /bin/mv input.nml.orig input.nml /bin/rm cap_restart echo $nymd0 $nhms0 > cap_restart @@ -797,17 +795,17 @@ if ( $RUN_LAYOUT == TRUE) then # cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc # ############################################################### - @COUPLED set oldstring = `cat AGCM.rc | grep "^ *OGCM.NX:"` - @COUPLED set newstring = "OGCM.NX: ${test_NY}" - @COUPLED /bin/mv AGCM.rc AGCM.tmp - @COUPLED cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc - @COUPLED set oldstring = `cat AGCM.rc | grep "^ *OGCM.NY:"` - @COUPLED set newstring = "OGCM.NY: ${test_NX}" - @COUPLED /bin/mv AGCM.rc AGCM.tmp - @COUPLED cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc + {{ COUPLED }} set oldstring = `cat AGCM.rc | grep "^ *OGCM.NX:"` + {{ COUPLED }} set newstring = "OGCM.NX: ${test_NY}" + {{ COUPLED }} /bin/mv AGCM.rc AGCM.tmp + {{ COUPLED }} cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc + {{ COUPLED }} set oldstring = `cat AGCM.rc | grep "^ *OGCM.NY:"` + {{ COUPLED }} set newstring = "OGCM.NY: ${test_NX}" + {{ COUPLED }} /bin/mv AGCM.rc AGCM.tmp + {{ COUPLED }} cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc - @MOM5sed -r -i -e "/^ *layout/ s#= ([0-9]+),*([0-9]+)#= ${test_NY},${test_NX}#" input.nml - @MOM6sed -r -i -e "s/#override LAYOUT = 3, 2/#override LAYOUT = ${test_NY}, ${test_NX}/g" MOM_override + {{ MOM5 }}sed -r -i -e "/^ *layout/ s#= ([0-9]+),*([0-9]+)#= ${test_NY},${test_NX}#" input.nml + {{ MOM6 }}sed -r -i -e "s/#override LAYOUT = 3, 2/#override LAYOUT = ${test_NY}, ${test_NX}/g" MOM_override setenv YEAR `cat cap_restart | cut -c1-4` ./linkbcs @@ -830,7 +828,7 @@ if ( $RUN_LAYOUT == TRUE) then echo "=== Running test of duration ${test_duration_step4} with NX = $test_NX and NY = $test_NY starting at $nymd0 $nhms0 ===" - @OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' + {{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' set date = `cat cap_restart` set nymde4 = $date[1] @@ -847,7 +845,7 @@ if ( $RUN_LAYOUT == TRUE) then /bin/mv -v $chk ${chk}.${nymde1}_${nhmse1}.4 end - @MOM6/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.4 + {{ MOM6 }}/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.4 # Move history as well set hist_file_names = `ls -1 ${EXPID}.test_collection.*.nc4` @@ -889,12 +887,12 @@ if ( $RUN_OPENMP == TRUE) then cp $EXPDIR/$rst $EXPDIR/regress end - @COUPLED /bin/rm -rf INPUT - @COUPLED /bin/mkdir INPUT - @COUPLED cp $EXPDIR/RESTART/* INPUT + {{ COUPLED }} /bin/rm -rf INPUT + {{ COUPLED }} /bin/mkdir INPUT + {{ COUPLED }} cp $EXPDIR/RESTART/* INPUT - @COUPLED # restore original input.nml - @COUPLED /bin/mv input.nml.orig input.nml + {{ COUPLED }} # restore original input.nml + {{ COUPLED }} /bin/mv input.nml.orig input.nml /bin/rm cap_restart echo $nymd0 $nhms0 > cap_restart @@ -920,17 +918,17 @@ if ( $RUN_OPENMP == TRUE) then /bin/mv AGCM.rc AGCM.tmp cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc - @COUPLED set oldstring = `cat AGCM.rc | grep "^ *OGCM.NX:"` - @COUPLED set newstring = "OGCM.NX: ${OGCM_NX0}" - @COUPLED /bin/mv AGCM.rc AGCM.tmp - @COUPLED cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc - @COUPLED set oldstring = `cat AGCM.rc | grep "^ *OGCM.NY:"` - @COUPLED set newstring = "OGCM.NY: ${OGCM_NY0}" - @COUPLED /bin/mv AGCM.rc AGCM.tmp - @COUPLED cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc + {{ COUPLED }} set oldstring = `cat AGCM.rc | grep "^ *OGCM.NX:"` + {{ COUPLED }} set newstring = "OGCM.NX: ${OGCM_NX0}" + {{ COUPLED }} /bin/mv AGCM.rc AGCM.tmp + {{ COUPLED }} cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc + {{ COUPLED }} set oldstring = `cat AGCM.rc | grep "^ *OGCM.NY:"` + {{ COUPLED }} set newstring = "OGCM.NY: ${OGCM_NY0}" + {{ COUPLED }} /bin/mv AGCM.rc AGCM.tmp + {{ COUPLED }} cat AGCM.tmp | sed -e "s?$oldstring?$newstring?g" > AGCM.rc - @MOM5sed -r -i -e "/^ *layout/ s#= ([0-9]+),*([0-9]+)#= ${OGCM_NX0},${OGCM_NY0}#" input.nml - @MOM6sed -r -i -e "s/#override LAYOUT = 3, 2/#override LAYOUT = ${OGCM_NX0}, ${OGCM_NY0}/g" MOM_override + {{ MOM5 }}sed -r -i -e "/^ *layout/ s#= ([0-9]+),*([0-9]+)#= ${OGCM_NX0},${OGCM_NY0}#" input.nml + {{ MOM6 }}sed -r -i -e "s/#override LAYOUT = 3, 2/#override LAYOUT = ${OGCM_NX0}, ${OGCM_NY0}/g" MOM_override setenv YEAR `cat cap_restart | cut -c1-4` ./linkbcs @@ -953,7 +951,7 @@ if ( $RUN_OPENMP == TRUE) then echo "=== Running OpenMP test of duration ${test_duration_step5} with NX = $NX0 and NY = $NY0 starting at $nymd0 $nhms0 ===" - @OCEAN_PRELOAD $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' + {{ OCEAN_PRELOAD }} $RUN_CMD $NPES ./GEOSgcm.x --logging_config 'logging.yaml' set date = `cat cap_restart` set nymde4 = $date[1] @@ -970,7 +968,7 @@ if ( $RUN_OPENMP == TRUE) then /bin/mv -v $chk ${chk}.${nymde1}_${nhmse1}.5 end - @MOM6/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.5 + {{ MOM6 }}/bin/mv -v RESTART/MOM.res.nc MOM.res.nc.5 # Move history as well set hist_file_names = `ls -1 ${EXPID}.test_collection.*.nc4` @@ -1030,24 +1028,24 @@ if ($RUN_STARTSTOP == TRUE) then endif end - @MOM6# check MOM.res.nc (MOM6 restart) - @MOM6set file1 = MOM.res.nc.1 - @MOM6set file2 = MOM.res.nc.3 - @MOM6if( -e $file1 && -e $file2 ) then - @MOM6 set check = true - @MOM6 if( $check == true ) then - @MOM6 echo Comparing "MOM6 restarts" - @MOM6 cmp $file1 $file2 - @MOM6 if( $status == 0 ) then - @MOM6 echo Start-Stop Success! - @MOM6 echo " " - @MOM6 else - @MOM6 echo Start-Stop Failed! - @MOM6 echo " " - @MOM6 set startstop_pass = false - @MOM6 endif - @MOM6 endif - @MOM6endif + {{ MOM6 }}# check MOM.res.nc (MOM6 restart) + {{ MOM6 }}set file1 = MOM.res.nc.1 + {{ MOM6 }}set file2 = MOM.res.nc.3 + {{ MOM6 }}if( -e $file1 && -e $file2 ) then + {{ MOM6 }} set check = true + {{ MOM6 }} if( $check == true ) then + {{ MOM6 }} echo Comparing "MOM6 restarts" + {{ MOM6 }} cmp $file1 $file2 + {{ MOM6 }} if( $status == 0 ) then + {{ MOM6 }} echo Start-Stop Success! + {{ MOM6 }} echo " " + {{ MOM6 }} else + {{ MOM6 }} echo Start-Stop Failed! + {{ MOM6 }} echo " " + {{ MOM6 }} set pass = false + {{ MOM6 }} endif + {{ MOM6 }} endif + {{ MOM6 }}endif echo "=== Comparing replay checkpoint files from ${NX0}x${NY0} run of duration ${test_duration_step1} with restarts from ${test_duration_step2} + ${test_duration_step3} ${NX0}x${NY0} runs ===" @@ -1155,24 +1153,24 @@ if ($RUN_LAYOUT == TRUE) then endif end - @MOM6# check MOM.res.nc (MOM6 restart) - @MOM6set file1 = MOM.res.nc.2 - @MOM6set file2 = MOM.res.nc.4 - @MOM6if( -e $file1 && -e $file2 ) then - @MOM6 set check = true - @MOM6 if( $check == true ) then - @MOM6 echo Comparing "MOM6 restarts" - @MOM6 cmp $file1 $file2 - @MOM6 if( $status == 0 ) then - @MOM6 echo Layout Success! - @MOM6 echo " " - @MOM6 else - @MOM6 echo Layout Failed! - @MOM6 echo " " - @MOM6 set layout_pass = false - @MOM6 endif - @MOM6 endif - @MOM6endif + {{ MOM6 }}# check MOM.res.nc (MOM6 restart) + {{ MOM6 }}set file1 = MOM.res.nc.2 + {{ MOM6 }}set file2 = MOM.res.nc.4 + {{ MOM6 }}if( -e $file1 && -e $file2 ) then + {{ MOM6 }} set check = true + {{ MOM6 }} if( $check == true ) then + {{ MOM6 }} echo Comparing "MOM6 restarts" + {{ MOM6 }} cmp $file1 $file2 + {{ MOM6 }} if( $status == 0 ) then + {{ MOM6 }} echo Layout Success! + {{ MOM6 }} echo " " + {{ MOM6 }} else + {{ MOM6 }} echo Layout Failed! + {{ MOM6 }} echo " " + {{ MOM6 }} set pass = false + {{ MOM6 }} endif + {{ MOM6 }} endif + {{ MOM6 }}endif echo "=== Comparing replay checkpoint files from 6-hour ${NX0}x${NY0} run with restarts from 6-hour ${test_NX}x${test_NY} run ===" @@ -1287,24 +1285,24 @@ if ($RUN_OPENMP == TRUE) then endif end - @MOM6# check MOM.res.nc (MOM6 restart) - @MOM6set file1 = MOM.res.nc.2 - @MOM6set file2 = MOM.res.nc.5 - @MOM6if( -e $file1 && -e $file2 ) then - @MOM6 set check = true - @MOM6 if( $check == true ) then - @MOM6 echo Comparing "MOM6 restarts" - @MOM6 cmp $file1 $file2 - @MOM6 if( $status == 0 ) then - @MOM6 echo OpenMP Success! - @MOM6 echo " " - @MOM6 else - @MOM6 echo OpenMP Failed! - @MOM6 echo " " - @MOM6 set openmp_pass = false - @MOM6 endif - @MOM6 endif - @MOM6endif + {{ MOM6 }}# check MOM.res.nc (MOM6 restart) + {{ MOM6 }}set file1 = MOM.res.nc.2 + {{ MOM6 }}set file2 = MOM.res.nc.5 + {{ MOM6 }}if( -e $file1 && -e $file2 ) then + {{ MOM6 }} set check = true + {{ MOM6 }} if( $check == true ) then + {{ MOM6 }} echo Comparing "MOM6 restarts" + {{ MOM6 }} cmp $file1 $file2 + {{ MOM6 }} if( $status == 0 ) then + {{ MOM6 }} echo OpenMP Success! + {{ MOM6 }} echo " " + {{ MOM6 }} else + {{ MOM6 }} echo OpenMP Failed! + {{ MOM6 }} echo " " + {{ MOM6 }} set openmp_pass = false + {{ MOM6 }} endif + {{ MOM6 }} endif + {{ MOM6 }}endif echo "=== Comparing replay checkpoint files from 6-hour ${NX0}x${NY0} run with restarts from 6-hour OpenMP:2 ${NX0}x${NY0} run ===" diff --git a/gcm_run.j b/gcm_run.j index e45204df..e1857834 100755 --- a/gcm_run.j +++ b/gcm_run.j @@ -4,12 +4,12 @@ # Batch Parameters for Run Job ####################################################################### -#@BATCH_TIME@RUN_T -#@RUN_P -#@BATCH_JOBNAME@RUN_N -#@RUN_Q -#@BATCH_GROUP -#@BATCH_JOINOUTERR +#{{ BATCH_TIME }}{{ RUN_T }} +#{{ RUN_P }} +#{{ BATCH_JOBNAME }}{{ RUN_N }} +#{{ RUN_Q }} +#{{ BATCH_GROUP }} +#{{ BATCH_JOINOUTERR }} #@BATCH_NAME -o gcm_run.o@RSTDATE ####################################################################### @@ -26,26 +26,26 @@ limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSDIR @GEOSDIR -setenv GEOSBIN @GEOSBIN -setenv GEOSETC @GEOSETC -setenv GEOSUTIL @GEOSSRC +setenv SITE {{ SITE }} +setenv GEOSDIR {{ GEOSDIR }} +setenv GEOSBIN {{ GEOSBIN }} +setenv GEOSETC {{ GEOSETC }} +setenv GEOSUTIL {{ GEOSSRC }} source $GEOSBIN/g5_modules # We only prepend to DY/LD_LIBRARY_PATH if it exists -if ( $?@LD_LIBRARY_PATH_CMD ) then - setenv @LD_LIBRARY_PATH_CMD "${@LD_LIBRARY_PATH_CMD}:${GEOSDIR}/lib" +if ( $?{{ LD_LIBRARY_PATH_CMD }} ) then + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${GEOSDIR}/lib" else - setenv @LD_LIBRARY_PATH_CMD "${GEOSDIR}/lib" + setenv {{ LD_LIBRARY_PATH_CMD }} "${GEOSDIR}/lib" endif -# We only add BASEDIR to the @LD_LIBRARY_PATH_CMD if BASEDIR is defined (i.e., not running with Spack) +# We only add BASEDIR to the {{ LD_LIBRARY_PATH_CMD }} if BASEDIR is defined (i.e., not running with Spack) if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD "${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib" + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib" setenv PATH "${PATH}:${BASEDIR}/${ARCH}/bin" endif -setenv RUN_CMD "@RUN_CMD" +setenv RUN_CMD "{{ RUN_CMD }}" setenv GCMVER `cat $GEOSETC/.AGCM_VERSION` echo VERSION: $GCMVER @@ -55,9 +55,9 @@ echo VERSION: $GCMVER ####################################################################### -setenv EXPID @EXPID -setenv EXPDIR @EXPDIR -setenv HOMDIR @HOMDIR +setenv EXPID {{ EXPID }} +setenv EXPDIR {{ EXPDIR }} +setenv HOMDIR {{ HOMDIR }} setenv RSTDATE @RSTDATE setenv GCMEMIP @GCMEMIP @@ -151,14 +151,14 @@ set AGCM_LM = `grep '^\s*AGCM_LM:' $HOMDIR/AGCM.rc | cut -d: -f2` set OGCM_IM = `grep '^\s*OGCM\.IM_WORLD:' $HOMDIR/AGCM.rc | cut -d: -f2` set OGCM_JM = `grep '^\s*OGCM\.JM_WORLD:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set OGCM_LM = `grep '^\s*OGCM\.LM:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set NX = `grep '^\s*OGCM\.NX:' $HOMDIR/AGCM.rc | cut -d: -f2` -@COUPLED set NY = `grep '^\s*OGCM\.NY:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set OGCM_LM = `grep '^\s*OGCM\.LM:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set NX = `grep '^\s*OGCM\.NX:' $HOMDIR/AGCM.rc | cut -d: -f2` +{{ COUPLED }} set NY = `grep '^\s*OGCM\.NY:' $HOMDIR/AGCM.rc | cut -d: -f2` # Calculate number of cores/nodes for IOSERVER # -------------------------------------------- -set USE_IOSERVER = @USE_IOSERVER +set USE_IOSERVER = {{ USE_IOSERVER }} set NUM_OSERVER_NODES = `grep '^\s*IOSERVER_NODES:' $HOMDIR/AGCM.rc | cut -d: -f2` set NUM_BACKEND_PES = `grep '^\s*NUM_BACKEND_PES:' $HOMDIR/AGCM.rc | cut -d: -f2` @@ -184,7 +184,7 @@ else if ($?PBS_NODEFILE) then else # This is the default value if nothing is specified that is used # for desktops and laptops from gcm_setup - set NCPUS_PER_NODE = @NCPUS_PER_NODE + set NCPUS_PER_NODE = {{ NCPUS_PER_NODE }} endif set NUM_MODEL_NODES=`echo "scale=6;($MODEL_NPES / $NCPUS_PER_NODE)" | bc | awk 'function ceil(x, y){y=int(x); return(x>y?y+1:y)} {print ceil($1)}'` @@ -261,7 +261,7 @@ tar -xvf restarts.e${year}${month}10_21z.tar --wildcards "*_internal_rst*" # ------------------------------------------------ set RSTID = `/bin/ls *catch* | /bin/grep -Po '^.*(?=\.\w+_rst\.)'` set day = `/bin/ls *catch* | /bin/grep -Po '(?<=\d{6})\d{2}(?=_21z)'` -$GEOSBIN/remap_restarts.py command_line -np -ymdh ${year}${month}${day}21 -grout C${AGCM_IM} -levsout ${AGCM_LM} -out_dir . -rst_dir . -expid $RSTID -bcvin NL3 -oceanin 1440x720 -in_bc_base /discover/nobackup/projects/gmao/bcs_shared/fvInput/ExtData/esm/tiles -newid regrid -nobkg -nolcv -bcvout @LSMBCS -rs 3 -oceanout @OCEANOUT -out_bc_base @BC_BASE +$GEOSBIN/remap_restarts.py command_line -np -ymdh ${year}${month}${day}21 -grout C${AGCM_IM} -levsout ${AGCM_LM} -out_dir . -rst_dir . -expid $RSTID -bcvin NL3 -oceanin 1440x720 -in_bc_base /discover/nobackup/projects/gmao/bcs_shared/fvInput/ExtData/esm/tiles -newid regrid -nobkg -nolcv -bcvout {{ LSMBCS }} -rs 3 -oceanout {{ OCEANOUT }} -out_bc_base {{ BC_BASE }} set IMC = $AGCM_IM if( $IMC < 10 ) then @@ -338,9 +338,9 @@ if (-z input.nml) then exit 2 endif -@MOM6cp -f $HOMDIR/MOM_input . -@MOM6cp -f $HOMDIR/MOM_override . -@CICE6cp -f $HOMDIR/ice_in . +{{ MOM6 }}cp -f $HOMDIR/MOM_input . +{{ MOM6 }}cp -f $HOMDIR/MOM_override . +{{ CICE6 }}cp -f $HOMDIR/ice_in . if( $GCMEMIP == TRUE ) then cp -f $EXPDIR/restarts/$RSTDATE/cap_restart . @@ -384,112 +384,112 @@ done: ####################################################################### # Link Boundary Datasets ####################################################################### -setenv BCSDIR @BCSDIR -@DATAOCEANsetenv SSTDIR @SSTDIR -setenv BCRSLV @ATMOStag_@OCEANtag -@MOM5setenv SSTDIR @COUPLEDIR/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 -@MOM6setenv SSTDIR @COUPLEDIR/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 +setenv BCSDIR {{ BCSDIR }} +{{ DATAOCEAN }}setenv SSTDIR {{ SSTDIR }} +setenv BCRSLV {{ ATMOStag }}_{{ OCEANtag }} +{{ MOM5 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 +{{ MOM6 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/${OGCM_IM}x${OGCM_JM}/v1 #this is hard-wired for NAS for now - should make it more general -@DATAOCEANsetenv BCTAG `basename $BCSDIR` -@COUPLEDsetenv BCTAG `basename @COUPLEDIR/@OCNMODEL/${OGCM_IM}x${OGCM_JM}` -setenv EMISSIONS @EMISSIONS +{{ DATAOCEAN }}setenv BCTAG `basename $BCSDIR` +{{ COUPLED }}setenv BCTAG `basename {{ COUPLEDIR }}/{{ OCNMODEL }}/${OGCM_IM}x${OGCM_JM}` +setenv EMISSIONS {{ EMISSIONS }} chmod +x linkbcs -@GCMRUN_CATCHCNset LSM_CHOICE = `grep LSM_CHOICE: AGCM.rc | cut -d':' -f2` -@GCMRUN_CATCHCNif ($LSM_CHOICE == 2) then -@GCMRUN_CATCHCN grep -v "'CNFROOTC'" HISTORY.rc > Hist_tmp.rc && mv Hist_tmp.rc HISTORY.rc -@GCMRUN_CATCHCNendif +{{ GCMRUN_CATCHCN }}set LSM_CHOICE = `grep LSM_CHOICE: AGCM.rc | cut -d':' -f2` +{{ GCMRUN_CATCHCN }}if ($LSM_CHOICE == 2) then +{{ GCMRUN_CATCHCN }} grep -v "'CNFROOTC'" HISTORY.rc > Hist_tmp.rc && mv Hist_tmp.rc HISTORY.rc +{{ GCMRUN_CATCHCN }}endif ####################################################################### # Setup executable ####################################################################### -@SINGULARITY_BUILD ####################################################################### -@SINGULARITY_BUILD # Settings for Singularity - EXPERIMENTAL -@SINGULARITY_BUILD ####################################################################### -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Based on work on discover, to run you need to load the same compiler -@SINGULARITY_BUILD # and MPI to match those in the container. For example, if your container was -@SINGULARITY_BUILD # built with: -@SINGULARITY_BUILD # GNU 11.2.0 -@SINGULARITY_BUILD # Intel Fortran 2021.6.0 (aka Intel oneAPI 2022.1.0) -@SINGULARITY_BUILD # Intel MPI 2021.6.0 (aka Intel oneAPI 2022.1.0) -@SINGULARITY_BUILD # then you would need to load: -@SINGULARITY_BUILD # source /usr/share/modules/init/csh -@SINGULARITY_BUILD # module purge -@SINGULARITY_BUILD # module load comp/gcc/11.2.0 -@SINGULARITY_BUILD # module load comp/intel/2021.6.0 -@SINGULARITY_BUILD # module load mpi/impi/2021.6.0 -@SINGULARITY_BUILD # -@SINGULARITY_BUILD # And then also append ${GEOSDIR}/lib to LD_LIBRARY_PATH -@SINGULARITY_BUILD # setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${GEOSDIR}/lib -@SINGULARITY_BUILD # -@SINGULARITY_BUILD # For now we use the fact that on discover we can source g5_modules -@SINGULARITY_BUILD # -@SINGULARITY_BUILD # If you are using singularity, set the path to the singularity sandbox here -@SINGULARITY_BUILD setenv SINGULARITY_SANDBOX @SINGULARITY_SANDBOX -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Error out if SINGULARITY_SANDBOX is not set -@SINGULARITY_BUILD if( $SINGULARITY_SANDBOX == "" ) then -@SINGULARITY_BUILD echo "ERROR: You must set SINGULARITY_SANDBOX to the path to your Singularity sandbox" -@SINGULARITY_BUILD exit 3 -@SINGULARITY_BUILD endif -@SINGULARITY_BUILD -@SINGULARITY_BUILD # If SINGULARITY_SANDBOX is non-empty, then run executable in singularity sandbox -@SINGULARITY_BUILD echo "We are running under Singularity" -@SINGULARITY_BUILD echo "" -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Load the Singularity module -@SINGULARITY_BUILD module load singularity -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Set Singularity Bind Paths. Note: These are dependent on where you are running. -@SINGULARITY_BUILD # By default, we'll assume you are running this script from NOBACKUP -@SINGULARITY_BUILD -@SINGULARITY_BUILD setenv REAL_BIND_PATH @REAL_BIND_PATH -@SINGULARITY_BUILD setenv BASE_BIND_PATH @BASE_BIND_PATH -@SINGULARITY_BUILD setenv BOUNDARY_DIR @BOUNDARY_DIR -@SINGULARITY_BUILD setenv SINGULARITY_BIND_PATH "-B ${NOBACKUP}:${NOBACKUP}:rw,${REAL_BIND_PATH}:${REAL_BIND_PATH}:rw,${BASE_BIND_PATH}:${BASE_BIND_PATH}:ro,${BOUNDARY_DIR}:${BOUNDARY_DIR}:ro" -@SINGULARITY_BUILD -@SINGULARITY_BUILD # If you are running from a different location, you will need to change the bind path -@SINGULARITY_BUILD # Also, note that often $NOBACKUP is, say, /discover/nobackup/username, but gcm_setup -@SINGULARITY_BUILD # will set GEOSDIR, GEOSBIN, etc. above to something like /gpfsm/dnbXX/username which -@SINGULARITY_BUILD # is the "real" physical path that /discover/nobackup/username is a symlink to. -@SINGULARITY_BUILD # You might need to change all the gpfsm paths to nobackup paths. -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Set a variable to encapsulate all Singularity details -@SINGULARITY_BUILD setenv SINGULARITY_RUN "singularity exec $SINGULARITY_BIND_PATH $SINGULARITY_SANDBOX" -@SINGULARITY_BUILD -@SINGULARITY_BUILD # Detect if GEOSgcm.x is in the experiment directory -@SINGULARITY_BUILD if (-e $EXPDIR/GEOSgcm.x) then -@SINGULARITY_BUILD echo "Found GEOSgcm.x in $EXPDIR" -@SINGULARITY_BUILD -@SINGULARITY_BUILD # If SINGULARITY_SANDBOX is non-empty and GEOSgcm.x is found in the experiment directory, -@SINGULARITY_BUILD # force the use of GEOSgcm.x in the installation directory -@SINGULARITY_BUILD if( $SINGULARITY_SANDBOX != "" ) then -@SINGULARITY_BUILD echo "NOTE: Testing has shown Singularity only works when running with" -@SINGULARITY_BUILD echo " the GEOSgcm.x executable directly from the installation bin directory" -@SINGULARITY_BUILD echo "" -@SINGULARITY_BUILD echo " So, we will *ignore* the local GEOSgcm.x and " -@SINGULARITY_BUILD echo " instead use $GEOSBIN/GEOSgcm.x" -@SINGULARITY_BUILD echo "" -@SINGULARITY_BUILD else -@SINGULARITY_BUILD echo "Using GEOSgcm.x from $GEOSBIN" -@SINGULARITY_BUILD endif -@SINGULARITY_BUILD setenv GEOSEXE $GEOSBIN/GEOSgcm.x -@SINGULARITY_BUILD else -@SINGULARITY_BUILD echo "Using GEOSgcm.x from $GEOSBIN" -@SINGULARITY_BUILD setenv GEOSEXE $GEOSBIN/GEOSgcm.x -@SINGULARITY_BUILD endif - -@NATIVE_BUILD if (-e $EXPDIR/GEOSgcm.x) then -@NATIVE_BUILD echo "Copying $EXPDIR/GEOSgcm.x to $SCRDIR" -@NATIVE_BUILD echo "" -@NATIVE_BUILD /bin/cp $EXPDIR/GEOSgcm.x $SCRDIR/GEOSgcm.x -@NATIVE_BUILD else -@NATIVE_BUILD echo "$EXPDIR/GEOSgcm.x not found. Please link or copy the executable to the experiment directory." -@NATIVE_BUILD exit 4 -@NATIVE_BUILD endif -@NATIVE_BUILD setenv GEOSEXE $SCRDIR/GEOSgcm.x +{{ SINGULARITY_BUILD }} ####################################################################### +{{ SINGULARITY_BUILD }} # Settings for Singularity - EXPERIMENTAL +{{ SINGULARITY_BUILD }} ####################################################################### +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Based on work on discover, to run you need to load the same compiler +{{ SINGULARITY_BUILD }} # and MPI to match those in the container. For example, if your container was +{{ SINGULARITY_BUILD }} # built with: +{{ SINGULARITY_BUILD }} # GNU 11.2.0 +{{ SINGULARITY_BUILD }} # Intel Fortran 2021.6.0 (aka Intel oneAPI 2022.1.0) +{{ SINGULARITY_BUILD }} # Intel MPI 2021.6.0 (aka Intel oneAPI 2022.1.0) +{{ SINGULARITY_BUILD }} # then you would need to load: +{{ SINGULARITY_BUILD }} # source /usr/share/modules/init/csh +{{ SINGULARITY_BUILD }} # module purge +{{ SINGULARITY_BUILD }} # module load comp/gcc/11.2.0 +{{ SINGULARITY_BUILD }} # module load comp/intel/2021.6.0 +{{ SINGULARITY_BUILD }} # module load mpi/impi/2021.6.0 +{{ SINGULARITY_BUILD }} # +{{ SINGULARITY_BUILD }} # And then also append ${GEOSDIR}/lib to LD_LIBRARY_PATH +{{ SINGULARITY_BUILD }} # setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${GEOSDIR}/lib +{{ SINGULARITY_BUILD }} # +{{ SINGULARITY_BUILD }} # For now we use the fact that on discover we can source g5_modules +{{ SINGULARITY_BUILD }} # +{{ SINGULARITY_BUILD }} # If you are using singularity, set the path to the singularity sandbox here +{{ SINGULARITY_BUILD }} setenv SINGULARITY_SANDBOX {{ SINGULARITY_SANDBOX }} +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Error out if SINGULARITY_SANDBOX is not set +{{ SINGULARITY_BUILD }} if( $SINGULARITY_SANDBOX == "" ) then +{{ SINGULARITY_BUILD }} echo "ERROR: You must set SINGULARITY_SANDBOX to the path to your Singularity sandbox" +{{ SINGULARITY_BUILD }} exit 3 +{{ SINGULARITY_BUILD }} endif +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # If SINGULARITY_SANDBOX is non-empty, then run executable in singularity sandbox +{{ SINGULARITY_BUILD }} echo "We are running under Singularity" +{{ SINGULARITY_BUILD }} echo "" +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Load the Singularity module +{{ SINGULARITY_BUILD }} module load singularity +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Set Singularity Bind Paths. Note: These are dependent on where you are running. +{{ SINGULARITY_BUILD }} # By default, we'll assume you are running this script from NOBACKUP +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} setenv REAL_BIND_PATH {{ REAL_BIND_PATH }} +{{ SINGULARITY_BUILD }} setenv BASE_BIND_PATH {{ BASE_BIND_PATH }} +{{ SINGULARITY_BUILD }} setenv BOUNDARY_DIR {{ BOUNDARY_DIR }} +{{ SINGULARITY_BUILD }} setenv SINGULARITY_BIND_PATH "-B ${NOBACKUP}:${NOBACKUP}:rw,${REAL_BIND_PATH}:${REAL_BIND_PATH}:rw,${BASE_BIND_PATH}:${BASE_BIND_PATH}:ro,${BOUNDARY_DIR}:${BOUNDARY_DIR}:ro" +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # If you are running from a different location, you will need to change the bind path +{{ SINGULARITY_BUILD }} # Also, note that often $NOBACKUP is, say, /discover/nobackup/username, but gcm_setup +{{ SINGULARITY_BUILD }} # will set GEOSDIR, GEOSBIN, etc. above to something like /gpfsm/dnbXX/username which +{{ SINGULARITY_BUILD }} # is the "real" physical path that /discover/nobackup/username is a symlink to. +{{ SINGULARITY_BUILD }} # You might need to change all the gpfsm paths to nobackup paths. +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Set a variable to encapsulate all Singularity details +{{ SINGULARITY_BUILD }} setenv SINGULARITY_RUN "singularity exec $SINGULARITY_BIND_PATH $SINGULARITY_SANDBOX" +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # Detect if GEOSgcm.x is in the experiment directory +{{ SINGULARITY_BUILD }} if (-e $EXPDIR/GEOSgcm.x) then +{{ SINGULARITY_BUILD }} echo "Found GEOSgcm.x in $EXPDIR" +{{ SINGULARITY_BUILD }} +{{ SINGULARITY_BUILD }} # If SINGULARITY_SANDBOX is non-empty and GEOSgcm.x is found in the experiment directory, +{{ SINGULARITY_BUILD }} # force the use of GEOSgcm.x in the installation directory +{{ SINGULARITY_BUILD }} if( $SINGULARITY_SANDBOX != "" ) then +{{ SINGULARITY_BUILD }} echo "NOTE: Testing has shown Singularity only works when running with" +{{ SINGULARITY_BUILD }} echo " the GEOSgcm.x executable directly from the installation bin directory" +{{ SINGULARITY_BUILD }} echo "" +{{ SINGULARITY_BUILD }} echo " So, we will *ignore* the local GEOSgcm.x and " +{{ SINGULARITY_BUILD }} echo " instead use $GEOSBIN/GEOSgcm.x" +{{ SINGULARITY_BUILD }} echo "" +{{ SINGULARITY_BUILD }} else +{{ SINGULARITY_BUILD }} echo "Using GEOSgcm.x from $GEOSBIN" +{{ SINGULARITY_BUILD }} endif +{{ SINGULARITY_BUILD }} setenv GEOSEXE $GEOSBIN/GEOSgcm.x +{{ SINGULARITY_BUILD }} else +{{ SINGULARITY_BUILD }} echo "Using GEOSgcm.x from $GEOSBIN" +{{ SINGULARITY_BUILD }} setenv GEOSEXE $GEOSBIN/GEOSgcm.x +{{ SINGULARITY_BUILD }} endif + +{{ NATIVE_BUILD }} if (-e $EXPDIR/GEOSgcm.x) then +{{ NATIVE_BUILD }} echo "Copying $EXPDIR/GEOSgcm.x to $SCRDIR" +{{ NATIVE_BUILD }} echo "" +{{ NATIVE_BUILD }} /bin/cp $EXPDIR/GEOSgcm.x $SCRDIR/GEOSgcm.x +{{ NATIVE_BUILD }} else +{{ NATIVE_BUILD }} echo "$EXPDIR/GEOSgcm.x not found. Please link or copy the executable to the experiment directory." +{{ NATIVE_BUILD }} exit 4 +{{ NATIVE_BUILD }} endif +{{ NATIVE_BUILD }} setenv GEOSEXE $SCRDIR/GEOSgcm.x ####################################################################### # Get RESTARTS @@ -616,8 +616,8 @@ else endif wait -@COUPLED /bin/mkdir INPUT -@COUPLED cp $EXPDIR/RESTART/* INPUT +{{ COUPLED }} /bin/mkdir INPUT +{{ COUPLED }} cp $EXPDIR/RESTART/* INPUT # Copy and Tar Initial Restarts to Restarts Directory # --------------------------------------------------- @@ -630,17 +630,17 @@ if($numrs == 0) then endif end wait -@COUPLED cp -r $EXPDIR/RESTART ${EXPDIR}/restarts/RESTART.${edate} +{{ COUPLED }} cp -r $EXPDIR/RESTART ${EXPDIR}/restarts/RESTART.${edate} # WW3 restart file if( $wavewatch ) then set rst_ww3 = "restart.ww3" if( -e ${rst_ww3} ) cp ${rst_ww3} ${EXPDIR}/restarts/$EXPID.${rst_ww3}.${edate}.${GCMVER}.${BCTAG}_${BCRSLV} endif cd $EXPDIR/restarts - @DATAOCEAN tar cf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV} - @COUPLED tar cvf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV} RESTART.${edate} + {{ DATAOCEAN }} tar cf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV} + {{ COUPLED }} tar cvf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV} RESTART.${edate} /bin/rm -rf `/bin/ls -d -1 $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}` - @COUPLED /bin/rm -rf RESTART.${edate} + {{ COUPLED }} /bin/rm -rf RESTART.${edate} cd $SCRDIR endif @@ -732,7 +732,7 @@ set yearf = `echo $nymdf | cut -c1-4` # For Non-Reynolds SST, Modify local CAP.rc Ending date if Finish time exceeds Current year boundary # -------------------------------------------------------------------------------------------------- -if( @OCEANtag != DE0360xPE0180 ) then +if( {{ OCEANtag }} != DE0360xPE0180 ) then if( $yearf > $yearc ) then @ yearf = $yearc + 1 @ nymdf = $yearf * 10000 + 0101 @@ -813,19 +813,19 @@ if( $wavewatch ) then /bin/rm ww3_multi.nml.tmp endif -@COUPLED# gcm_setup will make sure AGCM.rc, MOM_override and CICE6 use a Ocean DT -@COUPLED# consistent with CAP.rc HEARTBEAT_DT. But a user might change the -@COUPLED# HEARTBEAT_DT in CAP.rc at run time, so we need to update the dt in -@COUPLED# the other files +{{ COUPLED }}# gcm_setup will make sure AGCM.rc, MOM_override and CICE6 use a Ocean DT +{{ COUPLED }}# consistent with CAP.rc HEARTBEAT_DT. But a user might change the +{{ COUPLED }}# HEARTBEAT_DT in CAP.rc at run time, so we need to update the dt in +{{ COUPLED }}# the other files -@COUPLEDset HEARTBEAT_DT = `grep '^\s*HEARTBEAT_DT:' CAP.rc | cut -d: -f2 | awk '{print $1}'` +{{ COUPLED }}set HEARTBEAT_DT = `grep '^\s*HEARTBEAT_DT:' CAP.rc | cut -d: -f2 | awk '{print $1}'` -@COUPLED sed -i -e "s/OGCM_RUN_DT: [0-9]\+\(\.[0-9]\+\)\?/OGCM_RUN_DT: $HEARTBEAT_DT/g" AGCM.rc -@MOM5 sed -i -e "s/dt_cpld = [0-9]\+\(\.[0-9]\+\)\?,/dt_cpld = $HEARTBEAT_DT,/g" \ -@MOM5 -e "s/dt_atmos = [0-9]\+\(\.[0-9]\+\)\?,/dt_atmos = $HEARTBEAT_DT,/g" MOM_override -@MOM6 sed -i -e "s/DT = [0-9]\+\(\.[0-9]\+\)\?/DT = $HEARTBEAT_DT/g" \ -@MOM6 -e "s/DT_THERM = [0-9]\+\(\.[0-9]\+\)\?/DT_THERM = $HEARTBEAT_DT/g" MOM_override -@CICE6 sed -i -E "s/^([[:space:]]*dt[[:space:]]*=[[:space:]]*)[0-9]+(\.[0-9]+)?/\1${HEARTBEAT_DT}/" ice_in +{{ COUPLED }} sed -i -e "s/OGCM_RUN_DT: [0-9]\+\(\.[0-9]\+\)\?/OGCM_RUN_DT: $HEARTBEAT_DT/g" AGCM.rc +{{ MOM5 }} sed -i -e "s/dt_cpld = [0-9]\+\(\.[0-9]\+\)\?,/dt_cpld = $HEARTBEAT_DT,/g" \ +{{ MOM5 }} -e "s/dt_atmos = [0-9]\+\(\.[0-9]\+\)\?,/dt_atmos = $HEARTBEAT_DT,/g" MOM_override +{{ MOM6 }} sed -i -e "s/DT = [0-9]\+\(\.[0-9]\+\)\?/DT = $HEARTBEAT_DT/g" \ +{{ MOM6 }} -e "s/DT_THERM = [0-9]\+\(\.[0-9]\+\)\?/DT_THERM = $HEARTBEAT_DT/g" MOM_override +{{ CICE6 }} sed -i -E "s/^([[:space:]]*dt[[:space:]]*=[[:space:]]*)[0-9]+(\.[0-9]+)?/\1${HEARTBEAT_DT}/" ice_in if( $AGCM_LM != 72 ) then set files = `/bin/ls *.yaml` @@ -851,16 +851,16 @@ if ( $DNA_TRUE == 0 && -e DNA_ExtData.rc ) /bin/mv set ACHEM_TRUE = `grep -i '^\s*ENABLE_ACHEM:\s*\.TRUE\.' GEOS_ChemGridComp.rc | wc -l` if ( $ACHEM_TRUE == 0 && -e ACHEM_ExtData.rc ) /bin/mv ACHEM_ExtData.rc ACHEM_ExtData.rc.NOT_USED -@MP_TURN_OFF_WSUB_EXTDATA# 1MOM and GFDL microphysics do not use WSUB_CLIM -@MP_TURN_OFF_WSUB_EXTDATA# ------------------------------------------------- +{{ MP_TURN_OFF_WSUB_EXTDATA }}# 1MOM and GFDL microphysics do not use WSUB_CLIM +{{ MP_TURN_OFF_WSUB_EXTDATA }}# ------------------------------------------------- if ($EXTDATA2G_TRUE == 0 ) then - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.rc WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/^WSUB_CLIM/ s#ExtData.*#/dev/null#' > WSUB_ExtData.rc else - @MP_TURN_OFF_WSUB_EXTDATA/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp - @MP_TURN_OFF_WSUB_EXTDATAcat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml + {{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/mv WSUB_ExtData.yaml WSUB_ExtData.tmp + {{ MP_TURN_OFF_WSUB_EXTDATA }}cat WSUB_ExtData.tmp | sed -e '/collection:/ s#WSUB_SWclim.*#/dev/null#' > WSUB_ExtData.yaml endif -@MP_TURN_OFF_WSUB_EXTDATA/bin/rm WSUB_ExtData.tmp +{{ MP_TURN_OFF_WSUB_EXTDATA }}/bin/rm WSUB_ExtData.tmp # Generate the complete ExtData.rc # -------------------------------- @@ -884,14 +884,14 @@ if( $EXTDATA2G_TRUE == 1 ) then endif -@RRTMGP_RADIATION # Move GOCART to use RRTMGP Bands -@RRTMGP_RADIATION # ------------------------------- -@RRTMGP_RADIATION set instance_files = `/bin/ls -1 *_instance*.rc` -@RRTMGP_RADIATION foreach instance ($instance_files) - @RRTMGP_RADIATION /bin/mv $instance $instance.tmp - @RRTMGP_RADIATION cat $instance.tmp | sed -e '/\bRRTMG\b/ s#RRTMG#RRTMGP#' > $instance - @RRTMGP_RADIATION /bin/rm $instance.tmp -@RRTMGP_RADIATION end +{{ RRTMGP_RADIATION }} # Move GOCART to use RRTMGP Bands +{{ RRTMGP_RADIATION }} # ------------------------------- +{{ RRTMGP_RADIATION }} set instance_files = `/bin/ls -1 *_instance*.rc` +{{ RRTMGP_RADIATION }} foreach instance ($instance_files) + {{ RRTMGP_RADIATION }} /bin/mv $instance $instance.tmp + {{ RRTMGP_RADIATION }} cat $instance.tmp | sed -e '/\bRRTMG\b/ s#RRTMG#RRTMGP#' > $instance + {{ RRTMGP_RADIATION }} /bin/rm $instance.tmp +{{ RRTMGP_RADIATION }} end # Link Boundary Conditions for Appropriate Date # --------------------------------------------- @@ -904,7 +904,7 @@ if ( $rst_by_face == YES ) then echo "WARNING: The generated gwd_internal_face_x_rst are used" #foreach n (1 2 3 4 5 6) #/bin/rm gwd_internal_face_${n}_rst - #/bin/cp @GWDRSDIR/gwd_internal_c${AGCM_IM}_face_${n} gwd_internal_face_${n}_rst + #/bin/cp {{ GWDRSDIR }}/gwd_internal_c${AGCM_IM}_face_${n} gwd_internal_face_${n}_rst #end else if (! -e gwd_internal_rst) then @@ -930,15 +930,15 @@ endif #ln -sf $SSTDIR/dataoceanfile_MERRA2_SST.${OGCM_IM}x${OGCM_JM}.${yy}.data sst.data #ln -sf $SSTDIR/dataoceanfile_MERRA2_ICE.${OGCM_IM}x${OGCM_JM}.${yy}.data fraci.data -@CICE6 #detect existence of certain fields in CICE6 restart -@CICE6 ncdump -h INPUT/iced.nc | grep 'apnd' > /dev/null -@CICE6 if( $status == 0 ) then -@CICE6 echo 'pond state in restart, turn on restart flag if not already' -@CICE6 sed -i -E 's/^[[:space:]]*restart_pond_lvl[[:space:]]*=[[:space:]]*\.false\./ restart_pond_lvl = .true./' ice_in -@CICE6 else -@CICE6 echo 'pond state NOT in restart, turn off restart flag if already on' -@CICE6 sed -i -E 's/^[[:space:]]*restart_pond_lvl[[:space:]]*=[[:space:]]*\.true\./ restart_pond_lvl = .false./' ice_in -@CICE6 endif +{{ CICE6 }} #detect existence of certain fields in CICE6 restart +{{ CICE6 }} ncdump -h INPUT/iced.nc | grep 'apnd' > /dev/null +{{ CICE6 }} if( $status == 0 ) then +{{ CICE6 }} echo 'pond state in restart, turn on restart flag if not already' +{{ CICE6 }} sed -i -E 's/^[[:space:]]*restart_pond_lvl[[:space:]]*=[[:space:]]*\.false\./ restart_pond_lvl = .true./' ice_in +{{ CICE6 }} else +{{ CICE6 }} echo 'pond state NOT in restart, turn off restart flag if already on' +{{ CICE6 }} sed -i -E 's/^[[:space:]]*restart_pond_lvl[[:space:]]*=[[:space:]]*\.true\./ restart_pond_lvl = .false./' ice_in +{{ CICE6 }} endif ####################################################################### # Split Saltwater Restart if detected @@ -961,8 +961,8 @@ else # Run the script # -------------- - @SINGULARITY_BUILD $RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst - @NATIVE_BUILD $RUN_CMD 1 $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst + {{ SINGULARITY_BUILD }} $RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst + {{ NATIVE_BUILD }} $RUN_CMD 1 $GEOSBIN/SaltIntSplitter tile.data $SCRDIR/saltwater_internal_rst # Move restarts # ------------- @@ -1000,8 +1000,8 @@ endif if ( -x $GEOSBIN/rs_numtiles.x ) then set N_OPENW_TILES_EXPECTED = `grep '^\s*0' tile.data | wc -l` - @SINGULARITY_BUILD set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` - @NATIVE_BUILD set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` + {{ SINGULARITY_BUILD }} set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $SINGULARITY_RUN $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` + {{ NATIVE_BUILD }} set N_OPENW_TILES_FOUND = `$RUN_CMD 1 $GEOSBIN/rs_numtiles.x openwater_internal_rst | grep Total | awk '{print $NF}'` if ( $N_OPENW_TILES_EXPECTED != $N_OPENW_TILES_FOUND ) then echo "Error! Found $N_OPENW_TILES_FOUND tiles in openwater. Expect to find $N_OPENW_TILES_EXPECTED tiles." @@ -1039,9 +1039,9 @@ endif # Environment variables for MPI, etc # ---------------------------------- -@SETENVS +{{ SETENVS }} -@MPT_SHEPHERD +{{ MPT_SHEPHERD }} # Run bundleParser.py #--------------------- @@ -1076,75 +1076,75 @@ endif # Establish safe default number of OpenMP threads # ----------------------------------------------- -@MIT # --------------------------------------------------- -@MIT # For MITgcm restarts - before running GEOSgcm.x -@MIT # --------------------------------------------------- -@MIT -@MIT # set time interval for segment in seconds -@MIT -@MIT set yearc = `echo $nymdc | cut -c1-4` -@MIT set monthc = `echo $nymdc | cut -c5-6` -@MIT set dayc = `echo $nymdc | cut -c7-8` -@MIT set hourc = `echo $nhmsc | cut -c1-2` -@MIT set minutec = `echo $nhmsc | cut -c3-4` -@MIT set secondc = `echo $nhmsc | cut -c5-6` -@MIT -@MIT set yearf = `echo $nymdf | cut -c1-4` -@MIT set monthf = `echo $nymdf | cut -c5-6` -@MIT set dayf = `echo $nymdf | cut -c7-8` -@MIT set hourf = `echo $nhmsf | cut -c1-2` -@MIT set minutef = `echo $nhmsf | cut -c3-4` -@MIT set secondf = `echo $nhmsf | cut -c5-6` -@MIT -@MIT set yearf = `echo $nymdf | cut -c1-4` -@MIT -@MIT set time1 = `date -u -d "${yearc}-${monthc}-${dayc}T${hourc}:${minutec}:${secondc}" "+%s"` -@MIT set time2 = `date -u -d "${yearf}-${monthf}-${dayf}T${hourf}:${minutef}:${secondf}" "+%s"` -@MIT -@MIT @ mitdt = $time2 - $time1 -@MIT echo "Segment time: $mitdt" -@MIT -@MIT -@MIT # Set-up MITgcm run directory -@MIT if (! -e mitocean_run) mkdir -p mitocean_run -@MIT cd mitocean_run -@MIT -@MIT # link mit configuration and initialization files -@MIT ln -sf $EXPDIR/mit_input/* . -@MIT # link mitgcm restarts if exist -@MIT /bin/ln -sf $EXPDIR/restarts/pic* . -@MIT # make an archive folder for mitgcm run -@MIT mkdir $EXPDIR/mit_output -@MIT -@MIT # Calculate segment time steps -@MIT set mit_nTimeSteps = `cat ${SCRDIR}/AGCM.rc | grep OGCM_RUN_DT: | cut -d: -f2 | tr -s " " | cut -d" " -f2` -@MIT @ mit_nTimeSteps = ${mitdt} / $mit_nTimeSteps -@MIT -@MIT #change namelist variables in data - nTimeSteps, chkptFreq and monitorFreq -@MIT sed -i "s/nTimeSteps.*/nTimeSteps = ${mit_nTimeSteps},/" data -@MIT sed -i "s/chkptFreq.*/chkptFreq = ${mitdt}.0,/" data -@MIT sed -i "s/pChkptFreq.*/pChkptFreq = ${mitdt}.0,/" data -@MIT # get nIter0 -@MIT -@MIT if (! -e ${EXPDIR}/restarts/MITgcm_restart_dates.txt ) then -@MIT set nIter0 = `grep nIter0 data | tr -s " " | cut -d"=" -f2 | cut -d"," -f1 | awk '{$1=$1;print}'` -@MIT else -@MIT set nIter0 = `grep "$nymdc $nhmsc" ${EXPDIR}/restarts/MITgcm_restart_dates.txt | cut -d" " -f5` -@MIT if ( $nIter0 == "" ) then -@MIT echo "No ocean restart file for $nymdc $nhmsc, exiting" -@MIT echo "If this is a new initialized experiment, delete:" -@MIT echo "${EXPDIR}/restarts/MITgcm_restart_dates.txt" -@MIT echo "and restart" -@MIT exit 9 -@MIT else -@MIT sed -i "s/nIter0.*/ nIter0 = ${nIter0},/" data -@MIT endif -@MIT endif -@MIT -@MIT cd .. -@MIT # --------------------------------------------------- -@MIT # End MITgcm restarts - before running GEOSgcm.x -@MIT # --------------------------------------------------- +{{ MIT }} # --------------------------------------------------- +{{ MIT }} # For MITgcm restarts - before running GEOSgcm.x +{{ MIT }} # --------------------------------------------------- +{{ MIT }} +{{ MIT }} # set time interval for segment in seconds +{{ MIT }} +{{ MIT }} set yearc = `echo $nymdc | cut -c1-4` +{{ MIT }} set monthc = `echo $nymdc | cut -c5-6` +{{ MIT }} set dayc = `echo $nymdc | cut -c7-8` +{{ MIT }} set hourc = `echo $nhmsc | cut -c1-2` +{{ MIT }} set minutec = `echo $nhmsc | cut -c3-4` +{{ MIT }} set secondc = `echo $nhmsc | cut -c5-6` +{{ MIT }} +{{ MIT }} set yearf = `echo $nymdf | cut -c1-4` +{{ MIT }} set monthf = `echo $nymdf | cut -c5-6` +{{ MIT }} set dayf = `echo $nymdf | cut -c7-8` +{{ MIT }} set hourf = `echo $nhmsf | cut -c1-2` +{{ MIT }} set minutef = `echo $nhmsf | cut -c3-4` +{{ MIT }} set secondf = `echo $nhmsf | cut -c5-6` +{{ MIT }} +{{ MIT }} set yearf = `echo $nymdf | cut -c1-4` +{{ MIT }} +{{ MIT }} set time1 = `date -u -d "${yearc}-${monthc}-${dayc}T${hourc}:${minutec}:${secondc}" "+%s"` +{{ MIT }} set time2 = `date -u -d "${yearf}-${monthf}-${dayf}T${hourf}:${minutef}:${secondf}" "+%s"` +{{ MIT }} +{{ MIT }} @ mitdt = $time2 - $time1 +{{ MIT }} echo "Segment time: $mitdt" +{{ MIT }} +{{ MIT }} +{{ MIT }} # Set-up MITgcm run directory +{{ MIT }} if (! -e mitocean_run) mkdir -p mitocean_run +{{ MIT }} cd mitocean_run +{{ MIT }} +{{ MIT }} # link mit configuration and initialization files +{{ MIT }} ln -sf $EXPDIR/mit_input/* . +{{ MIT }} # link mitgcm restarts if exist +{{ MIT }} /bin/ln -sf $EXPDIR/restarts/pic* . +{{ MIT }} # make an archive folder for mitgcm run +{{ MIT }} mkdir $EXPDIR/mit_output +{{ MIT }} +{{ MIT }} # Calculate segment time steps +{{ MIT }} set mit_nTimeSteps = `cat ${SCRDIR}/AGCM.rc | grep OGCM_RUN_DT: | cut -d: -f2 | tr -s " " | cut -d" " -f2` +{{ MIT }} @ mit_nTimeSteps = ${mitdt} / $mit_nTimeSteps +{{ MIT }} +{{ MIT }} #change namelist variables in data - nTimeSteps, chkptFreq and monitorFreq +{{ MIT }} sed -i "s/nTimeSteps.*/nTimeSteps = ${mit_nTimeSteps},/" data +{{ MIT }} sed -i "s/chkptFreq.*/chkptFreq = ${mitdt}.0,/" data +{{ MIT }} sed -i "s/pChkptFreq.*/pChkptFreq = ${mitdt}.0,/" data +{{ MIT }} # get nIter0 +{{ MIT }} +{{ MIT }} if (! -e ${EXPDIR}/restarts/MITgcm_restart_dates.txt ) then +{{ MIT }} set nIter0 = `grep nIter0 data | tr -s " " | cut -d"=" -f2 | cut -d"," -f1 | awk '{$1=$1;print}'` +{{ MIT }} else +{{ MIT }} set nIter0 = `grep "$nymdc $nhmsc" ${EXPDIR}/restarts/MITgcm_restart_dates.txt | cut -d" " -f5` +{{ MIT }} if ( $nIter0 == "" ) then +{{ MIT }} echo "No ocean restart file for $nymdc $nhmsc, exiting" +{{ MIT }} echo "If this is a new initialized experiment, delete:" +{{ MIT }} echo "${EXPDIR}/restarts/MITgcm_restart_dates.txt" +{{ MIT }} echo "and restart" +{{ MIT }} exit 9 +{{ MIT }} else +{{ MIT }} sed -i "s/nIter0.*/ nIter0 = ${nIter0},/" data +{{ MIT }} endif +{{ MIT }} endif +{{ MIT }} +{{ MIT }} cd .. +{{ MIT }} # --------------------------------------------------- +{{ MIT }} # End MITgcm restarts - before running GEOSgcm.x +{{ MIT }} # --------------------------------------------------- # Set OMP_NUM_THREADS # ------------------- @@ -1171,8 +1171,8 @@ else set IOSERVER_EXTRA = "" endif -@SINGULARITY_BUILD @OCEAN_PRELOAD $RUN_CMD $TOTAL_PES $SINGULARITY_RUN $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' -@NATIVE_BUILD @OCEAN_PRELOAD @SEVERAL_TRIES $RUN_CMD $TOTAL_PES $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' +{{ SINGULARITY_BUILD }} {{ OCEAN_PRELOAD }} $RUN_CMD $TOTAL_PES $SINGULARITY_RUN $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' +{{ NATIVE_BUILD }} {{ OCEAN_PRELOAD }} {{ SEVERAL_TRIES }} $RUN_CMD $TOTAL_PES $GEOSEXE $IOSERVER_OPTIONS $IOSERVER_EXTRA --logging_config 'logging.yaml' # Capture the return code from GEOSgcm.x # -------------------------------------- @@ -1198,86 +1198,86 @@ setenv OMP_NUM_THREADS 1 ./strip GWD_GridComp.rc sed -i -e "s|TRUE|FALSE|g" GWD_GridComp.rc -@MIT # --------------------------------------------------- -@MIT # For MITgcm restarts - after running GEOSgcm.x -@MIT # --------------------------------------------------- -@MIT -@MIT set STEADY_STATE_OCEAN=`grep STEADY_STATE_OCEAN AGCM.rc | cut -d':' -f2 | tr -d " "` -@MIT -@MIT # update ocean only if activated. Otherwize use the same pickups (passive ocean). -@MIT if ( ${STEADY_STATE_OCEAN} != 0 ) then -@MIT -@MIT if ( ${rc} == 0 ) then -@MIT -@MIT # Update nIter0 for next segment -@MIT set znIter00 = `echo $nIter0 | awk '{printf("%010d",$1)}'` -@MIT @ nIter0 = $nIter0 + $mit_nTimeSteps -@MIT set znIter0 = `echo $nIter0 | awk '{printf("%010d",$1)}'` -@MIT -@MIT # to update MITgcm restart list file -@MIT sed -i "/${nIter0}/d" ${EXPDIR}/restarts/MITgcm_restart_dates.txt -@MIT echo "Date_GEOS5 $nymdf $nhmsf NITER0_MITgcm ${nIter0}" >> ${EXPDIR}/restarts/MITgcm_restart_dates.txt -@MIT -@MIT /bin/mv $SCRDIR/mitocean_run/STDOUT.0000 $EXPDIR/mit_output/STDOUT.${znIter00} -@MIT -@MIT endif -@MIT -@MIT cd $SCRDIR/mitocean_run -@MIT -@MIT # Check existance of roling pickups -@MIT set nonomatch rp = ( pickup*ckptA* ) -@MIT echo $rp -@MIT # Rename and move them if exist -@MIT if ( -e $rp[1] ) then -@MIT set timeStepNumber=`cat pickup.ckptA.meta | grep timeStepNumber | tr -s " " | cut -d" " -f5 | awk '{printf("%010d",$1)}'` -@MIT foreach fname ( pickup*ckptA* ) -@MIT set bname = `echo ${fname} | cut -d "." -f1 | cut -d "/" -f2` -@MIT set aname = `echo ${fname} | cut -d "." -f3` -@MIT echo $EXPDIR/restarts/${bname}.${timeStepNumber}.${aname} -@MIT /bin/mv ${fname} $EXPDIR/restarts/${bname}.${timeStepNumber}.${aname} -@MIT end -@MIT endif -@MIT -@MIT # Check existance of permanent pickups -@MIT set nonomatch pp = ( pickup* ) -@MIT echo $pp -@MIT # Move them if exist -@MIT if ( -e $pp[1] ) then -@MIT foreach fname ( pickup* ) -@MIT if ( ! -e $EXPDIR/restarts/${fname} ) /bin/mv ${fname} $EXPDIR/restarts/${fname} -@MIT end -@MIT endif -@MIT -@MIT /bin/mv T.* $EXPDIR/mit_output/ -@MIT /bin/mv S.* $EXPDIR/mit_output/ -@MIT /bin/mv U.* $EXPDIR/mit_output/ -@MIT /bin/mv V.* $EXPDIR/mit_output/ -@MIT /bin/mv W.* $EXPDIR/mit_output/ -@MIT /bin/mv PH* $EXPDIR/mit_output/ -@MIT /bin/mv Eta.* $EXPDIR/mit_output/ -@MIT -@MIT /bin/mv AREA.* $EXPDIR/mit_output/ -@MIT /bin/mv HEFF.* $EXPDIR/mit_output/ -@MIT /bin/mv HSNOW.* $EXPDIR/mit_output/ -@MIT /bin/mv UICE.* $EXPDIR/mit_output/ -@MIT /bin/mv VICE.* $EXPDIR/mit_output/ -@MIT -@MIT #copy mit output to mit_output -@MIT foreach i (`grep -i filename data.diagnostics | grep "^ " | cut -d"=" -f2 | cut -d"'" -f2 | awk '{$1=$1;print}'`) -@MIT /bin/mv ${i}* $EXPDIR/mit_output/ -@MIT end -@MIT -@MIT foreach i (`grep -i stat_fName data.diagnostics | grep "^ " | cut -d"=" -f2 | cut -d"'" -f2 | awk '{$1=$1;print}'`) -@MIT /bin/mv ${i}* $EXPDIR/mit_output/ -@MIT end -@MIT -@MIT cd $SCRDIR -@MIT -@MIT endif -@MIT -@MIT # --------------------------------------------------- -@MIT # End MITgcm restarts - after running GEOSgcm.x -@MIT # --------------------------------------------------- +{{ MIT }} # --------------------------------------------------- +{{ MIT }} # For MITgcm restarts - after running GEOSgcm.x +{{ MIT }} # --------------------------------------------------- +{{ MIT }} +{{ MIT }} set STEADY_STATE_OCEAN=`grep STEADY_STATE_OCEAN AGCM.rc | cut -d':' -f2 | tr -d " "` +{{ MIT }} +{{ MIT }} # update ocean only if activated. Otherwize use the same pickups (passive ocean). +{{ MIT }} if ( ${STEADY_STATE_OCEAN} != 0 ) then +{{ MIT }} +{{ MIT }} if ( ${rc} == 0 ) then +{{ MIT }} +{{ MIT }} # Update nIter0 for next segment +{{ MIT }} set znIter00 = `echo $nIter0 | awk '{printf("%010d",$1)}'` +{{ MIT }} @ nIter0 = $nIter0 + $mit_nTimeSteps +{{ MIT }} set znIter0 = `echo $nIter0 | awk '{printf("%010d",$1)}'` +{{ MIT }} +{{ MIT }} # to update MITgcm restart list file +{{ MIT }} sed -i "/${nIter0}/d" ${EXPDIR}/restarts/MITgcm_restart_dates.txt +{{ MIT }} echo "Date_GEOS5 $nymdf $nhmsf NITER0_MITgcm ${nIter0}" >> ${EXPDIR}/restarts/MITgcm_restart_dates.txt +{{ MIT }} +{{ MIT }} /bin/mv $SCRDIR/mitocean_run/STDOUT.0000 $EXPDIR/mit_output/STDOUT.${znIter00} +{{ MIT }} +{{ MIT }} endif +{{ MIT }} +{{ MIT }} cd $SCRDIR/mitocean_run +{{ MIT }} +{{ MIT }} # Check existance of roling pickups +{{ MIT }} set nonomatch rp = ( pickup*ckptA* ) +{{ MIT }} echo $rp +{{ MIT }} # Rename and move them if exist +{{ MIT }} if ( -e $rp[1] ) then +{{ MIT }} set timeStepNumber=`cat pickup.ckptA.meta | grep timeStepNumber | tr -s " " | cut -d" " -f5 | awk '{printf("%010d",$1)}'` +{{ MIT }} foreach fname ( pickup*ckptA* ) +{{ MIT }} set bname = `echo ${fname} | cut -d "." -f1 | cut -d "/" -f2` +{{ MIT }} set aname = `echo ${fname} | cut -d "." -f3` +{{ MIT }} echo $EXPDIR/restarts/${bname}.${timeStepNumber}.${aname} +{{ MIT }} /bin/mv ${fname} $EXPDIR/restarts/${bname}.${timeStepNumber}.${aname} +{{ MIT }} end +{{ MIT }} endif +{{ MIT }} +{{ MIT }} # Check existance of permanent pickups +{{ MIT }} set nonomatch pp = ( pickup* ) +{{ MIT }} echo $pp +{{ MIT }} # Move them if exist +{{ MIT }} if ( -e $pp[1] ) then +{{ MIT }} foreach fname ( pickup* ) +{{ MIT }} if ( ! -e $EXPDIR/restarts/${fname} ) /bin/mv ${fname} $EXPDIR/restarts/${fname} +{{ MIT }} end +{{ MIT }} endif +{{ MIT }} +{{ MIT }} /bin/mv T.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv S.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv U.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv V.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv W.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv PH* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv Eta.* $EXPDIR/mit_output/ +{{ MIT }} +{{ MIT }} /bin/mv AREA.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv HEFF.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv HSNOW.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv UICE.* $EXPDIR/mit_output/ +{{ MIT }} /bin/mv VICE.* $EXPDIR/mit_output/ +{{ MIT }} +{{ MIT }} #copy mit output to mit_output +{{ MIT }} foreach i (`grep -i filename data.diagnostics | grep "^ " | cut -d"=" -f2 | cut -d"'" -f2 | awk '{$1=$1;print}'`) +{{ MIT }} /bin/mv ${i}* $EXPDIR/mit_output/ +{{ MIT }} end +{{ MIT }} +{{ MIT }} foreach i (`grep -i stat_fName data.diagnostics | grep "^ " | cut -d"=" -f2 | cut -d"'" -f2 | awk '{$1=$1;print}'`) +{{ MIT }} /bin/mv ${i}* $EXPDIR/mit_output/ +{{ MIT }} end +{{ MIT }} +{{ MIT }} cd $SCRDIR +{{ MIT }} +{{ MIT }} endif +{{ MIT }} +{{ MIT }} # --------------------------------------------------- +{{ MIT }} # End MITgcm restarts - after running GEOSgcm.x +{{ MIT }} # --------------------------------------------------- ####################################################################### @@ -1287,8 +1287,8 @@ sed -i -e "s|TRUE|FALSE|g" GWD_GridComp.rc set edate = e`awk '{print $1}' cap_restart`_`awk '{print $2}' cap_restart | cut -c1-2`z -@COUPLED cp -r RESTART ${EXPDIR}/restarts/RESTART.${edate} -@COUPLED cp RESTART/* INPUT +{{ COUPLED }} cp -r RESTART ${EXPDIR}/restarts/RESTART.${edate} +{{ COUPLED }} cp RESTART/* INPUT # Move Intermediate Checkpoints to RESTARTS directory # --------------------------------------------------- @@ -1357,10 +1357,10 @@ endif # --------------------- cd $EXPDIR/restarts if( $FSEGMENT == 00000000 ) then - @DATAOCEAN tar cf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}.* - @COUPLED tar cvf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}.* RESTART.${edate} + {{ DATAOCEAN }} tar cf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}.* + {{ COUPLED }} tar cvf restarts.${edate}.tar $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}.* RESTART.${edate} /bin/rm -rf `/bin/ls -d -1 $EXPID.*.${edate}.${GCMVER}.${BCTAG}_${BCRSLV}.*` - @COUPLED /bin/rm -rf RESTART.${edate} + {{ COUPLED }} /bin/rm -rf RESTART.${edate} endif @@ -1375,36 +1375,36 @@ foreach collection ( $collections ) /bin/mv `/bin/ls -1 *.${collection}.*` $EXPDIR/holding/$collection end -@COUPLED # MOM-Specific Output Files -@COUPLED # ------------------------- -@MOM5 set dsets="ocean_month" -@MOM6 set dsets="ocean_state prog_z sfc_ave forcing" -@MOM5 foreach dset ( $dsets ) -@MOM5 set num = `/bin/ls -1 $dset.nc | wc -l` -@MOM5 if($num != 0) then -@MOM5 if(! -e $EXPDIR/MOM_Output) mkdir -p $EXPDIR/MOM_Output -@MOM5 /bin/mv $SCRDIR/$dset.nc $EXPDIR/MOM_Output/$dset.${edate}.nc -@MOM5 endif -@MOM5 end -@MOM6 foreach dset ( $dsets ) -@MOM6 set num = `/bin/ls -1 $dset.nc | wc -l` -@MOM6 if($num != 0) then -@MOM6 if(! -e $EXPDIR/MOM_Output) mkdir -p $EXPDIR/MOM_Output -@MOM6 /bin/mv $SCRDIR/$dset.nc $EXPDIR/MOM_Output/$dset.${edate}.nc -@MOM6 endif -@MOM6 end - -@CICE6 # CICE6-Specific Output Files -@CICE6 # ------------------------- -@CICE6 set dsets="iceh" -@CICE6 foreach dset ( $dsets ) -@CICE6 set num = `/bin/ls -1 $dset.*.nc | wc -l` -@CICE6 if($num != 0) then -@CICE6 if(! -e $EXPDIR/CICE_Output) mkdir -p $EXPDIR/CICE_Output -@CICE6 /bin/mv $SCRDIR/$dset.*.nc $EXPDIR/CICE_Output/ -@CICE6 endif -@CICE6 end -@CICE6 +{{ COUPLED }} # MOM-Specific Output Files +{{ COUPLED }} # ------------------------- +{{ MOM5 }} set dsets="ocean_month" +{{ MOM6 }} set dsets="ocean_state prog_z sfc_ave forcing" +{{ MOM5 }} foreach dset ( $dsets ) +{{ MOM5 }} set num = `/bin/ls -1 $dset.nc | wc -l` +{{ MOM5 }} if($num != 0) then +{{ MOM5 }} if(! -e $EXPDIR/MOM_Output) mkdir -p $EXPDIR/MOM_Output +{{ MOM5 }} /bin/mv $SCRDIR/$dset.nc $EXPDIR/MOM_Output/$dset.${edate}.nc +{{ MOM5 }} endif +{{ MOM5 }} end +{{ MOM6 }} foreach dset ( $dsets ) +{{ MOM6 }} set num = `/bin/ls -1 $dset.nc | wc -l` +{{ MOM6 }} if($num != 0) then +{{ MOM6 }} if(! -e $EXPDIR/MOM_Output) mkdir -p $EXPDIR/MOM_Output +{{ MOM6 }} /bin/mv $SCRDIR/$dset.nc $EXPDIR/MOM_Output/$dset.${edate}.nc +{{ MOM6 }} endif +{{ MOM6 }} end + +{{ CICE6 }} # CICE6-Specific Output Files +{{ CICE6 }} # ------------------------- +{{ CICE6 }} set dsets="iceh" +{{ CICE6 }} foreach dset ( $dsets ) +{{ CICE6 }} set num = `/bin/ls -1 $dset.*.nc | wc -l` +{{ CICE6 }} if($num != 0) then +{{ CICE6 }} if(! -e $EXPDIR/CICE_Output) mkdir -p $EXPDIR/CICE_Output +{{ CICE6 }} /bin/mv $SCRDIR/$dset.*.nc $EXPDIR/CICE_Output/ +{{ CICE6 }} endif +{{ CICE6 }} end +{{ CICE6 }} ####################################################################### # Run Post-Processing and Forecasts ####################################################################### @@ -1483,13 +1483,13 @@ else endif endif -@COUPLED cp -rf RESTART $EXPDIR +{{ COUPLED }} cp -rf RESTART $EXPDIR if ( $rc == 0 ) then cd $HOMDIR if ( $GCMEMIP == TRUE ) then - if( $capdate < $enddate ) @BATCH_CMD $HOMDIR/gcm_run.j$RSTDATE + if( $capdate < $enddate ) {{ BATCH_CMD }} $HOMDIR/gcm_run.j$RSTDATE else - if( $capdate < $enddate ) @BATCH_CMD $HOMDIR/gcm_run.j + if( $capdate < $enddate ) {{ BATCH_CMD }} $HOMDIR/gcm_run.j endif endif diff --git a/gcm_setup b/gcm_setup old mode 100755 new mode 100644 index e01e67db..d60f4e69 --- a/gcm_setup +++ b/gcm_setup @@ -607,7 +607,7 @@ if( $OGCM == TRUE ) then else if ( "$OCNMODEL" == "MOM6" ) then set OCEAN_NAME="MOM6" set OGRIDTYP = "M6TP" - set OCEAN_PRELOAD = 'env @PRELOAD_COMMAND=\$GEOSDIR/lib/libmom6@CMAKE_SHARED_LIBRARY_SUFFIX@' + set OCEAN_PRELOAD = 'env @PRELOAD_COMMAND=$GEOSDIR/lib/libmom6@CMAKE_SHARED_LIBRARY_SUFFIX@' set MOM6="" set MOM5 = "#DELETE" set DEFAULT_HISTORY_TEMPLATE="HISTORY.AOGCM.rc.tmpl" @@ -1454,7 +1454,7 @@ if( $SITE == 'NAS' ) then if( ${OGCM_IM}x${OGCM_JM} == "1440x720" ) then setenv SSTDIR ${BOUNDARY_DIR}/fvInput/g5gcm/bcs/SST/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions else - setenv SSTDIR ${BOUNDARY_DIR}/fvInput/g5gcm/bcs/realtime/@SSTNAME/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions + setenv SSTDIR ${BOUNDARY_DIR}/fvInput/g5gcm/bcs/realtime/${SSTNAME}/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions endif if (${OGRIDTYP} == "MITLLC") then setenv SSTDIR /nobackupp2/estrobac/geos5/SSTDIR @@ -1504,7 +1504,7 @@ else if( $SITE == 'NCCS' ) then if( ${OGCM_IM}x${OGCM_JM} == "1440x720" ) then setenv SSTDIR $SHARE/gmao_ops/fvInput/g5gcm/bcs/SST/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions else - setenv SSTDIR $SHARE/gmao_ops/fvInput/g5gcm/bcs/realtime/@SSTNAME/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions + setenv SSTDIR $SHARE/gmao_ops/fvInput/g5gcm/bcs/realtime/${SSTNAME}/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions endif setenv CHMDIR $SHARE/gmao_ops/fvInput_nc3 # locations of Aerosol Chemistry BCs setenv WRKDIR /discover/nobackup/$LOGNAME # user work directory @@ -1548,7 +1548,7 @@ else if( $SITE == 'AWS' | $SITE == 'Azure' ) then setenv BCS_INPUT_BASE ${BOUNDARY_DIR}/bcs_shared/make_bcs_inputs/atmosphere # Base of the new topography layout - setenv SSTDIR ${BOUNDARY_DIR}/@SSTNAME/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions + setenv SSTDIR ${BOUNDARY_DIR}/${SSTNAME}/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions setenv CHMDIR ${BOUNDARY_DIR}/fvInput_nc3 # locations of Aerosol Chemistry BCs setenv WRKDIR $HOME # user work directory setenv COUPLEDIR ${BOUNDARY_DIR}/bcs_shared/make_bcs_inputs/ocean # Coupled Ocean/Atmos Forcing @@ -1589,7 +1589,7 @@ else setenv BCS_INPUT_BASE ${BOUNDARY_DIR}/bcs_shared/make_bcs_inputs/atmosphere # Base of the new topography layout - setenv SSTDIR ${BOUNDARY_DIR}/@SSTNAME/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions + setenv SSTDIR ${BOUNDARY_DIR}/${SSTNAME}/${OGCM_IM}x${OGCM_JM} # location of SST Boundary Conditions setenv CHMDIR ${BOUNDARY_DIR}/fvInput_nc3 # locations of Aerosol Chemistry BCs setenv WRKDIR $HOME # user work directory setenv COUPLEDIR ${BOUNDARY_DIR}/bcs_shared/make_bcs_inputs/ocean # Coupled Ocean/Atmos Forcing @@ -2012,225 +2012,226 @@ endif ####################################################################### cat > $HOMDIR/sedfile << EOF -/@SETENVS/ { +/{{ SETENVS }}/ { t success : success r $HOMDIR/SETENV.commands d } -s?@GCMVER?$GCMVER?g -s?@EXPSRC?$GEOSTAG?g -s?@EXPID?$EXPID?g -s?@RUN_N?$RUN_N?g -s?@RUN_FN?$RUN_FN?g -s?@RUN_FT?$RUN_FT?g -s?@RUN_T?$RUN_T?g -s?@RUN_P?$RUN_P?g -s?@RUN_FP?$RUN_FP?g -s?@RUN_Q?$RUN_Q?g -s?@REGRESS_P?$REGRESS_P?g -s?@POST_N?$POST_N?g -s?@POST_T?$POST_T?g -s?@POST_P?$POST_P?g -s?@POST_Q?$POST_Q?g -s?@MOVE_N?$MOVE_N?g -s?@PLOT_N?$PLOT_N?g -s?@PLOT_T?$PLOT_T?g -s?@PLOT_P?$PLOT_P?g -s?@PLOT_Q?$PLOT_Q?g -s?@MOVE_Q?$MOVE_Q?g -s?@MOVE_P?$MOVE_P?g -s?@ARCHIVE_N?$ARCHIVE_N?g -s?@ARCHIVE_T?$ARCHIVE_T?g -s?@ARCHIVE_P?$ARCHIVE_P?g -s?@ARCHIVE_Q?$ARCHIVE_Q?g -s?@REGRESS_N?$REGRESS_N?g -s?@BCSDIR?$BCSDIR?g -s?@SSTDIR?$SSTDIR?g -s?@SSTNAME?$SSTNAME?g -s?@OCEANOUT?$OCEANOUT?g -s?@LSMBCS?$LSM_BCS?g -s?@EMIP_BCS_IN?$EMIP_BCS_IN?g -s?@EMIP_MERRA2?$EMIP_MERRA2?g -s?@BCSTAG?$OCEAN_TAG?g -s?@SSTFILE?$SSTFILE?g -s?@ICEFILE?$ICEFILE?g -s?@KPARFILE?$KPARFILE?g -s?@CHMDIR?$CHMDIR?g -s?@COUPLEDIR?$COUPLEDIR?g -s?@GWDRSDIR?$GWDRSDIR?g -s?@NCAR_NRDG?$NCAR_NRDG?g -s?@EXPDIR?$EXPDIR?g -s?@EXPDSC?$EXPDSC?g -s?@HOMDIR?$HOMDIR?g -s?@BATCH_GROUP?${BATCH_GROUP}${GROUP}?g -s?@BATCH_TIME?$BATCH_TIME?g -s?@BATCH_CMD?$BATCH_CMD?g -s?@BATCH_JOBNAME?$BATCH_JOBNAME?g -s?@BATCH_OUTPUTNAME?$BATCH_OUTPUTNAME?g -s?@BATCH_JOINOUTERR?$BATCH_JOINOUTERR?g -s?@SITE?$SITE?g -s?@GEOSDIR?$GEOSDIR?g -s?@GEOSSRC?$GEOSSRC?g -s?@GEOSBIN?$GEOSBIN?g -s?@GEOSETC?$GEOSETC?g -s?@GEOSUTIL?$GEOSUTIL?g -s?@SINGULARITY_BUILD?$SINGULARITY_BUILD?g -s?@NATIVE_BUILD?$NATIVE_BUILD?g -s?@MPT_SHEPHERD?$MPT_SHEPHERD?g -s?@SINGULARITY_SANDBOX?$SINGULARITY_SANDBOX?g -s?@REAL_BIND_PATH?$REAL_BIND_PATH?g -s?@BASE_BIND_PATH?$BASE_BIND_PATH?g -s?@BC_BASE?$BC_BASE?g -s?@BOUNDARY_DIR?$BOUNDARY_DIR?g -s?@BCS_INPUT_BASE?$BCS_INPUT_BASE?g - -s?@CHECKPOINT_TYPE?default?g - -s?@OGCM_NX?$OGCM_NX?g -s?@OGCM_NY?$OGCM_NY?g -s?@OGCM_NPROCS?$OGCM_NPROCS?g - -s?@OBSERVER_FRQ?0?g +s?{{ GCMVER }}?$GCMVER?g +s?{{ EXPSRC }}?$GEOSTAG?g +s?{{ EXPID }}?$EXPID?g +s?{{ RUN_N }}?$RUN_N?g +s?{{ RUN_FN }}?$RUN_FN?g +s?{{ RUN_FT }}?$RUN_FT?g +s?{{ RUN_T }}?$RUN_T?g +s?{{ RUN_P }}?$RUN_P?g +s?{{ RUN_FP }}?$RUN_FP?g +s?{{ RUN_Q }}?$RUN_Q?g +s?{{ REGRESS_P }}?$REGRESS_P?g +s?{{ POST_N }}?$POST_N?g +s?{{ POST_T }}?$POST_T?g +s?{{ POST_P }}?$POST_P?g +s?{{ POST_Q }}?$POST_Q?g +s?{{ MOVE_N }}?$MOVE_N?g +s?{{ PLOT_N }}?$PLOT_N?g +s?{{ PLOT_T }}?$PLOT_T?g +s?{{ PLOT_P }}?$PLOT_P?g +s?{{ PLOT_Q }}?$PLOT_Q?g +s?{{ MOVE_Q }}?$MOVE_Q?g +s?{{ MOVE_P }}?$MOVE_P?g +s?{{ ARCHIVE_N }}?$ARCHIVE_N?g +s?{{ ARCHIVE_T }}?$ARCHIVE_T?g +s?{{ ARCHIVE_P }}?$ARCHIVE_P?g +s?{{ ARCHIVE_Q }}?$ARCHIVE_Q?g +s?{{ REGRESS_N }}?$REGRESS_N?g +s?{{ BCSDIR }}?$BCSDIR?g +s?{{ SSTDIR }}?$SSTDIR?g +s?{{ SSTNAME }}?$SSTNAME?g +s?{{ OCEANOUT }}?$OCEANOUT?g +s?{{ LSMBCS }}?$LSM_BCS?g +s?{{ EMIP_BCS_IN }}?$EMIP_BCS_IN?g +s?{{ EMIP_MERRA2 }}?$EMIP_MERRA2?g +s?{{ BCSTAG }}?$OCEAN_TAG?g +s?{{ SSTFILE }}?$SSTFILE?g +s?{{ ICEFILE }}?$ICEFILE?g +s?{{ KPARFILE }}?$KPARFILE?g +s?{{ CHMDIR }}?$CHMDIR?g +s?{{ COUPLEDIR }}?$COUPLEDIR?g +s?{{ GWDRSDIR }}?$GWDRSDIR?g +s?{{ NCAR_NRDG }}?$NCAR_NRDG?g +s?{{ EXPDIR }}?$EXPDIR?g +s?{{ EXPDSC }}?$EXPDSC?g +s?{{ HOMDIR }}?$HOMDIR?g +s?{{ BATCH_GROUP }}?${BATCH_GROUP}${GROUP}?g +s?{{ BATCH_TIME }}?$BATCH_TIME?g +s?{{ BATCH_CMD }}?$BATCH_CMD?g +s?{{ BATCH_JOBNAME }}?$BATCH_JOBNAME?g +s?{{ BATCH_OUTPUTNAME }}?$BATCH_OUTPUTNAME?g +s?{{ BATCH_JOINOUTERR }}?$BATCH_JOINOUTERR?g +s?{{ SITE }}?$SITE?g +s?{{ GEOSDIR }}?$GEOSDIR?g +s?{{ GEOSSRC }}?$GEOSSRC?g +s?{{ GEOSBIN }}?$GEOSBIN?g +s?{{ GEOSETC }}?$GEOSETC?g +s?{{ GEOSUTIL }}?$GEOSUTIL?g +s?{{ SINGULARITY_BUILD }}?$SINGULARITY_BUILD?g +s?{{ NATIVE_BUILD }}?$NATIVE_BUILD?g +s?{{ MPT_SHEPHERD }}?$MPT_SHEPHERD?g +s?{{ SINGULARITY_SANDBOX }}?$SINGULARITY_SANDBOX?g +s?{{ REAL_BIND_PATH }}?$REAL_BIND_PATH?g +s?{{ BASE_BIND_PATH }}?$BASE_BIND_PATH?g +s?{{ BC_BASE }}?$BC_BASE?g +s?{{ BOUNDARY_DIR }}?$BOUNDARY_DIR?g +s?{{ BCS_INPUT_BASE }}?$BCS_INPUT_BASE?g + +s?{{ CHECKPOINT_TYPE }}?default?g + +s?{{ OGCM_NX }}?$OGCM_NX?g +s?{{ OGCM_NY }}?$OGCM_NY?g +s?{{ OGCM_NPROCS }}?$OGCM_NPROCS?g + +s?{{ OBSERVER_FRQ }}?0?g s?^[ \t]*RECORD_?#RECORD_?g -s?@DASTUNING?#?g - -s?@FORCEDAS?$FORCEDAS?g -s?@FORCEGCM?$FORCEGCM?g -s?@COUPLED?$COUPLED?g -s?@CLDMICRO?$CLDMICRO?g -s?@MOM5?$MOM5?g -s?@MOM6?$MOM6?g -s?@OCNMODEL?$OCNMODEL?g -s?@CICE4?$CICE4?g -s?@CICE6?$CICE6?g -s?@HIST_CICE4?$HIST_CICE4?g -s?@MIT?$MIT?g -s?@DATAOCEAN?$DATAOCEAN?g -s?@OPS_SPECIES?$OPS_SPECIES?g -s?@CMIP_SPECIES?$CMIP_SPECIES?g -s?@MERRA2OX_SPECIES?$MERRA2OX_SPECIES?g -s?@FVCUBED?$FVCUBED?g -s?@HIST_GOCART?$HIST_GOCART?g -s?@HIST_CATCHCN?$HIST_CATCHCN?g -s?@GCMRUN_CATCHCN?$GCMRUN_CATCHCN?g -s?@EMIP_OLDLAND?$EMIP_OLDLAND?g -s?@EMIP_NEWLAND?$EMIP_NEWLAND?g -s?@LSM_PARMS?$LSM_PARMS?g -s?@OCEAN_NAME?$OCEAN_NAME?g -s?@OCEAN_PRELOAD?$OCEAN_PRELOAD?g - -s?@4DIAUDAS?#DELETE?g -s?@REGULAR_REPLAY_GMAO?#?g -s?@REGULAR_REPLAY_NCEP?#DELETE?g -s?@REGULAR_REPLAY_ECMWF?#DELETE?g -s?@REGULAR_REPLAY?#?g +s?{{ DASTUNING }}?#?g + +s?{{ FORCEDAS }}?$FORCEDAS?g +s?{{ FORCEGCM }}?$FORCEGCM?g +s?{{ COUPLED }}?$COUPLED?g +s?{{ CLDMICRO }}?$CLDMICRO?g +s?{{ MOM5 }}?$MOM5?g +s?{{ MOM6 }}?$MOM6?g +s?{{ OCNMODEL }}?$OCNMODEL?g +s?{{ CICE4 }}?$CICE4?g +s?{{ CICE6 }}?$CICE6?g +s?{{ HIST_CICE4 }}?$HIST_CICE4?g +s?{{ MIT }}?$MIT?g +s?{{ DATAOCEAN }}?$DATAOCEAN?g +s?{{ OPS_SPECIES }}?$OPS_SPECIES?g +s?{{ CMIP_SPECIES }}?$CMIP_SPECIES?g +s?{{ MERRA2OX_SPECIES }}?$MERRA2OX_SPECIES?g +s?{{ FVCUBED }}?$FVCUBED?g +s?{{ HIST_GOCART }}?$HIST_GOCART?g +s?{{ HIST_CATCHCN }}?$HIST_CATCHCN?g +s?{{ GCMRUN_CATCHCN }}?$GCMRUN_CATCHCN?g +s?{{ EMIP_OLDLAND }}?$EMIP_OLDLAND?g +s?{{ EMIP_NEWLAND }}?$EMIP_NEWLAND?g +s?{{ LSM_PARMS }}?$LSM_PARMS?g +s?{{ OCEAN_NAME }}?$OCEAN_NAME?g +s?{{ OCEAN_PRELOAD }}?$OCEAN_PRELOAD?g + +s?{{ _4DIAUDAS }}?#DELETE?g +s?{{ REGULAR_REPLAY_GMAO }}?#?g +s?{{ REGULAR_REPLAY_NCEP }}?#DELETE?g +s?{{ REGULAR_REPLAY_ECMWF }}?#DELETE?g +s?{{ REGULAR_REPLAY }}?#?g s?ana4replay.eta.%y4%m2%d2_%h2z.nc4?/discover/nobackup/projects/gmao/merra2/data/ana/MERRA2_all/Y%y4/M%m2/MERRA2.ana.eta.%y4%m2%d2_%h2z.nc4?g -s?@REPLAY_ANA_EXPID?$REPLAY_ANA_EXPID?g -s?@REPLAY_ANA_LOCATION?$REPLAY_ANA_LOCATION?g -s?@M2_REPLAY_ANA_LOCATION?$M2_REPLAY_ANA_LOCATION?g - -s?@OX_RELAXTIME?$OX_RELAXTIME?g -s?@PCHEM_CLIM_YEARS?$PCHEM_CLIM_YEARS?g - -s?@RATS_PROVIDER?$RATS_PROVIDER?g -s?@AERO_PROVIDER?$AERO_PROVIDER?g -s?@OANA_PROVIDER?PCHEM?g -s?@EMISSIONS?$EMISSIONS?g - -s?@CH4_PROVIDER?$CH4_PROVIDER?g -s?@CO2_PROVIDER?$CO2_PROVIDER?g - -s^@DYCORE^$DYCORE^g -s^@AGCM_GRIDNAME^$AGCM_GRIDNAME^g -s^@OGCM_GRIDNAME^$OGCM_GRIDNAME^g - -s?@OGCM_IS_FCST?$OGCM_IS_FCST?g -s^@BOOT^YES^g -s^@BCSRES^$BCSRES^g -s^@OCEANtag^$OCEAN_RES^g -s^@ATMOStag^$ATMOS_RES^g -s^@RES_DATELINE^$RES_DATELINE^g -s^@TILEDATA^$TILEDATA^g -s^@TILEBIN^$TILEBIN^g -s/@DT/$DT/g -s/@CONV_DT/$CONV_DT/g -s/@CHEM_DT/$CHEM_DT/g -s/@SOLAR_DT/$SOLAR_DT/g -s/@IRRAD_DT/$IRRAD_DT/g -s/@OCEAN_DT/$OCEAN_DT/g -s/@NX/$NX/g -s/@NY/$NY/g -s/@USE_SHMEM/$USE_SHMEM/g -s/@USE_IOSERVER/$USE_IOSERVER/g -s/@NUM_OSERVER_NODES/$NUM_OSERVER_NODES/g -s/@NUM_BACKEND_PES/$NUM_BACKEND_PES/g -s/@RESTART_BY_OSERVER/$RESTART_BY_OSERVER/g -s#@SEVERAL_TRIES#$SEVERAL_TRIES#g -s/@NCPUS_PER_NODE/$NCPUS_PER_NODE/g -s/@NUM_READERS/$NUM_READERS/g -s/@NUM_WRITERS/$NUM_WRITERS/g -s/@LATLON_AGCM/$LATLON_AGCM/g -s?@LATLON_OGCM?$LATLON_OGCM?g -s/@CUBE_AGCM/$CUBE_AGCM/g -s?@CUBE_OGCM?$CUBE_OGCM?g -s/@GRID_TYPE/$GRID_TYPE/g -s/@AGCM_NF/$AGCM_NF/g -s/@AGCM_IM/$AGCM_IM/g -s/@AGCM_JM/$AGCM_JM/g -s/@AGCM_LM/$AGCM_LM/g -s/@OGCM_IM/$OGCM_IM/g -s/@OGCM_JM/$OGCM_JM/g -s/@OGCM_LM/$OGCM_LM/g -s/@OGCM_NF/$OGCM_NF/g -s/@OGCM_GRID_TYPE/$OGCM_GRID_TYPE/g -s/@BEG_DATE/${BEG_DATE}/g -s/@END_DATE/${END_DATE}/g -s/@JOB_SGMT/${JOB_SGMT}/g -s/@NUM_SGMT/${NUM_SGMT}/g - -s/@CONUS/${CONUS}/g -s/@CONVPAR_OPTION/${CONVPAR_OPTION}/g -s/@STRETCH_FACTOR/${STRETCH_FACTOR}/g - -s/@INTERPOLATE_SST/$INTERPOLATE_SST/g -s/@HIST_IM/$HIST_IM/g -s/@HIST_JM/$HIST_JM/g -s/@CLIM_IM/$CLIM_IM/g -s/@CLIM_JM/$CLIM_JM/g - -s/@ISCCP_SATSIM/1/g -s/@MODIS_SATSIM/0/g -s/@RADAR_SATSIM/0/g -s/@LIDAR_SATSIM/0/g -s/@MISR_SATSIM/0/g -s/@SATSIM/0/g - -s/@USE_SKIN_LAYER/1/g -s/@ANALYZE_TS/0/g - -s/@LSM_CHOICE/$LSM_CHOICE/g - -s/@MP_TURN_OFF_WSUB_EXTDATA/$MP_TURN_OFF_WSUB_EXTDATA/g - -s?@BACM_1M_?$BACM_1M_?g -s?@GFDL_1M_?$GFDL_1M_?g -s?@MGB2_2M_?$MGB2_2M_?g - -s?@KLID?$KLID?g - -s?@PRELOAD_COMMAND?$PRELOAD_COMMAND?g -s?@LD_LIBRARY_PATH_CMD?$LD_LIBRARY_PATH_CMD?g -s?@RUN_CMD?$RUN_CMD?g - -s?@MODELATM?$MODELATM?g -s?@USE_DATA_ATM4OCN?$USE_DATA_ATM4OCN?g - -s?@RRTMG_RADIATION?$RRTMG_RADIATION?g -s?@RRTMGP_RADIATION?$RRTMGP_RADIATION?g +s?{{ REPLAY_ANA_EXPID }}?$REPLAY_ANA_EXPID?g +s?{{ REPLAY_ANA_LOCATION }}?$REPLAY_ANA_LOCATION?g +s?{{ M2_REPLAY_ANA_LOCATION }}?$M2_REPLAY_ANA_LOCATION?g + +s?{{ OX_RELAXTIME }}?$OX_RELAXTIME?g +s?{{ PCHEM_CLIM_YEARS }}?$PCHEM_CLIM_YEARS?g + +s?{{ RATS_PROVIDER }}?$RATS_PROVIDER?g +s?{{ AERO_PROVIDER }}?$AERO_PROVIDER?g +s?{{ OANA_PROVIDER }}?PCHEM?g +s?{{ EMISSIONS }}?$EMISSIONS?g + +s?{{ CH4_PROVIDER }}?$CH4_PROVIDER?g +s?{{ CO2_PROVIDER }}?$CO2_PROVIDER?g + +s^{{ DYCORE }}^$DYCORE^g +s^{{ AGCM_GRIDNAME }}^$AGCM_GRIDNAME^g +s^{{ OGCM_GRIDNAME }}^$OGCM_GRIDNAME^g + +s?{{ OGCM_IS_FCST }}?$OGCM_IS_FCST?g +s^{{ BOOT }}^YES^g +s^{{ BCSRES }}^$BCSRES^g +s^{{ OCEANtag }}^$OCEAN_RES^g +s^{{ ATMOStag }}^$ATMOS_RES^g +s^{{ RES_DATELINE }}^$RES_DATELINE^g +s^{{ TILEDATA }}^$TILEDATA^g +s^{{ TILEBIN }}^$TILEBIN^g +s/{{ DT }}/$DT/g +s/{{ CONV_DT }}/$CONV_DT/g +s/{{ CHEM_DT }}/$CHEM_DT/g +s/{{ SOLAR_DT }}/$SOLAR_DT/g +s/{{ IRRAD_DT }}/$IRRAD_DT/g +s/{{ OCEAN_DT }}/$OCEAN_DT/g +s/{{ NX }}/$NX/g +s/{{ NY }}/$NY/g +s/{{ USE_SHMEM }}/$USE_SHMEM/g +s/{{ USE_IOSERVER }}/$USE_IOSERVER/g +s/{{ NUM_OSERVER_NODES }}/$NUM_OSERVER_NODES/g +s/{{ NUM_BACKEND_PES }}/$NUM_BACKEND_PES/g +s/{{ RESTART_BY_OSERVER }}/$RESTART_BY_OSERVER/g +s#{{ SEVERAL_TRIES }}#$SEVERAL_TRIES#g +s/{{ NCPUS_PER_NODE }}/$NCPUS_PER_NODE/g +s/{{ NUM_READERS }}/$NUM_READERS/g +s/{{ NUM_WRITERS }}/$NUM_WRITERS/g +s/{{ LATLON_AGCM }}/$LATLON_AGCM/g +s?{{ LATLON_OGCM }}?$LATLON_OGCM?g +s/{{ CUBE_AGCM }}/$CUBE_AGCM/g +s?{{ CUBE_OGCM }}?$CUBE_OGCM?g +s/{{ GRID_TYPE }}/$GRID_TYPE/g +s/{{ AGCM_NF }}/$AGCM_NF/g +s/{{ AGCM_IM }}/$AGCM_IM/g +s/{{ AGCM_JM }}/$AGCM_JM/g +s/{{ AGCM_LM }}/$AGCM_LM/g +s/{{ OGCM_IM }}/$OGCM_IM/g +s/{{ OGCM_JM }}/$OGCM_JM/g +s/{{ OGCM_LM }}/$OGCM_LM/g +s/{{ OGCM_NF }}/$OGCM_NF/g +s/{{ OGCM_GRID_TYPE }}/$OGCM_GRID_TYPE/g +s/{{ BEG_DATE }}/${BEG_DATE}/g +s/{{ END_DATE }}/${END_DATE}/g +s/{{ JOB_SGMT }}/${JOB_SGMT}/g +s/{{ NUM_SGMT }}/${NUM_SGMT}/g + +s/{{ CONUS }}/${CONUS}/g +s/{{ CONVPAR_OPTION }}/${CONVPAR_OPTION}/g +s/{{ STRETCH_FACTOR }}/${STRETCH_FACTOR}/g + +s/{{ INTERPOLATE_SST }}/$INTERPOLATE_SST/g +s/{{ HIST_IM }}/$HIST_IM/g +s/{{ HIST_JM }}/$HIST_JM/g +s/{{ CLIM_IM }}/$CLIM_IM/g +s/{{ CLIM_JM }}/$CLIM_JM/g + +s/{{ ISCCP_SATSIM }}/1/g +s/{{ MODIS_SATSIM }}/0/g +s/{{ RADAR_SATSIM }}/0/g +s/{{ LIDAR_SATSIM }}/0/g +s/{{ MISR_SATSIM }}/0/g +s/{{ SATSIM }}/0/g + +s/{{ USE_SKIN_LAYER }}/1/g +s/{{ ANALYZE_TS }}/0/g + +s/{{ LSM_CHOICE }}/$LSM_CHOICE/g + +s/{{ MP_TURN_OFF_WSUB_EXTDATA }}/$MP_TURN_OFF_WSUB_EXTDATA/g + +s?{{ BACM_1M_ }}?$BACM_1M_?g +s?{{ GFDL_1M_ }}?$GFDL_1M_?g +s?{{ MGB2_2M_ }}?$MGB2_2M_?g + +s?{{ KLID }}?$KLID?g + +s?{{ PRELOAD_COMMAND }}?$PRELOAD_COMMAND?g +s?{{ LD_LIBRARY_PATH_CMD }}?$LD_LIBRARY_PATH_CMD?g +s?{{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}?\{$LD_LIBRARY_PATH_CMD\}?g +s?{{ RUN_CMD }}?$RUN_CMD?g + +s?{{ MODELATM }}?$MODELATM?g +s?{{ USE_DATA_ATM4OCN }}?$USE_DATA_ATM4OCN?g + +s?{{ RRTMG_RADIATION }}?$RRTMG_RADIATION?g +s?{{ RRTMGP_RADIATION }}?$RRTMGP_RADIATION?g EOF @@ -2239,10 +2240,10 @@ EOF cat >> $HOMDIR/sedfile << EOF -s?@FV_SCHMIDT?$SCHMIDT?g -s?@FV_STRETCH_FAC?$STRETCH_FAC?g -s?@FV_TARGET_LON?$TARGET_LON?g -s?@FV_TARGET_LAT?$TARGET_LAT?g +s?{{ FV_SCHMIDT }}?$SCHMIDT?g +s?{{ FV_STRETCH_FAC }}?$STRETCH_FAC?g +s?{{ FV_TARGET_LON }}?$TARGET_LON?g +s?{{ FV_TARGET_LAT }}?$TARGET_LAT?g EOF diff --git a/gcmpy/CMakeLists.txt b/gcmpy/CMakeLists.txt new file mode 100644 index 00000000..a577c96c --- /dev/null +++ b/gcmpy/CMakeLists.txt @@ -0,0 +1,3 @@ +# cp (makes exe) +add_subdirectory(scripts) +add_subdirectory(yaml) diff --git a/gcmpy/scripts/CMakeLists.txt b/gcmpy/scripts/CMakeLists.txt new file mode 100644 index 00000000..1ea2845f --- /dev/null +++ b/gcmpy/scripts/CMakeLists.txt @@ -0,0 +1,16 @@ +set (programs + atmosphere.py + generate_question.py + gocart.py + land.py + gcm_setup.py + ocean.py + process_questions.py + utility.py + clone.py + ) + +foreach (file ${programs}) + configure_file(${file} ${file} @ONLY) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION bin/gcmpy/scripts) +endforeach () diff --git a/gcmpy/scripts/atmosphere.py b/gcmpy/scripts/atmosphere.py new file mode 100755 index 00000000..0b396068 --- /dev/null +++ b/gcmpy/scripts/atmosphere.py @@ -0,0 +1,412 @@ +from utility import color + +class atmosphere: + def __init__(atmos, expConfig): + atmos.expConfig = expConfig + atmos.use_SHMEM = 0 + atmos.force_das = "#" + atmos.force_gcm = "#" + atmos.num_readers = 1 + atmos.num_writers = 1 + atmos.dt = atmos.expConfig['heartbeat'] + atmos.dt_solar = None + atmos.dt_irrad = None + atmos.dt_ocean = atmos.expConfig['heartbeat'] + atmos.lm = int(atmos.expConfig['AM_vertical_res']) + atmos.im = int(atmos.expConfig['AM_horizontal_res'][1:]) + atmos.jm = atmos.im * 6 + atmos.nx = None + atmos.ny = None + atmos.nf = 6 + atmos.microphysics = atmos.expConfig["AM_microphysics"] + atmos.hist_im = atmos.im * 4 + atmos.hist_jm = atmos.im * 2 + 1 + atmos.gridfile = f"Gnomonic_c{atmos.im}.dat" + atmos.job_sgmt = None + atmos.num_sgmt = None + atmos.res = f"CF{atmos.im:04}x6C" + atmos.post_NDS = None + atmos.nx_convert = 2 + atmos.ny_convert = 24 + atmos.conus = '#' + atmos.stretch_factor = '' + atmos.FV_stretch_fac = '' + atmos.gridname = f"PE{atmos.im}x{atmos.jm}-CF" + atmos.res_dateline = f"{atmos.im}x{atmos.jm}" + atmos.BACM_1M = "#" + atmos.GFDL_1M = "#" + atmos.MGB2_2M = "#" + atmos.GFDL_hydro = ".TRUE." + atmos.GFDL_prog_ccn = "prog_ccn = .true." + atmos.GFDL_use_ccn = "use_ccn = .true." + atmos.MP_turnoff_wsub = None + atmos.FV_make_NH = None + atmos.FV_hydro = None + atmos.FV_hwt = None + atmos.schmidt = None + atmos.target_lon = None + atmos.target_lat = None + atmos.convpar_option = 'GF' + atmos.mp_turn_off_wsub_extdata = None + atmos.low_res = False + + # These are superfluous for GCM, but are needed SCM (considered latlon) + atmos.latlon = '#DELETE' + atmos.cube = '' + + + def hres(atmos, ocean_nx, ocean_ny): + match atmos.expConfig["AM_horizontal_res"]: + case "c12": + atmos.conv_dt = 1200 + atmos.chem_dt = 3600 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + if atmos.expConfig["OM_name"] == "MOM6": + atmos.nx = 1 + else: + atmos.nx = 2 + atmos.ny = atmos.nx * 6 + atmos.job_sgmt = f"{15:08}" + atmos.num_sgmt = 20 + atmos.post_NDS = 4 + atmos.nx_convert = 1 + atmos.ny_convert = 6 + atmos.res = 'CF0012x6C' + atmos.low_res = True + + case "c24": + atmos.conv_dt = 1200 + atmos.chem_dt = 3600 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 4 + atmos.ny = atmos.nx * 6 + atmos.job_sgmt = f"{15:08}" + atmos.num_sgmt = 20 + atmos.post_NDS = 4 + atmos.nx_convert = 1 + atmos.ny_convert = 6 + atmos.res = 'CF0024x6C' + atmos.low_res = True + + case "c48": + atmos.conv_dt = 1200 + atmos.chem_dt = 3600 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 6 + atmos.ny = atmos.nx * 6 + atmos.job_sgmt = f"{15:08}" + atmos.num_sgmt = 20 + atmos.post_NDS = 4 + atmos.res = 'CF0048x6C' + atmos.hist_im = 180 + atmos.hist_jm = 91 + atmos.low_res = True + + case "c90": + atmos.conv_dt = 900 + atmos.chem_dt = 1800 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = atmos.dt + if atmos.expConfig['OM_name'] == 'MIT': + atmos.nx = 10 + atmos.ny = 36 + elif atmos.expConfig['OM_name'] == 'MOM5': + atmos.nx = ocean_nx + atmos.ny = ocean_ny + elif atmos.expConfig['OM_name'] == 'MOM6': + atmos.nx = 5 + atmos.ny = 36 + else: + atmos.nx = 10 + atmos.ny = atmos.nx * 6 + atmos.dt_ocean = 3600 + atmos.job_sgmt = f"{32:08}" + atmos.num_sgmt = 4 + atmos.post_NDS = 8 + atmos.res = 'CF0090x6C' + + case "c180": + atmos.conv_dt = 600 + atmos.chem_dt = 1200 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = atmos.dt + if atmos.expConfig['OM_name'] == 'MOM6': + atmos.nx = 30 + atmos.ny = 36 + elif atmos.expConfig['OM_name'] == 'MOM5' or atmos.expConfig['OM_name'] == 'MIT': + atmos.nx = ocean_nx + atmos.ny = ocean_ny + else: + atmos.nx = 20 + atmos.ny = atmos.nx * 6 + atmos.dt_ocean = 3600 + atmos.job_sgmt = f"{16:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 8 + atmos.num_readers = 2 + atmos.res = 'CF0180x6C' + + case "c360": + atmos.conv_dt = 450 + atmos.chem_dt = 900 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 4600 + atmos.nx = 30 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 4 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 12 + atmos.nx_convert = 4 + atmos.res = 'CF0360x6C' + + case "c720": + atmos.conv_dt = 300 + atmos.chem_dt = 600 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 40 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 16 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.res = 'CF0720x6C' + + case "c1120": + atmos.conv_dt = 300 + atmos.chem_dt = 600 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 60 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 16 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.res = 'CF1120x6C' + + case "c1440": + atmos.conv_dt = 300 + atmos.chem_dt = 600 + atmos.dt_solar = 1200 + atmos.dt_irrad = 1200 + atmos.dt_ocean = 1200 + atmos.nx = 80 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.res = 'CF1440x6C' + + case "c2880": + atmos.conv_dt = 300 + atmos.chem_dt = 300 + atmos.dt_solar = 900 + atmos.dt_irrad = 900 + atmos.dt_ocean = 900 + atmos.nx = 80 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = True + atmos.convpar_option = 'NONE' + atmos.res = 'CF2880x6C' + + case "c5760": + atmos.conv_dt = 300 + atmos.chem_dt = 300 + atmos.dt_solar = 600 + atmos.dt_irrad = 600 + atmos.dt_ocean = 600 + atmos.nx = 80 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = True + atmos.convpar_option = 'NONE' + atmos.res = 'CF5760x6C' + + case "c270": + atmos.conv_dt = 600 + atmos.chem_dt = 1800 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 20 + atmos.ny = atmos.nx * 6 * 2 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 2.5 + atmos.res = 'CF0270x6C-SG001' + + case "c540": + atmos.conv_dt = 300 + atmos.chem_dt = 900 + atmos.dt_solar = 3600 + atmos.dt_irrad = 3600 + atmos.dt_ocean = 3600 + atmos.nx = 30 + atmos.ny = atmos.nx * 6 * 2 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 2.5 + atmos.res = 'CF0540x6C-SG001' + + case "c1080": + atmos.conv_dt = 300 + atmos.chem_dt = 600 + atmos.dt_solar = 1800 + atmos.dt_irrad = 1800 + atmos.dt_ocean = 1800 + atmos.nx = 40 + atmos.ny = atmos.nx * 6 * 2 + atmos.num_readers = 6 + atmos.job_sgmt = f"{1:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 2.5 + atmos.res = 'CF1080x6C-SG001' + + case "c1536": + atmos.conv_dt = 300 + atmos.chem_dt = 900 + atmos.dt_solar = 1800 + atmos.dt_irrad = 1800 + atmos.dt_ocean = 1800 + atmos.nx = 60 + atmos.ny = atmos.nx * 6 + atmos.num_readers = 6 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 16 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 3.0 + atmos.res = 'CF1536x6C-SG002' + + case "c2160": + atmos.conv_dt = 300 + atmos.chem_dt = 300 + atmos.dt_solar = 900 + atmos.dt_irrad = 900 + atmos.dt_ocean = 900 + atmos.nx = 80 + atmos.ny = atmos.nx * 6 * 2 + atmos.num_readers = 6 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 2.5 + atmos.res = 'CF2160x6C-SG001' + + case 'c4320': + atmos.conv_dt = 300 + atmos.chem_dt = 300 + atmos.dt_solar = 900 + atmos.dt_irrad = 900 + atmos.dt_ocean = 900 + atmos.nx = 80 + atmos.ny = atmos.nx * 6 * 2 + atmos.num_readers = 6 + atmos.job_sgmt = f"{5:08}" + atmos.num_sgmt = 1 + atmos.post_NDS = 32 + atmos.nx_convert = 8 + atmos.use_SHMEM = 1 + atmos.conus = "" + atmos.stretch_factor = 2.5 + atmos.res = 'CF4320x6C' + + + + def set_microphysics(atmos): + if atmos.microphysics == "BACM_1M": + atmos.BACM_1M = "" + atmos.conv_dt = 450 + atmos.chem_dt = 3600 + elif atmos.microphysics == "GFDL_1M": + atmos.GFDL_1M = "" + elif atmos.microphysics == "MGB2_2M": + atmos.MGB2_2M = "" + + def set_turnoff_wsub(atmos): + if atmos.microphysics == "MGB2_2M": + atmos.MP_turnoff_wsub = "#DELETE" + else: + atmos.MP_turnoff_wsub = "" + + def set_conus(atmos): + if atmos.conus == "#": + atmos.schmidt = "do_schmidt = .false." + atmos.FV_stretch_fac = "stretch_fac = 1.0" + atmos.target_lon = "target_lon = 0.0" + atmos.target_lat = "target_lat = -90.0" + else: + atmos.schmidt = "do_schmidt = .true." + atmos.FV_stretch_fac = f"stretch_fac = {atmos.stretch_factor}" + atmos.target_lon = "target_lon = -98.35" + atmos.target_lat = "target_lat = 39.5" + atmos.FV_hwt = '' + + def set_wsub_extdata(atmos): + if atmos.microphysics == 'BACM_1M' or atmos.microphysics == 'GFDL_1M': + atmos.mp_turn_off_wsub_extdata = '' + else: + atmos.mp_turn_off_wsub_extdata = '#DELETE#' + + # Set coarse resolution CLIM output + def set_CLIM(atmos): + atmos.CLIM_IM = 576 + atmos.CLIM_JM = 361 + if (atmos.CLIM_IM > atmos.hist_im): + atmos.CLIM_IM = atmos.hist_im + atmos.CLIM_JM = atmos.hist_jm + + def config(atmos, ocean_nx, ocean_ny): + atmos.hres(ocean_nx, ocean_ny) + atmos.set_microphysics() + atmos.set_conus() + atmos.set_wsub_extdata() + atmos.set_CLIM() diff --git a/gcmpy/scripts/clone.py b/gcmpy/scripts/clone.py new file mode 100644 index 00000000..80940d2c --- /dev/null +++ b/gcmpy/scripts/clone.py @@ -0,0 +1,171 @@ +import os, yaml, sys, subprocess, re, shutil +from copy import deepcopy +from utility import color, cpfile + +# Helper to create a yaml copy of the experiment configurations +def yaml_receipt(expConfig): + + # we don't care about these anymore + try: + del expConfig['clone_experiment'] + del expConfig['original_exp_path'] + except KeyError: + pass + + # create a deep copy of the dictionary so the original isn't affected + yamlDict = deepcopy(expConfig) + + # if the question was never asked remove it from the dictionary before creating the yaml + # delete if we want to give access to all questions in the yaml + for key in list(yamlDict): + if yamlDict[key] == "None": + yamlDict.pop(key) + + + # Create and write to YAML file + file_path = os.path.join(yamlDict['exp_dir'], f"{yamlDict['experiment_id']}.yaml") + with open(file_path, "w") as f: + yaml.dump(yamlDict, f, default_flow_style=False, sort_keys=False) + + +# Helper to create an expConfig from yaml file input +def yaml_input_exp(yamlFile): + expConfig = {} + + # copy yaml into dictionary + with open(yamlFile, 'r') as f: + expConfig = yaml.safe_load(f) + + return expConfig + + +def clone_exp(expConfig): + + # we will peek inside HISTORY.rc to find the original exp id/desc + history_path = f"{expConfig['original_exp_path']}/HISTORY.rc" + + # these are dictionaries containing only the old and new values + exp_path = { + "old": expConfig['original_exp_path'], + "new": expConfig['exp_dir'] + } + exp_id = { + "old": get_old_value(history_path, "EXPID:"), + "new": expConfig['experiment_id'] + } + exp_desc = { + "old": get_old_value(history_path, "EXPDSC:"), + "new": expConfig['experiment_description'] + } + + # find user's group root + groups_output = subprocess.check_output(["groups"], text=True) + expConfig['group_root'] = groups_output.strip().split()[0] + + # Find out if we are running the cube and/or OGCM + ogcm = None + seaice = None + with open(f"{exp_path['old']}/AGCM.rc", "r") as f: + for line in f: + if "OCEAN_NAME" in line: + ogcm = line.split(':', 1)[1].strip() + if "SEAICE_NAME" in line: + seaice = line.split(':', 1)[1].strip() + + # Construct the list of files to be copied over + file_list = ["post/gcm_post.j", + "plot/gcm_plot.tmpl", + "plot/gcm_quickplot.csh", + "plot/gcm_moveplot.j", + "archive/gcm_archive.j", + "regress/gcm_regress.j", + "forecasts/gcm_forecast.tmpl", + "forecasts/gcm_forecast.setup", + "plot/plot.rc", + "post/post.rc", + "linkbcs", + "CAP.rc", + "AGCM.rc", + "HISTORY.rc", + "gcm_run.j", + "gcm_emip.setup", + "logging.yaml", + "fvcore_layout.rc", + "GEOSgcm.x"] + + if ogcm and ogcm != "MIT": + file_list.extend(["input.nml", + "diag_table", + "__init__.py", + "plot/plotocn.j"]) + if ogcm == "MOM": + file_list.append("field_table") + elif ogcm == "MOM6": + file_list.extend(["MOM_override", + "MOM_input", + "data_table"]) + if seaice == "CICE6": + file_list.append("ice_in") + + # Create the new directory and copy over the files + os.mkdir(exp_path['new']) + sub_dirs = ['archive', 'forecasts', 'plot', 'post' , 'regress'] + for i in sub_dirs: + os.makedirs(os.path.join(exp_path['new'], i), exist_ok=True) + for file in file_list: + cpfile(f"{exp_path['old']}/{file}", f"{exp_path['new']}/{file}", file) + + # Copy the RC dir over + shutil.copytree(f"{exp_path['old']}/RC", f"{exp_path['new']}/RC", symlinks=True) + + # we do NOT want to attempt regex substitutions on a binary file + file_list.remove("GEOSgcm.x") + + # performs regex subsitions on every file in file_list + for file in file_list: + with open(f"{exp_path['new']}/{file}", 'r') as f: + lines = f.readlines() + + new_lines = [replace(line, exp_id, exp_desc, exp_path, expConfig['group_root']) for line in lines] + + with open(f"{exp_path['new']}/{file}", 'w') as f: + f.writelines(new_lines) + + print("Cloning Complete!\n" + "-----------------------\n\n" + f"Original Experiment Directory: {color.RED}{exp_path['old']}{color.END}\n" + "-----------------------\n\n" + f"You must now copy your {color.GREEN}Initial Conditions{color.END} into:\n" + "-----------------------\n" + f"{color.RED}{exp_path['new']}{color.END}\n\n") + + +# helper function for regex substitutions +def replace(line, exp_id, exp_desc, exp_path, group_root): + + # basically a rulebook for what lines are allowed to have substitutions performed on them + rules = [ + (rf"(^\s*EXPID:\s+){re.escape(exp_id['old'])}", rf"\1{exp_id['new']}"), + (rf"(setenv\s+EXPID\s+){re.escape(exp_id['old'])}", rf"\1{exp_id['new']}"), + (rf"(set\s+EXPID=){re.escape(exp_id['old'])}", rf"\1{exp_id['new']}"), + (rf"(\s*(?:exp_id|cmpexp)=(?:\"|\')){re.escape(exp_id['old'])}", rf"\1{exp_id['new']}"), + (rf"(^\s*(?:#PBS -N\s+|#SBATCH\s+--job-name=)){re.escape(exp_id['old'])}", rf"\1{exp_id['new']}"), + (rf"(EXPDSC:\s*){re.escape(exp_desc['old'])}", rf"\1{exp_desc['new']}"), + (rf"{exp_path['old']}", rf"{exp_path['new']}"), + (rf"((?:group_list|#SBATCH\s+--account)=)(.*)", rf"\1{group_root}"), + ] + + for pattern, repl in rules: + line = re.sub(pattern, repl, line) + return line + +# helper function for finding original experiment id/desc +def get_old_value(filepath, old_key): + with open(filepath) as f: + for line in f: + m = re.match(rf"^\s*{old_key}\s*(.*$)", line) + if m: + return m.group(1) + return sys.exit(f"Could not find {old_key} in {filepath}") + + diff --git a/gcmpy/scripts/gcm_setup.py b/gcmpy/scripts/gcm_setup.py new file mode 100755 index 00000000..a65e4dae --- /dev/null +++ b/gcmpy/scripts/gcm_setup.py @@ -0,0 +1,1043 @@ +#!/usr/bin/env python3 + +import math, os, shutil, tempfile, yaml, re, glob, sys, argparse +from ocean import ocean +from atmosphere import atmosphere as atmos +from land import land +from gocart import gocart +from process_questions import ask_questions +from clone import yaml_receipt, yaml_input_exp, clone_exp +from utility import envdict, pathdict, color, exceptions, cpfile, copy_src_tarfile +from pathlib import Path +from jinja2 import Environment, FileSystemLoader, Undefined + + +# combines all models (atmos, ocean, land, gocart) into one big one +class setup: + def __init__(self, expConfig): + self.expConfig = expConfig + self.is_FCST = False + self.fv_cubed = '' + self.begin_date = '18910301 000000' + self.end_date = '29990302 210000' + self.n_oserver_nodes = None + self.n_backend_pes = None + self.n_nodes = None + self.exp_dir = self.expConfig['exp_dir'] + self.restart_by_oserver = 'NO' + self.several_tries = '' + self.gcm_version = Path(f"{pathdict['etc']}/.AGCM_VERSION").read_text() + self.linkx = False + self.templates = ['gcm_run.j', + 'gcm_post.j', + 'gcm_archive.j', + 'gcm_regress.j', + 'gcm_plot.tmpl', + 'gcm_quickplot.csh', + 'gcm_moveplot.j', + 'gcm_forecast.tmpl', + 'gcm_forecast.setup', + 'gcm_emip.setup', + 'CAP.rc.tmpl', + 'AGCM.rc.tmpl', + 'logging.yaml', + 'fvcore_layout.rc', + 'linkbcs.tmpl'] + def initialize_models(self): + self.ocean = ocean(self.expConfig) + self.atmos = atmos(self.expConfig) + self.land = land(self.expConfig) + self.gocart = gocart(self.expConfig) + + def config_models(self): + self.ocean.config() + self.atmos.config(self.ocean.NX, self.ocean.NY) + self.land.config() + self.gocart.config() + self.templates.append(self.ocean.history_template) + + ''' + def check_flags(self): + # If argument is not recognized, display usage and exit + for arg in enumerate(sys.argv[1:]): + if (arg[-1] == '--link'): + self.linkx = True + elif (arg[-1] == '--singularity'): + self.bool_usingSingularity == True + elif (arg[-1] == '--help' or arg[-1] == '-h'): + exceptions.printusage() + else: + exceptions.raise_user_exception("Command line argument \"" + arg[-1] + "\" not \ + recognized. \nSee usage:\n" ) + exceptions.printusage() + ''' + + def set_num_CPUs(self): + if envdict['site'] == 'NCCS': + ''' + NCCS currently recommends that users do not run with + 48 cores per n_CPUs on SCU16 due to OS issues and + recommends that CPU-intensive works run with 46 or less + cores. As 45 is a multiple of 3, it's the best value + that doesn't waste too much + ''' + if self.expConfig['processor'] == 'cas': + self.num_CPUs = 40 + elif self.expConfig['processor'] == 'mil': + self.num_CPUs = 120 + + elif envdict['site'] == 'NAS': + if self.expConfig['processor'] == 'bro': + self.num_CPUs = 24 + self.expConfig['processor'] = 'bro_ele' + elif self.expConfig['processor'] == 'sky': + self.expConfig['processor'] = 'sky_ele' + self.num_CPUs = 40 + elif self.expConfig['processor'] == 'cas': + self.expConfig['processor'] = 'cas_ait' + self.num_CPUs = 40 + elif self.expConfig['processor'] == 'rom' or self.expConfig['processor'] == 'mil': + self.expConfig['processor'] += '_ait' + self.num_CPUs = 120 + elif self.expConfig['processor'] == 'tur': + self.expConfig['processor'] = 'tur_ath' + self.num_CPUs = 240 + + elif envdict['site'] == 'AWS' or envdict['site'] == 'AZURE': + # Because we do not know the name of the model or the number of CPUs + # per node. We ask the user to set these variables in the script + print(color.RED + "\nSince you are running on ", envdict['site'], \ + " you must set the processor and # of CPUs yourself.") + self.num_CPUs = questionary.text("Enter the number of CPUs per node: ").ask() + + else: + envdict['site'] = 'UNKNOWN' + if envdict['arch'] == 'Linux': + # Get the number of CPU cores on Linux + try: + with open('/proc/cpuinfo') as f: + cpuinfo = f.read() + self.num_CPUs = cpuinfo.count('processor') + except IOError: + print(color.RED + "ERROR: Unable to retrieve the number of CPUs.") + sys.exit(1) + elif envdict['arch'] == 'Darwin': + # Get the number of CPU cores on macOS + try: + import multiprocessing + self.num_CPUs = multiprocessing.cpu_count() + except NotImplementedError: + print(color.RED + "ERROR: Unable to retrieve the number of CPUs.") + sys.exit(1) + else: + print(f"ERROR: Unknown architecture", envdict['arch']) + sys.exit(1) + + + + def set_some_stuff(self): + if self.atmos.hist_im >= self.ocean.IM: + self.interpolate_sst = True + else: + self.interpolate_sst = False + self.bcs_res = f"{self.atmos.res}_{self.ocean.res}" + self.tile_data = f"{self.atmos.res}_{self.ocean.res}_Pfafstetter.til" + self.tile_bin = f"{self.atmos.res}_{self.ocean.res}_Pfafstetter.TIL" + self.job_sgmt = f"{self.atmos.job_sgmt} 000000" + + + # setup experiment nodes + def set_nodes(self): + model_npes = self.atmos.nx * self.atmos.ny + + # Calculate OSERVER nodes based on recommended algorithm + if self.expConfig['io_server'] == True: + + # First we calculate the number of model nodes + n_model_nodes = math.ceil(model_npes / self.num_CPUs) + + # Next the number of frontend PEs is 10% of the model PEs + n_frontend_pes = math.ceil(model_npes * 0.1) + + # Now we roughly figure out the number of collections in the HISTORY.rc + n_hist_collections = 0 + with open(f"{pathdict['etc']}/{self.expConfig['history_template']}", 'r') as file: + in_collections = False + for line in file: + if line.split(' ', 1)[0] == "COLLECTIONS:": + in_collections = True + continue + if in_collections and line.split(' ', 1)[0] != "#": + n_hist_collections += 1 + if line.strip() == "::": + break + + # The total number of oserver PEs is frontend PEs plus number of history collections + n_oserver_pes = n_frontend_pes + n_hist_collections + + # calculate the number of oserver nodes + n_oserver_nodes = math.ceil(n_oserver_pes / self.num_CPUs) + + # The number of backend PEs is the number of history collections divided by the number of oserver nodes + n_backend_pes = math.ceil(n_hist_collections / n_oserver_nodes) + + # multigroup requires at least two backend pes + if (n_backend_pes < 2): n_backend_pes = 2 + + # Calculate the total number of nodes to request from batch + self.nodes = n_model_nodes + n_oserver_nodes + + else: + self.nodes = math.ceil(model_npes / self.num_CPUs) + self.n_oserver_nodes = 0 + self.n_backend_pes = 0 + + def set_stuff(self): + self.set_nodes() + # Longer job names are now supported with SLURM and PBS. Limits seem to be 1024 characters with SLURM + # and 230 with PBS. To be safe, we will limit to 200 + self.run_n = f"{self.expConfig['experiment_id'][:200]}_RUN" # RUN Job Name + self.run_fn = f"{self.expConfig['experiment_id'][:200]}_FCST" # Forecast Job Name + self.post_n = f"{self.expConfig['experiment_id'][:200]}_POST" # POST Job Name + self.plot_n = f"{self.expConfig['experiment_id'][:200]}_PLT" # PLOT Job Name + self.move_n = f"{self.expConfig['experiment_id'][:200]}_MOVE" # MOVE Job Name + self.archive_n = f"{self.expConfig['experiment_id'][:200]}_ARCH" # ARCHIVE Job Name + self.regress_n = f"{self.expConfig['experiment_id'][:200]}_RGRS" # REGRESS Job Name + + # Here we need to convert POST_NDS to total tasks. Using 16 cores + # per task as a good default + post_npes = self.atmos.post_NDS * 16 + NPCUS = math.ceil((post_npes + self.num_CPUs - 1)/self.num_CPUs) + + ''' + Definition for each variable in the following if-else block: + + batch_cmd - PBS Batch command + batch_group - PBS Syntax for GROUP + batch_time - PBS Syntax for walltime + batch_jobname - PBS Syntax for job name + batch_outputname - PBS Syntax for job output name + batch_joinouterr - PBS Syntax for joining output and error + run_ft - Wallclock Time for gcm_forecast.j + run_ft - Wallclock Time for gcm_run.j + post_t - Wallclock Time for gcm_post.j + plot_t - Wallclock Time for gcm_plot.j + archive_t - Wallclock Time for gcm_archive.j + run_q - Batch queue name for gcm_run.j + run_p - PE Configuration for gcm_run.j + run_fp - PE Configuration for gcm_forecast.j + regress_p - PE Configuration for gcm_regress.j + post_q - Batch queue name for gcm_post.j + plot_q - Batch queue name for gcm_plot.j + move_q - Batch queue name for gcm_moveplot.j + archive_q - Batch queue name for gcm_archive.j + post_p - PE Configuration for gcm_post.j + plot_p - PE Configuration for gcm_plot.j + archive_p - PE Configuration for gcm_archive.j + move_p - PE Configuration for gcm_moveplot.j + bcs_dir - Location of Boundary Conditions + replay_ana_expID - Default Analysis Experiment for REPLAY + replay_ana_location - Default Analysis Location for REPLAY + M2_replay_ana_location - Default Analysis Location for M2 REPLAY + sst_dir - Location of SST Boundary Conditions + chem_dir - Locations of Aerosol Chemistry BCs + work_dir - User work directory <----------------- change this later + gwdrs_dir - Location of GWD_RIDGE files + coupled_dir - Coupled Ocean/Atmos Forcing + bcs_input_base - location of SST Boundary Conditions + ''' + + if envdict['site'] == "NAS": + self.batch_cmd = "qsub" + self.batch_group = "PBS -W group_list=" + self.batch_time = "PBS -l walltime=" + self.batch_jobname = "PBS -N" + self.batch_outputname = "PBS -o " + self.batch_joinouterr = "PBS -j oe -k oed" + self.run_ft = "6:00:00" + self.run_t = "8:00:00" + self.post_t = "8:00:00" + self.plot_t = "8:00:00" + self.archive_t = "8:00:00" + self.run_q = f"PBS -q normal" + self.run_p = f"PBS -l select={self.nodes}:ncpus={self.num_CPUs}:mpiprocs={self.num_CPUs}:model={self.expConfig['processor']}" + self.run_fp = f"PBS -l select=24:ncpus={self.num_CPUs}:mpiprocs={self.num_CPUs}:model={self.expConfig['processor']}" + self.regress_p = f"PBS -l select={self.nodes * 2}:ncpus={self.num_CPUs // 2}:mpiprocs={self.num_CPUs // 2}:model={self.expConfig['processor']}" + self.post_q = "PBS -q normal" + self.plot_q = "PBS -q normal" + self.move_q = "PBS -q normal" + self.archive_q = "PBS -q normal" + self.post_p = f"PBS -l select={NPCUS}:ncpus={self.num_CPUs}:mpiprocs={self.num_CPUs}:model={self.expConfig['processor']}" + self.plot_p = f"PBS -l select=1:ncpus={self.num_CPUs}:mpiprocs=1:model={self.expConfig['processor']}" + self.archive_p = f"PBS -l select=1:ncpus={self.num_CPUs}:mpiprocs={self.num_CPUs}:model={self.expConfig['processor']}" + self.move_p = "PBS -l select=1:ncpus=1" + self.boundary_dir = "/nobackup/gmao_SIteam/ModelData" + self.bc_base = f"{self.boundary_dir}/bcs_shared/fvInput/ExtData/esm/tiles" + self.bcs_dir = f"{self.boundary_dir}/bcs/{self.land.bcs}/{self.land.bcs}_{self.ocean.tag}" + self.replay_ana_expID = "ONLY_MERRA2_SUPPORTED" + self.replay_ana_location = "ONLY_MERRA2_SUPPORTED" + self.M2_replay_ana_location = f"{self.boundary_dir}/merra2/data" + self.bcs_input_base = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/atmosphere" + + # defines location of SST Boundary Conditions + oceanres = f"{self.ocean.IM}x{self.ocean.JM}" + if oceanres == "1440x720": + self.sst_dir = f"{self.boundary_dir}/fvInput/g5gcm/bcs/SST/{oceanres}" + elif self.ocean.gridtyp == "MITLLC": + self.sst_dir = "/nobackupp2/estrobac/geos5/SSTDIR" + else: + self.sst_dir = f"{self.boundary_dir}/fvInput/g5gcm/bcs/realtime/{self.ocean.sst_name}/{oceanres}" + + self.chem_dir = f"{self.boundary_dir}/fvInput_nc3" + self.work_dir = f"/nobackup/{os.environ.get('LOGNAME')}" + self.gwdrs_dir = f"{self.boundary_dir}/GWD_RIDGE" + self.coupled_dir = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/ocean" + + + elif envdict['site'] == "NCCS": + self.batch_cmd = "sbatch" + self.batch_group = "SBATCH --account=" + self.batch_time = "SBATCH --time=" + self.batch_jobname = "SBATCH --job-name=" + self.batch_outputname = "SBATCH --output=" + self.batch_joinouterr = "DELETE" + self.run_ft = "06:00:00" + self.run_t = "12:00:00" + self.post_t = "8:00:00" + self.plot_t = "12:00:00" + self.archive_t = "2:00:00" + self.run_q = f"SBATCH --constraint={self.expConfig['processor']}" + self.run_p = f"SBATCH --nodes={self.nodes} --ntasks-per-node={self.num_CPUs}" + self.run_fp = f"SBATCH --nodes={self.nodes} --ntasks-per-node={self.num_CPUs}" + self.regress_p = f"SBATCH --nodes={self.nodes * 2} --ntasks-per-node={self.num_CPUs // 2}" + self.post_q = f"SBATCH --constraint={self.expConfig['processor']}" + self.plot_q = f"SBATCH --constraint={self.expConfig['processor']}" + self.move_q = "SBATCH --partition=datamove" + self.archive_q = "SBATCH --partition=datamove" + self.post_p = f"SBATCH --nodes={NPCUS} --ntasks-per-node={self.num_CPUs}" + self.plot_p = f"SBATCH --nodes=4 --ntasks=4" + self.archive_p = "SBATCH --ntasks=1" + self.move_p = "SBATCH --ntasks=1" + self.boundary_dir = "/discover/nobackup/projects/gmao" + self.bc_base = f"{self.boundary_dir}/bcs_shared/fvInput/ExtData/esm/tiles" + self.bcs_dir = f"{self.bc_base}/{self.land.bcs}" + self.replay_ana_expID = "x0039" + self.replay_ana_location = f"{self.boundary_dir}/g6dev/ltakacs/x0039" + self.M2_replay_ana_location = f"{self.boundary_dir}/merra2/data" + self.bcs_input_base = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/atmosphere" + + # define location of SST Boundary Conditions + oceanres = f"{self.ocean.IM}x{self.ocean.JM}" + if oceanres == "1440x720": + self.sst_dir = f"{os.environ.get('SHARE')}/gmao_ops/fvInput/g5gcm/bcs/SST/{oceanres}" + elif self.ocean.gridtyp == "MITLLC": + self.sst_dir = "/discover/nobackup/estrobac/geos5/SSTDIR" + else: + self.sst_dir = f"{os.environ.get('SHARE')}/gmao_ops/fvInput/g5gcm/bcs/realtime/{self.ocean.sst_name}/{oceanres}" + + self.chem_dir = f"{os.environ.get('SHARE')}/gmao_ops/fvInput_nc3" + self.work_dir = f"/discover/nobackup/{os.environ.get('LOGNAME')}" + self.gwdrs_dir = f"{self.boundary_dir}/osse2/stage/BCS_FILES/GWD_RIDGE" + self.coupled_dir = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/ocean" + + + elif envdict['site'] == "AWS" or envdict['site'] == "Azure": + self.batch_cmd = "sbatch" + self.batch_group = "#DELETE" + self.batch_time = "SBATCH --time=" + self.batch_jobname = "SBATCH --job-name=" + self.batch_outputname = "SBATCH --output=" + self.batch_joinouterr = "DELETE" + self.run_ft = "06:00:00" + self.run_t = "12:00:00" + self.post_t = "8:00:00" + self.plot_t = "12:00:00" + self.archive_t = "1:00:00" + self.run_q = f"SBATCH --constraint={self.expConfig['processor']}" + self.run_p = f"SBATCH --nodes={self.nodes} --ntasks-per-node={self.num_CPUs}" + self.run_fp = f"SBATCH --nodes={self.nodes} --ntasks-per-node={self.num_CPUs}" + self.regress_p = f"SBATCH --nodes={self.nodes * 2} --ntasks-per-node={self.num_CPUs // 2}" + self.post_q = "NULL" + self.plot_q = "NULL" + self.move_q = "NULL" + self.archive_q = "NULL" + self.post_p = f"SBATCH --ntasks={post_npes}" + self.plot_p = f"SBATCH --nodes=4 --ntasks=4" + self.archive_p = "SBATCH --ntasks=1" + self.move_p = "SBATCH --ntasks=1" + self.boundary_dir = "/ford1/share/gmao_SIteam/ModelData" + self.bc_base = f"{self.boundary_dir}/bcs_shared/fvInput/ExtData/esm/tiles" + self.bcs_dir = f"{self.boundary_dir}/bcs/{self.land.bcs}_{self.ocean.tag}" + self.replay_ana_expID = "REPLAY_UNSUPPORTED" + self.replay_ana_location = "REPLAY_UNSUPPORTED" + self.M2_replay_ana_location = "REPLAY_UNSUPPORTED" + self.bcs_input_base = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/atmosphere" + self.sst_dir = f"{self.boundary_dir}/{self.ocean.sst_name}/{self.ocean.IM}x{self.ocean.JM}" + self.chem_dir = f"{self.boundary_dir}/fvInput_nc3" + self.work_dir = os.environ.get('HOME') + self.gwdrs_dir = f"{self.boundary_dir}/GWD_RIDGE" + self.coupled_dir = f"{self.boundary_dir}/aogcm" + + else: + # These are defaults for the desktop + self.batch_cmd = "sbatch" + self.batch_group = "SBATCH --account=" + self.batch_time = "SBATCH --time=" + self.batch_jobname = "SBATCH --job-name=" + self.batch_outputname = "SBATCH --output=" + self.batch_joinouterr = "DELETE" + self.run_ft = "06:00:00" + self.run_t = "12:00:00" + self.post_t = "8:00:00" + self.plot_t = "12:00:00" + self.archive_t = "1:00:00" + self.run_q = "NULL" + self.run_p = "NULL" + self.run_fp = "NULL" + self.regress_p = "NULL" + self.post_q = "NULL" + self.plot_q = "NULL" + self.move_q = "NULL" + self.archive_q = "NULL" + self.post_p = "NULL" + self.plot_p = "NULL" + self.archive_p = "NULL" + self.move_p = "NULL" + self.boundary_dir = "/ford1/share/gmao_SIteam/ModelData" + self.bc_base = f"{self.boundary_dir}/bcs_shared/fvInput/ExtData/esm/tiles" + self.bcs_dir = f"{self.boundary_dir}/bcs/{self.land.bcs} /{self.land.bcs}_{self.ocean.tag}" + self.replay_ana_expID = "REPLAY_UNSUPPORTED" + self.replay_ana_location = "REPLAY_UNSUPPORTED" + self.M2_replay_ana_location = "REPLAY_UNSUPPORTED" + self.bcs_input_base = f"{self.boundary_dir}/bcs_shared/make_bcs_inputs/atmosphere" + self.sst_dir = f"{self.boundary_dir}/{self.ocean.sst_name}/{self.ocean.IM}x{self.ocean.JM}" + self.chem_dir = f"{self.boundary_dir}/fvInput_nc3" + self.work_dir = os.environ.get('HOME') + self.gwdrs_dir = f"{self.boundary_dir}/GWD_RIDGE" + self.coupled_dir = f"{self.boundary_dir}/aogcm" + + if envdict['site'] == 'GMAO.desktop': + # By default on desktop, just ignore IOSERVER for now + self.atmos.NX = 1 + self.atmos.NY = 6 + self.expConfig["io_server"] = False + self.n_oserver_nodes = 0 + self.n_backend_pes = 0 + + + + # mainly used to create .{*}root files and/or populate them + def create_dotfile(self, path, content): + try: + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + path.touch() + with open(path, 'w') as file: + file.write(content) + except Exception as e: + print(f"An error occurred while creating directory: {str(e)}") + exit(1) + + + ####################################################################### + # Copy Model Executable and RC Files to Experiment Directory + ####################################################################### + def RC_setup(self): + + # Make the experiment directory and the RC directory inside of it + RC_dir = os.path.join(self.exp_dir, 'RC') + + # Delete the directory if it exists already + if os.path.exists(RC_dir): + shutil.rmtree(RC_dir) + + # Copy over all files and subdirs in install/etc, keeping symlinks, and ignoring *.tmpl files + shutil.copytree(pathdict['etc'], RC_dir, symlinks=True, ignore=shutil.ignore_patterns('*.tmpl', 'fvcore.layout.rc')) + + # Copy or symlink GEOSgcm.x (((IGNORE SINGULARITY/NATIVE BUILDS FOR NOW!!))) + geosgcmx_path = os.path.join(pathdict['bin'], 'GEOSgcm.x') + if self.linkx == True: + os.symlink(geosgcmx_path, os.path.join(self.exp_dir, 'GEOSgcm.x')) + else: + shutil.copy(geosgcmx_path, self.exp_dir) + + + ####################################################################### + # Set Recommended MPI Stack Settings + ####################################################################### + def mpistacksettings(self): + + # load mpi config from YAML + with open('../yaml/mpi_config.yaml') as file: + mpidict = yaml.load(file, Loader=yaml.FullLoader) + + # retrieve config from correlating mpi setting being used + self.mpi_config = mpidict.get(envdict['mpi']) + + # restart by oserver if using openmpi or mvapich + if envdict['mpi'] == 'openmpi' or envdict['mpi'] == 'mvapich': + self.restart_by_oserver = 'YES' + + # NAS recommends several_tries for MPT job issues + # https://www.nas.nasa.gov/hecc/support/kb/mpt-startup-failures-workarounds_526.html + if envdict['mpi'] == 'mpt': + self.several_tries = '/u/scicon/tools/bin/several_tries' + # Testing at NAS shows that coupled runs *require* MPI_SHEPHERD=true + # to run. We believe this is due to LD_PRELOAD. For now we only set + # this for coupled runs. + if self.ocean.running_ocean: + self.ocean.mpt_shepherd = "setenv MPI_SHEPHERD true" + + # Also, for low res runs (c12, c24, c48) at NAS with MPT, + # MPT has an issue with writing restarts on a single node + # due to issues with many MPI_GatherV calls. We can "avoid" + # this by having the oserver write the restarts. But + # we only need to do this for single-node runs. For simplicity, + # we assume LOW_ATM_RES = TRUE means single-node + if self.atmos.low_res: + self.restart_by_oserver = 'YES' + + if envdict['mpi'] == 'intelmpi' and (envdict['site'] == 'NCCS' or envdict['site'] == 'NAS'): + self.mpi_config += f"\n{mpidict.get('intelmpi_NASA')}" + + # Check for gwd_internal for Ridge Scheme + # For ICA and NL3 the gwd files are in a non-bcs location + # and may or may not exist. If they don't we set NCAR_NRDG to 0 + self.NCAR_NRDG = 16 + if not self.land.gwd_in_bcs and \ + not os.path.exists(f"{self.gwdrs_dir}/gwd_internal_c{self.atmos.im}"): + self.NCAR_NRDG = 0 + + + + ####################################################################### + # Create directories and copy files over + ####################################################################### + def copy_files_into_exp(self): + print("\n\n\n") + + for file in self.templates: + cpfile(f"{pathdict['install']}/bin/{file}", f"{self.exp_dir}/{file}", file) + cpfile(f"{pathdict['install']}/etc/{file}", f"{self.exp_dir}/{file}", file) + + cpfile(f"{pathdict['install']}/post/plot.rc", f"{self.exp_dir}/plot.rc", "plot.rc") + cpfile(f"{pathdict['install']}/post/post.rc", f"{self.exp_dir}/post.rc", "post.rc") + + # These files will be added if user chose to run coupled, regardless of ocean model selected. + if self.ocean.running_ocean == True and self.ocean.model != 'MIT': + cpfile(f"{pathdict['install']}/coupled_diagnostics/g5lib/plotocn.j", f"{self.exp_dir}/plotocn.j", "plotocn.j") + cpfile(f"{pathdict['install']}/coupled_diagnostics/g5lib/confocn.py", f"{self.exp_dir}/__init__.py", "confocn.py") + self.templates.extend(['input.nml', 'diag_table','plotocn.j', '__init__.py']) + + if self.ocean.model == 'MOM5': + self.templates.append('field_table') + cpfile(f"{pathdict['etc']}/MOM5/geos5/{self.ocean.IM}x{self.ocean.JM}/INPUT/input.nml", f"{self.exp_dir}/input.nml", "input.nml") + MOM5_path = os.path.join(pathdict['etc'], 'MOM5', 'geos5', f"{self.ocean.IM}x{self.ocean.JM}", 'INPUT', '*table') + files = glob.glob(MOM5_path) + for file in files: + file_name = os.path.basename(file) + cpfile(file, f"{self.exp_dir}/{file_name}", file_name) + elif self.ocean.model == 'MOM6': + self.templates.extend(['MOM_input', 'MOM_override', 'data_table']) + + cpfile(f"{pathdict['etc']}/MOM6/mom6_app/{self.ocean.IM}x{self.ocean.JM}/MOM_input", f"{self.exp_dir}/MOM_input", "MOM_input") + cpfile(f"{pathdict['etc']}/MOM6/mom6_app/{self.ocean.IM}x{self.ocean.JM}/MOM_override", f"{self.exp_dir}/MOM_override", "MOM_override") + cpfile(f"{pathdict['etc']}/MOM6/mom6_app/{self.ocean.IM}x{self.ocean.JM}/input.nml", f"{self.exp_dir}/input.nml", "input.nml") + MOM6_path = os.path.join(pathdict['etc'], 'MOM6', 'mom6_app', f"{self.ocean.IM}x{self.ocean.JM}", '*table') + files = glob.glob(MOM6_path) + for file in files: + file_name = os.path.basename(file) + cpfile(file, f"{self.exp_dir}/{file_name}", file_name) + + if self.ocean.seaice_model == 'CICE6': + cpfile(f"{pathdict['etc']}/CICE6/cice6_app/{self.ocean.IM}x{self.ocean.JM}/ice_in", f"{self.exp_dir}/ice_in", "ice_in") + self.templates.append('ice_in') + + print(f"{color.GREEN}Done!{color.RESET}\n") + + + + ####################################################################### + # Produce Final script and .rc files + ####################################################################### + + # THIS WHOLE SECTION IS WILDLY OUT OF DATE, HOWEVER I KEPT IT AS IT WAS + # IN THE ORIGINAL SCRIPT FOR NOW + def restarts(self): + # comment or un-comment restarts based on exp configuration + # --------------------------------------------------------- + rsnames = {'H2O': False, + 'MAM': False, + 'CARMA': False, + 'GMICHEM': False, + 'STRATCHEM': False} + rstypes = ['INTERNAL','IMPORT'] + + with open(f"{self.expConfig['exp_dir']}/AGCM.rc.tmpl", 'r') as file: + file_content = file.read() + + # Template in a "#" if restart is set to false + for rst in rsnames: + for typ in rstypes: + rst_string = f"{rst}_{typ}" + comment = "" if rsnames[rst] else "#" + file_content = file_content.replace(rst_string, f"{comment}{rst_string}") + + with open(f"{self.expConfig['exp_dir']}/AGCM.rc.tmpl", 'w') as file: + file.write(file_content) + + ####################################################################### + # Modify RC Directory for LM and GOCART.data/GOCART Options + ####################################################################### + def mod_RC_dir_for_pchem(self): + if self.atmos.lm == 72: + return + + rc_dir = f"{self.expConfig['exp_dir']}/RC" + + # if atmospheric vertical resolution != 72, we loop through every + # file in the RC dir and modify the atmos.lm values + for file_name in os.listdir(rc_dir): + file_path = os.path.join(rc_dir, file_name) + + # ignore the subdirectories in RC/ + if not os.path.isfile(file_path): + continue + + with open(file_path, 'r') as file: + file_content = file.read() + + file_content = file_content.replace("/L72/", f"/L{self.atmos.lm}/") + file_content = file_content.replace("z72", f"z{self.atmos.lm}") + file_content = file_content.replace("_72_", f"_{self.atmos.lm}_") + + with open(file_path, 'w') as file: + file.write(file_content) + + # configure pchem and TR in GEOS_ChemGridComp.rc + def config_chemGridComp(self): + if self.gocart.rats_provider == 'PCHEM': + pchem = 'TRUE' + else: + pchem = 'FALSE' + + chemgridcomp = f"{self.expConfig['exp_dir']}/RC/GEOS_ChemGridComp.rc" + with open(chemgridcomp, 'r') as file: + file_content = file.read() + + # we always enable TR and gocart + file_content = re.sub(r'(ENABLE_PCHEM:\s*\.).*(\.)', r'\1'+pchem+r'\2', file_content) + file_content = re.sub(r'(ENABLE_TR:\s*\.).*(\.)', r'\1TRUE\2', file_content) + file_content = re.sub(r'(ENABLE_GOCART_DATA:\s*\.).*(\.)', r'\1FALSE\2', file_content) + + with open(chemgridcomp, 'w') as file: + file.write(file_content) + + # update LAND_PARAMS choices + def config_surfaceGridComp(self): + surfacegridcomp = f"{self.expConfig['exp_dir']}/RC/GEOS_SurfaceGridComp.rc" + with open(surfacegridcomp, 'r') as file: + file_content = file.read() + + file_content = re.sub(r'# GEOSagcm=>', r' ', file_content) + if self.land.model == 'CatchmentCN-CLM4.0': + file_content = re.sub(r'(LAND_PARAMS:\s*).*', r'\1CN_CLM40', file_content) + + if self.land.bcs == 'ICA': + file_content = re.sub(r'(LAND_PARAMS:\s*).*', r'\1Icarus', file_content) + file_content = re.sub(r'(Z0_FORMULATION:\s*).*', r'\1 2', file_content) + + with open(surfacegridcomp, 'w') as file: + file.write(file_content) + + # enable DATA_DRIVEN gocart2G + def config_gocartGridComp(self): + gocartgridcomp = f"{self.expConfig['exp_dir']}/RC/GOCART2G_GridComp.rc" + with open(gocartgridcomp, 'r') as file: + file_content = file.read() + + if self.gocart.data_driven == True: + file_content = re.sub(r'(ACTIVE_INSTANCES_DU:\s*)DU', r'\1DU.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_SS:\s*)SS', r'\1SS.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_SU:\s*)SU', r'\1SU.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_NI:\s*)NI', r'\1NI.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_CA:\s*)CA.oc', r'\1CA.oc.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_CA:\s*)CA.bc', r'\1CA.bc.data', file_content) + file_content = re.sub(r'(ACTIVE_INSTANCES_CA:\s*)CA.br', r'\1CA.br.data', file_content) + + with open(gocartgridcomp, 'w') as file: + file.write(file_content) + + + # Modify MOM input files to match HEARTBEAT + def config_heartbeat(self): + # With MOM5 we need to change dt lines in input.nml to + # use $OCEAN_DT instead. NOTE: This regex assumes integer followed by comma + if self.ocean.model == 'MOM5': + + with open(f"{self.expConfig['exp_dir']}/input.nml", 'r') as file: + file_content = file.read() + + file_content = re.sub(r'dt_cpld\s*=\s*.*(,)', rf"dt_cpld = {self.atmos.dt_ocean}\1", file_content) + file_content = re.sub(r'dt_atmos\s*=\s*.*(,)', rf"dt_atmos = {self.atmos.dt_ocean}\1", file_content) + + with open(f"{self.expConfig['exp_dir']}/input.nml", 'w') as file: + file.write(file_content) + + # We also need to change the dt in ice_in as well for CICE6 + if self.ocean.seaice_model == 'CICE6': + file_path = f"{self.expConfig['exp_dir']}/ice_in" + with open(file_path, 'r') as file: + content = file.read() + + file_content = re.sub(r"^(\s*dt\s*=\s*)[0-9]+(\.[0-9]+)?", r"\1" + self.atmos.dt_ocean, content) + + with open(file_path, 'w') as file: + file.write(file_content) + + + # We also must change the MOM_override file to + # have consistent DTs with the AGCM. So we use OCEAN_DT + # and change MOM_override to match. NOTE: This assumes + # floating point number with a decimal + if self.ocean.model == 'MOM6': + with open(f"{self.expConfig['exp_dir']}/MOM_override", 'r') as file: + file_content = file.read() + + file_content = re.sub(r'DT\s*=\s*.*', rf"DT = {self.atmos.dt_ocean}", file_content) + file_content = re.sub(r'DT_THERM\s*=\s*.*', rf"DT_THERM = {self.atmos.dt_ocean}", file_content) + + with open(f"{self.expConfig['exp_dir']}/MOM_override", 'w') as file: + file.write(file_content) + + + # We create a RESTART dir if running ocean + def make_RESTART_dir(self): + if self.ocean.running_ocean == True: + os.makedirs(f"{self.exp_dir}/RESTART", exist_ok=True) + + + # Templating helper function -- Removes lines marked with "#DELETE" + def cleanup(self, file_path): + with open(file_path, 'r') as file: + content = file.read() + + filtered_content = re.sub(r'(?m)^\s*#+DELETE\w*.*\n?', '', content) + + with open(file_path, 'w') as file: + file.write(filtered_content) + + + def template(self): + # this dictionary holds template values for the default jinja2 delimiter "{{ val }}" + jinja_dict = { + 'SETENVS': self.mpi_config, + 'GCMVER': self.gcm_version, + 'EXPSRC': self.gcm_version, + 'EXPID': self.expConfig['experiment_id'], + 'RUN_N': self.run_n, + 'RUN_FN': self.run_fn, + 'RUN_FT': self.run_ft, + 'RUN_T': self.run_t, + 'RUN_P': self.run_p, + 'RUN_FP': self.run_fp, + 'REGRESS_P': self.regress_p, + 'RUN_Q': self.run_q, + 'POST_N': self.post_n, + 'POST_T': self.post_t, + 'POST_P': self.post_p, + 'POST_Q': self.post_q, + 'MOVE_N': self.move_n, + 'PLOT_N': self.plot_n, + 'PLOT_T': self.plot_t, + 'PLOT_P': self.plot_p, + 'PLOT_Q': self.plot_q, + 'MOVE_Q': self.move_q, + 'MOVE_P': self.move_p, + 'ARCHIVE_N': self.archive_n, + 'ARCHIVE_T': self.archive_t, + 'ARCHIVE_P': self.archive_p, + 'ARCHIVE_Q': self.archive_q, + 'REGRESS_N': self.regress_n, + 'BCSDIR': self.bcs_dir, + 'SSTDIR': self.sst_dir, + 'SSTNAME': self.ocean.sst_name, + 'OCEANOUT': self.ocean.out, + 'LSMBCS': self.land.bcs, + 'EMIP_BCS_IN': self.land.emip_bcs_in, + 'EMIP_MERRA2': self.land.emip_MERRA2, + 'BCSTAG': self.ocean.tag, + 'SSTFILE': self.ocean.sst_file, + 'ICEFILE': self.ocean.ice_file, + 'KPARFILE': self.ocean.kpar_file, + 'CHMDIR': self.chem_dir, + 'COUPLEDIR': self.coupled_dir, + 'GWDRSDIR': self.gwdrs_dir, + 'NCAR_NRDG': self.NCAR_NRDG, + 'EXPDIR': self.exp_dir, + 'EXPDSC': self.expConfig['experiment_description'], + 'HOMDIR': self.exp_dir, + 'BATCH_GROUP': self.batch_group+self.expConfig['group_root'], + 'BATCH_TIME': self.batch_time, + 'BATCH_CMD': self.batch_cmd, + 'BATCH_JOBNAME': self.batch_jobname, + 'BATCH_OUTPUTNAME': self.batch_outputname, + 'BATCH_JOINOUTERR': self.batch_joinouterr, + 'SITE': envdict['site'], + 'GEOSDIR': pathdict['install'], + 'GEOSSRC': pathdict['install'], + 'GEOSBIN': pathdict['bin'], + 'GEOSETC': pathdict['etc'], + 'GEOSUTIL': pathdict['install'], + 'SINGULARITY_BUILD': '#DELETE', + 'NATIVE_BUILD': '', + 'MPT_SHEPHERD': self.ocean.mpt_shepherd, + 'SINGULARITY_SANDBOX': '', + 'REAL_BIND_PATH': '', + 'BASE_BIND_PATH': '', + 'BC_BASE': self.bc_base, + 'BOUNDARY_DIR': self.boundary_dir, + 'BCS_INPUT_BASE': self.bcs_input_base, + 'CHECKPOINT_TYPE': 'default', + 'OGCM_NX': self.ocean.NX, + 'OGCM_NY': self.ocean.NY, + 'OGCM_NPROCS': self.ocean.nprocs, + 'OBSERVER_FRQ': 0, + 'DASTUNING': '#', + 'COUPLED': self.ocean.coupled, + 'CLDMICRO': self.atmos.microphysics, + 'MOM5': self.ocean.MOM5, + 'MOM6': self.ocean.MOM6, + 'OCNMODEL': self.ocean.model, + 'CICE4': self.ocean.CICE4, + 'CICE6': self.ocean.CICE6, + 'HIST_CICE4': self.ocean.hist_CICE4, + 'MIT': self.ocean.MIT, + 'DATAOCEAN': self.ocean.data, + 'OPS_SPECIES': self.gocart.ops_species, + 'CMIP_SPECIES': self.gocart.cmip_species, + 'MERRA2OX_SPECIES': self.gocart.MERRA2OX_species, + 'HIST_GOCART': self.gocart.gocart_hist, + 'LSM_PARMS': self.land.parameters, + 'OCEAN_NAME': self.ocean.name, + 'OCEAN_PRELOAD': self.ocean.preload, + 'ana4replay.eta.%y4%m2%d2_%h2z.nc4': '/discover/nobackup/projects/gmao/merra2/data/ana/MERRA2_all/Y%y4/M%m2/MERRA2.ana.eta.%y4%m2%d2_%h2z.nc4?g', + 'REPLAY_ANA_EXPID': self.replay_ana_expID, + 'REPLAY_ANA_LOCATION': self.replay_ana_location, + 'M2_REPLAY_ANA_LOCATION': self.M2_replay_ana_location, + 'OX_RELAXTIME': self.gocart.ox_relaxtime, + 'PCHEM_CLIM_YEARS': self.gocart.pchem_clim_years, + 'RATS_PROVIDER': self.gocart.rats_provider, + 'AERO_PROVIDER': self.gocart.aero_provider, + 'OANA_PROVIDER': 'PCHEM', + 'EMISSIONS': self.gocart.emissions, + 'CH4_PROVIDER': self.gocart.ch4_provider, + 'CO2_PROVIDER': self.gocart.c02_provider, + 'DYCORE': 'FV3', + 'AGCM_GRIDNAME': self.atmos.gridname, + 'OGCM_GRIDNAME': self.ocean.gridname, + 'OGCM_IS_FCST': '0', + 'BOOT': 'YES', + 'BCSRES': self.bcs_res, + 'OCEANtag': self.ocean.res, + 'ATMOStag': self.atmos.res, + 'RES_DATELINE': self.atmos.res_dateline, + 'TILEDATA': self.tile_data, + 'TILEBIN': self.tile_bin, + 'DT': self.atmos.dt, + 'CONV_DT': self.atmos.conv_dt, + 'CHEM_DT': self.atmos.chem_dt, + 'SOLAR_DT': self.atmos.dt_solar, + 'IRRAD_DT': self.atmos.dt_irrad, + 'OCEAN_DT': self.atmos.dt_ocean, + 'NX': self.atmos.nx, + 'NY': self.atmos.ny, + 'USE_SHMEM': int(self.atmos.use_SHMEM), + 'USE_IOSERVER': int(self.expConfig['io_server']), + 'NUM_OSERVER_NODES': self.n_oserver_nodes, + 'NUM_BACKEND_PES': self.n_backend_pes, + 'RESTART_BY_OSERVER': self.restart_by_oserver, + 'NCPUS_PER_NODE': self.num_CPUs, + 'NUM_READERS': self.atmos.num_readers, + 'NUM_WRITERS': self.atmos.num_writers, + 'LATLON_AGCM': self.atmos.latlon, + 'LATLON_OGCM': self.ocean.latlon, + 'CUBE_AGCM': self.atmos.cube, + 'CUBE_OGCM': self.ocean.cube, + 'GRID_TYPE': 'Cubed-Sphere', + 'AGCM_NF': self.atmos.nf, + 'AGCM_IM': self.atmos.im, + 'AGCM_JM': self.atmos.jm, + 'AGCM_LM': self.atmos.lm, + 'OGCM_IM': self.ocean.IM, + 'OGCM_JM': self.ocean.JM, + 'OGCM_LM': self.ocean.LM, + 'OGCM_NF': self.ocean.NF, + 'OGCM_GRID_TYPE': self.ocean.grid_type, + 'BEG_DATE': self.begin_date, + 'END_DATE': self.end_date, + 'JOB_SGMT': self.job_sgmt, + 'NUM_SGMT': self.atmos.num_sgmt, + 'CONUS': self.atmos.conus, + 'CONVPAR_OPTION': self.atmos.convpar_option, + 'STRETCH_FACTOR': self.atmos.stretch_factor, + 'INTERPOLATE_SST': self.interpolate_sst, + 'HIST_IM': self.atmos.hist_im, + 'HIST_JM': self.atmos.hist_jm, + 'CLIM_IM': self.atmos.CLIM_IM, + 'CLIM_JM': self.atmos.CLIM_JM, + 'ISCCP_SATSIM': 1, + 'MODIS_SATSIM': 0, + 'RADAR_SATSIM': 0, + 'LIDAR_SATSIM': 0, + 'MISR_SATSIM': 0, + 'SATSIM': 0, + 'USE_SKIN_LAYER': 1, + 'ANALYZE_TS': 0, + 'LSM_CHOICE': self.land.model, + 'MP_TURN_OFF_WSUB_EXTDATA': self.atmos.mp_turn_off_wsub_extdata, + 'BACM_1M_': self.atmos.BACM_1M, + 'GFDL_1M_': self.atmos.GFDL_1M, + 'MGB2_2M_': self.atmos.MGB2_2M, + 'PRELOAD_COMMAND': envdict['preload_command'], + 'LD_LIBRARY_PATH_CMD': envdict['ld_library_path_command'], + 'RUN_CMD': envdict['run_command'], + 'MODELATM': self.ocean.modelatm, + 'USE_DATA_ATM4OCN': self.ocean.use_data_ATM4OCN, + 'FV_SCHMIDT': self.atmos.schmidt, + 'FV_STRETCH_FAC': self.atmos.FV_stretch_fac, + 'FV_TARGET_LON': self.atmos.target_lon, + 'FV_TARGET_LAT': self.atmos.target_lat, + 'FORCEDAS': self.atmos.force_das, + 'FORCEGCM': self.atmos.force_gcm, + 'FVCUBED': '', + 'HIST_CATCHCN': self.land.HIST_catchment, + 'GCMRUN_CATCHCN': self.land.GCMRUN_catchment, + 'EMIP_OLDLAND': self.land.emip_oldland, + 'EMIP_NEWLAND': self.land.emip_newland, + '_4DIAUDAS': '#DELETE', + 'SEVERAL_TRIES': self.several_tries, + 'REGULAR_REPLAY': '#', + 'REGULAR_REPLAY_GMAO': '#', + 'REGULAR_REPLAY_NCEP': '#DELETE', + 'REGULAR_REPLAY_ECMWF': '#DELETE' + } + + # this is an edge-case that can't be handled with jinja2 + for file in self.templates: + with open(f"{self.exp_dir}/{file}", 'r') as tmpl: + file_content = tmpl.read() + + file_content = re.sub(r'[ \t]*RECORD_', r'#RECORD_', file_content) + + with open(f"{self.exp_dir}/{file}", 'w') as tmpl: + tmpl.write(file_content) + + # this block handles the default case for jinja templating + default_env = Environment( + loader=FileSystemLoader(self.exp_dir) + ) + for file in self.templates: + template = default_env.get_template(file) + content = template.render(jinja_dict) + with open(f"{self.exp_dir}/{file}", 'w') as tmpl: + tmpl.write(content) + + # remove #DELETE lines + for file in self.templates: + file_path = f"{self.exp_dir}/{file}" + self.cleanup(file_path) + + + # organize files into sub directories and update file permissions + def organize_exp_dir(self): + exp_dir = self.expConfig['exp_dir'] + + # make sub dirs + sub_dirs = ['archive', 'forecasts', 'plot', 'post' , 'regress'] + for i in sub_dirs: + os.makedirs(os.path.join(exp_dir, i), exist_ok=True) + copy_src_tarfile(exp_dir) + self.make_RESTART_dir() + + # archive dir + shutil.move(f"{exp_dir}/gcm_archive.j", f"{exp_dir}/archive/gcm_archive.j") + + # forecasts dir + shutil.move(f"{exp_dir}/gcm_forecast.setup", f"{exp_dir}/forecasts/gcm_forecast.setup") + shutil.move(f"{exp_dir}/gcm_forecast.tmpl", f"{exp_dir}/forecasts/gcm_forecast.tmpl") + + # plot dir + shutil.move(f"{exp_dir}/gcm_moveplot.j", f"{exp_dir}/plot/gcm_moveplot.j") + shutil.move(f"{exp_dir}/gcm_plot.tmpl", f"{exp_dir}/plot/gcm_plot.tmpl") + shutil.move(f"{exp_dir}/gcm_quickplot.csh", f"{exp_dir}/plot/gcm_quickplot.csh") + shutil.move(f"{exp_dir}/plot.rc", f"{exp_dir}/plot/plot.rc") + try: #only if using MOM ocean + shutil.move(f"{exp_dir}/plotocn.j", f"{exp_dir}/plot/plotocn.j") + except FileNotFoundError: + pass + + # post dir + shutil.move(f"{exp_dir}/gcm_post.j", f"{exp_dir}/post/gcm_post.j") + shutil.move(f"{exp_dir}/post.rc", f"{exp_dir}/post/post.rc") + + # regress dir + shutil.move(f"{exp_dir}/gcm_regress.j", f"{exp_dir}/regress/gcm_regress.j") + + # rename tmpl files + os.rename(f"{exp_dir}/CAP.rc.tmpl", f"{exp_dir}/CAP.rc") + os.rename(f"{exp_dir}/AGCM.rc.tmpl", f"{exp_dir}/AGCM.rc") + os.rename(f"{exp_dir}/{self.ocean.history_template}", f"{exp_dir}/HISTORY.rc") + os.rename(f"{exp_dir}/linkbcs.tmpl", f"{exp_dir}/linkbcs") + + # update file permissions + os.chmod(f"{exp_dir}/CAP.rc", 0o755) + os.chmod(f"{exp_dir}/fvcore_layout.rc", 0o755) + os.chmod(f"{exp_dir}/archive/gcm_archive.j", 0o755) + os.chmod(f"{exp_dir}/linkbcs", 0o755) + os.chmod(f"{exp_dir}/logging.yaml", 0o755) + os.chmod(f"{exp_dir}/forecasts/gcm_forecast.tmpl", 0o644) + os.chmod(f"{exp_dir}/plot/gcm_plot.tmpl", 0o644) + + +def main(): + # Parse command line flags + parser = argparse.ArgumentParser() + parser.add_argument("--yaml", "-y") + args = parser.parse_args() + + if args.yaml: + expConfig = yaml_input_exp(args.yaml) + else: + expConfig = ask_questions() + + # if cloning we don't care about 90% of this script + if expConfig['clone_experiment']: + clone_exp(expConfig) + copy_src_tarfile(expConfig['exp_dir']) + exit() + + experiment = setup(expConfig) + experiment.initialize_models() + experiment.set_num_CPUs() + experiment.config_models() + experiment.set_some_stuff() + experiment.set_nodes() + experiment.set_stuff() + experiment.create_dotfile(f"{os.environ.get('HOME')}/.EXPDIRroot", os.path.dirname(expConfig['exp_dir'])) + experiment.create_dotfile(f"{os.environ.get('HOME')}/.GROUProot", expConfig['group_root']) + experiment.RC_setup() + yaml_receipt(expConfig) + experiment.mpistacksettings() + experiment.copy_files_into_exp() + experiment.restarts() + experiment.mod_RC_dir_for_pchem() + experiment.config_chemGridComp() + experiment.config_surfaceGridComp() + experiment.config_gocartGridComp() + experiment.config_heartbeat() + experiment.template() + experiment.organize_exp_dir() + +if __name__ == "__main__": + main() diff --git a/gcmpy/scripts/generate_question.py b/gcmpy/scripts/generate_question.py new file mode 100755 index 00000000..2608b494 --- /dev/null +++ b/gcmpy/scripts/generate_question.py @@ -0,0 +1,59 @@ +import os +import questionary +from questionary import Validator, ValidationError + +''' +This class will generate questionary questions based on a set of +parameters specified in a YAML file. It is designed to be as modular +as possible, so keep it that way! (Handle specific cases in +process_questions) +''' +class question: + def __init__(self, name, q_type, prompt, choices, default, follows_up): + self.name = name + self.q_type = q_type + self.prompt = prompt + self.choices = choices + self.default = default + self.follows_up = follows_up + self.answer = None + + + # Check if a question "follows_up" another and its conditions are met + # to determine whether it should be asked or not + def should_ask(self, questionDict): + if self.follows_up: + for prev_question, accepted_answers in self.follows_up: + if questionDict[prev_question].answer in accepted_answers or ('any' in accepted_answers and questionDict[prev_question].answer != None) or ('was_not_asked' in accepted_answers): + return True + return False + return True + + + # loads the questionary api based on yaml configurations + def load_question(self, question): + + # check if the yaml entry should be skipped + if not self.should_ask(question): + return + + # if should_ask() returns true, call correct questionary API + elif self.q_type == 'text': + answer = questionary.text(self.prompt, default=self.default, validate=qValidator.val_text).ask() + elif self.q_type == 'confirm': + answer = questionary.confirm(self.prompt, default=self.default).ask() + elif self.q_type == 'select': + answer = questionary.select(self.prompt, choices=self.choices).ask() + elif self.q_type == 'path': + answer = questionary.path(self.prompt, default=self.default).ask() + + self.answer = answer + +# input validation used for questionary library +class qValidator(): + def val_text(input): + if len(str(input)) == 0 or input.isspace(): + return "please answer the question!" + else: + return True + diff --git a/gcmpy/scripts/gocart.py b/gcmpy/scripts/gocart.py new file mode 100755 index 00000000..d0166376 --- /dev/null +++ b/gcmpy/scripts/gocart.py @@ -0,0 +1,58 @@ +from utility import color + +class gocart: + def __init__(gocart, expConfig): + gocart.expConfig = expConfig + # Gocart questions are skipped if data atmosphere is turned on. Use defaults + if gocart.expConfig['OM_data_atmos'] == True: + gocart.aerosol = 'Actual' + gocart.emissions = 'OPS_EMISSIONS' + else: + gocart.aerosol = gocart.expConfig["gocart_aerosols"] + gocart.emissions = f"{gocart.expConfig['gocart_emission']}_EMISSIONS" + gocart.data_driven = None + gocart.ops_species = '#' + gocart.cmip_species = '#' + gocart.MERRA2OX_species = '#' + gocart.pchem_clim_years = '' + gocart.ox_relaxtime = None + gocart.gocart = '' + gocart.gocart_hist = None + gocart.aero_provider = 'GOCART2G' + gocart.rats_provider = 'PCHEM' + + # Additional RATS settings for specific GHGs + gocart.ch4_provider = 'none' + gocart.c02_provider = 'none' + + # for debugging purposes + def print_vars(gocart): + all_vars = vars(gocart) + for var_name, var_value in all_vars.items(): + print(f"{color.BLUE}{var_name}: {var_value}{color.RESET}") + + def set_gocart(gocart): + if gocart.aerosol == 'Actual': + gocart.data_driven = False + gocart.gocart = '' + gocart.gocart_hist = '' + elif gocart.aerosol == 'Climatological': + gocart.data_driven = True + gocart.gocart = '#' + gocart.gocart_hist = '#DELETE' + + def set_emissions(gocart): + if gocart.emissions.split('_')[0] == 'OPS': + gocart.ops_species = '' + gocart.pchem_clim_years = 1 + gocart.ox_relaxtime = '0.00' + elif gocart.emissions.split('_')[0] == 'AMIP': + gocart.MERRA2OX_species = '' + gocart.pchem_clim_years = 39 + gocart.ox_relaxtime = '259200.' + + + def config(gocart): + gocart.set_gocart() + gocart.set_emissions() + diff --git a/gcmpy/scripts/land.py b/gcmpy/scripts/land.py new file mode 100755 index 00000000..5648bb75 --- /dev/null +++ b/gcmpy/scripts/land.py @@ -0,0 +1,65 @@ +from utility import color + +class land: + def __init__(land, expConfig): + land.expConfig = expConfig + # If data atmosphere is enabled, land questions are skipped. Use default values. + if land.expConfig['OM_data_atmos'] == True: + land.model = "Catchment" + land.bcs = "NL3" + else: + land.model = land.expConfig["LS_model"] + land.bcs = land.expConfig["LS_boundary_conditions"] + land.parameters = '' + land.emip_bcs_in = '' + land.emip_oldland = '' + land.emip_newland = '' + land.emip_MERRA2 = '' + land.HIST_catchment = '' + land.GCMRUN_catchment = '' + + def set_bcs(land): + if land.bcs == "ICA": + land.parameters = "#DELETE" + land.emip_bcs_in = "GM4" + land.emip_oldland = "" + land.emip_newland = "#DELETE" + land.emip_MERRA2 = "MERRA2" + land.gwd_in_bcs = False + elif land.bcs == "NL3": + land.parameters = "" + land.emip_bcs_in = "NL3" + land.emip_oldland = "#DELETE" + land.emip_newland = "" + land.emip_MERRA2 = "MERRA2_NewLand" + land.gwd_in_bcs = False + elif land.bcs == "v12": + land.parameters = "" + land.emip_bcs_in = "NL3" + land.emip_oldland = "#DELETE" + land.emip_newland = "" + land.emip_MERRA2 = "MERRA2_NewLand" + land.gwd_in_bcs = True + + + def set_catchment(land): + if land.model == "Catchment": + land.model = 1 + land.HIST_catchment = "#DELETE" + land.GCMRUN_catchment = "#DELETE" + elif land.model == "CatchmentCN-CLM4.0": + land.model = 2 + land.HIST_catchment = "" + land.GCMRUN_catchment = "" + + def config(land): + land.set_bcs() + land.set_catchment() + + + + + + + + diff --git a/gcmpy/scripts/ocean.py b/gcmpy/scripts/ocean.py new file mode 100644 index 00000000..c39ff3c6 --- /dev/null +++ b/gcmpy/scripts/ocean.py @@ -0,0 +1,263 @@ +from utility import color +from datetime import date + +class ocean: + def __init__(ocean, expConfig): + ocean.expConfig = expConfig + ocean.running_ocean = ocean.expConfig['OM_coupled'] + ocean.model = ocean.expConfig['OM_name'] + ocean.seaice_model = ocean.expConfig['OM_seaice_model'] + ocean.history_template = ocean.expConfig['history_template'] + ocean.LM = ocean.expConfig['OM_vertical_res'] + ocean.data_atmos = ocean.expConfig['OM_data_atmos'] + ocean.name = '' + ocean.preload = '' + ocean.seaice_name = '' + ocean.seaice_preload = '' + ocean.gridtyp = '' + ocean.mpt_shepherd = '' + + + def config(ocean): + if ocean.running_ocean == True: + ocean.set_coupled() + ocean.set_seaice() + ocean.set_preload() + ocean.set_data_atmosphere() + else: + ocean.set_uncoupled() + ocean.set_data_atmosphere() + + + def set_coupled(ocean): + # NOTE: We use a CMake variable here because the shared library + # suffix is different on Linux and macOS. This is set by configure_file() + if ocean.model == 'MOM5': + ocean.name = 'MOM' + ocean.gridtyp = 'M5TP' + ocean.grid_type = 'Tripolar' + ocean.preload = 'env @PRELOAD_COMMAND=$GEOSDIR/lib/libmom@CMAKE_SHARED_LIBRARY_SUFFIX@' + ocean.MOM5 = '' + ocean.MOM6 = '#DELETE' + ocean.MIT = '#DELETE' + MOM5_warning = ( + "######################################################\n" + "You have chosen to set up a coupled model experiment with MOM5.\n" + "Be aware that such a set up is _known_ to have problems. See following for more details:\n" + "https://github.com/GEOS-ESM/MOM5/issues/19\n" + "If your intent is to help _fix_ above issue, your help is much appreciated. Thank you and good luck!\n" + "Otherwise, until this above issue is _fixed_ you are on your own with above choice.\n" + "######################################################" + ) + print(color.GREEN + MOM5_warning + color.RESET) + ocean.NX = 36 + ocean.NY = 10 + resolution = ocean.expConfig['OM_MOM_horizontal_res'].split() + ocean.IM = int(resolution[0]) + ocean.JM = int(resolution[1]) + elif ocean.model == 'MOM6': + ocean.name = 'MOM6' + ocean.gridtyp = 'M6TP' + ocean.grid_type = 'Tripolar' + ocean.preload = 'env @PRELOAD_COMMAND=$GEOSDIR/lib/libmom6@CMAKE_SHARED_LIBRARY_SUFFIX@' + ocean.MOM5 = '#DELETE' + ocean.MOM6 = '' + ocean.MIT = '#DELETE' + ocean.set_MOM6_resolution() + elif ocean.model == 'MIT': + ocean.name = 'MIT' + ocean.grid_type = 'llc' + ocean.gridtyp = 'MITLLC' + ocean.MOM5 = '#DELETE' + ocean.MOM6 = '#DELETE' + ocean.MIT = '' + ocean.JM = 15 + ocean.IM = ocean.jm * 360 + ocean.NX = 360 + ocean.NY = 1 + #ocean.gridspec = 'mit.ascii' <-- dead code(?) + + ocean.coupled = '' + IMO = '%04d' % ocean.IM + JMO = '%04d' % ocean.JM + ocean.res = f"{ocean.gridtyp}{IMO}x{JMO}" + ocean.tag = 'Reynolds' + ocean.sst_name = '#DELETE' + ocean.sst_file = '#DELETE' + ocean.ice_file = '#DELETE' + ocean.kpar_file = f"SEAWIFS_KPAR_mon_clim.{ocean.IM}x{ocean.JM}" + ocean.ostia = '#DELETE' + ocean.out = '#DELETE' + ocean.latlon = '' + ocean.cube = '#DELETE' + ocean.data = '#DELETE' + ocean.NF = 1 + + ocean.nprocs = ocean.NX * ocean.NY # This might be bugged(!) + ocean.set_gridname() + + + def set_uncoupled(ocean): + #rename this to 'uncoupled_hres' + hr_code = ocean.expConfig['OM_horizontal_res'] + todays_date = date.today() + + if hr_code == 'o1': + ocean.IM = 360 + ocean.JM = 180 + ocean.grid_type = 'LatLon' + ocean.NF = 1 + ocean.tag = 'Reynolds' + ocean.sst_name = 'SST' + ocean.out = '360x180' + ocean.sst_file = f"dataoceanfile_MERRA_sst_1971-current.{ocean.IM}x{ocean.JM}.LE" + ocean.ice_file = f"dataoceanfile_MERRA_fraci_1971-current.{ocean.IM}x{ocean.JM}.LE" + ocean.kpar_file = f"SEAWIFS_KPAR_mon_clim.{ocean.IM}x{ocean.JM}" + ocean.gridtyp = 'DE' + ocean.latlon = '' + ocean.cube = '#DELETE' + ocean.ostia = '#DELETE' + ocean.data = '' + elif hr_code == 'o2': + ocean.IM = 1440 + ocean.JM = 720 + ocean.grid_type = 'LatLon' + ocean.NF = 1 + ocean.tag = 'MERRA-2' + ocean.sst_name = 'MERRA2' + ocean.out = '1440x720' + ocean.sst_file = f"dataoceanfile_MERRA2_SST.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.ice_file = f"dataoceanfile_MERRA2_ICE.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.kpar_file = f"SEAWIFS_KPAR_mon_clim.{ocean.IM}x{ocean.JM}" + ocean.gridtyp = 'DE' + ocean.latlon = '' + ocean.cube = '#DELETE' + ocean.ostia = '' + ocean.data = '' + elif hr_code == 'o3': + ocean.IM = 2880 + ocean.JM = 1440 + ocean.grid_type = 'LatLon' + ocean.NF = 1 + ocean.tag = 'Ostia' + ocean.sst_name = 'OSTIA_REYNOLDS' + ocean.out = '2880x1440' + ocean.sst_file = f"dataoceanfile_OSTIA_REYNOLDS_SST.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.ice_file = f"dataoceanfile_OSTIA_REYNOLDS_ICE.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.kpar_file = f"SEAWIFS_KPAR_mon_clim.{ocean.IM}x{ocean.JM}" + ocean.gridtyp = 'DE' + ocean.latlon = '' + ocean.cube = '#DELETE' + ocean.ostia = '' + ocean.data = '' + elif hr_code == 'CS': + # need to add input validation for this case + ocean.IM = int(ocean.expConfig['AM_horizontal_res'][1:]) + ocean.JM = ocean.IM * 6 + ocean.grid_type = 'Cubed-Sphere' + ocean.NF = 6 + ocean.tag = 'Ostia' + ocean.sst_name = 'OSTIA_REYNOLDS' + ocean.out = 'CS' + ocean.sst_file = f"dataoceanfile_OSTIA_REYNOLDS_SST.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.ice_file = f"dataoceanfile_OSTIA_REYNOLDS_ICE.{ocean.IM}x{ocean.JM}.${{YEAR}}.data" + ocean.kpar_file = f"SEAWIFS_KPAR_mon_clim.{ocean.IM}x{ocean.JM}" + ocean.gridtyp = 'CF' + ocean.latlon = '#DELETE' + ocean.cube = '' + ocean.ostia = '' + ocean.data = '' + + IMO = '%04d' % ocean.IM + JMO = '%04d' % ocean.JM + if hr_code == 'CS': + ocean.res = f"CF{IMO}x6C" + else: + ocean.res = f"DE{IMO}xPE{JMO}" + #ocean.data = #THIS IS WILL OVERWRITE THE BLOCK ABOVE + ocean.name = '' + ocean.preload = '' + ocean.LM = 34 + ocean.coupled = '#DELETE' + ocean.MOM5 = '#DELETE' + ocean.MOM6 = '#DELETE' + ocean.MIT = '#DELETE' + ocean.CICE4 = '#DELETE' + ocean.CICE6 = '#DELETE' + ocean.hist_CICE4 = '#DELETE' + ocean.model = f"Data Ocean ({hr_code})" + ocean.NX = '' + ocean.NY = '' + ocean.nprocs = '' + ocean.set_gridname() + + + + + def set_MOM6_resolution(ocean): + # For MOM6 we currently have only 3 allowed ocean resolutions based on the + # atmospheric resolution. The allowed are: + # + # Atm Res Atm NXxNY Atm IMxJM Ocean NXxNY Ocean IMxJM Ocean LM + # ------- --------- --------- ----------- ----------- -------- + # c12 1x6 12x72 3x2 72x36 50 + # c90 5x36 90x540 90x2 540x458 50 + # c180 30x36 180x1080 36x30 1440x1080 75 + # + # See https://github.com/GEOS-ESM/GEOSgcm/wiki/Coupled-model-configurations-(GEOS-MOM6) + + atmos_res = ocean.expConfig['AM_horizontal_res'] + + if atmos_res == 'c12': + ocean.NX = 3 + ocean.NY = 2 + ocean.IM = 72 + ocean.JM = 36 + ocean.LM = 50 + elif atmos_res == 'c90': + ocean.NX = 90 + ocean.NY = 2 + ocean.IM = 540 + ocean.JM = 458 + ocean.LM = 50 + elif atmos_res == 'c180': + ocean.NX = 36 + ocean.NY = 30 + ocean.IM = 1440 + ocean.JM = 1080 + ocean.LM = 75 + + def set_preload(ocean): + ocean.preload = f"{ocean.preload}:{ocean.seaice_preload}" + + + def set_seaice(ocean): + if ocean.seaice_model == 'CICE4': + ocean.seaice_preload = '$GEOSDIR/lib/libCICE4@CMAKE_SHARED_LIBRARY_SUFFIX@' + ocean.CICE4 = '' + ocean.CICE6 = '#DELETE' + ocean.hist_CICE4 = '' + elif ocean.seaice_model == 'CICE6': + ocean.seaice_preload = '$GEOSDIR/lib/libcice6@CMAKE_SHARED_LIBRARY_SUFFIX@' + ocean.CICE4 = '#DELETE' + ocean.CICE6 = '' + ocean.hist_CICE4 = '#DELETE' + + + def set_data_atmosphere(ocean): + if ocean.data_atmos == True: + ocean.modelatm = '#DELETE' + ocean.use_data_ATM4OCN = '.TRUE.' + else: + ocean.modelatm = '' + ocean.use_data_ATM4OCN = '.FALSE.' + + def set_gridname(ocean): + if ocean.gridtyp == 'CF': + ocean.gridname = f"OC{ocean.IM}x{ocean.JM}-{ocean.gridtyp}" + elif ocean.model == 'MIT': + ocean.gridname = f"{ocean.gridtyp}{ocean.IM}x{ocean.JM}-{ocean.gridtyp}" + else: + ocean.gridname = f"PE{ocean.IM}x{ocean.JM}-{ocean.gridtyp}" + + diff --git a/gcmpy/scripts/process_questions.py b/gcmpy/scripts/process_questions.py new file mode 100644 index 00000000..baaee805 --- /dev/null +++ b/gcmpy/scripts/process_questions.py @@ -0,0 +1,242 @@ +import yaml, re, os, subprocess +from generate_question import question +from utility import envdict, pathdict, color, load_yamls + +''' +This class handles special cases where a question"s properties need to be checked/dynamically +changed at runtime based on certain conditions (e.g. input validation) +''' +class handle: + + @staticmethod + def select_type(questionDict, i): + if questionDict[i].q_type == "select" and questionDict[i].answer != None: + # as of right now, we only want the first word of every select-type question. + # If that changes it's probably best to delete this function. + questionDict[i].answer = questionDict[i].answer.split(None, 1)[0] + + + @staticmethod + def io_server_default(questionDict, i): + if i != 'io_server': + return + match questionDict['AM_horizontal_res'].answer: + case 'c180' | 'c360' | 'c720' | 'c1120' | 'c1440' | 'c2880' | 'c5760' | 'c270' | 'c540' | 'c1080' | 'c1536' | 'c2160': + questionDict[i].default = True + case _: + questionDict[i].default = False + + + @staticmethod + def processor_choices(questionDict, i): + if i != "processor": + return + + if envdict['site'] == 'NCCS': + questionDict[i].choices = ['mil', 'cas'] + elif envdict['site'] == 'NAS': + questionDict[i].choices = ["rom", "mil", "sky", "cas", "bro", "tur"] + else: + exit(1) + + @staticmethod + def OM_horizontal_res_default(questionDict, i): + if i != 'OM_horizontal_res': + return + + # The default ocean resolution is based on the atmospheric resolution + match questionDict['AM_horizontal_res'].answer: + case 'c12' | 'c24' | 'c48': + questionDict[i].choices = ['o2 (1/4-deg, 1440x720 MERRA-2)', \ + 'o3 (1/8-deg, 2880x1440 OSTIA)', \ + 'o1 (1 -deg, 360x180 Reynolds, ends in 2022)'] + case _: + questionDict[i].choices = ['CS (Cubed-Sphere OSTIA)', \ + 'o2 (1/4-deg, 1440x720 MERRA-2)', \ + 'o3 (1/8-deg, 2880x1440 OSTIA)', \ + 'o1 (1 -deg, 360x180 Reynolds, ends in 2022)'] + + + @staticmethod + def MIT_hres_choices(questionDict, i): + if i != "OM_MIT_horizontal_res": + return + if questionDict["AM_horizontal_res"].answer == "c720": + questionDict[i].choices = ["llc1080 (1/12-deg, Lat-Lon-Cube)"] + elif questionDict["AM_horizontal_res"].answer == "c1440": + questionDict[i].choices = ["llc2160 (1/24-deg, Lat-Lon-Cube)"] + + @staticmethod + def MOM_hres_default(questionDict, i): + if i != "OM_MOM_horizontal_res": + return + if questionDict["OM_name"].answer == "MOM6" and questionDict["AM_horizontal_res"].answer == "c12": + questionDict[i].default = "72 36" + + @staticmethod + def seaice_choices(questionDict, i): + if i == 'OM_seaice_model' and questionDict['OM_name'] == 'MOM6': + questionDict[i].choices = ['CICE6'] + + + @staticmethod + def heartbeat_default(questionDict, i): + if i != "heartbeat": + return + ''' + Default heartbeat is determined by atmospheric resolution. + Of course, this just the recommended value. The user can + enter whatever value they like + ''' + heartbeat = "" + match questionDict["AM_horizontal_res"].answer: + case 'c12': + heartbeat = 1200 + case 'c24': + heartbeat = 1200 + case 'c48': + heartbeat = 1200 + case 'c90': + heartbeat = 900 + case 'c180' | 'c270': + heartbeat = 600 + case 'c360': + heartbeat = 450 + case 'c720' | 'c1120' | 'c540': + heartbeat = 300 + case 'c1440' | 'c1080': + heartbeat = 150 + case 'c2880' | 'c5760' | 'c1536' | 'c2160' | 'c4320': + heartbeat = 75 + + + # Per W. Putman recommendation, set heartbeat to 450s anytime BACM_1M is selected + if questionDict["AM_microphysics"].answer == "BACM_1M": + heartbeat = 450 + + # ((IMPORTANT: default must be type string due to some limitation in questionary)) + questionDict[i].default = str(heartbeat) + + + @staticmethod + def heartbeat_valid(questionDict, i): + if i != "heartbeat": + return + # input validation using regex + while not re.match(r"^\d+$", questionDict[i].answer): + print(f"{color.RED}please enter exactly 1 number!{color.RESET}") + questionDict[i].load_question(questionDict) + + @staticmethod + def history_template_default(questionDict, i): + if i != "history_template": + return + + if questionDict['OM_name'].answer == 'MOM5': + questionDict[i].default = 'HISTORY.AOGCM-MOM5.rc.tmpl' + elif questionDict['OM_name'].answer == "MOM6": + questionDict[i].default = 'HISTORY.AOGCM.rc.tmpl' + elif questionDict['OM_name'].answer == 'MIT': + questionDict[i].default = 'HISTORY.AOGCM_MITgcm.rc.tmpl' + elif questionDict['OM_data_atmos'].answer == True: + questionDict[i].default == 'HISTORY.DATAATM.rc.tmpl' + else: + questionDict[i].default = 'HISTORY.AGCM.rc.tmpl' + + @staticmethod + def exp_dir_default(questionDict, i): + if i != "exp_dir": + return + + root = f"{os.environ.get('HOME')}/.EXPDIRroot" + if os.path.exists(root): + try: + with open(root, "r") as file: + questionDict[i].default = f"{file.read().strip()}/{questionDict['experiment_id'].answer}" + except Exception as e: + print(f"An error occurred while reading {color.BLUE}.EXPDIRroot{color.RESET}: {str(e)}") + elif envdict['site'] in ['NAS','NCCS']: + questionDict[i].default = f"/{'discover/' if envdict['site'] == 'NCCS' else ''}nobackup/{os.environ.get('LOGNAME')}/{questionDict['experiment_id'].answer}" + else: + questionDict[i].default = f"{os.environ.get('HOME')}/{questionDict['experiment_id']}" + + + @staticmethod + def exp_dir_valid(questionDict, i): + if i != "exp_dir": + return + while os.path.basename(questionDict[i].answer) != questionDict['experiment_id'].answer: + print(f"{color.RED}This directory MUST point to the experiment ID: {color.BLUE}{questionDict['experiment_id'].answer}{color.RED}!{color.RESET}") + questionDict[i].load_question(questionDict) + + + @staticmethod + def group_root_default(questionDict, i): + if i != "group_root": + return + groups_output = subprocess.check_output(["groups"], text=True) + group_root = groups_output.strip().split()[0] + questionDict[i].default = group_root + + + + +def ask_questions(): + # actual driver for questionary questions + questionDict = {} + yaml_questions = load_yamls() + + # creates a dictionary of question:answer pairs + for i in yaml_questions: + temp = question(i, yaml_questions[i]["type"], \ + yaml_questions[i]["prompt"], \ + yaml_questions[i]["choices"], \ + yaml_questions[i]["default_answer"],\ + yaml_questions[i]["follows_up"]) + + questionDict[i] = temp + + + # if the question properties need to dynamically change at + # runtime call handle function BEFORE load_question() + handle.io_server_default(questionDict, i) + # Only ask processor question if on NAS or NCCS + if i == "processor" and envdict['site'] not in ['NAS', 'NCCS']: + questionDict[i].answer = None + continue + else: + handle.processor_choices(questionDict, i) + handle.OM_horizontal_res_default(questionDict, i) + handle.MIT_hres_choices(questionDict, i) + handle.MOM_hres_default(questionDict, i) + handle.seaice_choices(questionDict, i) + handle.heartbeat_default(questionDict, i) + handle.history_template_default(questionDict, i) + handle.exp_dir_default(questionDict, i) + handle.group_root_default(questionDict, i) + + # prompts the user with the question + questionDict[i].load_question(questionDict) + + # input validation and other post processing goes here, + # AFTER load_question() call + # handle.experiment_desc(questionDict, i) + handle.heartbeat_valid(questionDict, i) + handle.exp_dir_valid(questionDict, i) + + # strips the first word from every select type question + handle.select_type(questionDict, i) + + try: + if questionDict['clone_experiment'].answer == True and i == 'original_exp_path': + break + except KeyError: + pass + + + # creates a dictionary that only contains user answers (for simplicity) + expConfig = {key: questionDict.answer for key, questionDict in questionDict.items()} + del questionDict + + return expConfig + diff --git a/gcmpy/scripts/utility.py b/gcmpy/scripts/utility.py new file mode 100755 index 00000000..2a793fa3 --- /dev/null +++ b/gcmpy/scripts/utility.py @@ -0,0 +1,134 @@ +import os, platform, yaml, shutil + +# pretty font +class color: + PURPLE = '\033[95m' + CYAN = '\033[96m' + DARKCYAN = '\033[36m' + BLUE = '\033[94m' + GREEN = '\033[92m' + YELLOW = '\033[93m' + RED = '\033[91m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + END = '\033[0m' + RESET = '\033[0m' + + # accepts any string and styles it + def color_path(path): + return color.BLUE + color.BOLD + path + color.RESET + + def color_file(file): + return color.GREEN + color.BOLD + file + color.RESET + +# raises expections +class exceptions: + # Displays usage information to user + def print_usage(): + print(color.GREEN + pathdict['SCRIPTNAME'] + ", a setup script for the GEOS GCM\n\n" + \ + "\tUsage: " + pathdict['SCRIPTNAME'] + " [optional flag]\n\n" + \ + "\t --link Link GEOSgcm.x into experiment directory\n" + \ + "\t --singularity Set up Singularity experiment\n" + \ + "\t -h --help Show usage" + \ + "\n\nIf invoked alone, the script runs as normal." + \ + "\nFor more information, please contact Matt Thompson, Scott Rabenhorst, or Shayon Shakoorzadeh.\n") + exit(1) + + # Display misconfiguration messages to the user + def raise_user_exception(msg): + print(msg) + exit(1) + + def raise_fatal_exception(msg): + exceptions.raiseuserexception(msg) + exit(1) + + # This function will clean output files if script is interrupted + def cleanup(): + pass + +# Helper function for cp'ing +def cpfile(src, destination, filename): + if os.path.exists(src): + shutil.copy(src, destination) + print(f"Creating {color.RED}{filename}{color.RESET}") + +def copy_src_tarfile(exp_dir): + bool_install_tarfile = '@CFG_INSTALL_SOURCE_TARFILE@' + tarfile_name = '@CMAKE_PROJECT_NAME@.tar.gz' + + if bool_install_tarfile != 'TRUE': + return + + src_dir = f"{exp_dir}/src" + tarfile_path = f"{pathdict['install']}/src/{tarfile_name}" + + # remove and recreate src directory + if os.path.exists(src_dir): + shutil.rmtree(src_dir) + os.makedirs(src_dir, exist_ok=True) + print(f"Copying build source code into {color.GREEN}{src_dir}{color.RESET}") + + if os.path.exists(tarfile_path): + shutil.copy(tarfile_path, src_dir) + else: + print(f"{tarfile_path} not found, yet CMake was asked to make and install a tarfile") + print("Something went wrong.") + +# open yaml file and create dictionary from it's contents +def load_yamls(): + + # list of question files (*MAKE SURE THEY ARE IN THE ORDER YOU WANT THEM TO BE ASKED*) + file_list = ["../yaml/exp_setup.yaml", \ + "../yaml/atmospheric_model.yaml", \ + "../yaml/ocean_model.yaml", \ + "../yaml/land_model.yaml", \ + "../yaml/gocart.yaml", \ + "../yaml/directory_setup.yaml"] + all_yaml_questions = {} + + for filename in file_list: + try: + with open(filename, "r") as file: + yaml_questions = yaml.safe_load(file) + all_yaml_questions.update(yaml_questions) + except IOError: + print(f"{color.RED}YAML file '{filename}' could not be located. Exiting.") + exit(1) + + return all_yaml_questions + + +####################################################################### +# Directory and Environment Variable Locations Dictionaries +####################################################################### +pathdict = {} +pathdict['scripts'] = os.getcwd() +pathdict['gcmpy'] = os.path.dirname(pathdict['scripts']) +pathdict['yaml'] = os.path.join(pathdict['gcmpy'], 'yaml') +pathdict['bin'] = os.path.dirname(pathdict['gcmpy']) +pathdict['install'] = os.path.dirname(pathdict['bin']) +pathdict['etc'] = os.path.join(pathdict['install'], 'etc') +pathdict['GEOSgcm'] = os.path.dirname(pathdict['install']) +pathdict['build'] = os.path.join(pathdict['GEOSgcm'], 'build') +pathdict['GEOSgcm_App'] = os.path.join(pathdict['GEOSgcm'], 'src/Applications/@GEOSgcm_App') +pathdict['GEOS_Util'] = os.path.join(pathdict['GEOSgcm'], 'src/Shared/GEOS_Util') + + +envdict = {} +envdict['node'] = platform.node() +envdict['arch'] = platform.system() +envdict['mpi'] = '@MPI_STACK@' +if envdict['arch'] == 'Darwin': + envdict['preload_command'] = 'DYLD_INSERT_LIBRARIES' + envdict['ld_library_path_command'] = 'DYLD_LIBRARY_PATH' + # On macOS we seem to need to call mpirun directly and not use esma_mpirun + # For some reason SIP does not let the libraries be preloaded + envdict['run_command'] = 'mpirun -np ' +else: + envdict['preload_command'] = 'LD_PRELOAD' + envdict['ld_library_path_command'] = 'LD_LIBRARY_PATH' + envdict['run_command'] = '$GEOSBIN/esma_mpirun -np ' + +envdict['site'] = open(os.path.join(pathdict['etc'], 'SITE.rc'), 'r').read().split()[-1] + diff --git a/gcmpy/yaml/CMakeLists.txt b/gcmpy/yaml/CMakeLists.txt new file mode 100644 index 00000000..78c46fc7 --- /dev/null +++ b/gcmpy/yaml/CMakeLists.txt @@ -0,0 +1,16 @@ +set (files + atmospheric_model.yaml + directory_setup.yaml + exp_setup.yaml + gocart.yaml + land_model.yaml + mpi_config.yaml + ocean_model.yaml + ) + +install ( + FILES ${files} + DESTINATION bin/gcmpy/yaml + ) + + diff --git a/gcmpy/yaml/atmospheric_model.yaml b/gcmpy/yaml/atmospheric_model.yaml new file mode 100755 index 00000000..2423b30a --- /dev/null +++ b/gcmpy/yaml/atmospheric_model.yaml @@ -0,0 +1,44 @@ +AM_horizontal_res: + type: 'select' + prompt: 'Select the atmospheric models HORIZONTAL resolution:' + choices: ['c12 -- 8 deg (750.0 km)', 'c24 -- 4 deg (375.0 km)', 'c48 -- 2 deg (187.5 km)', 'c90 -- 1 deg (100.0 km)', 'c180 -- 1/2 deg ( 50.0 km)', 'c360 -- 1/4 deg ( 25.0 km)', 'c720 -- 1/8 deg ( 12.5 km)', 'c1120 -- 1/12 deg ( 8.0 km)', 'c1440 - 1/16 deg ( 6.25 km)','c270 -- (16.0 -100 km)', 'c540 -- ( 8.0 - 50 km)', 'c1080 - ( 4.0 - 25 km)', 'c1536 - ( 2.0 - 20 km)', 'c2160 - ( 2.0 - 12 km)'] + default_answer: '' + follows_up: '' + answer: '' + +AM_vertical_res: + type: 'text' + prompt: 'Enter the atmospheric models VERTICAL resolution:' + choices: '' + default_answer: '181' + follows_up: '' + +AM_microphysics: + type: 'select' + prompt: 'Select the Atmospheric Model Microphysics:' + choices: ['GFDL_1M -- 6-phase 1-moment Geophysical Fluid Dynamics Laboratory', 'BACM_1M -- 3-phase 1-moment Bacmeister et al', 'MGB2_2M -- 5 or 6-phase 2-moment Morrison & Gettleman'] + default_answer: '' + follows_up: '' + +heartbeat: + type: 'text' + prompt: 'Enter a number (in seconds) for HEARTBEAT_DT (press ENTER for recommended value):' + choices: '' + default_answer: '' + follows_up: '' + +io_server: + type: 'confirm' + prompt: 'Would you like to IOSERVER?' + choices: '' + default_answer: '' + follows_up: '' + + +#combine these two questions and just change "choices:" based on site +processor: + type: 'select' + prompt: 'Enter the Processor Type you wish to run on:' + choices: '' + default_answer: '' + follows_up: '' diff --git a/gcmpy/yaml/directory_setup.yaml b/gcmpy/yaml/directory_setup.yaml new file mode 100755 index 00000000..df63f458 --- /dev/null +++ b/gcmpy/yaml/directory_setup.yaml @@ -0,0 +1,16 @@ +history_template: + type: 'text' + prompt: 'Enter the location of HISTORY template to use (press ENTER for recommended template):' + choices: '' + default_answer: '' + follows_up: '' + +group_root: + type: 'text' + prompt: 'Enter your GROUP ID for Current EXP:' + choices: '' + default_answer: '' + follows_up: '' + + + diff --git a/gcmpy/yaml/exp_setup.yaml b/gcmpy/yaml/exp_setup.yaml new file mode 100755 index 00000000..6c0dadd4 --- /dev/null +++ b/gcmpy/yaml/exp_setup.yaml @@ -0,0 +1,39 @@ +experiment_id: + type: 'text' + prompt: 'Enter the experiment ID:' + choices: '' + default_answer: '' + follows_up: '' + +experiment_description: + type: 'text' + prompt: 'Enter a 1-line Experiment Description:' + choices: '' + default_answer: '' + follows_up: '' + +exp_dir: + type: 'path' + prompt: 'Enter Desired Location for the EXPERIMENT Directory (to contain model output and restart files):' + choices: '' + default_answer: '' + follows_up: '' + +clone_experiment: + type: 'confirm' + prompt: 'Would you like to CLONE an old experiment?' + choices: '' + default_answer: False + follows_up: '' + +original_exp_path: + type: 'path' + prompt: 'Enter the location of the experiment you wish to clone from:' + choices: '' + default_answer: '' + follows_up: + - ['clone_experiment', [True]] + + + + diff --git a/gcmpy/yaml/gocart.yaml b/gcmpy/yaml/gocart.yaml new file mode 100755 index 00000000..8c3e33c4 --- /dev/null +++ b/gcmpy/yaml/gocart.yaml @@ -0,0 +1,17 @@ +gocart_aerosols: + type: 'select' + prompt: 'Do you wish to run GOCART with Actual or Climatological Aersols?' + choices: ['Actual', 'Climatological'] + default_answer: '' + follows_up: + - ['OM_data_atmos', [False]] + - ['OM_data_atmos', ['was_not_asked']] + +gocart_emission: + type: 'select' + prompt: 'Select the GOCART Emission Files to use:' + choices: ['AMIP', 'OPS'] + default_answer: '' + follows_up: + - ['OM_data_atmos', [False]] + - ['OM_data_atmos', ['was_not_asked']] diff --git a/gcmpy/yaml/land_model.yaml b/gcmpy/yaml/land_model.yaml new file mode 100755 index 00000000..95f28d17 --- /dev/null +++ b/gcmpy/yaml/land_model.yaml @@ -0,0 +1,17 @@ +LS_boundary_conditions: + type: 'select' + prompt: 'Select the Land Surface Boundary Conditions:' + choices: ['v12', 'NL3', 'ICA'] + default_answer: '' + follows_up: + - ['OM_data_atmos', [False]] + - ['OM_data_atmos', ['was_not_asked']] + +LS_model: + type: 'select' + prompt: 'Select the Land Surface Model:' + choices: ['Catchment', 'CatchmentCN-CLM4.0 (CN_CLM40)'] + default_answer: '' + follows_up: + - ['OM_data_atmos', [False]] + - ['OM_data_atmos', ['was_not_asked']] diff --git a/gcmpy/yaml/mpi_config.yaml b/gcmpy/yaml/mpi_config.yaml new file mode 100755 index 00000000..11c51ee9 --- /dev/null +++ b/gcmpy/yaml/mpi_config.yaml @@ -0,0 +1,94 @@ +# Testing by Bill Putman determined some useful +# Open MPI parameters. Testing shows these work +# on both OSs at NCCS and on macOS +openmpi: | + # Turn off warning about TMPDIR on NFS + setenv OMPI_MCA_shmem_mmap_enable_nfs_warning 0 + # pre-connect MPI procs on mpi_init + setenv OMPI_MCA_mpi_preconnect_all 1 + setenv OMPI_MCA_coll_tuned_bcast_algorithm 7 + setenv OMPI_MCA_coll_tuned_scatter_algorithm 2 + setenv OMPI_MCA_coll_tuned_reduce_scatter_algorithm 3 + setenv OMPI_MCA_coll_tuned_allreduce_algorithm 3 + setenv OMPI_MCA_coll_tuned_allgather_algorithm 4 + setenv OMPI_MCA_coll_tuned_allgatherv_algorithm 3 + setenv OMPI_MCA_coll_tuned_gather_algorithm 1 + setenv OMPI_MCA_coll_tuned_barrier_algorithm 0 + # required for a tuned flag to be effective + setenv OMPI_MCA_coll_tuned_use_dynamic_rules 1 + # disable file locks + setenv OMPI_MCA_sharedfp "^lockedfile,individual" + +mvapich: | + setenv MV2_ENABLE_AFFINITY 0 + setenv SLURM_DISTRIBUTION block + setenv MV2_MPIRUN_TIMEOUT 100 + setenv MV2_GATHERV_SSEND_THRESHOLD 256 + +mpich: | + # Testing on Athena/Turin at NAS shows these + # settings are needed for oserver use + # NOTE: These should probably only be used by + # *Cray* MPICH at NAS, but for now, that's + # the only MPICH being used there. + + setenv FI_CXI_OPTIMIZED_MRS 0 + setenv FI_CXI_RX_MATCH_MODE hybrid + +mpt: | + setenv MPI_COLL_REPRODUCIBLE + setenv SLURM_DISTRIBUTION block + + #setenv MPI_DISPLAY_SETTINGS 1 + #setenv MPI_VERBOSE 1 + + setenv MPI_MEMMAP_OFF + unsetenv MPI_NUM_MEMORY_REGIONS + setenv MPI_XPMEM_ENABLED yes + unsetenv SUPPRESS_XPMEM_TRIM_THRESH + + setenv MPI_LAUNCH_TIMEOUT 40 + + setenv MPI_COMM_MAX 1024 + setenv MPI_GROUP_MAX 1024 + setenv MPI_BUFS_PER_PROC 256 + + # For some reason, PMI_RANK is randomly set and interferes + # with binarytile.x and other executables. + unsetenv PMI_RANK + + # Often when debugging on MPT, the traceback from Intel Fortran + # is "absorbed" and only MPT's errors are displayed. To allow the + # compiler's traceback to be displayed, uncomment this environment + # variable + #setenv FOR_IGNORE_EXCEPTIONS false + +intelmpi: | + # This flag prints out the Intel MPI state. Uncomment if needed + #setenv I_MPI_DEBUG 9 + +# These are options determined to be useful at NCCS and NAS +# Not setting generally as they are more fabric/cluster +# specific compared to the above adjustments. We protect +# like this because these settings do *not* work on systems like +# CI runners +# +intelmpi_NASA: | + setenv I_MPI_ADJUST_ALLREDUCE 12 + setenv I_MPI_ADJUST_GATHERV 3 + + setenv I_MPI_FABRICS shm:ofi + setenv I_MPI_OFI_PROVIDER psm3 + + # This has been found to help with congestion + setenv FI_PSM3_CONN_TIMEOUT 120 + + # NOTE: If you are seeing oddities with Intel MPI + # and a -perhost/-ppn use, you might need to + # uncomment the below line + # + #setenv I_MPI_JOB_RESPECT_PROCESS_PLACEMENT disable + # + # This is usually needed when running interactively + # as SLURM/PBS in batch mode is usually fine with process placement + diff --git a/gcmpy/yaml/ocean_model.yaml b/gcmpy/yaml/ocean_model.yaml new file mode 100755 index 00000000..aea5ecab --- /dev/null +++ b/gcmpy/yaml/ocean_model.yaml @@ -0,0 +1,82 @@ +# format - loads the questionary API +# +# question name: +# question type: 'text/confirm/select/path' +# question prompt: 'ask your question' +# choices: ['list', 'of', 'choices'] <----------(only for select type, otherwise leave blank) +# default answer: 'default' <----------(optional/can be left blank) +# follows_up: <----------(optional/can be left blank. If you want to +# -['prev question', ['answer1', 'answer2']] conditionally skip a question, add a list of +# -['or other prev question', ['any']] tuples containing the question(s) it will follow up +# and the answer the user has to give in order for +# this question to be asked. Multiple answers can be +# an ask condition, or you can set the answer to 'any' +# which will allow any answer given to show the question.) + +OM_coupled: + type: 'confirm' + prompt: 'Do you wish to run the COUPLED Ocean/Sea-Ice Model?' + choices: '' + default_answer: False + follows_up: '' + +# ------------------------------------- coupled == False -------------------------------------- +OM_horizontal_res: + type: 'select' + prompt: 'Select the Data_Ocean HORIZONTAL resolution:' + choices: ['o1 (1 -deg, 360x180 Reynolds)', 'o2 (1/4-deg, 1440x720 MERRA-2)', 'o3 (1/8-deg, 2880x1440 OSTIA)', 'CS (Cubed-Sphere OSTIA)'] + default_answer: '' + follows_up: + - ['OM_coupled', [False]] +# --------------------------------------------------------------------------------------------- + +# ------------------------------------- coupled == True --------------------------------------- +OM_name: + type: 'select' + prompt: 'Choose an Ocean Model:' + choices: ['MOM5', 'MOM6', 'MIT'] + default_answer: '' + follows_up: + - ['OM_coupled', [True]] + +OM_MOM_horizontal_res: + type: 'text' + prompt: 'Enter the Ocean Lat/Lon Horizontal Resolution (IM JM):' + choices: '' + default_answer: '360 200' + follows_up: + - ['OM_name', ['MOM5']] + +OM_MIT_horizontal_res: + type: 'select' + prompt: 'Select the Data_Ocean HORIZONTAL resolution:' + choices: ['llc90 (1-deg, Lat-Lon-Cube)', 'llc270 (1/3-deg, Lat-Lon-Cube)', 'cs32 (5-deg, cubed-sphere)'] + default_answer: '' + follows_up: + - ['OM_name', ['MIT']] + +OM_vertical_res: + type: 'text' + prompt: 'Enter the Ocean Model VERTICAL resolution (LM):' + choices: '' + default_answer: '50' + follows_up: + - ['OM_MOM_horizontal_res', ['any']] + - ['OM_MIT_horizontal_res', ['any']] + +OM_seaice_model: + type: 'select' + prompt: 'Choose a seaice model:' + choices: ['CICE6', 'CICE4'] + default_answer: '' + follows_up: + - ['OM_coupled', [True]] + +OM_data_atmos: + type: 'confirm' + prompt: 'Do you wish to run Data Atmosphere?' + choices: '' + default_answer: False + follows_up: + - ['OM_coupled', [True]] +# ---------------------------------------------------------------------------------------------- diff --git a/linkbcs.tmpl b/linkbcs.tmpl index 084b05fb..36cda23d 100644 --- a/linkbcs.tmpl +++ b/linkbcs.tmpl @@ -1,44 +1,43 @@ #!/bin/csh -f -setenv BCSDIR @BCSDIR -@DATAOCEANsetenv SSTDIR @SSTDIR -@COUPLEDsetenv CPLDIR @COUPLEDIR/@OCNMODEL -setenv CHMDIR @CHMDIR -setenv BCRSLV @ATMOStag_@OCEANtag +setenv BCSDIR {{ BCSDIR }} +{{ DATAOCEAN }}setenv SSTDIR {{ SSTDIR }} +{{ COUPLED }}setenv CPLDIR {{ COUPLEDIR }}/{{ OCNMODEL }} +setenv CHMDIR {{ CHMDIR }} +setenv BCRSLV {{ ATMOStag }}_{{ OCEANtag }} -@MOM5setenv SSTDIR @COUPLEDIR/SST/MERRA2/@OGCM_IMx@OGCM_JM/v1 -@MOM6setenv SSTDIR @COUPLEDIR/SST/MERRA2/@OGCM_IMx@OGCM_JM/v1 +{{ MOM5 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/{{ OGCM_IM }}x{{ OGCM_JM }}/v1 +{{ MOM6 }}setenv SSTDIR {{ COUPLEDIR }}/SST/MERRA2/{{ OGCM_IM }}x{{ OGCM_JM }}/v1 -@COUPLED /bin/mkdir -p RESTART +{{ COUPLED }} /bin/mkdir -p RESTART /bin/mkdir -p ExtData /bin/ln -sf $CHMDIR/* ExtData -@COUPLED/bin/ln -sf @COUPLEDIR/dataatm/* ExtData -@COUPLED/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/SEAWIFS_KPAR_mon_clim.@OGCM_IMx@OGCM_JM SEAWIFS_KPAR_mon_clim.data -@COUPLED/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/${BCRSLV}-Pfafstetter.til tile.data -@COUPLED/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/${BCRSLV}-Pfafstetter.TRN runoff.bin -@MOM5/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/MAPL_Tripolar.nc . -@MOM6/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/MAPL_Tripolar.nc . -@MIT/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/mit.ascii -@MOM5/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/vgrid@OGCM_LM.ascii ./vgrid.ascii -@MOM6/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/vgrid@OGCM_LM.ascii ./vgrid.ascii -@MIT/bin/ln -sf $CPLDIR/DC0360xPC0181_LL5400x15-LL.bin DC0360xPC0181_LL5400x15-LL.bin +{{ COUPLED }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/SEAWIFS_KPAR_mon_clim.{{ OGCM_IM }}x{{ OGCM_JM }} SEAWIFS_KPAR_mon_clim.data +{{ COUPLED }}/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/${BCRSLV}-Pfafstetter.til tile.data +{{ COUPLED }}/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/${BCRSLV}-Pfafstetter.TRN runoff.bin +{{ MOM5 }}/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/MAPL_Tripolar.nc . +{{ MOM6 }}/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/MAPL_Tripolar.nc . +{{ MIT }}/bin/ln -sf $BCSDIR/geometry/${BCRSLV}/mit.ascii +{{ MOM5 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/vgrid{{ OGCM_LM }}.ascii ./vgrid.ascii +{{ MOM6 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/vgrid{{ OGCM_LM }}.ascii ./vgrid.ascii +{{ MIT }}/bin/ln -sf $CPLDIR/DC0360xPC0181_LL5400x15-LL.bin DC0360xPC0181_LL5400x15-LL.bin # Precip correction #/bin/ln -s /discover/nobackup/projects/gmao/share/gmao_ops/fvInput/merra_land/precip_CPCUexcludeAfrica-CMAP_corrected_MERRA/GEOSdas-2_1_4 ExtData/PCP -@DATAOCEAN/bin/ln -sf $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.til tile.data -@DATAOCEANif( -e $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.TIL) then -@DATAOCEAN/bin/ln -sf $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.TIL tile.bin -@DATAOCEANendif +{{ DATAOCEAN }}/bin/ln -sf $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.til tile.data +{{ DATAOCEAN }}if( -e $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.TIL) then +{{ DATAOCEAN }}/bin/ln -sf $BCSDIR/geometry/$BCRSLV/${BCRSLV}-Pfafstetter.TIL tile.bin +{{ DATAOCEAN }}endif # DAS or REPLAY Mode (AGCM.rc: pchem_clim_years = 1-Year Climatology) # -------------------------------------------------------------------- -@OPS_SPECIES/bin/ln -sf $BCSDIR/PCHEM/pchem.species.Clim_Prod_Loss.z_721x72.nc4 species.data +{{ OPS_SPECIES }}/bin/ln -sf $BCSDIR/PCHEM/pchem.species.Clim_Prod_Loss.z_721x72.nc4 species.data # CMIP-5 Ozone Data (AGCM.rc: pchem_clim_years = 228-Years) # ---------------------------------------------------------- -@CMIP_SPECIES/bin/ln -sf $BCSDIR/PCHEM/pchem.species.CMIP-5.1870-2097.z_91x72.nc4 species.data +{{ CMIP_SPECIES }}/bin/ln -sf $BCSDIR/PCHEM/pchem.species.CMIP-5.1870-2097.z_91x72.nc4 species.data # S2S pre-industrial with prod/loss of stratospheric water vapor # (AGCM.rc: pchem_clim_years = 3-Years, and H2O_ProdLoss: 1 ) @@ -47,17 +46,17 @@ setenv BCRSLV @ATMOStag_@OCEANtag # MERRA-2 Ozone Data (AGCM.rc: pchem_clim_years = 39-Years) # ---------------------------------------------------------- -@MERRA2OX_SPECIES/bin/ln -sf $BCSDIR/PCHEM/pchem.species.CMIP-5.MERRA2OX.197902-201706.z_91x72.nc4 species.data +{{ MERRA2OX_SPECIES }}/bin/ln -sf $BCSDIR/PCHEM/pchem.species.CMIP-5.MERRA2OX.197902-201706.z_91x72.nc4 species.data -/bin/ln -sf $BCSDIR/land/$BCRSLV/visdf_@AGCM_IMx@AGCM_JM.dat visdf.dat -/bin/ln -sf $BCSDIR/land/$BCRSLV/nirdf_@AGCM_IMx@AGCM_JM.dat nirdf.dat -/bin/ln -sf $BCSDIR/land/$BCRSLV/vegdyn_@AGCM_IMx@AGCM_JM.dat vegdyn.data -/bin/ln -sf $BCSDIR/land/$BCRSLV/lai_clim_@AGCM_IMx@AGCM_JM.data lai.data -/bin/ln -sf $BCSDIR/land/$BCRSLV/green_clim_@AGCM_IMx@AGCM_JM.data green.data -/bin/ln -sf $BCSDIR/land/$BCRSLV/ndvi_clim_@AGCM_IMx@AGCM_JM.data ndvi.data +/bin/ln -sf $BCSDIR/land/$BCRSLV/visdf_{{ AGCM_IM }}x{{ AGCM_JM }}.dat visdf.dat +/bin/ln -sf $BCSDIR/land/$BCRSLV/nirdf_{{ AGCM_IM }}x{{ AGCM_JM }}.dat nirdf.dat +/bin/ln -sf $BCSDIR/land/$BCRSLV/vegdyn_{{ AGCM_IM }}x{{ AGCM_JM }}.dat vegdyn.data +/bin/ln -sf $BCSDIR/land/$BCRSLV/lai_clim_{{ AGCM_IM }}x{{ AGCM_JM }}.data lai.data +/bin/ln -sf $BCSDIR/land/$BCRSLV/green_clim_{{ AGCM_IM }}x{{ AGCM_JM }}.data green.data +/bin/ln -sf $BCSDIR/land/$BCRSLV/ndvi_clim_{{ AGCM_IM }}x{{ AGCM_JM }}.data ndvi.data -@GCMRUN_CATCHCNif ( -f $BCSDIR/land/$BCRSLV/lnfm_clim_@AGCM_IMx@AGCM_JM.data ) /bin/ln -sf $BCSDIR/land/$BCRSLV/lnfm_clim_@AGCM_IMx@AGCM_JM.data lnfm.data -@GCMRUN_CATCHCN/bin/ln -s $BCSDIR/land/shared/CO2_MonthlyMean_DiurnalCycle.nc4 +{{ GCMRUN_CATCHCN }}if ( -f $BCSDIR/$BCRSLV/lnfm_clim_{{ AGCM_IM }}x{{ AGCM_JM }}.data ) /bin/ln -sf $BCSDIR/land/$BCRSLV/lnfm_clim_{{ AGCM_IM }}x{{ AGCM_JM }}.data lnfm.data +{{ GCMRUN_CATCHCN }}/bin/ln -s $BCSDIR/land/shared/CO2_MonthlyMean_DiurnalCycle.nc4 set MERRA2OX_SPECIES = "#" @@ -73,16 +72,16 @@ if ( "$bc_ver_num" == "" ) set bc_ver_num = 0 if ( $bc_is_gm4 ) then # GM4 stays on legacy tiles layout - set topo_src_dir = "$BCSDIR/TOPO/TOPO_@ATMOStag" + set topo_src_dir = "$BCSDIR/TOPO/TOPO_{{ ATMOStag }}" else set stream = v1 if ( $bc_ver_num >= 14 ) set stream = v2 - set topo_src_dir = "@BCS_INPUT_BASE/TOPO/${stream}/@ATMOStag/smoothed" + set topo_src_dir = "{{ BCS_INPUT_BASE }}/TOPO/${stream}/{{ ATMOStag }}/smoothed" endif -set fn_dyn = topo_DYN_ave_@AGCM_IMx@AGCM_JM.data -set fn_gwd = topo_GWD_var_@AGCM_IMx@AGCM_JM.data -set fn_trb = topo_TRB_var_@AGCM_IMx@AGCM_JM.data +set fn_dyn = topo_DYN_ave_{{ AGCM_IM }}x{{ AGCM_JM }}.data +set fn_gwd = topo_GWD_var_{{ AGCM_IM }}x{{ AGCM_JM }}.data +set fn_trb = topo_TRB_var_{{ AGCM_IM }}x{{ AGCM_JM }}.data if ( ! -e ${topo_src_dir}/${fn_dyn} ) then echo "FATAL: ${fn_dyn} not found in ${topo_src_dir}" @@ -96,20 +95,20 @@ endif # Optional internal restart if ( -e ${topo_src_dir}/gwd_internal_rst ) then /bin/cp -vf ${topo_src_dir}/gwd_internal_rst gwd_internal_rst -else if (-e @GWDRSDIR/gwd_internal_c@AGCM_IM) then - /bin/cp -vf @GWDRSDIR/gwd_internal_c@AGCM_IM gwd_internal_rst +else if (-e {{ GWDRSDIR }}/gwd_internal_c{{ AGCM_IM }}) then + /bin/cp -vf {{ GWDRSDIR }}/gwd_internal_c{{ AGCM_IM }} gwd_internal_rst endif # ----- end topo gwd linking ----- -@COUPLEDcp $HOMDIR/*_table . -@COUPLEDcp $CPLDIR/@OGCM_IMx@OGCM_JM/INPUT/* INPUT -@CICE4/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/cice/kmt_cice.bin . -@CICE4/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/cice/grid_cice.bin . -@CICE6/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/cice6/cice6_grid.nc . -@CICE6/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/cice6/cice6_kmt.nc . -@CICE6/bin/ln -sf $CPLDIR/@OGCM_IMx@OGCM_JM/cice6/cice6_global.bathy.nc . +{{ COUPLED }}cp $HOMDIR/*_table . +{{ COUPLED }}cp $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/INPUT/* INPUT +{{ CICE4 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/cice/kmt_cice.bin . +{{ CICE4 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/cice/grid_cice.bin . +{{ CICE6 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/cice6/cice6_grid.nc . +{{ CICE6 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/cice6/cice6_kmt.nc . +{{ CICE6 }}/bin/ln -sf $CPLDIR/{{ OGCM_IM }}x{{ OGCM_JM }}/cice6/cice6_global.bathy.nc . -@DATAOCEAN/bin/ln -sf $SSTDIR/@SSTFILE sst.data -@DATAOCEAN/bin/ln -sf $SSTDIR/@ICEFILE fraci.data -@DATAOCEAN/bin/ln -sf $SSTDIR/@KPARFILE SEAWIFS_KPAR_mon_clim.data +{{ DATAOCEAN }}/bin/ln -sf $SSTDIR/{{ SSTFILE }} sst.data +{{ DATAOCEAN }}/bin/ln -sf $SSTDIR/{{ ICEFILE }} fraci.data +{{ DATAOCEAN }}/bin/ln -sf $SSTDIR/{{ KPARFILE }} SEAWIFS_KPAR_mon_clim.data diff --git a/scm_run.j b/scm_run.j index 3e72e28b..3e803f51 100755 --- a/scm_run.j +++ b/scm_run.j @@ -1,37 +1,37 @@ #!/bin/tcsh -f -#@BATCH_TIME -#@BATCH_TASKS -#@BATCH_JOBNAME -#@BATCH_GROUP +#{{ BATCH_TIME }} +#{{ BATCH_TASKS }} +#{{ BATCH_JOBNAME }} +#{{ BATCH_GROUP }} umask 022 limit stacksize unlimited setenv ARCH `uname` -setenv SITE @SITE -setenv GEOSDIR @INSTALLDIR -setenv GEOSBIN @INSTALLDIR/bin -setenv GEOSETC @INSTALLDIR/etc -setenv GEOSUTIL @INSTALLDIR +setenv SITE {{ SITE }} +setenv GEOSDIR {{ INSTALLDIR }} +setenv GEOSBIN {{ INSTALLDIR }}/bin +setenv GEOSETC {{ INSTALLDIR }}/etc +setenv GEOSUTIL {{ INSTALLDIR }} source $GEOSBIN/g5_modules # We only prepend to DY/LD_LIBRARY_PATH if it exists -if ( $?@LD_LIBRARY_PATH_CMD ) then - setenv @LD_LIBRARY_PATH_CMD "${@LD_LIBRARY_PATH_CMD}:${GEOSDIR}/lib" +if ( $?{{ LD_LIBRARY_PATH_CMD }} ) then + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${GEOSDIR}/lib" else - setenv @LD_LIBRARY_PATH_CMD "${GEOSDIR}/lib" + setenv {{ LD_LIBRARY_PATH_CMD }} "${GEOSDIR}/lib" endif -# We only add BASEDIR to the @LD_LIBRARY_PATH_CMD if BASEDIR is defined (i.e., not running with Spack) +# We only add BASEDIR to the {{ LD_LIBRARY_PATH_CMD }} if BASEDIR is defined (i.e., not running with Spack) if ( $?BASEDIR ) then - setenv @LD_LIBRARY_PATH_CMD "${@LD_LIBRARY_PATH_CMD}:${BASEDIR}/${ARCH}/lib" + setenv {{ LD_LIBRARY_PATH_CMD }} "${{'{'}}{{LD_LIBRARY_PATH_CMD}}{{'}'}}:${BASEDIR}/${ARCH}/lib" endif -setenv RUN_CMD "@RUN_CMD" +setenv RUN_CMD "{{ RUN_CMD }}" setenv GCMVER `cat $GEOSETC/.AGCM_VERSION` echo VERSION: $GCMVER -setenv EXPDIR @EXPDIR +setenv EXPDIR {{ EXPDIR }} cd $EXPDIR @@ -42,7 +42,7 @@ cp fvcore_layout.rc input.nml # NOTE: Both reading and writing file_weights seems to fail # on macOS. So for now we set to false on Darwin until we can # investigate further. -echo "file_weights: @FILE_WEIGHTS" >> extdata.yaml +echo "file_weights: {{ FILE_WEIGHTS }}" >> extdata.yaml setenv OMP_NUM_THREADS 1 diff --git a/scm_setup b/scm_setup index 999b04d0..5bd63964 100755 --- a/scm_setup +++ b/scm_setup @@ -582,17 +582,17 @@ else fi cat > $expdir/sedfile << EOF -s?@EXPDIR?$expdir?g -s?@SITE?$SITE?g -s?@INSTALLDIR?$INSTALLDIR?g -s?@BATCH_TASKS?$BATCH_TASKS?g -s?@BATCH_TIME?$BATCH_TIME?g -s?@BATCH_GROUP?$BATCH_GROUP?g -s?@BATCH_JOBNAME?$BATCH_JOBNAME?g -s?@PRELOAD_COMMAND?$PRELOAD_COMMAND?g -s?@LD_LIBRARY_PATH_CMD?$LD_LIBRARY_PATH_CMD?g -s?@RUN_CMD?$RUN_CMD?g -s?@FILE_WEIGHTS?$FILE_WEIGHTS?g +s?{{ EXPDIR }}?$expdir?g +s?{{ SITE }}?$SITE?g +s?{{ INSTALLDIR }}?$INSTALLDIR?g +s?{{ BATCH_TASKS }}?$BATCH_TASKS?g +s?{{ BATCH_TIME }}?$BATCH_TIME?g +s?{{ BATCH_GROUP }}?$BATCH_GROUP?g +s?{{ BATCH_JOBNAME }}?$BATCH_JOBNAME?g +s?{{ PRELOAD_COMMAND }}?$PRELOAD_COMMAND?g +s?{{ LD_LIBRARY_PATH_CMD }}?$LD_LIBRARY_PATH_CMD?g +s?{{ RUN_CMD }}?$RUN_CMD?g +s?{{ FILE_WEIGHTS }}?$FILE_WEIGHTS?g EOF $ISED -f $expdir/sedfile $expdir/scm_run.j