diff --git a/.circleci/config.yml b/.circleci/config.yml index b3975f06..7c025b9d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,11 +1,11 @@ version: 2.1 # Anchors in case we need to override the defaults from the orb -#baselibs_version: &baselibs_version v7.17.0 -#bcs_version: &bcs_version v11.4.0 +#baselibs_version: &baselibs_version v7.33.0 +#bcs_version: &bcs_version v11.6.0 orbs: - ci: geos-esm/circleci-tools@2 + ci: geos-esm/circleci-tools@4 workflows: build-test: diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 9ae989ef..20796af2 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -22,7 +22,7 @@ jobs: if: "!contains(github.event.pull_request.labels.*.name, '0 diff trivial')" runs-on: ubuntu-24.04 container: - image: gmao/ubuntu24-geos-env:v7.32.0-intelmpi_2021.13-ifort_2021.13 + image: gmao/ubuntu24-geos-env:v7.33.0-intelmpi_2021.13-ifort_2021.13 env: OMPI_ALLOW_RUN_AS_ROOT: 1 @@ -56,9 +56,11 @@ jobs: mepo clone --partial blobless mepo status + - name: Debug PR branch + run: echo "PR is coming from ${{ github.event.pull_request.head.ref }}" + - name: Update other branches - if: - "!contains('refs/heads/main,refs/heads/develop', github.ref)" + if: ${{ github.event.pull_request.head.ref != 'main' && github.event.pull_request.head.ref != 'develop' }} run: | mepo checkout-if-exists ${GITHUB_HEAD_REF} mepo status @@ -78,7 +80,7 @@ jobs: if: "!contains(github.event.pull_request.labels.*.name, '0 diff trivial')" runs-on: ubuntu-24.04 container: - image: gmao/ubuntu24-geos-env-mkl:v7.32.0-openmpi_5.0.5-gcc_14.2.0 + image: gmao/ubuntu24-geos-env-mkl:v7.33.0-openmpi_5.0.5-gcc_14.2.0 env: OMPI_ALLOW_RUN_AS_ROOT: 1 @@ -112,9 +114,11 @@ jobs: mepo clone --partial blobless mepo status + - name: Debug PR branch + run: echo "PR is coming from ${{ github.event.pull_request.head.ref }}" + - name: Update other branches - if: - "!contains('refs/heads/main,refs/heads/develop', github.ref)" + if: ${{ github.event.pull_request.head.ref != 'main' && github.event.pull_request.head.ref != 'develop' }} run: | mepo checkout-if-exists ${GITHUB_HEAD_REF} mepo status diff --git a/CHANGELOG.md b/CHANGELOG.md index 3567c1b0..de6e786c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,10 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Added functionality for model-based QC of MODIS SCF observations using soil layer 1 temperature. -- Added functionality to simulate landice tiles. -- Added functionality to read nc4-formatted tile file. - ### Changed ### Fixed @@ -25,6 +21,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ----------------------------- +## [v3.0.0] - 2025-05-28 + +- 0-diff vs. v2.0.0. + +### Added + +- Added functionality to simulate landice tiles ([PR #18](https://github.com/GEOS-ESM/GEOSldas_GridComp/pull/18)). +- Added functionality to read nc4-formatted tile file ([PR #18](https://github.com/GEOS-ESM/GEOSldas_GridComp/pull/18)). +- Added model-based QC of (MODIS) snow cover area fraction observations using layer-1 soil temperature ([PR #96](https://github.com/GEOS-ESM/GEOSldas_GridComp/pull/96)). +- Added default settings and command line args for coupled land-atm DAS ([PR #94](https://github.com/GEOS-ESM/GEOSldas_GridComp/pull/94)). + +------------------------------ + ## [v2.0.0] - 2025-04-15 - 0-diff vs. v1.1.0. diff --git a/GEOSldas_App/ldas_setup b/GEOSldas_App/ldas_setup index e1dbe6be..d1f332c8 100755 --- a/GEOSldas_App/ldas_setup +++ b/GEOSldas_App/ldas_setup @@ -14,21 +14,22 @@ import subprocess as sp import shlex import tempfile import netCDF4 -from dateutil import rrule -from datetime import datetime -from datetime import timedelta -from collections import OrderedDict -from dateutil.relativedelta import relativedelta -from remap_utils import * -from remap_catchANDcn import * + +from dateutil import rrule +from datetime import datetime +from datetime import timedelta +from collections import OrderedDict +from dateutil.relativedelta import relativedelta +from remap_utils import * from remap_lake_landice_saltwater import * -from lenkf_j_template import * +from remap_catchANDcn import * +from lenkf_j_template import * + """ This script is intended to be run from any installed directory with GEOSldas.x and ldas_setup (The default setup is ../install/bin) """ - class LDASsetup: def __init__(self, cmdLineArgs): @@ -53,114 +54,224 @@ class LDASsetup: 'MINLON','MAXLON','MINLAT','MAXLAT','EXCLUDE_FILE','INCLUDE_FILE','MWRTM_PATH','GRIDNAME', 'ADAS_EXPDIR', 'BCS_RESOLUTION', 'TILE_FILE_FORMAT' ] - - self.GEOS_SITE = "@GEOS_SITE@" + self.GEOS_SITE = "@GEOS_SITE@" # ------ # Required resource manager input fields # ------ - rqdRmInpKeys = ['account', 'walltime', 'ntasks_model', 'ntasks-per-node'] + rqdRmInpKeys = ['account', 'walltime', 'ntasks_model', 'ntasks-per-node'] # ------ # Optional resource manager input fields # ------ optSlurmInpKeys = ['job_name', 'qos', 'oserver_nodes', 'writers-per-node'] + + # =============================================================================================== + # # ------ - # ./ldsetup.py sample ... + # ./ldas_setup sample ... # ------ - if 'exeinp' in cmdLineArgs: - # sample sub-command - # by construction, we can have - # either: {'exeinp': False, 'batinp': 'lasgh'} <-- 'lasgh'??? - # or: {'exeinp': True, 'batinp': None} - if cmdLineArgs['exeinp']: - _printExeInputKeys(rqdExeInpKeys) - elif cmdLineArgs['batinp'] : - _printRmInputKeys(rqdRmInpKeys, optSlurmInpKeys) + # + # "sample" sub-command: + # '--exeinp' and '--batinp' are mutually exclusive command line arguments. + # Specifying one will set it to True and set the other one to False. + # That is, we can have either: {'exeinp': False, 'batinp': True } + # or: {'exeinp': True, 'batinp': False} + + if 'exeinp' in cmdLineArgs: # 'exeinp' is always present in "sample" mode. + + if cmdLineArgs['exeinp']: + _produceExeInput() + elif cmdLineArgs['batinp']: + _printRmInputKeys( rqdRmInpKeys, optSlurmInpKeys) else: - raise Exception('not recognized option') + raise Exception('unrecognized option') + # + # EXIT after completing "sample" sub-command sys.exit(0) + + # =============================================================================================== + # # ------ - # ./ldsetup.py setup ... + # ./ldas_setup setup ... # ------ # Instance variables - self.exeinpfile = cmdLineArgs['exeinpfile'] - self.batinpfile = cmdLineArgs['batinpfile'] - exphome_ = cmdLineArgs['exphome'].rstrip('/') - assert os.path.isdir(exphome_) # exphome should exist - self.exphome = os.path.abspath(exphome_) - self.nymdb = cmdLineArgs['nymdb'] - self.nhmsb = cmdLineArgs['nhmsb'] - self.verbose = cmdLineArgs['verbose'] - self.runmodel = cmdLineArgs['runmodel'] + self.exeinpfile = cmdLineArgs['exeinpfile'] + self.batinpfile = cmdLineArgs['batinpfile'] + exphome_ = cmdLineArgs['exphome'].rstrip('/') + assert os.path.isdir(exphome_) # exphome should exist + self.exphome = os.path.abspath(exphome_) + self.verbose = cmdLineArgs['verbose'] + + # command line args for coupled land-atm DAS (see "help" strings in parseCmdLine() for details) + self.ladas_cpl = cmdLineArgs['ladas_cpl'] + self.nymdb = cmdLineArgs['nymdb'] + self.nhmsb = cmdLineArgs['nhmsb'] + self.agcm_res = cmdLineArgs['agcm_res'] + self.bcs_version = cmdLineArgs['bcs_version'] + self.rstloc = cmdLineArgs['rstloc'] + self.varwindow = cmdLineArgs['varwindow'] + self.LDAS_nml_path = cmdLineArgs['LDAS_nml_path'] + self.mwrtm_path = cmdLineArgs['mwrtm_path'] + + # obsolete command line args + self.runmodel = cmdLineArgs['runmodel'] if self.runmodel : print('\n The option "--runmodel" is out of date, not necessary anymore. \n') - self.daysperjob = cmdLineArgs['daysperjob'] - self.monthsperjob = cmdLineArgs['monthsperjob'] - self.rqdExeInp = OrderedDict() - self.rqdRmInp = OrderedDict() - self.optRmInp = OrderedDict() - self.rundir = None - self.blddir = None - self.blddirLn = None - self.outdir = None - self.out_path = None - self.inpdir = None - self.exefyl = None - self.isZoomIn = False - self.catch = '' - self.has_mwrtm = False - self.has_vegopacity = False - self.assim = False + + self.daysperjob = cmdLineArgs['daysperjob'] + self.monthsperjob = cmdLineArgs['monthsperjob'] + + self.rqdExeInp = OrderedDict() + self.rqdRmInp = OrderedDict() + self.optRmInp = OrderedDict() + self.rundir = None + self.blddir = None + self.blddirLn = None + self.outdir = None + self.out_path = None + self.inpdir = None + self.exefyl = None + self.isZoomIn = False + self.catch = '' + self.has_mwrtm = False + self.has_vegopacity = False + self.assim = False self.has_landassim_seed = False - self.has_geos_pert = False - self.nSegments = 1 - self.perturb = 0 - self.first_ens_id = 0 - self.ladas_coupling = 0 - self.in_rstfile = None - self.in_tilefile = 'None' # default string - self.ens_id_width = 6 # _eXXXX - self.bcs_land = '' - self.bcs_geom = '' - self.bcs_landshared = '' - self.tile_types = '' - self.with_land = False - self.with_landice = False + self.has_geos_pert = False + self.nSegments = 1 + self.perturb = 0 + self.first_ens_id = 0 + self.in_rstfile = None + self.in_tilefile = None # default string + self.ens_id_width = 6 # _eXXXX + self.bcs_dir_land = '' + self.bcs_dir_geom = '' + self.bcs_dir_landshared = '' + self.tile_types = '' + self.with_land = False + self.with_landice = False + self.adas_expdir = '' # ------ # Read exe input file which is required to set up the dir # ------ - self.rqdExeInp = self._parseInputFile(cmdLineArgs['exeinpfile']) + if self.ladas_cpl is None: + self.ladas_cpl = 0 + else: + self.ladas_cpl = int(self.ladas_cpl) + + self.rqdExeInp = {} + if self.ladas_cpl == 0: + self.rqdExeInp = self._parseInputFile(cmdLineArgs['exeinpfile']) + else: + _produceExeInput(out_dict=self.rqdExeInp, ladas_cpl=self.ladas_cpl) + # verifing the required input if 'RESTART' not in self.rqdExeInp : - self.rqdExeInp['RESTART'] = 1 + self.rqdExeInp['RESTART'] = "1" if self.rqdExeInp['RESTART'].isdigit() : if int(self.rqdExeInp['RESTART']) ==0 : rqdExeInpKeys = rqdExeInpKeys_rst - self.rqdExeInp['RESTART_ID'] = "none" - self.rqdExeInp['RESTART_DOMAIN'] = "none" - self.rqdExeInp['RESTART_PATH'] = "none" + self.rqdExeInp['RESTART_ID'] = 'None' + self.rqdExeInp['RESTART_DOMAIN'] = 'None' + self.rqdExeInp['RESTART_PATH'] = 'None' else: if self.rqdExeInp['RESTART'] =='G' : rqdExeInpKeys = rqdExeInpKeys_rst - self.rqdExeInp['RESTART_DOMAIN'] = "none" + self.rqdExeInp['RESTART_DOMAIN'] = 'None' else: - self.rqdExeInp['RESTART_ID'] = "none" - self.rqdExeInp['RESTART_DOMAIN'] = "none" - self.rqdExeInp['RESTART_PATH'] = "none" + self.rqdExeInp['RESTART_ID'] = 'None' + self.rqdExeInp['RESTART_DOMAIN'] = 'None' + self.rqdExeInp['RESTART_PATH'] = 'None' + + ### check if ldas is coupled to adas; if so, set/overwrite input parameters accordingly + if self.ladas_cpl > 0 : + + # make sure all necessary command line arguments were supplied + assert self.nymdb is not None, "Error. Must have command line arg nymdb for coupled land-atm DAS.\n" + assert self.nhmsb is not None, "Error. Must have command line arg nhmsb for coupled land-atm DAS.\n" + assert self.agcm_res is not None, "Error. Must have command line arg agcm_res for coupled land-atm DAS.\n" + assert self.bcs_version is not None, "Error. Must have command line arg bcs_version for coupled land-atm DAS.\n" + assert self.rstloc is not None, "Error. Must have command line arg rstloc for coupled land-atm DAS.\n" + assert self.varwindow is not None, "Error. Must have command line arg varwindow for coupled land-atm DAS.\n" + assert self.LDAS_nml_path is not None, "Error. Must have command line arg LDAS_nml_path for coupled land-atm DAS.\n" + assert self.mwrtm_path is not None, "Error. Must have command line arg mwrtm_path for coupled land-atm DAS.\n" + + self.rqdExeInp['BEG_DATE'] = f"{self.nymdb} {self.nhmsb}" + rstloc_ = self.rstloc.rstrip('/') # remove trailing '/' + assert os.path.isdir(rstloc_) # make sure rstloc_ is a valid directory + self.rstloc = os.path.abspath(rstloc_) + self.rqdExeInp['RESTART_PATH'] = os.path.dirname( self.rstloc) + self.rqdExeInp['RESTART_ID'] = os.path.basename(self.rstloc) + + self.adas_expdir = os.path.dirname( self.exphome) + self.rqdExeInp['ADAS_EXPDIR'] = self.adas_expdir + self.adas_expid = os.path.basename(self.adas_expdir) + self.rqdExeInp['MET_TAG'] = self.adas_expid + '__bkg' + if self.ladas_cpl == 1 : + # ldas coupled with determistic component of adas + self.rqdExeInp['EXP_ID'] = self.adas_expid + '_LDAS' + self.rqdExeInp['MET_PATH'] = self.adas_expdir + '/recycle/holdpredout' + self.rqdExeInp['ENSEMBLE_FORCING'] = 'NO' + self.nens = 24 # for now, hardwire nens for atm det + elif self.ladas_cpl == 2 : + # ldas coupled with ensemble component of adas + self.rqdExeInp['EXP_ID'] = self.adas_expid + '_LDAS4ens' + self.rqdExeInp['MET_PATH'] = self.adas_expdir + '/atmens/mem' + self.rqdExeInp['ENSEMBLE_FORCING'] = 'YES' + self.nens = 32 # for now, hardwire nens for atm ens + else : + exit("Error. Unknown value of self.ladas_cpl.\n") + self.rqdExeInp['NUM_LDAS_ENSEMBLE'] = self.nens + self.first_ens_id = 1 + self.rqdExeInp['FIRST_ENS_ID'] = self.first_ens_id + self.rqdExeInp['EXP_DOMAIN'] = 'CF'+ self.agcm_res +'x6C_GLOBAL' + + # when coupled to ADAS, "BCS_PATH" EXCLUDE bcs version info + # hard-wired BCS_PATH for now + self.rqdExeInp['BCS_PATH'] = "/discover/nobackup/projects/gmao/bcs_shared/fvInput/ExtData/esm/tiles" + self.rqdExeInp['BCS_PATH'] = self.rqdExeInp['BCS_PATH'].rstrip('/') + '/' + self.bcs_version + if self.bcs_version == "Icarus-NLv3" : + self.rqdExeInp['BCS_PATH'] = self.rqdExeInp['BCS_PATH'] + '_new_layout' + self.rqdExeInp['BCS_RESOLUTION'] = 'CF'+ self.agcm_res +'x6C_CF' + self.agcm_res +'x6C' + self.rqdExeInp['RESTART_DOMAIN'] = 'CF'+ self.agcm_res +'x6C_GLOBAL' + + # the following are not in default rqdExeInp list; hardwire for now + self.rqdExeInp['LAND_ASSIM'] = "YES" + self.rqdExeInp['MET_HINTERP'] = 0 + self.landassim_dt = 10800 # seconds + # make sure ADAS analysis window [minutes] is multiple of LANDASSIM_DT [seconds] + if int(self.varwindow) % (self.landassim_dt/60) == 0 : + self.rqdExeInp['LANDASSIM_DT'] = self.landassim_dt + else : + exit("Error. LANDASSIM_DT is inconsistent with ADAS analysis window.\n") + self.rqdExeInp['LANDASSIM_T0'] = "013000" # HHMMSS + jsgmt1 = "00000000" + jsgmt2 = hours_to_hhmmss(int(self.varwindow)/60) # convert minutes to HHMMSS + self.rqdExeInp['JOB_SGMT'] = f"{jsgmt1} {jsgmt2}" + self.rqdExeInp['NUM_SGMT'] = 1 + self.rqdExeInp['FORCE_DTSTEP'] = 3600 + + # determine END_DATE = BEG_DATE + TIME_STEP_OF_ADAS_CYCLE + _beg_date = datetime.strptime( self.rqdExeInp['BEG_DATE'], "%Y%m%d %H%M%S") + _hours = int(self.rqdExeInp['JOB_SGMT'][ 9:11]) + _end_date = _beg_date + timedelta(hours=int(self.varwindow)/60) + + self.rqdExeInp['END_DATE'] = _end_date.strftime("%Y%m%d %H%M%S") + self.rqdExeInp['NML_INPUT_PATH'] = self.LDAS_nml_path + self.rqdExeInp['MWRTM_PATH'] = self.mwrtm_path + + # end if self.ladas_cpl > 0 for key in rqdExeInpKeys : - assert key in self.rqdExeInp,' "%s" is required in the input file %s' % (key,self.exeinpfile) - if cmdLineArgs['nymdb'] != 'None' and cmdLineArgs['nhmsb'] != 'None' : - self.date = f"{self.nymdb} {self.nhmsb}" - self.rqdExeInp[ 'BEG_DATE' ] = self.date + assert key in self.rqdExeInp,' "%s" is required in the input file %s' % (key,self.exeinpfile) - # print rqd exe inputs - if self.verbose: - print ('\nInputs from execfile:\n') + # print rqd exe inputs + if self.verbose: + print ('\nInputs from exeinp file:\n') _printdict(self.rqdExeInp) self.tile_types = self.rqdExeInp.get('TILE_TYPES',"100").split() @@ -170,25 +281,13 @@ class LDASsetup: self.with_landice = True # nens is an integer and =1 for model run - self.nens = int(self.rqdExeInp['NUM_LDAS_ENSEMBLE']) # fail if Nens's val is not int + self.nens = int(self.rqdExeInp['NUM_LDAS_ENSEMBLE']) # fail if Nens's val is not int assert self.nens>0, 'NUM_LDAS_ENSEMBLE [%d] <= 0' % self.nens _mydir = self.exphome + '/' + self.rqdExeInp['EXP_ID'] assert not os.path.isdir(_mydir), 'Dir [%s] already exists!' % _mydir _mydir = None - self.ladas_coupling = int(self.rqdExeInp.get('LADAS_COUPLING',0)) - self.adas_expdir ='' - if self.ladas_coupling > 0 : - self.adas_expdir = os.path.dirname(self.exphome) - self.rqdExeInp[ 'ADAS_EXPDIR'] = self.adas_expdir - self.adas_expid = os.path.basename(self.adas_expdir) - self.rqdExeInp[ 'MET_TAG' ] = self.adas_expid + '__bkg' - if self.ladas_coupling == 1 : - self.rqdExeInp[ 'EXP_ID' ] = self.adas_expid + '_LDAS' - if self.ladas_coupling == 2 : - self.rqdExeInp[ 'EXP_ID' ] = self.adas_expid + '_LDAS4ens' - self.rqdExeInp[ 'MET_PATH' ] = self.adas_expdir +'/atmens/mem' - self.first_ens_id = int(self.rqdExeInp.get('FIRST_ENS_ID',0)) + self.perturb = int(self.rqdExeInp.get('PERTURBATIONS',0)) if self.nens > 1: self.perturb = 1 @@ -196,7 +295,7 @@ class LDASsetup: # if self.ens_id_width = 4, _width = '_e%04d' _width = '_e%0{}d'.format(self.ens_id_width-2) # self.ensids will be a list of [_e0000, _e0001, ...] - self.ensids = [ _width%iens for iens in range(self.first_ens_id, self.nens + self.first_ens_id)] + self.ensids = [ _width%iens for iens in range(self.first_ens_id, self.nens + self.first_ens_id)] if (self.nens == 1) : self.ensdirs_avg = self.ensdirs self.ensids=[''] @@ -245,25 +344,18 @@ class LDASsetup: if 'NUM_SGMT' not in self.rqdExeInp: self.rqdExeInp['NUM_SGMT'] = 1 - # hard set NUM_SGMT and NUM_SGMT - if (self.ladas_coupling > 0) : - if int(self.rqdExeInp['NUM_SGMT']) != 1 : - sys.exit("'NUM_SGMT' should be set to 1 with LADAS_COUPLING") - if self.rqdExeInp['JOB_SGMT'] != "00000000 060000" : - sys.exit("'JOB_SGMT' should be set to 00000000 060000 with LADAS_COUPLING") - - _years = int(self.rqdExeInp['JOB_SGMT'][0:4]) - _months = int(self.rqdExeInp['JOB_SGMT'][4:6]) - _days = int(self.rqdExeInp['JOB_SGMT'][6:8]) + + _years = int(self.rqdExeInp['JOB_SGMT'][ 0: 4]) + _months = int(self.rqdExeInp['JOB_SGMT'][ 4: 6]) + _days = int(self.rqdExeInp['JOB_SGMT'][ 6: 8]) assert self.rqdExeInp['JOB_SGMT'][8] == ' ' and self.rqdExeInp['JOB_SGMT'][9] != ' ', "JOB_SGMT format is not right" - _hours = int(self.rqdExeInp['JOB_SGMT'][9:11]) + _hours = int(self.rqdExeInp['JOB_SGMT'][ 9:11]) _mins = int(self.rqdExeInp['JOB_SGMT'][11:13]) _seconds= int(self.rqdExeInp['JOB_SGMT'][13:15]) _difftime =timedelta(days = _years*365+_months*30+_days,hours = _hours,minutes=_mins,seconds=_seconds) _difftime = int(self.rqdExeInp['NUM_SGMT'])*_difftime - print (int(self.rqdExeInp['NUM_SGMT'])) _d = self.begDates[0] _endDate = self.endDates[0] _d = _d + _difftime @@ -275,11 +367,12 @@ class LDASsetup: self.endDates.insert(-1,_d) _d = _d+ _difftime - # make sure path is path - self.bcs_land = self.rqdExeInp['BCS_PATH']+ '/land/' + self.rqdExeInp['BCS_RESOLUTION']+'/' - self.bcs_geom = self.rqdExeInp['BCS_PATH']+ '/geometry/' + self.rqdExeInp['BCS_RESOLUTION']+'/' - self.bcs_landshared = self.rqdExeInp['BCS_PATH']+ '/land/shared/' + # assemble bcs sub-directories + self.bcs_dir_land = self.rqdExeInp['BCS_PATH']+ '/land/' + self.rqdExeInp['BCS_RESOLUTION']+'/' + self.bcs_dir_geom = self.rqdExeInp['BCS_PATH']+ '/geometry/' + self.rqdExeInp['BCS_RESOLUTION']+'/' + self.bcs_dir_landshared = self.rqdExeInp['BCS_PATH']+ '/land/shared/' + # make sure MET_PATH and RESTART_PATH have trailing '/' if self.rqdExeInp['MET_PATH'][-1] != '/': self.rqdExeInp['MET_PATH'] = self.rqdExeInp['MET_PATH']+'/' if self.rqdExeInp['RESTART_PATH'][-1] != '/': @@ -287,7 +380,7 @@ class LDASsetup: # make sure catchment and vegdyn restart files ( at least one for each) exist if 'CATCH_DEF_FILE' not in self.rqdExeInp : - self.rqdExeInp['CATCH_DEF_FILE']= self.bcs_land + 'clsm/catchment.def' + self.rqdExeInp['CATCH_DEF_FILE']= self.bcs_dir_land + 'clsm/catchment.def' if (self.with_land) : assert os.path.isfile(self.rqdExeInp['CATCH_DEF_FILE']),"[%s] file does not exist " % self.rqdExeInp['CATCH_DEF_FILE'] @@ -309,30 +402,30 @@ class LDASsetup: self.rqdExeInp['LNFM_FILE'] = '' tile_file_format = self.rqdExeInp.get('TILE_FILE_FORMAT', 'DEFAULT') if int(self.rqdExeInp['RST_FROM_GLOBAL']) == 1 : - txt_tile = glob.glob(self.bcs_geom + '*.til') - nc4_tile = glob.glob(self.bcs_geom + '*.nc4') - if tile_file_format.upper() == 'TXT' : self.rqdExeInp['TILING_FILE'] = txt_tile[0] + txt_tile = glob.glob(self.bcs_dir_geom + '*.til') + nc4_tile = glob.glob(self.bcs_dir_geom + '*.nc4') + if tile_file_format.upper() == 'TXT' : self.rqdExeInp['TILING_FILE'] = txt_tile[0] if tile_file_format.upper() == 'DEFAULT' : self.rqdExeInp['TILING_FILE'] = (txt_tile+nc4_tile)[-1] - self.rqdExeInp['GRN_FILE']= glob.glob(self.bcs_land + 'green_clim_*.data')[0] - self.rqdExeInp['LAI_FILE']= glob.glob(self.bcs_land + 'lai_clim_*.data')[0] - tmp_ = glob.glob(self.bcs_land + 'lnfm_clim_*.data') + self.rqdExeInp['GRN_FILE'] = glob.glob(self.bcs_dir_land + 'green_clim_*.data')[0] + self.rqdExeInp['LAI_FILE'] = glob.glob(self.bcs_dir_land + 'lai_clim_*.data' )[0] + tmp_ = glob.glob(self.bcs_dir_land + 'lnfm_clim_*.data') if (len(tmp_) ==1) : self.rqdExeInp['LNFM_FILE'] = tmp_[0] - self.rqdExeInp['NDVI_FILE'] = glob.glob(self.bcs_land + 'ndvi_clim_*.data')[0] - self.rqdExeInp['NIRDF_FILE']= glob.glob(self.bcs_land + 'nirdf_*.dat')[0] - self.rqdExeInp['VISDF_FILE']= glob.glob(self.bcs_land + 'visdf_*.dat')[0] + self.rqdExeInp['NDVI_FILE'] = glob.glob(self.bcs_dir_land + 'ndvi_clim_*.data' )[0] + self.rqdExeInp['NIRDF_FILE'] = glob.glob(self.bcs_dir_land + 'nirdf_*.dat' )[0] + self.rqdExeInp['VISDF_FILE'] = glob.glob(self.bcs_dir_land + 'visdf_*.dat' )[0] else : inpdir=self.rqdExeInp['RESTART_PATH']+self.rqdExeInp['RESTART_ID']+'/input/' - self.rqdExeInp['TILING_FILE'] =os.path.realpath(glob.glob(inpdir+'*tile.data')[0]) - self.rqdExeInp['GRN_FILE']= os.path.realpath(glob.glob(inpdir+'green*data')[0]) - self.rqdExeInp['LAI_FILE']= os.path.realpath(glob.glob(inpdir+'lai*data')[0]) - tmp_ = glob.glob(self.bcs_land + 'lnfm_clim_*.data') + self.rqdExeInp['TILING_FILE'] = os.path.realpath(glob.glob(inpdir+'*tile.data')[0]) + self.rqdExeInp['GRN_FILE'] = os.path.realpath(glob.glob(inpdir+'green*data')[0]) + self.rqdExeInp['LAI_FILE'] = os.path.realpath(glob.glob(inpdir+'lai*data' )[0]) + tmp_ = glob.glob(self.bcs_dir_land + 'lnfm_clim_*.data') if (len(tmp_) == 1) : self.rqdExeInp['LNFM_FILE'] = tmp_[0] - self.rqdExeInp['NDVI_FILE']= os.path.realpath(glob.glob(inpdir+'ndvi*data')[0]) - self.rqdExeInp['NIRDF_FILE']= os.path.realpath(glob.glob(inpdir+'nirdf*data')[0]) - self.rqdExeInp['VISDF_FILE']= os.path.realpath(glob.glob(inpdir+'visdf*data')[0]) + self.rqdExeInp['NDVI_FILE'] = os.path.realpath(glob.glob(inpdir+'ndvi*data' )[0]) + self.rqdExeInp['NIRDF_FILE'] = os.path.realpath(glob.glob(inpdir+'nirdf*data')[0]) + self.rqdExeInp['VISDF_FILE'] = os.path.realpath(glob.glob(inpdir+'visdf*data')[0]) if self.rqdExeInp['RESTART'].isdigit() : if int(self.rqdExeInp['RESTART']) == 2 : @@ -353,21 +446,20 @@ class LDASsetup: self.in_tilefile =os.path.realpath(in_tilefiles_[0]) if os.path.isfile(ldas_domain): - _numd = int(linecache.getline(ldas_domain, 1).strip()) - txt_tile = glob.glob(self.bcs_geom + '*.til') - nc4_tile = glob.glob(self.bcs_geom + '*.nc4') + txt_tile = glob.glob(self.bcs_dir_geom + '*.til') + nc4_tile = glob.glob(self.bcs_dir_geom + '*.nc4') if tile_file_format.upper() == 'TXT' : self.rqdExeInp['TILING_FILE'] = txt_tile[0] if tile_file_format.upper() == 'DEFAULT' : self.rqdExeInp['TILING_FILE'] = (txt_tile+nc4_tile)[-1] - self.rqdExeInp['GRN_FILE']= glob.glob(self.bcs_land + 'green_clim_*.data')[0] - self.rqdExeInp['LAI_FILE']= glob.glob(self.bcs_land + 'lai_clim_*.data')[0] - tmp_ = glob.glob(self.bcs_land + 'lnfm_clim_*.data') + self.rqdExeInp['GRN_FILE'] = glob.glob(self.bcs_dir_land + 'green_clim_*.data')[0] + self.rqdExeInp['LAI_FILE'] = glob.glob(self.bcs_dir_land + 'lai_clim_*.data' )[0] + tmp_ = glob.glob(self.bcs_dir_land + 'lnfm_clim_*.data') if (len(tmp_) == 1) : self.rqdExeInp['LNFM_FILE'] = tmp_[0] - self.rqdExeInp['LNFM_FILE'] = glob.glob(self.bcs_land + 'lnfm_clim_*.data')[0] - self.rqdExeInp['NDVI_FILE'] = glob.glob(self.bcs_land + 'ndvi_clim_*.data')[0] - self.rqdExeInp['NIRDF_FILE']= glob.glob(self.bcs_land + 'nirdf_*.dat')[0] - self.rqdExeInp['VISDF_FILE']= glob.glob(self.bcs_land + 'visdf_*.dat')[0] + self.rqdExeInp['LNFM_FILE'] = glob.glob(self.bcs_dir_land + 'lnfm_clim_*.data' )[0] + self.rqdExeInp['NDVI_FILE'] = glob.glob(self.bcs_dir_land + 'ndvi_clim_*.data' )[0] + self.rqdExeInp['NIRDF_FILE'] = glob.glob(self.bcs_dir_land + 'nirdf_*.dat' )[0] + self.rqdExeInp['VISDF_FILE'] = glob.glob(self.bcs_dir_land + 'visdf_*.dat' )[0] if 'GRIDNAME' not in self.rqdExeInp : tmptile = os.path.realpath(self.rqdExeInp['TILING_FILE']) @@ -395,9 +487,6 @@ class LDASsetup: if 'POSTPROC_HIST' not in self.rqdExeInp: self.rqdExeInp['POSTPROC_HIST'] = 0 - if 'LADAS_COUPLING' not in self.rqdExeInp: - self.rqdExeInp['LADAS_COUPLING'] = 0 - if 'RUN_IRRIG' not in self.rqdExeInp: self.rqdExeInp['RUN_IRRIG'] = 0 @@ -472,8 +561,6 @@ class LDASsetup: self.in_tilefile = '/discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus-NLv3/Icarus-NLv3_EASE/SMAP_EASEv2_M36/SMAP_EASEv2_M36_964x406.til' else: sys.exit('need to provide at least dummy files') - self.in_rstfile = None - self.in_tilefile = None # DEAL WITH mwRTM input from exec self.assim = True if self.rqdExeInp.get('LAND_ASSIM', 'NO').upper() == 'YES' and self.with_land else False @@ -492,7 +579,6 @@ class LDASsetup: self.has_vegopacity = True self.rqdExeInp['VEGOPACITY_FILE'] = vegopacity_file_ - # DEAL WITH optional input from exec # ------ # Read rm input file @@ -502,40 +588,43 @@ class LDASsetup: # ------ # re-using inpDictFromFile - inpDictFromFile = self._parseInputFile(cmdLineArgs['batinpfile']) - - # REQUIRED inputs - for key in rqdRmInpKeys: - self.rqdRmInp[key] = inpDictFromFile.pop(key) - - # checks on rqd rm inputs - ## account and walltime should exist - assert self.rqdRmInp['account'] - if cmdLineArgs['account'] != 'None': - self.rqdRmInp['account'] = cmdLineArgs['account'] - assert self.rqdRmInp['walltime'] - ## ntasks_model is a +ve integer - _ntasks = int(self.rqdRmInp['ntasks_model']) - assert _ntasks>0 - self.rqdRmInp['ntasks_model'] = _ntasks - _ntasks = None - - # print rqd rm inputs - if self.verbose: - print ('\n\nRequired inputs for resource manager:') - _printdict(self.rqdRmInp) - - # OPTIONAL inputs - for key in inpDictFromFile: - assert key in optSlurmInpKeys, \ + if self.ladas_cpl == 0 : + inpDictFromFile = self._parseInputFile(cmdLineArgs['batinpfile']) + # REQUIRED inputs + for key in rqdRmInpKeys: + self.rqdRmInp[key] = inpDictFromFile.pop(key) + + # checks on rqd rm inputs + ## account and walltime should exist + assert self.rqdRmInp['account'] + assert self.rqdRmInp['walltime'] + ## ntasks_model is a +ve integer + _ntasks = int(self.rqdRmInp['ntasks_model']) + assert _ntasks>0 + self.rqdRmInp['ntasks_model'] = _ntasks + _ntasks = None + + # OPTIONAL inputs + for key in inpDictFromFile: + assert key in optSlurmInpKeys, \ 'unknown resource manager key [%s]' % key - self.optRmInp[key] = inpDictFromFile[key] + self.optRmInp[key] = inpDictFromFile[key] + else : + self.rqdRmInp['account'] = cmdLineArgs['account'] + self.rqdRmInp['walltime'] = "01:00:00" + self.rqdRmInp['ntasks_model'] = 120 + self.rqdRmInp['ntasks-per-node'] = 46 # 46 works on Cascade Lake and Milan + + - # print opt rm inputs + # print rm inputs if self.verbose: + print ('\n\nRequired inputs for resource manager:') + _printdict(self.rqdRmInp) print ('\n\nOptional inputs for resource manager:') _printdict(self.optRmInp) - + print ('\n\n') + # ------ # set top level directories # rundir, inpdir, outdir, blddir @@ -581,7 +670,11 @@ class LDASsetup: else: self.optRmInp['writers-per-node'] = 0 - + + # end __init__ + + # ----------------------------------------------------------------------------------- + def _parseInputFile(self, inpfile): """ Private method: parse input file and return a dict of options @@ -592,6 +685,12 @@ class LDASsetup: inpdict = OrderedDict() errstr = "line [%d] of [%s] is not in the form 'key: value'" + # determine which default values to pick from GEOS_SurfaceGridComp.rc + if self.ladas_cpl == 0 : + use_rc_defaults = 'GEOSldas=>' # use defaults for LDAS + else : + use_rc_defaults = 'GEOSagcm=>' # use defaults for AGCM + fin = open(inpfile, 'r') linenum = 0 for line in fin: @@ -599,12 +698,14 @@ class LDASsetup: line = line.strip() # blank line if not line: - continue - if '"GEOSldas=>"' in line: - continue - # get "GEOSldas=>" default in GEOS_LandGrid.rc - if 'GEOSldas=>' in line: - line = line.split('GEOSldas=>')[1] + continue + if '"GEOSagcm=>"' in line: # echo lines that contain "GEOSagcm=>" (w/ quotation marks) [GEOS_SurfaceGridComp.rc] + continue + if '"GEOSldas=>"' in line: # echo lines that contain "GEOSldas=>" (w/ quotation marks) [GEOS_SurfaceGridComp.rc] + continue + # get 'GEOSldas=>' or 'GEOSagcm=>' defaults in GEOS_SurfaceGridComp.rc + if use_rc_defaults in line: + line = line.split(use_rc_defaults)[1] # handle comments position = line.find('#') if position==0: # comment line @@ -612,7 +713,7 @@ class LDASsetup: if position>0: # strip out comment line = line[:position] # we expect a line to be of the form - # key = value + # key : value assert ':' in line, errstr % (linenum, inpfile) key, val = line.split(':',1) @@ -629,7 +730,8 @@ class LDASsetup: return inpdict - + # ----------------------------------------------------------------------------------- + def _mkdir_p(self,path): """ Private method: implement 'mkdir -p' functionality @@ -640,6 +742,8 @@ class LDASsetup: else: os.makedirs(path) + # ----------------------------------------------------------------------------------- + def createDirStructure(self): """ Create required dir structure @@ -705,7 +809,9 @@ class LDASsetup: status = True return status - # create link, BCs , restarts + # ----------------------------------------------------------------------------------- + + # create links to BCs, restarts, met forcing, ... def createLnRstBc(self) : # link bld dir status = False @@ -838,7 +944,7 @@ class LDASsetup: os.symlink(bc,myBC) if ("catchcn" in self.catch): - os.symlink(self.bcs_landshared + 'CO2_MonthlyMean_DiurnalCycle.nc4', \ + os.symlink(self.bcs_dir_landshared + 'CO2_MonthlyMean_DiurnalCycle.nc4', \ self.inpdir+'/CO2_MonthlyMean_DiurnalCycle.nc4') # create and link restart @@ -965,16 +1071,16 @@ class LDASsetup: if self.rqdExeInp['RESTART'].isdigit() : if int(self.rqdExeInp['RESTART']) == 0 or int(self.rqdExeInp['RESTART']) == 2 : - vegdynRstFile = glob.glob(self.bcs_land + 'vegdyn_*.dat')[0] + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] else : # RESTART == 1 catchRstFile = rstpath+ensdir +'/'+ y4m2+'/'+self.rqdExeInp['RESTART_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 vegdynRstFile= rstpath+ensdir +'/'+self.rqdExeInp['RESTART_ID']+ '.vegdyn_internal_rst' if not os.path.isfile(vegdynRstFile): # no vegdyn restart from LDASsa if not os.path.isfile(vegdynRstFile0): - vegdynRstFile = glob.glob(self.bcs_land + 'vegdyn_*.dat')[0] - else: - vegdynRstFile = glob.glob(self.bcs_land + 'vegdyn_*.dat')[0] + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] + else : + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] if self.with_land: catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] @@ -1086,6 +1192,8 @@ class LDASsetup: status = True return status + # ----------------------------------------------------------------------------------- + def createRCFiles(self): """ (1) get resource files form DEFAULT rc files from /etc @@ -1099,27 +1207,30 @@ class LDASsetup: assert os.path.isdir(mydir), \ 'dir [%s] does not exist!' % mydir - # first copy ldsetup input files to rundir - # if a file w/ the same name already exists at rundir - # append 1,2,3 etc, to the filename - ## exe inp file - exefilename = self.exeinpfile.rstrip('/').split('/')[-1] - newfilename = exefilename - _nens = self.nens - ctr = 0 - while os.path.isfile(self.rundir+'/'+newfilename): - ctr += 1 - newfilename = exefilename + '.%d' % ctr - shutil.copy(self.exeinpfile, self.rundir+'/'+newfilename) - ## bat inp file - batfilename = self.batinpfile.rstrip('/').split('/')[-1] - newfilename = batfilename - ctr = 0 - while os.path.isfile(self.rundir+'/'+newfilename): - ctr += 1 - newfilename = batfilename + '.%d' % ctr - shutil.copy(self.batinpfile, self.rundir+'/'+newfilename) - + if self.ladas_cpl == 0: + # copy ldas_setup exeinp and batinp input files to rundir (for the record) + # if a file w/ the same name already exists at rundir + # append 1,2,3 etc, to the filename + ## exe inp file + exefilename = self.exeinpfile.rstrip('/').split('/')[-1] + newfilename = exefilename + _nens = self.nens + ctr = 0 + while os.path.isfile(self.rundir+'/'+newfilename): + ctr += 1 + newfilename = exefilename + '.%d' % ctr + shutil.copy(self.exeinpfile, self.rundir+'/'+newfilename) + ## bat inp file + batfilename = self.batinpfile.rstrip('/').split('/')[-1] + newfilename = batfilename + ctr = 0 + while os.path.isfile(self.rundir+'/'+newfilename): + ctr += 1 + newfilename = batfilename + '.%d' % ctr + shutil.copy(self.batinpfile, self.rundir+'/'+newfilename) + + # ----------------------------------- + etcdir = self.blddirLn + '/etc' #defalt nml @@ -1131,6 +1242,9 @@ class LDASsetup: special_nml=[] if 'NML_INPUT_PATH' in self.rqdExeInp : special_nml = glob.glob(self.rqdExeInp['NML_INPUT_PATH']+'/LDASsa_SPECIAL_inputs_*.nml') + if self.ladas_cpl > 0: + special_nml = glob.glob(self.rqdExeInp['NML_INPUT_PATH']+'/'+ self.rqdExeInp['EXP_DOMAIN'] + '/LDASsa_SPECIAL_inputs_*.nml') + for nmlfile in special_nml: shortfile=nmlfile.split('/')[-1] shutil.copy2(nmlfile, self.rundir+'/'+shortfile) @@ -1187,16 +1301,8 @@ class LDASsetup: for line in fileinput.input(tmprcfile,inplace=True): print (line.rstrip().replace('GEOSldas_expid',self.rqdExeInp['EXP_ID'])) - # take HISTdet or HISTens if ladas - if shortfile =='HISTdet.rc' and self.ladas_coupling == 1 : - tmprcfile=self.rundir+'/HISTORY.rc' - histrc_file=rcfile - shutil.copy2(rcfile, tmprcfile) - for line in fileinput.input(tmprcfile,inplace=True): - print (line.rstrip().replace('GEOSldas_expid',self.rqdExeInp['EXP_ID'])) - for line in fileinput.input(tmprcfile,inplace=True): - print (line.rstrip().replace('GRIDNAME',self.rqdExeInp['GRIDNAME'])) - if shortfile =='HISTens.rc' and self.ladas_coupling == 2 : + # if coupled land-atm DAS, always use either GEOSldas_HISTdet.rc or GEOSldas_HISTens.rc (depending on ladas_cpl) + if ( shortfile =='HISTdet.rc' and self.ladas_cpl == 1 ) or ( shortfile =='HISTens.rc' and self.ladas_cpl == 2 ): tmprcfile=self.rundir+'/HISTORY.rc' histrc_file=rcfile shutil.copy2(rcfile, tmprcfile) @@ -1220,7 +1326,7 @@ class LDASsetup: for line in fileinput.input(tmprcfile,inplace=True): print (line.rstrip().replace('NUM_SGMT:','NUM_SGMT: %d'% _num_sgmt)) for line in fileinput.input(tmprcfile,inplace=True): - print (line.rstrip().replace('BEG_DATE:',self.begDates[0].strftime('BEG_DATE: %Y%m%d %H%M%S'))) + print (line.rstrip().replace('BEG_DATE:',self.begDates[ 0].strftime('BEG_DATE: %Y%m%d %H%M%S'))) for line in fileinput.input(tmprcfile,inplace=True): print (line.rstrip().replace('END_DATE:',self.endDates[-1].strftime('END_DATE: %Y%m%d %H%M%S'))) @@ -1365,6 +1471,8 @@ class LDASsetup: status=True return status + # ----------------------------------------------------------------------------------- + def createBatchRun(self): """ """ @@ -1420,7 +1528,8 @@ class LDASsetup: status = True return status - + # ----------------------------------------------------------------------------------- + def createRunScripts(self): """ """ @@ -1493,7 +1602,7 @@ class LDASsetup: MY_LANDMODEL = self.catch, MY_POSTPROC_HIST = str(self.rqdExeInp['POSTPROC_HIST']), MY_FIRST_ENS_ID = str(self.first_ens_id), - MY_LADAS_COUPLING = str(self.ladas_coupling), + MY_LADAS_COUPLING = str(self.ladas_cpl), MY_ENSEMBLE_FORCING= self.rqdExeInp.get('ENSEMBLE_FORCING', 'NO').upper(), MY_ADAS_EXPDIR = self.adas_expdir, MY_EXPDIR = self.expdir, @@ -1509,6 +1618,8 @@ class LDASsetup: status = True return status +# ----------------------------------------------------------------------------------- + def _printdict(d): """ Private method: print a 'flat' dictionary @@ -1517,206 +1628,213 @@ def _printdict(d): for key, val in d.items(): print (key.ljust(23), ':', val) -def _printExeInputKeys(rqdExeInpKeys): +# ----------------------------------------------------------------------------------- + +def _produceExeInput(out_dict=None,ladas_cpl=0): """ - Private method: print sample exe input + Private method: (1) Print sample exeinp file to stdout for offline GEOSldas setup: + _produceExeInput(). + *or* + (2) Create dictionary w/ default parameters from GEOSldas_LDAS.rc and + GEOS_SurfaceGridComp.rc for coupled land-atm DAS setup: + _produceExeInput(out_dict, ladas_cpl=[1,2]). """ - - print ('####################################################################################') - print ('# #') - print ('# REQUIRED INPUTS #') - print ('# #') - print ('# These inputs are needed to set up output dir structure. #') - print ('# #') - print ('####################################################################################') - print () - print ('############################################################') - print ('# #') - print ('# EXPERIMENT INFO #') - print ('# #') - print ('# Format for start/end times is yyyymmdd hhmmss. #') - print ('# #') - print ('############################################################') - print () - print ('EXP_ID:') - print ('EXP_DOMAIN:') - print ('NUM_LDAS_ENSEMBLE:') - print ('BEG_DATE:') - print ('END_DATE:') - print () - print ('############################################################') - print ('# #') - print ('# RESTART INFO #') - print ('# #') - print ('# (i) Select "RESTART" option: #') - print ('# #') - print ('# Use one of the following options if you *have* a #') - print ('# GEOSldas restart file: #') - print ('# #') - print ('# RESTART: 1 #') - print ('# YES, have restart file from GEOSldas #') - print ('# in SAME tile space (grid) with SAME boundary #') - print ('# conditions and SAME snow model parameter (WEMIN). #') - print ('# The restart domain can be for the same or #') - print ('# a larger one. #') - print ('# #') - print ('# RESTART: 2 #') - print ('# YES, have restart file from GEOSldas but #') - print ('# in a DIFFERENT tile space (grid) or with #') - print ('# DIFFERENT boundary conditions or DIFFERENT snow #') - print ('# model parameter (WEMIN). #') - print ('# Restart *must* be for the GLOBAL domain. #') - print ('# #') - print ('# Use one of the following options if you DO NOT have a #') - print ('# GEOSldas restart file #') - print ('# (works for global domain ONLY!): #') - print ('# #') - print ('# RESTART: 0 #') - print ('# Cold start from some old restart for Jan 1, 0z. #') - print ('# #') - print ('# RESTART: M #') - print ('# Re-tile from archived MERRA-2 restart file. #') - print ('# #') - print ('# -------------------------------------------------------- #') - print ('# IMPORTANT: #') - print ('# Except for RESTART=1, SPIN-UP is REQUIRED in almost #') - print ('# all cases. #') - print ('# -------------------------------------------------------- #') - print ('# #') - print ('# #') - print ('# (ii) Specify experiment ID/location of restart file: #') - print ('# #') - print ('# For RESTART=1 or RESTART=2: #') - print ('# Specify RESTART_ID, RESTART_PATH, RESTART_DOMAIN with #') - print ('# restarts stored as follows: #') - print ('# RESTART_PATH/RESTART_ID/output/RESTART_DOMAIN/rs/ #') - print ('# #') - print ('# For RESTART=0 or RESTART=M: #') - print ('# There is no need to specify RESTART_ID, RESTART_PATH, #') - print ('# and RESTART_DOMAIN. #') - print ('# #') - print ('############################################################') - print () - print ('RESTART:') - print ('#RESTART_ID:') - print ('#RESTART_PATH:') - print ('#RESTART_DOMAIN:') - print () - print ('############################################################') - print ('# #') - print ('# SURFACE METEOROLOGICAL FORCING #') - print ('# #') - print ('# Surface meteorological forcing time step is in seconds. #') - print ('# #') - print ('# NOTE: #') - print ('# When forcing is on cube-sphere (CS) grid, must use: #') - print ('# - Model tile space (BCS) derived from same CS grid. #') - print ('# - Nearest-neighbor interpolation (MET_HINTERP: 0). #') - print ('# #') - print ('# For more information, see: #') - print ('# GEOSldas/doc/README.MetForcing_and_BCS.md #') - print ('# #') - print ('############################################################') - print () - print ('MET_TAG:') - print ('MET_PATH:') - print ('FORCE_DTSTEP:') - print () - print ('############################################################') - print ('# #') - print ('# LAND BOUNDARY CONDITIONS (BCS) #') - print ('# #') - print ('# Path to and (atmospheric) resolution of BCS. #') - print ('# #') - print ('# For more information, see: #') - print ('# GEOSldas/doc/README.MetForcing_and_BCS.md #') - print ('# [..]/GEOSsurface_GridComp/Utils/Raster/make_bcs #') - print ('# #') - print ('############################################################') - print () - print ('BCS_PATH:') - print ('BCS_RESOLUTION:') - print () - print ('############################################################') - print ('# #') - print ('# LADAS COUPLING #') - print ('# #') - print ('# Coupling of LDAS to ADAS ("LADAS"): #') - print ('# #') - print ('# 0 -- LDAS not coupled with ADAS (default) #') - print ('# 1 -- LDAS coupled with central member of ADAS #') - print ('# 2 -- LDAS coupled with ens component of ADAS #') - print ('# #') - print ('# Requirements for LADAS_COUPLING > 0: #') - print ('# #') - print ('# (0) Specify ADAS_EXPDIR = [full_path]/[ADAS_EXPID] #') - print ('# #') - print ('# (1) BEG_DATE must be consistent with first cycle date #') - print ('# and time of ADAS experiment (time is typically #') - print ('# 3z, 9z, 15z, or 21z) #') - print ('# #') - print ('# (2) EXP_DOMAIN must be global CS grid as in ADAS exp #') - print ('# #') - print ('# (3) MET_TAG must be set to [ADAS_EXPID]__bkg #') - print ('# MET_PATH must be set as follows for #') - print ('# LADAS_COUPLING = 1: #') - print ('# ../../../../recycle/holdpredout/ #') - print ('# LADAS_COUPLING = 2: #') - print ('# [ADAS_EXPDIR]/atmens/mem #') - print ('# #') - print ('# (4) BCS_PATH must be consistent with that of #') - print ('# [ADAS_EXPDIR][/run/lnbcs #') - print ('# #') - print ('# (5) JOB_SGMT must match ADAS analysis window #') - print ('# (typically 6h) #') - print ('# #') - print ('# (6) NUM_SGMT must be set to 1 #') - print ('# #') - print ('# (7) HISTORY: #') - print ('# - instantaneous "catch_progn_incr" must be in #') - print ('# HISTORY collection #') - print ('# - time step must match that of LDAS analysis #') - print ('# - for LADAS_COUPLING=2, HISTORY must include #') - print ('# "catch_progn_incr[ENS_INDEX]" #') - print ('# #') - print ('############################################################') - print () - print ('LADAS_COUPLING: 0') - print () - print () - - _fn = '../etc/GEOSldas_LDAS.rc' # run ldas_setup from /bin directory - + + if ladas_cpl > 0: + assert out_dict is not None , " Need out_dict to hold the default parameters" + + # stand-alone (offline) LDAS: + # sample exeinp file includes placeholders for inputs that the user needs to provide + if ladas_cpl == 0: + print ('####################################################################################') + print ('# #') + print ('# REQUIRED INPUTS #') + print ('# #') + print ('# These inputs are needed to set up output dir structure. #') + print ('# #') + print ('####################################################################################') + print () + print ('############################################################') + print ('# #') + print ('# EXPERIMENT INFO #') + print ('# #') + print ('# Format for start/end times is yyyymmdd hhmmss. #') + print ('# #') + print ('############################################################') + print () + print ('EXP_ID:') + print ('EXP_DOMAIN:') + print ('NUM_LDAS_ENSEMBLE:') + print ('BEG_DATE:') + print ('END_DATE:') + print () + print ('############################################################') + print ('# #') + print ('# RESTART INFO #') + print ('# #') + print ('# (i) Select "RESTART" option: #') + print ('# #') + print ('# Use one of the following options if you *have* a #') + print ('# GEOSldas restart file: #') + print ('# #') + print ('# RESTART: 1 #') + print ('# YES, have restart file from GEOSldas #') + print ('# in SAME tile space (grid) with SAME boundary #') + print ('# conditions and SAME snow model parameter (WEMIN). #') + print ('# The restart domain can be for the same or #') + print ('# a larger one. #') + print ('# #') + print ('# RESTART: 2 #') + print ('# YES, have restart file from GEOSldas but #') + print ('# in a DIFFERENT tile space (grid) or with #') + print ('# DIFFERENT boundary conditions or DIFFERENT snow #') + print ('# model parameter (WEMIN). #') + print ('# Restart *must* be for the GLOBAL domain. #') + print ('# #') + print ('# Use one of the following options if you DO NOT have a #') + print ('# GEOSldas restart file #') + print ('# (works for global domain ONLY!): #') + print ('# #') + print ('# RESTART: 0 #') + print ('# Cold start from some old restart for Jan 1, 0z. #') + print ('# #') + print ('# RESTART: M #') + print ('# Re-tile from archived MERRA-2 restart file. #') + print ('# #') + print ('# -------------------------------------------------------- #') + print ('# IMPORTANT: #') + print ('# Except for RESTART=1, SPIN-UP is REQUIRED in almost #') + print ('# all cases. #') + print ('# -------------------------------------------------------- #') + print ('# #') + print ('# #') + print ('# (ii) Specify experiment ID/location of restart file: #') + print ('# #') + print ('# For RESTART=1 or RESTART=2: #') + print ('# Specify RESTART_ID, RESTART_PATH, RESTART_DOMAIN with #') + print ('# restarts stored as follows: #') + print ('# RESTART_PATH/RESTART_ID/output/RESTART_DOMAIN/rs/ #') + print ('# #') + print ('# For RESTART=0 or RESTART=M: #') + print ('# There is no need to specify RESTART_ID, RESTART_PATH, #') + print ('# and RESTART_DOMAIN. #') + print ('# #') + print ('############################################################') + print () + print ('RESTART:') + print ('#RESTART_ID:') + print ('#RESTART_PATH:') + print ('#RESTART_DOMAIN:') + print () + print ('############################################################') + print ('# #') + print ('# SURFACE METEOROLOGICAL FORCING #') + print ('# #') + print ('# Surface meteorological forcing time step is in seconds. #') + print ('# #') + print ('# NOTE: #') + print ('# When forcing is on cube-sphere (CS) grid, must use: #') + print ('# - Model tile space (BCS) derived from same CS grid. #') + print ('# - Nearest-neighbor interpolation (MET_HINTERP: 0). #') + print ('# #') + print ('# For more information, see: #') + print ('# GEOSldas/doc/README.MetForcing_and_BCS.md #') + print ('# #') + print ('############################################################') + print () + print ('MET_TAG:') + print ('MET_PATH:') + print ('FORCE_DTSTEP:') + print () + print ('############################################################') + print ('# #') + print ('# LAND BOUNDARY CONDITIONS (BCS) #') + print ('# #') + print ('# Path to and (atmospheric) resolution of BCS. #') + print ('# Path includes BCS_VERSION. #') + print ('# #') + print ('# For more information, see: #') + print ('# GEOSldas/doc/README.MetForcing_and_BCS.md #') + print ('# [..]/GEOSsurface_GridComp/Utils/Raster/make_bcs #') + print ('# #') + print ('############################################################') + print () + print ('BCS_PATH:') + print ('BCS_RESOLUTION:') + print () + print ('############################################################') + + # end if ladas_cpl==0 + + # add defaults from rc template files + + current_directory = os.path.dirname(__file__) # path where ldas_setup is + + # rc template files are in [current_directory]/../etc/ + + # add defaults from GEOSldas_LDAS.rc + + _fn = current_directory+'/../etc/GEOSldas_LDAS.rc' + lines = [] with open(_fn) as _f: i_ = 1 for line in _f: - if ( i_ < 5 or i_ >10): # ignore lines 5-10 - may need to change if GEOSldas_LDAS.rc is edited - sys.stdout.write(line) - sys.stdout.flush() + if ( i_ < 5 or i_ >10): # ignore lines 5-10 - may need to change if GEOSldas_LDAS.rc is edited + if ladas_cpl == 0: + sys.stdout.write(line) + sys.stdout.flush() + else: + lines.append(line) i_ += 1 print () print () - _fn = '../etc/GEOS_SurfaceGridComp.rc' # run ldas_setup from /bin directory + # add land model parameter defaults from GEOS_SurfaceGridComp.rc + + _fn = current_directory+'/../etc/GEOS_SurfaceGridComp.rc' + if ladas_cpl == 0 : + use_rc_defaults = 'GEOSldas=>' # use defaults for LDAS + else : + use_rc_defaults = 'GEOSagcm=>' # use defaults for AGCM + with open(_fn) as _f : - i_ = 1 - for line in _f: - if ( 5<=i_ and i_<=21) : # ignore lines 5-21 - may need to change if GEOS_SurfaceGridComp.rc is edited + i_ = 1 + for line in _f: i_ +=1 - continue - if '"GEOSldas=>"' in line: - sys.stdout.write(line) - elif 'GEOSldas=>' in line: - line0 = line.split("GEOSldas=>")[1] - sys.stdout.write(line0) - elif not line.strip() or line.strip().startswith('#'): - sys.stdout.write(line) - sys.stdout.flush() - i_ += 1 + # skip over lines 5-21 (content does not apply after this processing) - may need to change if GEOS_SurfaceGridComp.rc is edited + if ( 5<=i_ and i_<=21 ) : + continue + if ladas_cpl == 0: + # process lines that contain string "use_rc_defaults" + if use_rc_defaults in line: + line0 = line.split(use_rc_defaults)[1] + sys.stdout.write(line0) + sys.stdout.flush() + # echo blank lines and comment lines (except if they contain 'GEOSldas=>' or 'GEOSagcm=>') + if (not 'GEOSldas=>' in line) and (not 'GEOSagcm=>' in line) : + if (not line.strip()) or line.strip().startswith('#') : + sys.stdout.write(line) + sys.stdout.flush() + else: + # process lines that contain string "use_rc_defaults" + if use_rc_defaults in line: + line0 = line.split(use_rc_defaults)[1] + # strip out inline comment (if present) + position = line0.find('#') + if position>0: + line0 = line0[:position] + # extract key/value pair and add to dictionary + key, val = line0.split(":",1) + out_dict[key.strip()] = val.strip() + + print () print () + +# ----------------------------------------------------------------------------------- + def _printRmInputKeys(rqdRmInpKeys, optRmInpKeys): """ Private method: print sample resource manager input @@ -1729,10 +1847,10 @@ def _printRmInputKeys(rqdRmInpKeys, optRmInpKeys): print ('# - account = computational project number') print ('# [At NCCS: Use command "getsponsor" to see available account number(s).]' ) print ('# - walltime = walltime requested; format is HH:MM:SS (hours/minutes/seconds)') - print ('# - ntasks_model = number of processors requested for the model (typically 112; output server is not included)') - print ('# - ntasks-per-node = number of tasks per node (typically 46 for cascade* and 40 for skylake nodes)') - print ('# [If >40, cascade nodes will be allocated, else cascade or skylake.]') - print ('# [*NCCS recommends <=46 cores per node on SCU16 (cascade) due to OS issues (as of 6 Oct 2021).]') + print ('# - ntasks_model = number of processors requested for the model (typically 126; output server is not included)') + print ('# - ntasks-per-node = number of tasks per node (typically 46 for Cascade Lake and 126 for Milan)') + print ('# [If >46, Milan nodes will be allocated, else Cascade Lake or Milan.]') + print ('# [NCCS recommends <=46 for Cascade Lake and <=126 for Milan.]') print ('#') for key in rqdRmInpKeys: print (key + ':') @@ -1741,8 +1859,8 @@ def _printRmInputKeys(rqdRmInpKeys, optRmInpKeys): print ('# OPTIONAL inputs') print ('#') print ('# NOTE:') - print ('# - job_name = name of experiment; default is "exp_id"') - print ('# - qos = quality-of-service; do not specify by default; specify "debug" for faster but limited service.') + print ('# - job_name = name of experiment; default is "exp_id"') + print ('# - qos = quality-of-service; do not specify by default; specify "debug" for faster but limited service.') print ('# - oserver_nodes = number of nodes for oserver ( default is 0 )') print ('# - writers-per-node = tasks per oserver_node for writing ( default is 5 ),') print ('# IMPORTANT REQUIREMENT: total #writers = writers-per-node * oserver_nodes >= 2') @@ -1751,27 +1869,34 @@ def _printRmInputKeys(rqdRmInpKeys, optRmInpKeys): for key in optRmInpKeys: print ('#'+key + ':') +# ----------------------------------------------------------------------------------- + def parseCmdLine(): """ parse command line arguments and return a dict of options """ + #print 'in: parseCmdLine' p = argparse.ArgumentParser( description= \ - "Script to setup a GEOSldas experiment. The script requires "\ - "two (2) input files, one for the Fortran executable and the " \ - "other for the resource manager (SLURM). For sample input " \ - "files use './ldas_setup sample -h'.", + "Script to setup a GEOSldas experiment. "\ + "To set up an *offline* GEOSldas experiment, the script requires "\ + "two (2) input files, one for the experiment inputs ('exeinp') and the "\ + "other for the (SLURM) resource manager ('batinp'). To create sample input "\ + "files use './ldas_setup sample -h'. "\ + "When used to set up a coupled land-atm DAS experiment, the script "\ + "*ignores* the input files, but dummy strings must still be specified. ", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) p_sub = p.add_subparsers(help='sub-command help') - # subparser: sample command + + # subparser: "sample" command p_sample = p_sub.add_parser( 'sample', help='write sample input files', description='Print sample input files - either for the '\ - 'Fortran executable or the resource manager (SLURM)', + 'experiment inputs or the resource manager (SLURM)', ) group = p_sample.add_mutually_exclusive_group(required=True) group.add_argument( @@ -1781,16 +1906,18 @@ def parseCmdLine(): ) group.add_argument( '--batinp', - help='print sample input file for SLURM ', + help='print sample input file for the resource manager (SLURM)', action='store_true', ) - # subparser: setup command + + + # subparser: "setup" command p_setup = p_sub.add_parser( 'setup', help='setup LDAS experiment', - description="The 'setup' sub-command is used to setup a GEOSldas " \ + description="The 'setup' sub-command is used to set up a GEOSldas " \ "experiment. The positional argument 'exphome' is used to create " \ - "work_path (exphome+/output) and run_path (exphome+/run)." + "work_path (=exphome+/output) and run_path (=exphome+/run)." ) p_setup.add_argument( '-v', @@ -1807,21 +1934,63 @@ def parseCmdLine(): 'batinpfile', help='input file with arguments for SLURM', ) + + # the following command line arguments, if present, take precedence over what + # is specified in the exeinp and batinp files + ladas_cpl_help='land-atm DAS coupling mode: default=0 (not coupled); LDAS coupled with (1) ADAS deterministic member or (2) ADAS ensemble. Required when exeinp is dummy' + p_setup.add_argument( + '--ladas_cpl', + help=ladas_cpl_help, + type=str + ) p_setup.add_argument( '--account', - help='replace computing/sponsor account in batinp file', - type=str, default='None' + help='overwrites computing/sponsor account from batinp file', + type=str ) p_setup.add_argument( '--nymdb', - help='replaces BEG_DATE date in exeinp file ', - type=str, default='None' + help='overwrites date in BEG_DATE from exeinp file: yyyymmdd. Required when exeinp is dummy', + type=str ) p_setup.add_argument( '--nhmsb', - help='replaces BEG_DATE time in exeinp file ', - type=str, default='None' + help='overwrites time in BEG_DATE from exeinp file: hhmmss. Required when exeinp is dummy', + type=str ) + p_setup.add_argument( + '--agcm_res', + help='AGCM resolution associated with boundary conditions: xxxx (4 digits). Required when exeinp is dummy', + type=str + ) + p_setup.add_argument( + '--bcs_version', + help='boundary conditions version. Required when exeinp is dummy', + type=str + ) + p_setup.add_argument( + '--rstloc', + help='location of LDAS restarts (restart_path/restart_id). Required when exeinp is dummy', + type=str + ) + p_setup.add_argument( + '--varwindow', + help='ADAS analysis window (minutes). Required when exeinp is dummy', + type=str + ) + p_setup.add_argument( + '--LDAS_nml_path', + help='path to LDAS (special) nml input files. Required when exeinp is dummy', + type=str + ) + p_setup.add_argument( + '--mwrtm_path', + help='path to LDAS L-band microwave radiative transfer model (mwrtm) parameters. Required when exeinp is dummy', + type=str + ) + + + # obsolete command line args p_setup.add_argument( '--runmodel', help='Obsolete.', @@ -1844,6 +2013,22 @@ def parseCmdLine(): return p.parse_args() + +def hours_to_hhmmss(hours): + + # Convert hours to timedelta + td = timedelta(hours=hours) + + # Extract hours, minutes, seconds + total_seconds = int(td.total_seconds()) + hours, remainder = divmod(total_seconds, 3600) + minutes, seconds = divmod(remainder, 60) + + # Format as HHMMSS + return f"{hours:02d}{minutes:02d}{seconds:02d}" + + + if __name__=='__main__': resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY)) @@ -1855,17 +2040,20 @@ if __name__=='__main__': status = ld.createDirStructure() assert(status) - print ("creating restart and bc") + print ("creating links to restarts, BCs, met forcing, ...") status = ld.createLnRstBc() assert(status) print ("creating RC Files") - status =ld.createRCFiles() - assert status + status = ld.createRCFiles() + assert(status) print ("creating gcm style batch Run scripts lenkf.j") status = ld.createRunScripts() - + assert(status) + print ("creating batch Run scripts") status = ld.createBatchRun() assert (status) + +# =================== EOF ======================================================================= diff --git a/GEOSldas_App/lenkf_j_template.py b/GEOSldas_App/lenkf_j_template.py index ea50bd27..a6233d52 100644 --- a/GEOSldas_App/lenkf_j_template.py +++ b/GEOSldas_App/lenkf_j_template.py @@ -860,6 +860,16 @@ if ( $LADAS_COUPLING > 0 ) then if ( $rc == 0 ) then + ##update CAP.rc END_DATE in $HOMDIR/ + set date = `$GEOSBIN/tick $nymdf $nhmsf $dt` + set nymdend = $date[1] + set nhmsend = $date[2] + cd $HOMDIR + set oldstring = `cat CAP.rc | grep END_DATE:` + set newstring = "END_DATE: $nymdend $nhmsend" + /bin/mv CAP.rc CAP.tmp + cat CAP.tmp | sed -e "s?$oldstring?$newstring?g" > CAP.rc + /bin/rm -f CAP.tmp echo 'SUCCEEDED' > $HOMDIR/lenkf_job_completed.txt endif else diff --git a/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.atmens b/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.atmens deleted file mode 100644 index 5b24ddf9..00000000 --- a/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.atmens +++ /dev/null @@ -1,1083 +0,0 @@ - -# -# Sample GEOSldas HISTORY.rc file for LADAS (atm ensemble) -# -# - This sample HISTORY.rc is for the GEOSldas instance that is weakly coupled with the -# atmospheric ensemble component of the Hybrid-4DEnVar ADAS (ADASens). -# -# - The sample file was generated with the utility script -# "GEOSldas/src/Components/GEOSldas_GridComp/GEOSldas_App/util/config/generate_catchincr_hist.py". -# -# - The sample file triggers output of the GEOSldas "catch_progn_incr" collection in -# ensemble space, which is needed by ADASens. -# -# - The IDs of the ensemble members and their total number in GEOSldas must match -# those of ADASens. -# -# - The "catch_progn_incr" output is in tile space, which must be the same for -# GEOSldas and ADASens. -# -# -################################################################################## - -EXPID: MyGEOSldasAtmEns - -COLLECTIONS: -'catch_progn_incr0001' -'catch_progn_incr0002' -'catch_progn_incr0003' -'catch_progn_incr0004' -'catch_progn_incr0005' -'catch_progn_incr0006' -'catch_progn_incr0007' -'catch_progn_incr0008' -'catch_progn_incr0009' -'catch_progn_incr0010' -'catch_progn_incr0011' -'catch_progn_incr0012' -'catch_progn_incr0013' -'catch_progn_incr0014' -'catch_progn_incr0015' -'catch_progn_incr0016' -'catch_progn_incr0017' -'catch_progn_incr0018' -'catch_progn_incr0019' -'catch_progn_incr0020' -'catch_progn_incr0021' -'catch_progn_incr0022' -'catch_progn_incr0023' -'catch_progn_incr0024' -'catch_progn_incr0025' -'catch_progn_incr0026' -'catch_progn_incr0027' -'catch_progn_incr0028' -'catch_progn_incr0029' -'catch_progn_incr0030' -'catch_progn_incr0031' -'catch_progn_incr0032' - -:: -catch_progn_incr0001.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0001.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0001.mode: 'instantaneous', -catch_progn_incr0001.frequency: 030000, -catch_progn_incr0001.ref_time: 013000, -catch_progn_incr0001.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0001' , - 'TCFTRN_INCR' , 'CATCHINCR_e0001' , - 'TCFWLT_INCR' , 'CATCHINCR_e0001' , - 'QCFSAT_INCR' , 'CATCHINCR_e0001' , - 'QCFTRN_INCR' , 'CATCHINCR_e0001' , - 'QCFWLT_INCR' , 'CATCHINCR_e0001' , - 'CAPAC_INCR' , 'CATCHINCR_e0001' , - 'CATDEF_INCR' , 'CATCHINCR_e0001' , - 'RZEXC_INCR' , 'CATCHINCR_e0001' , - 'SRFEXC_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0001' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0001' , - 'WESNN1_INCR' , 'CATCHINCR_e0001' , - 'WESNN2_INCR' , 'CATCHINCR_e0001' , - 'WESNN3_INCR' , 'CATCHINCR_e0001' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0001' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0001' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0001' , - 'SNDZN1_INCR' , 'CATCHINCR_e0001' , - 'SNDZN2_INCR' , 'CATCHINCR_e0001' , - 'SNDZN3_INCR' , 'CATCHINCR_e0001' , - -:: -catch_progn_incr0002.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0002.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0002.mode: 'instantaneous', -catch_progn_incr0002.frequency: 030000, -catch_progn_incr0002.ref_time: 013000, -catch_progn_incr0002.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0002' , - 'TCFTRN_INCR' , 'CATCHINCR_e0002' , - 'TCFWLT_INCR' , 'CATCHINCR_e0002' , - 'QCFSAT_INCR' , 'CATCHINCR_e0002' , - 'QCFTRN_INCR' , 'CATCHINCR_e0002' , - 'QCFWLT_INCR' , 'CATCHINCR_e0002' , - 'CAPAC_INCR' , 'CATCHINCR_e0002' , - 'CATDEF_INCR' , 'CATCHINCR_e0002' , - 'RZEXC_INCR' , 'CATCHINCR_e0002' , - 'SRFEXC_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0002' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0002' , - 'WESNN1_INCR' , 'CATCHINCR_e0002' , - 'WESNN2_INCR' , 'CATCHINCR_e0002' , - 'WESNN3_INCR' , 'CATCHINCR_e0002' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0002' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0002' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0002' , - 'SNDZN1_INCR' , 'CATCHINCR_e0002' , - 'SNDZN2_INCR' , 'CATCHINCR_e0002' , - 'SNDZN3_INCR' , 'CATCHINCR_e0002' , - -:: -catch_progn_incr0003.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0003.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0003.mode: 'instantaneous', -catch_progn_incr0003.frequency: 030000, -catch_progn_incr0003.ref_time: 013000, -catch_progn_incr0003.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0003' , - 'TCFTRN_INCR' , 'CATCHINCR_e0003' , - 'TCFWLT_INCR' , 'CATCHINCR_e0003' , - 'QCFSAT_INCR' , 'CATCHINCR_e0003' , - 'QCFTRN_INCR' , 'CATCHINCR_e0003' , - 'QCFWLT_INCR' , 'CATCHINCR_e0003' , - 'CAPAC_INCR' , 'CATCHINCR_e0003' , - 'CATDEF_INCR' , 'CATCHINCR_e0003' , - 'RZEXC_INCR' , 'CATCHINCR_e0003' , - 'SRFEXC_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0003' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0003' , - 'WESNN1_INCR' , 'CATCHINCR_e0003' , - 'WESNN2_INCR' , 'CATCHINCR_e0003' , - 'WESNN3_INCR' , 'CATCHINCR_e0003' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0003' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0003' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0003' , - 'SNDZN1_INCR' , 'CATCHINCR_e0003' , - 'SNDZN2_INCR' , 'CATCHINCR_e0003' , - 'SNDZN3_INCR' , 'CATCHINCR_e0003' , - -:: -catch_progn_incr0004.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0004.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0004.mode: 'instantaneous', -catch_progn_incr0004.frequency: 030000, -catch_progn_incr0004.ref_time: 013000, -catch_progn_incr0004.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0004' , - 'TCFTRN_INCR' , 'CATCHINCR_e0004' , - 'TCFWLT_INCR' , 'CATCHINCR_e0004' , - 'QCFSAT_INCR' , 'CATCHINCR_e0004' , - 'QCFTRN_INCR' , 'CATCHINCR_e0004' , - 'QCFWLT_INCR' , 'CATCHINCR_e0004' , - 'CAPAC_INCR' , 'CATCHINCR_e0004' , - 'CATDEF_INCR' , 'CATCHINCR_e0004' , - 'RZEXC_INCR' , 'CATCHINCR_e0004' , - 'SRFEXC_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0004' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0004' , - 'WESNN1_INCR' , 'CATCHINCR_e0004' , - 'WESNN2_INCR' , 'CATCHINCR_e0004' , - 'WESNN3_INCR' , 'CATCHINCR_e0004' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0004' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0004' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0004' , - 'SNDZN1_INCR' , 'CATCHINCR_e0004' , - 'SNDZN2_INCR' , 'CATCHINCR_e0004' , - 'SNDZN3_INCR' , 'CATCHINCR_e0004' , - -:: -catch_progn_incr0005.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0005.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0005.mode: 'instantaneous', -catch_progn_incr0005.frequency: 030000, -catch_progn_incr0005.ref_time: 013000, -catch_progn_incr0005.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0005' , - 'TCFTRN_INCR' , 'CATCHINCR_e0005' , - 'TCFWLT_INCR' , 'CATCHINCR_e0005' , - 'QCFSAT_INCR' , 'CATCHINCR_e0005' , - 'QCFTRN_INCR' , 'CATCHINCR_e0005' , - 'QCFWLT_INCR' , 'CATCHINCR_e0005' , - 'CAPAC_INCR' , 'CATCHINCR_e0005' , - 'CATDEF_INCR' , 'CATCHINCR_e0005' , - 'RZEXC_INCR' , 'CATCHINCR_e0005' , - 'SRFEXC_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0005' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0005' , - 'WESNN1_INCR' , 'CATCHINCR_e0005' , - 'WESNN2_INCR' , 'CATCHINCR_e0005' , - 'WESNN3_INCR' , 'CATCHINCR_e0005' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0005' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0005' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0005' , - 'SNDZN1_INCR' , 'CATCHINCR_e0005' , - 'SNDZN2_INCR' , 'CATCHINCR_e0005' , - 'SNDZN3_INCR' , 'CATCHINCR_e0005' , - -:: -catch_progn_incr0006.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0006.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0006.mode: 'instantaneous', -catch_progn_incr0006.frequency: 030000, -catch_progn_incr0006.ref_time: 013000, -catch_progn_incr0006.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0006' , - 'TCFTRN_INCR' , 'CATCHINCR_e0006' , - 'TCFWLT_INCR' , 'CATCHINCR_e0006' , - 'QCFSAT_INCR' , 'CATCHINCR_e0006' , - 'QCFTRN_INCR' , 'CATCHINCR_e0006' , - 'QCFWLT_INCR' , 'CATCHINCR_e0006' , - 'CAPAC_INCR' , 'CATCHINCR_e0006' , - 'CATDEF_INCR' , 'CATCHINCR_e0006' , - 'RZEXC_INCR' , 'CATCHINCR_e0006' , - 'SRFEXC_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0006' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0006' , - 'WESNN1_INCR' , 'CATCHINCR_e0006' , - 'WESNN2_INCR' , 'CATCHINCR_e0006' , - 'WESNN3_INCR' , 'CATCHINCR_e0006' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0006' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0006' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0006' , - 'SNDZN1_INCR' , 'CATCHINCR_e0006' , - 'SNDZN2_INCR' , 'CATCHINCR_e0006' , - 'SNDZN3_INCR' , 'CATCHINCR_e0006' , - -:: -catch_progn_incr0007.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0007.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0007.mode: 'instantaneous', -catch_progn_incr0007.frequency: 030000, -catch_progn_incr0007.ref_time: 013000, -catch_progn_incr0007.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0007' , - 'TCFTRN_INCR' , 'CATCHINCR_e0007' , - 'TCFWLT_INCR' , 'CATCHINCR_e0007' , - 'QCFSAT_INCR' , 'CATCHINCR_e0007' , - 'QCFTRN_INCR' , 'CATCHINCR_e0007' , - 'QCFWLT_INCR' , 'CATCHINCR_e0007' , - 'CAPAC_INCR' , 'CATCHINCR_e0007' , - 'CATDEF_INCR' , 'CATCHINCR_e0007' , - 'RZEXC_INCR' , 'CATCHINCR_e0007' , - 'SRFEXC_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0007' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0007' , - 'WESNN1_INCR' , 'CATCHINCR_e0007' , - 'WESNN2_INCR' , 'CATCHINCR_e0007' , - 'WESNN3_INCR' , 'CATCHINCR_e0007' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0007' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0007' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0007' , - 'SNDZN1_INCR' , 'CATCHINCR_e0007' , - 'SNDZN2_INCR' , 'CATCHINCR_e0007' , - 'SNDZN3_INCR' , 'CATCHINCR_e0007' , - -:: -catch_progn_incr0008.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0008.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0008.mode: 'instantaneous', -catch_progn_incr0008.frequency: 030000, -catch_progn_incr0008.ref_time: 013000, -catch_progn_incr0008.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0008' , - 'TCFTRN_INCR' , 'CATCHINCR_e0008' , - 'TCFWLT_INCR' , 'CATCHINCR_e0008' , - 'QCFSAT_INCR' , 'CATCHINCR_e0008' , - 'QCFTRN_INCR' , 'CATCHINCR_e0008' , - 'QCFWLT_INCR' , 'CATCHINCR_e0008' , - 'CAPAC_INCR' , 'CATCHINCR_e0008' , - 'CATDEF_INCR' , 'CATCHINCR_e0008' , - 'RZEXC_INCR' , 'CATCHINCR_e0008' , - 'SRFEXC_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0008' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0008' , - 'WESNN1_INCR' , 'CATCHINCR_e0008' , - 'WESNN2_INCR' , 'CATCHINCR_e0008' , - 'WESNN3_INCR' , 'CATCHINCR_e0008' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0008' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0008' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0008' , - 'SNDZN1_INCR' , 'CATCHINCR_e0008' , - 'SNDZN2_INCR' , 'CATCHINCR_e0008' , - 'SNDZN3_INCR' , 'CATCHINCR_e0008' , - -:: -catch_progn_incr0009.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0009.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0009.mode: 'instantaneous', -catch_progn_incr0009.frequency: 030000, -catch_progn_incr0009.ref_time: 013000, -catch_progn_incr0009.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0009' , - 'TCFTRN_INCR' , 'CATCHINCR_e0009' , - 'TCFWLT_INCR' , 'CATCHINCR_e0009' , - 'QCFSAT_INCR' , 'CATCHINCR_e0009' , - 'QCFTRN_INCR' , 'CATCHINCR_e0009' , - 'QCFWLT_INCR' , 'CATCHINCR_e0009' , - 'CAPAC_INCR' , 'CATCHINCR_e0009' , - 'CATDEF_INCR' , 'CATCHINCR_e0009' , - 'RZEXC_INCR' , 'CATCHINCR_e0009' , - 'SRFEXC_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0009' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0009' , - 'WESNN1_INCR' , 'CATCHINCR_e0009' , - 'WESNN2_INCR' , 'CATCHINCR_e0009' , - 'WESNN3_INCR' , 'CATCHINCR_e0009' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0009' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0009' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0009' , - 'SNDZN1_INCR' , 'CATCHINCR_e0009' , - 'SNDZN2_INCR' , 'CATCHINCR_e0009' , - 'SNDZN3_INCR' , 'CATCHINCR_e0009' , - -:: -catch_progn_incr0010.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0010.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0010.mode: 'instantaneous', -catch_progn_incr0010.frequency: 030000, -catch_progn_incr0010.ref_time: 013000, -catch_progn_incr0010.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0010' , - 'TCFTRN_INCR' , 'CATCHINCR_e0010' , - 'TCFWLT_INCR' , 'CATCHINCR_e0010' , - 'QCFSAT_INCR' , 'CATCHINCR_e0010' , - 'QCFTRN_INCR' , 'CATCHINCR_e0010' , - 'QCFWLT_INCR' , 'CATCHINCR_e0010' , - 'CAPAC_INCR' , 'CATCHINCR_e0010' , - 'CATDEF_INCR' , 'CATCHINCR_e0010' , - 'RZEXC_INCR' , 'CATCHINCR_e0010' , - 'SRFEXC_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0010' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0010' , - 'WESNN1_INCR' , 'CATCHINCR_e0010' , - 'WESNN2_INCR' , 'CATCHINCR_e0010' , - 'WESNN3_INCR' , 'CATCHINCR_e0010' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0010' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0010' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0010' , - 'SNDZN1_INCR' , 'CATCHINCR_e0010' , - 'SNDZN2_INCR' , 'CATCHINCR_e0010' , - 'SNDZN3_INCR' , 'CATCHINCR_e0010' , - -:: -catch_progn_incr0011.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0011.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0011.mode: 'instantaneous', -catch_progn_incr0011.frequency: 030000, -catch_progn_incr0011.ref_time: 013000, -catch_progn_incr0011.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0011' , - 'TCFTRN_INCR' , 'CATCHINCR_e0011' , - 'TCFWLT_INCR' , 'CATCHINCR_e0011' , - 'QCFSAT_INCR' , 'CATCHINCR_e0011' , - 'QCFTRN_INCR' , 'CATCHINCR_e0011' , - 'QCFWLT_INCR' , 'CATCHINCR_e0011' , - 'CAPAC_INCR' , 'CATCHINCR_e0011' , - 'CATDEF_INCR' , 'CATCHINCR_e0011' , - 'RZEXC_INCR' , 'CATCHINCR_e0011' , - 'SRFEXC_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0011' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0011' , - 'WESNN1_INCR' , 'CATCHINCR_e0011' , - 'WESNN2_INCR' , 'CATCHINCR_e0011' , - 'WESNN3_INCR' , 'CATCHINCR_e0011' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0011' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0011' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0011' , - 'SNDZN1_INCR' , 'CATCHINCR_e0011' , - 'SNDZN2_INCR' , 'CATCHINCR_e0011' , - 'SNDZN3_INCR' , 'CATCHINCR_e0011' , - -:: -catch_progn_incr0012.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0012.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0012.mode: 'instantaneous', -catch_progn_incr0012.frequency: 030000, -catch_progn_incr0012.ref_time: 013000, -catch_progn_incr0012.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0012' , - 'TCFTRN_INCR' , 'CATCHINCR_e0012' , - 'TCFWLT_INCR' , 'CATCHINCR_e0012' , - 'QCFSAT_INCR' , 'CATCHINCR_e0012' , - 'QCFTRN_INCR' , 'CATCHINCR_e0012' , - 'QCFWLT_INCR' , 'CATCHINCR_e0012' , - 'CAPAC_INCR' , 'CATCHINCR_e0012' , - 'CATDEF_INCR' , 'CATCHINCR_e0012' , - 'RZEXC_INCR' , 'CATCHINCR_e0012' , - 'SRFEXC_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0012' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0012' , - 'WESNN1_INCR' , 'CATCHINCR_e0012' , - 'WESNN2_INCR' , 'CATCHINCR_e0012' , - 'WESNN3_INCR' , 'CATCHINCR_e0012' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0012' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0012' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0012' , - 'SNDZN1_INCR' , 'CATCHINCR_e0012' , - 'SNDZN2_INCR' , 'CATCHINCR_e0012' , - 'SNDZN3_INCR' , 'CATCHINCR_e0012' , - -:: -catch_progn_incr0013.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0013.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0013.mode: 'instantaneous', -catch_progn_incr0013.frequency: 030000, -catch_progn_incr0013.ref_time: 013000, -catch_progn_incr0013.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0013' , - 'TCFTRN_INCR' , 'CATCHINCR_e0013' , - 'TCFWLT_INCR' , 'CATCHINCR_e0013' , - 'QCFSAT_INCR' , 'CATCHINCR_e0013' , - 'QCFTRN_INCR' , 'CATCHINCR_e0013' , - 'QCFWLT_INCR' , 'CATCHINCR_e0013' , - 'CAPAC_INCR' , 'CATCHINCR_e0013' , - 'CATDEF_INCR' , 'CATCHINCR_e0013' , - 'RZEXC_INCR' , 'CATCHINCR_e0013' , - 'SRFEXC_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0013' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0013' , - 'WESNN1_INCR' , 'CATCHINCR_e0013' , - 'WESNN2_INCR' , 'CATCHINCR_e0013' , - 'WESNN3_INCR' , 'CATCHINCR_e0013' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0013' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0013' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0013' , - 'SNDZN1_INCR' , 'CATCHINCR_e0013' , - 'SNDZN2_INCR' , 'CATCHINCR_e0013' , - 'SNDZN3_INCR' , 'CATCHINCR_e0013' , - -:: -catch_progn_incr0014.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0014.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0014.mode: 'instantaneous', -catch_progn_incr0014.frequency: 030000, -catch_progn_incr0014.ref_time: 013000, -catch_progn_incr0014.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0014' , - 'TCFTRN_INCR' , 'CATCHINCR_e0014' , - 'TCFWLT_INCR' , 'CATCHINCR_e0014' , - 'QCFSAT_INCR' , 'CATCHINCR_e0014' , - 'QCFTRN_INCR' , 'CATCHINCR_e0014' , - 'QCFWLT_INCR' , 'CATCHINCR_e0014' , - 'CAPAC_INCR' , 'CATCHINCR_e0014' , - 'CATDEF_INCR' , 'CATCHINCR_e0014' , - 'RZEXC_INCR' , 'CATCHINCR_e0014' , - 'SRFEXC_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0014' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0014' , - 'WESNN1_INCR' , 'CATCHINCR_e0014' , - 'WESNN2_INCR' , 'CATCHINCR_e0014' , - 'WESNN3_INCR' , 'CATCHINCR_e0014' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0014' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0014' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0014' , - 'SNDZN1_INCR' , 'CATCHINCR_e0014' , - 'SNDZN2_INCR' , 'CATCHINCR_e0014' , - 'SNDZN3_INCR' , 'CATCHINCR_e0014' , - -:: -catch_progn_incr0015.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0015.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0015.mode: 'instantaneous', -catch_progn_incr0015.frequency: 030000, -catch_progn_incr0015.ref_time: 013000, -catch_progn_incr0015.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0015' , - 'TCFTRN_INCR' , 'CATCHINCR_e0015' , - 'TCFWLT_INCR' , 'CATCHINCR_e0015' , - 'QCFSAT_INCR' , 'CATCHINCR_e0015' , - 'QCFTRN_INCR' , 'CATCHINCR_e0015' , - 'QCFWLT_INCR' , 'CATCHINCR_e0015' , - 'CAPAC_INCR' , 'CATCHINCR_e0015' , - 'CATDEF_INCR' , 'CATCHINCR_e0015' , - 'RZEXC_INCR' , 'CATCHINCR_e0015' , - 'SRFEXC_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0015' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0015' , - 'WESNN1_INCR' , 'CATCHINCR_e0015' , - 'WESNN2_INCR' , 'CATCHINCR_e0015' , - 'WESNN3_INCR' , 'CATCHINCR_e0015' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0015' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0015' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0015' , - 'SNDZN1_INCR' , 'CATCHINCR_e0015' , - 'SNDZN2_INCR' , 'CATCHINCR_e0015' , - 'SNDZN3_INCR' , 'CATCHINCR_e0015' , - -:: -catch_progn_incr0016.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0016.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0016.mode: 'instantaneous', -catch_progn_incr0016.frequency: 030000, -catch_progn_incr0016.ref_time: 013000, -catch_progn_incr0016.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0016' , - 'TCFTRN_INCR' , 'CATCHINCR_e0016' , - 'TCFWLT_INCR' , 'CATCHINCR_e0016' , - 'QCFSAT_INCR' , 'CATCHINCR_e0016' , - 'QCFTRN_INCR' , 'CATCHINCR_e0016' , - 'QCFWLT_INCR' , 'CATCHINCR_e0016' , - 'CAPAC_INCR' , 'CATCHINCR_e0016' , - 'CATDEF_INCR' , 'CATCHINCR_e0016' , - 'RZEXC_INCR' , 'CATCHINCR_e0016' , - 'SRFEXC_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0016' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0016' , - 'WESNN1_INCR' , 'CATCHINCR_e0016' , - 'WESNN2_INCR' , 'CATCHINCR_e0016' , - 'WESNN3_INCR' , 'CATCHINCR_e0016' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0016' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0016' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0016' , - 'SNDZN1_INCR' , 'CATCHINCR_e0016' , - 'SNDZN2_INCR' , 'CATCHINCR_e0016' , - 'SNDZN3_INCR' , 'CATCHINCR_e0016' , - -:: -catch_progn_incr0017.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0017.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0017.mode: 'instantaneous', -catch_progn_incr0017.frequency: 030000, -catch_progn_incr0017.ref_time: 013000, -catch_progn_incr0017.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0017' , - 'TCFTRN_INCR' , 'CATCHINCR_e0017' , - 'TCFWLT_INCR' , 'CATCHINCR_e0017' , - 'QCFSAT_INCR' , 'CATCHINCR_e0017' , - 'QCFTRN_INCR' , 'CATCHINCR_e0017' , - 'QCFWLT_INCR' , 'CATCHINCR_e0017' , - 'CAPAC_INCR' , 'CATCHINCR_e0017' , - 'CATDEF_INCR' , 'CATCHINCR_e0017' , - 'RZEXC_INCR' , 'CATCHINCR_e0017' , - 'SRFEXC_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0017' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0017' , - 'WESNN1_INCR' , 'CATCHINCR_e0017' , - 'WESNN2_INCR' , 'CATCHINCR_e0017' , - 'WESNN3_INCR' , 'CATCHINCR_e0017' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0017' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0017' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0017' , - 'SNDZN1_INCR' , 'CATCHINCR_e0017' , - 'SNDZN2_INCR' , 'CATCHINCR_e0017' , - 'SNDZN3_INCR' , 'CATCHINCR_e0017' , - -:: -catch_progn_incr0018.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0018.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0018.mode: 'instantaneous', -catch_progn_incr0018.frequency: 030000, -catch_progn_incr0018.ref_time: 013000, -catch_progn_incr0018.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0018' , - 'TCFTRN_INCR' , 'CATCHINCR_e0018' , - 'TCFWLT_INCR' , 'CATCHINCR_e0018' , - 'QCFSAT_INCR' , 'CATCHINCR_e0018' , - 'QCFTRN_INCR' , 'CATCHINCR_e0018' , - 'QCFWLT_INCR' , 'CATCHINCR_e0018' , - 'CAPAC_INCR' , 'CATCHINCR_e0018' , - 'CATDEF_INCR' , 'CATCHINCR_e0018' , - 'RZEXC_INCR' , 'CATCHINCR_e0018' , - 'SRFEXC_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0018' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0018' , - 'WESNN1_INCR' , 'CATCHINCR_e0018' , - 'WESNN2_INCR' , 'CATCHINCR_e0018' , - 'WESNN3_INCR' , 'CATCHINCR_e0018' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0018' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0018' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0018' , - 'SNDZN1_INCR' , 'CATCHINCR_e0018' , - 'SNDZN2_INCR' , 'CATCHINCR_e0018' , - 'SNDZN3_INCR' , 'CATCHINCR_e0018' , - -:: -catch_progn_incr0019.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0019.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0019.mode: 'instantaneous', -catch_progn_incr0019.frequency: 030000, -catch_progn_incr0019.ref_time: 013000, -catch_progn_incr0019.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0019' , - 'TCFTRN_INCR' , 'CATCHINCR_e0019' , - 'TCFWLT_INCR' , 'CATCHINCR_e0019' , - 'QCFSAT_INCR' , 'CATCHINCR_e0019' , - 'QCFTRN_INCR' , 'CATCHINCR_e0019' , - 'QCFWLT_INCR' , 'CATCHINCR_e0019' , - 'CAPAC_INCR' , 'CATCHINCR_e0019' , - 'CATDEF_INCR' , 'CATCHINCR_e0019' , - 'RZEXC_INCR' , 'CATCHINCR_e0019' , - 'SRFEXC_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0019' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0019' , - 'WESNN1_INCR' , 'CATCHINCR_e0019' , - 'WESNN2_INCR' , 'CATCHINCR_e0019' , - 'WESNN3_INCR' , 'CATCHINCR_e0019' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0019' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0019' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0019' , - 'SNDZN1_INCR' , 'CATCHINCR_e0019' , - 'SNDZN2_INCR' , 'CATCHINCR_e0019' , - 'SNDZN3_INCR' , 'CATCHINCR_e0019' , - -:: -catch_progn_incr0020.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0020.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0020.mode: 'instantaneous', -catch_progn_incr0020.frequency: 030000, -catch_progn_incr0020.ref_time: 013000, -catch_progn_incr0020.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0020' , - 'TCFTRN_INCR' , 'CATCHINCR_e0020' , - 'TCFWLT_INCR' , 'CATCHINCR_e0020' , - 'QCFSAT_INCR' , 'CATCHINCR_e0020' , - 'QCFTRN_INCR' , 'CATCHINCR_e0020' , - 'QCFWLT_INCR' , 'CATCHINCR_e0020' , - 'CAPAC_INCR' , 'CATCHINCR_e0020' , - 'CATDEF_INCR' , 'CATCHINCR_e0020' , - 'RZEXC_INCR' , 'CATCHINCR_e0020' , - 'SRFEXC_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0020' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0020' , - 'WESNN1_INCR' , 'CATCHINCR_e0020' , - 'WESNN2_INCR' , 'CATCHINCR_e0020' , - 'WESNN3_INCR' , 'CATCHINCR_e0020' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0020' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0020' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0020' , - 'SNDZN1_INCR' , 'CATCHINCR_e0020' , - 'SNDZN2_INCR' , 'CATCHINCR_e0020' , - 'SNDZN3_INCR' , 'CATCHINCR_e0020' , - -:: -catch_progn_incr0021.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0021.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0021.mode: 'instantaneous', -catch_progn_incr0021.frequency: 030000, -catch_progn_incr0021.ref_time: 013000, -catch_progn_incr0021.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0021' , - 'TCFTRN_INCR' , 'CATCHINCR_e0021' , - 'TCFWLT_INCR' , 'CATCHINCR_e0021' , - 'QCFSAT_INCR' , 'CATCHINCR_e0021' , - 'QCFTRN_INCR' , 'CATCHINCR_e0021' , - 'QCFWLT_INCR' , 'CATCHINCR_e0021' , - 'CAPAC_INCR' , 'CATCHINCR_e0021' , - 'CATDEF_INCR' , 'CATCHINCR_e0021' , - 'RZEXC_INCR' , 'CATCHINCR_e0021' , - 'SRFEXC_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0021' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0021' , - 'WESNN1_INCR' , 'CATCHINCR_e0021' , - 'WESNN2_INCR' , 'CATCHINCR_e0021' , - 'WESNN3_INCR' , 'CATCHINCR_e0021' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0021' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0021' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0021' , - 'SNDZN1_INCR' , 'CATCHINCR_e0021' , - 'SNDZN2_INCR' , 'CATCHINCR_e0021' , - 'SNDZN3_INCR' , 'CATCHINCR_e0021' , - -:: -catch_progn_incr0022.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0022.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0022.mode: 'instantaneous', -catch_progn_incr0022.frequency: 030000, -catch_progn_incr0022.ref_time: 013000, -catch_progn_incr0022.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0022' , - 'TCFTRN_INCR' , 'CATCHINCR_e0022' , - 'TCFWLT_INCR' , 'CATCHINCR_e0022' , - 'QCFSAT_INCR' , 'CATCHINCR_e0022' , - 'QCFTRN_INCR' , 'CATCHINCR_e0022' , - 'QCFWLT_INCR' , 'CATCHINCR_e0022' , - 'CAPAC_INCR' , 'CATCHINCR_e0022' , - 'CATDEF_INCR' , 'CATCHINCR_e0022' , - 'RZEXC_INCR' , 'CATCHINCR_e0022' , - 'SRFEXC_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0022' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0022' , - 'WESNN1_INCR' , 'CATCHINCR_e0022' , - 'WESNN2_INCR' , 'CATCHINCR_e0022' , - 'WESNN3_INCR' , 'CATCHINCR_e0022' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0022' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0022' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0022' , - 'SNDZN1_INCR' , 'CATCHINCR_e0022' , - 'SNDZN2_INCR' , 'CATCHINCR_e0022' , - 'SNDZN3_INCR' , 'CATCHINCR_e0022' , - -:: -catch_progn_incr0023.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0023.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0023.mode: 'instantaneous', -catch_progn_incr0023.frequency: 030000, -catch_progn_incr0023.ref_time: 013000, -catch_progn_incr0023.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0023' , - 'TCFTRN_INCR' , 'CATCHINCR_e0023' , - 'TCFWLT_INCR' , 'CATCHINCR_e0023' , - 'QCFSAT_INCR' , 'CATCHINCR_e0023' , - 'QCFTRN_INCR' , 'CATCHINCR_e0023' , - 'QCFWLT_INCR' , 'CATCHINCR_e0023' , - 'CAPAC_INCR' , 'CATCHINCR_e0023' , - 'CATDEF_INCR' , 'CATCHINCR_e0023' , - 'RZEXC_INCR' , 'CATCHINCR_e0023' , - 'SRFEXC_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0023' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0023' , - 'WESNN1_INCR' , 'CATCHINCR_e0023' , - 'WESNN2_INCR' , 'CATCHINCR_e0023' , - 'WESNN3_INCR' , 'CATCHINCR_e0023' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0023' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0023' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0023' , - 'SNDZN1_INCR' , 'CATCHINCR_e0023' , - 'SNDZN2_INCR' , 'CATCHINCR_e0023' , - 'SNDZN3_INCR' , 'CATCHINCR_e0023' , - -:: -catch_progn_incr0024.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0024.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0024.mode: 'instantaneous', -catch_progn_incr0024.frequency: 030000, -catch_progn_incr0024.ref_time: 013000, -catch_progn_incr0024.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0024' , - 'TCFTRN_INCR' , 'CATCHINCR_e0024' , - 'TCFWLT_INCR' , 'CATCHINCR_e0024' , - 'QCFSAT_INCR' , 'CATCHINCR_e0024' , - 'QCFTRN_INCR' , 'CATCHINCR_e0024' , - 'QCFWLT_INCR' , 'CATCHINCR_e0024' , - 'CAPAC_INCR' , 'CATCHINCR_e0024' , - 'CATDEF_INCR' , 'CATCHINCR_e0024' , - 'RZEXC_INCR' , 'CATCHINCR_e0024' , - 'SRFEXC_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0024' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0024' , - 'WESNN1_INCR' , 'CATCHINCR_e0024' , - 'WESNN2_INCR' , 'CATCHINCR_e0024' , - 'WESNN3_INCR' , 'CATCHINCR_e0024' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0024' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0024' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0024' , - 'SNDZN1_INCR' , 'CATCHINCR_e0024' , - 'SNDZN2_INCR' , 'CATCHINCR_e0024' , - 'SNDZN3_INCR' , 'CATCHINCR_e0024' , - -:: -catch_progn_incr0025.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0025.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0025.mode: 'instantaneous', -catch_progn_incr0025.frequency: 030000, -catch_progn_incr0025.ref_time: 013000, -catch_progn_incr0025.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0025' , - 'TCFTRN_INCR' , 'CATCHINCR_e0025' , - 'TCFWLT_INCR' , 'CATCHINCR_e0025' , - 'QCFSAT_INCR' , 'CATCHINCR_e0025' , - 'QCFTRN_INCR' , 'CATCHINCR_e0025' , - 'QCFWLT_INCR' , 'CATCHINCR_e0025' , - 'CAPAC_INCR' , 'CATCHINCR_e0025' , - 'CATDEF_INCR' , 'CATCHINCR_e0025' , - 'RZEXC_INCR' , 'CATCHINCR_e0025' , - 'SRFEXC_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0025' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0025' , - 'WESNN1_INCR' , 'CATCHINCR_e0025' , - 'WESNN2_INCR' , 'CATCHINCR_e0025' , - 'WESNN3_INCR' , 'CATCHINCR_e0025' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0025' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0025' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0025' , - 'SNDZN1_INCR' , 'CATCHINCR_e0025' , - 'SNDZN2_INCR' , 'CATCHINCR_e0025' , - 'SNDZN3_INCR' , 'CATCHINCR_e0025' , - -:: -catch_progn_incr0026.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0026.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0026.mode: 'instantaneous', -catch_progn_incr0026.frequency: 030000, -catch_progn_incr0026.ref_time: 013000, -catch_progn_incr0026.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0026' , - 'TCFTRN_INCR' , 'CATCHINCR_e0026' , - 'TCFWLT_INCR' , 'CATCHINCR_e0026' , - 'QCFSAT_INCR' , 'CATCHINCR_e0026' , - 'QCFTRN_INCR' , 'CATCHINCR_e0026' , - 'QCFWLT_INCR' , 'CATCHINCR_e0026' , - 'CAPAC_INCR' , 'CATCHINCR_e0026' , - 'CATDEF_INCR' , 'CATCHINCR_e0026' , - 'RZEXC_INCR' , 'CATCHINCR_e0026' , - 'SRFEXC_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0026' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0026' , - 'WESNN1_INCR' , 'CATCHINCR_e0026' , - 'WESNN2_INCR' , 'CATCHINCR_e0026' , - 'WESNN3_INCR' , 'CATCHINCR_e0026' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0026' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0026' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0026' , - 'SNDZN1_INCR' , 'CATCHINCR_e0026' , - 'SNDZN2_INCR' , 'CATCHINCR_e0026' , - 'SNDZN3_INCR' , 'CATCHINCR_e0026' , - -:: -catch_progn_incr0027.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0027.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0027.mode: 'instantaneous', -catch_progn_incr0027.frequency: 030000, -catch_progn_incr0027.ref_time: 013000, -catch_progn_incr0027.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0027' , - 'TCFTRN_INCR' , 'CATCHINCR_e0027' , - 'TCFWLT_INCR' , 'CATCHINCR_e0027' , - 'QCFSAT_INCR' , 'CATCHINCR_e0027' , - 'QCFTRN_INCR' , 'CATCHINCR_e0027' , - 'QCFWLT_INCR' , 'CATCHINCR_e0027' , - 'CAPAC_INCR' , 'CATCHINCR_e0027' , - 'CATDEF_INCR' , 'CATCHINCR_e0027' , - 'RZEXC_INCR' , 'CATCHINCR_e0027' , - 'SRFEXC_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0027' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0027' , - 'WESNN1_INCR' , 'CATCHINCR_e0027' , - 'WESNN2_INCR' , 'CATCHINCR_e0027' , - 'WESNN3_INCR' , 'CATCHINCR_e0027' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0027' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0027' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0027' , - 'SNDZN1_INCR' , 'CATCHINCR_e0027' , - 'SNDZN2_INCR' , 'CATCHINCR_e0027' , - 'SNDZN3_INCR' , 'CATCHINCR_e0027' , - -:: -catch_progn_incr0028.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0028.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0028.mode: 'instantaneous', -catch_progn_incr0028.frequency: 030000, -catch_progn_incr0028.ref_time: 013000, -catch_progn_incr0028.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0028' , - 'TCFTRN_INCR' , 'CATCHINCR_e0028' , - 'TCFWLT_INCR' , 'CATCHINCR_e0028' , - 'QCFSAT_INCR' , 'CATCHINCR_e0028' , - 'QCFTRN_INCR' , 'CATCHINCR_e0028' , - 'QCFWLT_INCR' , 'CATCHINCR_e0028' , - 'CAPAC_INCR' , 'CATCHINCR_e0028' , - 'CATDEF_INCR' , 'CATCHINCR_e0028' , - 'RZEXC_INCR' , 'CATCHINCR_e0028' , - 'SRFEXC_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0028' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0028' , - 'WESNN1_INCR' , 'CATCHINCR_e0028' , - 'WESNN2_INCR' , 'CATCHINCR_e0028' , - 'WESNN3_INCR' , 'CATCHINCR_e0028' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0028' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0028' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0028' , - 'SNDZN1_INCR' , 'CATCHINCR_e0028' , - 'SNDZN2_INCR' , 'CATCHINCR_e0028' , - 'SNDZN3_INCR' , 'CATCHINCR_e0028' , - -:: -catch_progn_incr0029.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0029.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0029.mode: 'instantaneous', -catch_progn_incr0029.frequency: 030000, -catch_progn_incr0029.ref_time: 013000, -catch_progn_incr0029.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0029' , - 'TCFTRN_INCR' , 'CATCHINCR_e0029' , - 'TCFWLT_INCR' , 'CATCHINCR_e0029' , - 'QCFSAT_INCR' , 'CATCHINCR_e0029' , - 'QCFTRN_INCR' , 'CATCHINCR_e0029' , - 'QCFWLT_INCR' , 'CATCHINCR_e0029' , - 'CAPAC_INCR' , 'CATCHINCR_e0029' , - 'CATDEF_INCR' , 'CATCHINCR_e0029' , - 'RZEXC_INCR' , 'CATCHINCR_e0029' , - 'SRFEXC_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0029' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0029' , - 'WESNN1_INCR' , 'CATCHINCR_e0029' , - 'WESNN2_INCR' , 'CATCHINCR_e0029' , - 'WESNN3_INCR' , 'CATCHINCR_e0029' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0029' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0029' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0029' , - 'SNDZN1_INCR' , 'CATCHINCR_e0029' , - 'SNDZN2_INCR' , 'CATCHINCR_e0029' , - 'SNDZN3_INCR' , 'CATCHINCR_e0029' , - -:: -catch_progn_incr0030.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0030.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0030.mode: 'instantaneous', -catch_progn_incr0030.frequency: 030000, -catch_progn_incr0030.ref_time: 013000, -catch_progn_incr0030.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0030' , - 'TCFTRN_INCR' , 'CATCHINCR_e0030' , - 'TCFWLT_INCR' , 'CATCHINCR_e0030' , - 'QCFSAT_INCR' , 'CATCHINCR_e0030' , - 'QCFTRN_INCR' , 'CATCHINCR_e0030' , - 'QCFWLT_INCR' , 'CATCHINCR_e0030' , - 'CAPAC_INCR' , 'CATCHINCR_e0030' , - 'CATDEF_INCR' , 'CATCHINCR_e0030' , - 'RZEXC_INCR' , 'CATCHINCR_e0030' , - 'SRFEXC_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0030' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0030' , - 'WESNN1_INCR' , 'CATCHINCR_e0030' , - 'WESNN2_INCR' , 'CATCHINCR_e0030' , - 'WESNN3_INCR' , 'CATCHINCR_e0030' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0030' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0030' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0030' , - 'SNDZN1_INCR' , 'CATCHINCR_e0030' , - 'SNDZN2_INCR' , 'CATCHINCR_e0030' , - 'SNDZN3_INCR' , 'CATCHINCR_e0030' , - -:: -catch_progn_incr0031.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0031.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0031.mode: 'instantaneous', -catch_progn_incr0031.frequency: 030000, -catch_progn_incr0031.ref_time: 013000, -catch_progn_incr0031.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0031' , - 'TCFTRN_INCR' , 'CATCHINCR_e0031' , - 'TCFWLT_INCR' , 'CATCHINCR_e0031' , - 'QCFSAT_INCR' , 'CATCHINCR_e0031' , - 'QCFTRN_INCR' , 'CATCHINCR_e0031' , - 'QCFWLT_INCR' , 'CATCHINCR_e0031' , - 'CAPAC_INCR' , 'CATCHINCR_e0031' , - 'CATDEF_INCR' , 'CATCHINCR_e0031' , - 'RZEXC_INCR' , 'CATCHINCR_e0031' , - 'SRFEXC_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0031' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0031' , - 'WESNN1_INCR' , 'CATCHINCR_e0031' , - 'WESNN2_INCR' , 'CATCHINCR_e0031' , - 'WESNN3_INCR' , 'CATCHINCR_e0031' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0031' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0031' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0031' , - 'SNDZN1_INCR' , 'CATCHINCR_e0031' , - 'SNDZN2_INCR' , 'CATCHINCR_e0031' , - 'SNDZN3_INCR' , 'CATCHINCR_e0031' , - -:: -catch_progn_incr0032.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0032.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr0032.mode: 'instantaneous', -catch_progn_incr0032.frequency: 030000, -catch_progn_incr0032.ref_time: 013000, -catch_progn_incr0032.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0032' , - 'TCFTRN_INCR' , 'CATCHINCR_e0032' , - 'TCFWLT_INCR' , 'CATCHINCR_e0032' , - 'QCFSAT_INCR' , 'CATCHINCR_e0032' , - 'QCFTRN_INCR' , 'CATCHINCR_e0032' , - 'QCFWLT_INCR' , 'CATCHINCR_e0032' , - 'CAPAC_INCR' , 'CATCHINCR_e0032' , - 'CATDEF_INCR' , 'CATCHINCR_e0032' , - 'RZEXC_INCR' , 'CATCHINCR_e0032' , - 'SRFEXC_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT1_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT2_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT3_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT4_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT5_INCR' , 'CATCHINCR_e0032' , - 'GHTCNT6_INCR' , 'CATCHINCR_e0032' , - 'WESNN1_INCR' , 'CATCHINCR_e0032' , - 'WESNN2_INCR' , 'CATCHINCR_e0032' , - 'WESNN3_INCR' , 'CATCHINCR_e0032' , - 'HTSNNN1_INCR' , 'CATCHINCR_e0032' , - 'HTSNNN2_INCR' , 'CATCHINCR_e0032' , - 'HTSNNN3_INCR' , 'CATCHINCR_e0032' , - 'SNDZN1_INCR' , 'CATCHINCR_e0032' , - 'SNDZN2_INCR' , 'CATCHINCR_e0032' , - 'SNDZN3_INCR' , 'CATCHINCR_e0032' , - -:: diff --git a/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.central b/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.central deleted file mode 100644 index 363af785..00000000 --- a/GEOSldas_App/sample_config_files/LADAS/HISTORY.rc.central +++ /dev/null @@ -1,98 +0,0 @@ -# -# Sample GEOSldas HISTORY.rc file for LADAS (central simulation) -# -# This sample is for the GEOSldas instance that is coupled with the central -# simulation component of the Hy4dEnVar ADAS: -# -# (1) The "catch_progn_incr" is output is the ensemble average. -# (2) The "catch_progn_incr" output is in tile space. Its definition is generic -# for any LADAS resolution. -# (3) The resolution of the "lndfcstana" output should be adjusted to match that -# of the LADAS. -# -################################################################################## - -VERSION: 1 -EXPID: MyGEOSldasCentral - -COLLECTIONS: - 'catch_progn_incr' - 'inst3_2d_lndfcstana_Nx' - :: - -GRID_LABELS: PC720x361-DC - PC576x361-DC - :: - -PC720x361-DC.GRID_TYPE: LatLon -PC720x361-DC.IM_WORLD: 720 -PC720x361-DC.JM_WORLD: 361 -PC720x361-DC.POLE: PC -PC720x361-DC.DATELINE: DC -PC720x361-DC.LM: 1 - -PC576x361-DC.GRID_TYPE: LatLon -PC576x361-DC.IM_WORLD: 576 -PC576x361-DC.JM_WORLD: 361 -PC576x361-DC.POLE: PC -PC576x361-DC.DATELINE: DC -PC576x361-DC.LM: 1 - - -catch_progn_incr.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation,Ensemble-Average Land Prognostics Increments', -catch_progn_incr.template: '%y4%m2%d2_%h2%n2z.bin', -catch_progn_incr.mode: 'instantaneous', -catch_progn_incr.frequency: 030000, -catch_progn_incr.ref_time: 013000, -catch_progn_incr.fields: 'TCFSAT_INCR' , 'LANDASSIM' , - 'TCFTRN_INCR' , 'LANDASSIM' , - 'TCFWLT_INCR' , 'LANDASSIM' , - 'QCFSAT_INCR' , 'LANDASSIM' , - 'QCFTRN_INCR' , 'LANDASSIM' , - 'QCFWLT_INCR' , 'LANDASSIM' , - 'CAPAC_INCR' , 'LANDASSIM' , - 'CATDEF_INCR' , 'LANDASSIM' , - 'RZEXC_INCR' , 'LANDASSIM' , - 'SRFEXC_INCR' , 'LANDASSIM' , - 'GHTCNT1_INCR' , 'LANDASSIM' , - 'GHTCNT2_INCR' , 'LANDASSIM' , - 'GHTCNT3_INCR' , 'LANDASSIM' , - 'GHTCNT4_INCR' , 'LANDASSIM' , - 'GHTCNT5_INCR' , 'LANDASSIM' , - 'GHTCNT6_INCR' , 'LANDASSIM' , - 'WESNN1_INCR' , 'LANDASSIM' , - 'WESNN2_INCR' , 'LANDASSIM' , - 'WESNN3_INCR' , 'LANDASSIM' , - 'HTSNNN1_INCR' , 'LANDASSIM' , - 'HTSNNN2_INCR' , 'LANDASSIM' , - 'HTSNNN3_INCR' , 'LANDASSIM' , - 'SNDZN1_INCR' , 'LANDASSIM' , - 'SNDZN2_INCR' , 'LANDASSIM' , - 'SNDZN3_INCR' , 'LANDASSIM' , - :: - - -inst3_2d_lndfcstana_Nx.descr: '2d,3-Hourly,Instantaneous,Single-Level,Assimilation,Ensemble-Average Land Forecast and Analysis Diagnostics', -inst3_2d_lndfcstana_Nx.template: '%y4%m2%d2_%h2%n2z.nc4', -inst3_2d_lndfcstana_Nx.archive: '%c/Y%y4', -inst3_2d_lndfcstana_Nx.mode: 'instantaneous', -inst3_2d_lndfcstana_Nx.frequency: 030000, -inst3_2d_lndfcstana_Nx.ref_time: 013000, -inst3_2d_lndfcstana_Nx.format: 'CFIO', -inst3_2d_lndfcstana_Nx.regrid_exch: '../input/tile.data', -inst3_2d_lndfcstana_Nx.regrid_name: 'PE180x1080-CF', -inst3_2d_lndfcstana_Nx.grid_label: PC576x361-DC, -inst3_2d_lndfcstana_Nx.deflate: 2, -inst3_2d_lndfcstana_Nx.fields: 'WCSF' , 'ENSAVG' , 'SFMC_FCST' , - 'WCRZ' , 'ENSAVG' , 'RZMC_FCST' , - 'WCPR' , 'ENSAVG' , 'PRMC_FCST' , - 'TPSURF' , 'ENSAVG' , 'TSURF_FCST' , - 'TSOIL1TILE' , 'ENSAVG' , 'TSOIL1_FCST' , - 'WCSF_ANA' , 'LANDASSIM' , 'SFMC_ANA' , - 'WCRZ_ANA' , 'LANDASSIM' , 'RZMC_ANA' , - 'WCPR_ANA' , 'LANDASSIM' , 'PRMC_ANA' , - 'TPSURF_ANA' , 'LANDASSIM' , 'TSURF_ANA' , - 'TSOIL1_ANA' , 'LANDASSIM' , 'TSOIL1_ANA' , - :: - -# ========================== EOF ============================================================== diff --git a/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.atmens b/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.atmens deleted file mode 100644 index 410505dd..00000000 --- a/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.atmens +++ /dev/null @@ -1,48 +0,0 @@ -# -# Sample GEOSldas "exeinp" file for LADAS (atm ensemble) -# -# This sample is for the GEOSldas instance that is coupled with the atmospheric -# ensemble component of the Hy4dEnVar ADAS: -# -# (1) Create exeinp template using: -# ldas_setup sample --exeinp > MY_exeinp.txt -# -# (2) Use the resource parameter settings below when editing MY_exeinp.txt -# -# (3) The following resource parameters are provided via fvsetup, -# which supersede the default in MY_exeinp.txt: -# ADAS_EXPDIR -# ADAS_EXPID -# EXP_ID -# MET_TAG -# BEG_DATE -# GID -############################################################################## - -# e.g., ATMENS_AGCM_GRID = CF0090x6C -EXP_DOMAIN: [ATMENS_AGCM_GRID]_GLOBAL - -NUM_LDAS_ENSEMBLE: [NUM_ATMENS_ENSEMBLE] - -LADAS_COUPLING: 2 - -ADAS_EXPDIR: [full_path]/[ADAS_EXPID] - -MET_TAG: [ADAS_EXPID]__bkg -MET_PATH: [ADAS_EXPDIR]/atmens/mem - -MET_HINTERP: 0 - -LAND_ASSIM: YES - -LANDASSIM_DT: 10800 -LANDASSIM_T0: 013000 - -FIRST_ENS_ID: 1 - -ENSEMBLE_FORCING: YES - -JOB_SGMT: 00000000 060000 -NUM_SGMT: 1 - -################################# EOF ######################################## diff --git a/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.central b/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.central deleted file mode 100644 index 0c682821..00000000 --- a/GEOSldas_App/sample_config_files/LADAS/exeinp.txt.Hy4dEnVar.central +++ /dev/null @@ -1,50 +0,0 @@ -# -# Sample GEOSldas "exeinp" file for LADAS (central simulation) -# -# This sample is for the GEOSldas instance that is coupled with the central -# simulation component of the Hy4dEnVar ADAS: -# -# (1) Create exeinp template using: -# ldas_setup sample --exeinp > MY_exeinp.txt -# -# (2) Use the resource parameter settings below when editing MY_exeinp.txt -# -# (3) The following resource parameters are provided via fvsetup, -# which supersede the default in MY_exeinp.txt -# ADAS_EXPDIR -# ADAS_EXPID -# EXP_ID -# MET_TAG -# BEG_DATE -# GID -############################################################################## - -# e.g., CENTRAL_AGCM_GRID = CF0360x6C -EXP_DOMAIN: [CENTRAL_AGCM_GRID]_GLOBAL - -LADAS_COUPLING: 1 - -ADAS_EXPDIR: [full_path]/[ADAS_EXPID] - -MET_TAG: [ADAS_EXPID]__bkg -MET_PATH: ../../../../recycle/holdpredout -# option to use perturbed forcing created from central simulation and atm ensemble -# MET_PATH: [ADAS_EXPDIR]/atmens/rgdlfo - -MET_HINTERP: 0 - -LAND_ASSIM: YES - -LANDASSIM_DT: 10800 -LANDASSIM_T0: 013000 - -FIRST_ENS_ID: 1 - -ENSEMBLE_FORCING: NO -# option to use perturbed forcing created from central simulation and atm ensemble -# ENSEMBLE_FORCING: YES - -JOB_SGMT: 00000000 060000 -NUM_SGMT: 1 - -################################# EOF ########################################