diff --git a/ci/cases/pr/C48_S2SWA_gefs.yaml b/ci/cases/pr/C48_S2SWA_gefs.yaml index a924b416c3..98f0fcfadb 100644 --- a/ci/cases/pr/C48_S2SWA_gefs.yaml +++ b/ci/cases/pr/C48_S2SWA_gefs.yaml @@ -15,7 +15,7 @@ arguments: expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR idate: 2021032312 edate: 2021032312 - yaml: {{ HOMEgfs }}/ci/cases/yamls/gefs_ci_defaults.yaml + yaml: {{ HOMEgfs }}/ci/cases/yamls/gefs_defaults_ci.yaml skip_ci_on_hosts: - wcoss2 diff --git a/ci/cases/pr/C96_S2SWA_gefs_replay_ics.yaml b/ci/cases/pr/C96_S2SWA_gefs_replay_ics.yaml new file mode 100644 index 0000000000..1475e81ea0 --- /dev/null +++ b/ci/cases/pr/C96_S2SWA_gefs_replay_ics.yaml @@ -0,0 +1,19 @@ +experiment: + system: gefs + mode: forecast-only + +arguments: + pslot: {{ 'pslot' | getenv }} + app: S2SWA + resdetatmos: 96 + resdetocean: 1.0 + resensatmos: 96 + nens: 2 + gfs_cyc: 1 + start: warm + comroot: {{ 'RUNTESTS' | getenv }}/COMROOT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + idate: 2020110100 + edate: 2020110100 + yaml: {{ HOMEgfs }}/ci/cases/yamls/gefs_replay_ci.yaml + icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C96mx100/20240610 diff --git a/ci/cases/yamls/gefs_ci_defaults.yaml b/ci/cases/yamls/gefs_defaults_ci.yaml similarity index 100% rename from ci/cases/yamls/gefs_ci_defaults.yaml rename to ci/cases/yamls/gefs_defaults_ci.yaml diff --git a/ci/cases/yamls/gefs_replay_ci.yaml b/ci/cases/yamls/gefs_replay_ci.yaml new file mode 100644 index 0000000000..dfbd9ae065 --- /dev/null +++ b/ci/cases/yamls/gefs_replay_ci.yaml @@ -0,0 +1,14 @@ +defaults: + !INC {{ HOMEgfs }}/parm/config/gefs/yaml/defaults.yaml +base: + ACCOUNT: {{ 'HPC_ACCOUNT' | getenv }} + REPLAY_ICS: "YES" + FCST_BREAKPOINTS: "" + FHMAX_GFS: 48 + FHMAX_HF_GFS: 24 + DO_EXTRACTVARS: "YES" + FHOUT_HF_GFS: 3 + FHOUT_OCN_GFS: 24 + FHOUT_ICE_GFS: 24 + HOMEDIR: {{ 'RUNTESTS' | getenv }}/GLOBAL + diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT index 769159be61..6be2d88906 100755 --- a/jobs/JGLOBAL_WAVE_POST_PNT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -25,7 +25,7 @@ export WAV_MOD_TAG=${RUN}wave${waveMEMB} export CFP_VERBOSE=1 -export FHMAX_WAV_PNT=${FHMAX_WAV} +export FHMAX_WAV_PNT=$(( FHMAX_WAV - OFFSET_START_HOUR )) export DOSPC_WAV='YES' # Spectral post export DOBLL_WAV='YES' # Bulletin post export DOBNDPNT_WAV='NO' #not boundary points diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index 89fd44500b..f5662bc687 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -4,15 +4,15 @@ enkf: required: # Logs {% for mem in range(1, nmem_ens + 1) %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}fcst_mem{{ '%03d' % mem }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_fcst_mem{{ '%03d' % mem }}.log" {% endfor %} {% for fhr in range(fhmin, fhmax + 1, fhout) %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}epos{{ '%03d' % (fhr - fhmin) }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_epos{{ '%03d' % (fhr - fhmin) }}.log" {% endfor %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}echgres.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}esfc.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_echgres.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_esfc.log" {% for grp in range(IAUFHRS | length) %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}ecen{{ '%03d' % grp }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_ecen{{ '%03d' % grp }}.log" {% endfor %} {% if lobsdiag_forenkf %} @@ -33,7 +33,7 @@ enkf: {% endif %} {% for step in steps %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}{{ step }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_{{ step }}.log" {% endfor %} # Ensemble mean and spread diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index 030678f31f..1e9597ba1c 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -5,33 +5,33 @@ gdas: required: {% if MODE == "cycled" %} # Cycled logs - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlprod.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}prep.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlprod.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_prep.log" {% if DO_JEDIATMVAR %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}prepatmiodaobs.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlinit.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlprod.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlfinal.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlfv3inc.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlvar.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_prepatmiodaobs.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlinit.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlprod.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlfinal.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlfv3inc.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlvar.log" {% else %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}anal.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}analdiag.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_anal.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_analdiag.log" {% endif %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmanlupp.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmanlupp.log" {% if DO_JEDIOCNVAR %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}prepoceanobs.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}marineanlinit.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}marinebmat.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}marineanlvar.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}marineanlfinal.log" - - "logs/{{ cycle_YMDH }}/{{ RUN }}marineanlchkpt.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_prepoceanobs.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_marineanlinit.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_marinebmat.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_marineanlvar.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_marineanlfinal.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_marineanlchkpt.log" {% if DOHYBVAR %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}ocnanalecen.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_ocnanalecen.log" {% endif %} {% endif %} {% if DO_VRFY_OCEANDA %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}ocnanalvrfy.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_ocnanalvrfy.log" {% endif %} # Analysis GRIB2 (sub-sampled) data @@ -85,7 +85,7 @@ gdas: - "{{ COMIN_ATMOS_OZNMON | relpath(ROTDIR) }}/time/bad_pen.{{ cycle_YMDH }}" - "{{ COMIN_ATMOS_OZNMON | relpath(ROTDIR) }}/time/stdout.time.tar.gz" - "{{ COMIN_ATMOS_OZNMON | relpath(ROTDIR) }}/horiz/stdout.horiz.tar.gz" - - "logs/{{ cycle_YMDH }}/{{ RUN }}verfozn.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_verfozn.log" {% endif %} # Radiance verification @@ -94,7 +94,7 @@ gdas: - "{{ COMIN_ATMOS_RADMON | relpath(ROTDIR) }}/radmon_bcoef.tar.gz" - "{{ COMIN_ATMOS_RADMON | relpath(ROTDIR) }}/radmon_bcor.tar.gz" - "{{ COMIN_ATMOS_RADMON | relpath(ROTDIR) }}/radmon_time.tar.gz" - - "logs/{{ cycle_YMDH }}/{{ RUN }}verfrad.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_verfrad.log" {% endif %} # Minimization monitor @@ -104,18 +104,18 @@ gdas: - "{{ COMIN_ATMOS_MINMON | relpath(ROTDIR) }}/{{ cycle_YMDH }}.gnorms.ieee_d" - "{{ COMIN_ATMOS_MINMON | relpath(ROTDIR) }}/{{ cycle_YMDH }}.reduction.ieee_d" - "{{ COMIN_ATMOS_MINMON | relpath(ROTDIR) }}/gnorm_data.txt" - - "logs/{{ cycle_YMDH }}/{{ RUN }}vminmon.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_vminmon.log" {% endif %} {% endif %} # End of cycled data # Forecast and post logs - - "logs/{{ cycle_YMDH }}/{{ RUN }}fcst_seg0.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_fcst_seg0.log" {% for fhr in range(0, FHMAX + 1, 3) %} {% set fhr3 = '%03d' % fhr %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmos_prod_f{{ fhr3 }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmos_prod_f{{ fhr3 }}.log" {% if not WRITE_DOPOST %} - - "logs/{{ cycle_YMDH }}/{{ RUN }}atmos_upp_f{{ fhr3 }}.log" + - "logs/{{ cycle_YMDH }}/{{ RUN }}_atmos_upp_f{{ fhr3 }}.log" {% endif %} ## not WRITE_DOPOST # Forecast GRIB2 data - "{{ COMIN_ATMOS_GRIB_0p25 | relpath(ROTDIR) }}/{{ head }}pgrb2.0p25.f{{ fhr3 }}" diff --git a/parm/archive/gefs_arcdir.yaml.j2 b/parm/archive/gefs_arcdir.yaml.j2 index a59a0e1a8f..d1008bc5c4 100644 --- a/parm/archive/gefs_arcdir.yaml.j2 +++ b/parm/archive/gefs_arcdir.yaml.j2 @@ -17,11 +17,17 @@ {% set COMIN_ATMOS_ENSSTAT_1p00 = COM_ATMOS_GRIB_GRID_TMPL | replace_tmpl(tmpl_dict) %} +{% if REPLAY_ICS %} + {% set ofst_hr = FHOUT_GFS %} +{% else %} + {% set ofst_hr = FHMIN_GFS %} +{% endif %} + # Select ensstat files to copy to the arcdir {% if RUN == "gefs" %} {% set ensstat_files = [] %} {% if path_exists(COMIN_ATMOS_ENSSTAT_1p00) %} - {% for fhr in range(FHMIN_GFS, FHMAX_GFS + FHOUT_GFS, FHOUT_GFS) %} + {% for fhr in range(ofst_hr, FHMAX_GFS + FHOUT_GFS, FHOUT_GFS) %} {% do ensstat_files.append([COMIN_ATMOS_ENSSTAT_1p00 ~ "/" ~ head ~ "mean.pres_." ~ "1p00" ~ ".f" ~ '%03d'|format(fhr) ~ ".grib2", GEFS_ARCH]) %} diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index 226a7178fa..dcf059d871 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -6,7 +6,7 @@ gfsa: # Logs # TODO explicitly name all logs to include {% for log in glob("logs/" ~ cycle_YMDH ~ "/gfs*.log") %} - {% if not "gfsarch.log" in log %} + {% if not "gfs_arch.log" in log %} - "{{ log }}" {% endif %} {% endfor %} diff --git a/parm/config/gefs/config.atmos_products b/parm/config/gefs/config.atmos_products index 4a0fb8b49f..73614ba08e 100644 --- a/parm/config/gefs/config.atmos_products +++ b/parm/config/gefs/config.atmos_products @@ -16,7 +16,12 @@ export INTERP_ATMOS_MASTERSH="${USHgfs}/interp_atmos_master.sh" export INTERP_ATMOS_SFLUXSH="${USHgfs}/interp_atmos_sflux.sh" export downset=2 -export FHOUT_PGBS=${FHOUT_GFS:-3} # Output frequency of supplemental gfs pgb file at 1.0 and 0.5 deg + +if [[ "${FHMAX_HF_GFS:-0}" == "0" ]]; then + export FHOUT_PGBS=${FHOUT_GFS:-3} # Output frequency of supplemental gfs pgb file at 1.0 and 0.5 deg +else + export FHOUT_PGBS=${FHOUT_HF_GFS:-1} +fi export FLXGF="NO" # Create interpolated sflux.1p00 file # paramlist files for the different forecast hours and downsets diff --git a/parm/config/gefs/config.base b/parm/config/gefs/config.base index a0bd8b3bd1..6cf8488f91 100644 --- a/parm/config/gefs/config.base +++ b/parm/config/gefs/config.base @@ -229,6 +229,15 @@ export FHOUT_ICE=3 # GFS cycle info export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. +# set variables needed for use with REPLAY ICs +export REPLAY_ICS=@REPLAY_ICS@ +if [[ "${REPLAY_ICS:-NO}" == "YES" ]]; then + export OFFSET_START_HOUR=$(( assim_freq / 2 )) +else + export OFFSET_START_HOUR=0 +fi + + # GFS output and frequency export FHMIN_GFS=0 export FHMAX_GFS="@FHMAX_GFS@" @@ -238,10 +247,10 @@ export FCST_SEGMENTS="${FHMIN_GFS},${breakpnts:+${breakpnts},}${FHMAX_GFS}" export FHOUT_GFS=6 export FHMAX_HF_GFS=@FHMAX_HF_GFS@ -export FHOUT_HF_GFS=1 -export FHOUT_OCN_GFS=6 -export FHOUT_ICE_GFS=6 -export FHMIN_WAV=0 +export FHOUT_HF_GFS=@FHOUT_HF_GFS@ +export FHOUT_OCN_GFS=@FHOUT_OCN_GFS@ +export FHOUT_ICE_GFS=@FHOUT_ICE_GFS@ +export FHMIN_WAV=${OFFSET_START_HOUR:-0} export FHOUT_WAV=3 export FHMAX_HF_WAV=120 export FHOUT_HF_WAV=1 @@ -290,20 +299,9 @@ export NMEM_ENS=@NMEM_ENS@ export ENSMEM=${ENSMEM:-"000"} export MEMDIR="mem${ENSMEM}" -# initialize ocean ensemble members with perturbations -# if true, only occurs for members greater than zero -export REPLAY_ICS=@REPLAY_ICS@ -if [[ "${REPLAY_ICS:-NO}" == "YES" ]]; then - export OFFSET_START_HOUR=$(( assim_freq / 2 )) -else - export OFFSET_START_HOUR=0 -fi - export DOIAU="NO" # While we are not doing IAU, we may want to warm start w/ IAU in the future -# Check if cycle is cold starting -if [[ "${EXP_WARM_START}" = ".false." ]]; then - export IAU_FHROT=${OFFSET_START_HOUR} -else +# Check if cycle is warm starting with IAU +if [[ "${EXP_WARM_START}" = ".true." ]]; then if [[ "${DOIAU}" = "YES" ]]; then export IAU_FHROT=3 else diff --git a/parm/config/gefs/config.efcs b/parm/config/gefs/config.efcs index 807ed66d48..9bd55afa54 100644 --- a/parm/config/gefs/config.efcs +++ b/parm/config/gefs/config.efcs @@ -46,10 +46,6 @@ export SKEB_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3" export SKEBNORM=1 export SKEB_NPASS=30 export SKEB_VDOF=5 -export DO_SHUM="YES" -export SHUM=0.005 -export SHUM_TAU=21600. -export SHUM_LSCALE=500000. export DO_SPPT="YES" export SPPT="0.56,0.28,0.14,0.056,0.028" export SPPT_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7" diff --git a/parm/config/gefs/config.extractvars b/parm/config/gefs/config.extractvars index cc93fcf5e0..7f1166a869 100644 --- a/parm/config/gefs/config.extractvars +++ b/parm/config/gefs/config.extractvars @@ -14,7 +14,7 @@ export compress_ice=1 #1: Compress extracted ice product, 0: Do not compress ext export ocnres="1p00" # Resolution of ocean products export iceres="native" # Resolution of ice products -export wavres="0p25" # Resolution of wave products +export wavres="${waveGRD:4:1}p${waveGRD:5:2}" # Resolution of wave products export depthvar_name="z_l" # Name of depth variable in NetCDF ocean products export zmin="0." # Minimum depth to extract from NetCDF ocean products diff --git a/parm/config/gefs/yaml/defaults.yaml b/parm/config/gefs/yaml/defaults.yaml index 382e60ee12..b5870b3e7e 100644 --- a/parm/config/gefs/yaml/defaults.yaml +++ b/parm/config/gefs/yaml/defaults.yaml @@ -11,7 +11,11 @@ base: DO_EXTRACTVARS: "NO" FHMAX_GFS: 120 FHMAX_HF_GFS: 0 + FHOUT_HF_GFS: 1 FCST_BREAKPOINTS: "48" REPLAY_ICS: "NO" USE_OCN_PERTURB_FILES: "false" + FHOUT_OCN_GFS: 6 + FHOUT_ICE_GFS: 6 + HPSSARCH: "NO" LOCALARCH: "NO" diff --git a/parm/product/gefs.0p25.fFFF.paramlist.a.txt b/parm/product/gefs.0p25.fFFF.paramlist.a.txt index a4a3ace385..303752ac17 100644 --- a/parm/product/gefs.0p25.fFFF.paramlist.a.txt +++ b/parm/product/gefs.0p25.fFFF.paramlist.a.txt @@ -12,13 +12,14 @@ :CSNOW:surface: :CFRZR:surface: :CICEP:surface: +:FDNSSTMP:surface: :PWAT:entire atmosphere (considered as a single layer): :CAPE:180-0 mb above ground: :CAPE:surface: :CIN:180-0 mb above ground: :CIN:surface: :HLCY:3000-0 m above ground: -:TCDC:entire atmosphere: +:TCDC:entire atmosphere (considered as a single layer): :WEASD:surface: :SNOD:surface: :ULWRF:top of atmosphere: diff --git a/parm/product/gefs.0p25.fFFF.paramlist.b.txt b/parm/product/gefs.0p25.fFFF.paramlist.b.txt index 85f5e6f711..ccad9da4d0 100644 --- a/parm/product/gefs.0p25.fFFF.paramlist.b.txt +++ b/parm/product/gefs.0p25.fFFF.paramlist.b.txt @@ -346,6 +346,7 @@ :TMP:surface: :TMP:tropopause: :TOZNE:entire atmosphere (considered as a single layer): +:TSNOWP:surface: :TSOIL:0.1-0.4 m below ground: :TSOIL:0.4-1 m below ground: :TSOIL:1-2 m below ground: diff --git a/parm/stage/atmosphere_perturbation.yaml.j2 b/parm/stage/atmosphere_ens_perturbations.yaml.j2 similarity index 79% rename from parm/stage/atmosphere_perturbation.yaml.j2 rename to parm/stage/atmosphere_ens_perturbations.yaml.j2 index 0e097b71dc..d9caf58b72 100644 --- a/parm/stage/atmosphere_perturbation.yaml.j2 +++ b/parm/stage/atmosphere_ens_perturbations.yaml.j2 @@ -1,12 +1,12 @@ -atmosphere_perturbation: +atmosphere_ens_perturbation: mkdir: - {% for mem in range(first_mem, last_mem + 1) %} + {% for mem in range(first_mem + 1, last_mem + 1) %} {% set imem = mem - first_mem %} {% set COMOUT_ATMOS_ANALYSIS_MEM = COMOUT_ATMOS_ANALYSIS_MEM_list[imem] %} - "{{ COMOUT_ATMOS_ANALYSIS_MEM }}" {% endfor %} # mem loop copy: - {% for mem in range(first_mem, last_mem + 1) %} + {% for mem in range(first_mem + 1, last_mem + 1) %} {% set imem = mem - first_mem %} {% set COMOUT_ATMOS_ANALYSIS_MEM = COMOUT_ATMOS_ANALYSIS_MEM_list[imem] %} - ["{{ ICSDIR }}/{{ COMOUT_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ m_prefix }}.fv3_perturbation.nc", "{{ COMOUT_ATMOS_ANALYSIS_MEM }}/{{ RUN }}.t{{ current_cycle_HH }}z.atminc.nc"] diff --git a/parm/stage/master_gefs.yaml.j2 b/parm/stage/master_gefs.yaml.j2 index bdd4c8de5f..2bfe3a9d58 100644 --- a/parm/stage/master_gefs.yaml.j2 +++ b/parm/stage/master_gefs.yaml.j2 @@ -116,7 +116,7 @@ {% if REPLAY_ICS %} {% filter indent(width=4) %} -{% include "atmosphere_perturbation.yaml.j2" %} +{% include "atmosphere_ens_perturbations.yaml.j2" %} {% endfilter %} {% endif %} @@ -137,7 +137,7 @@ {% endif %} {% if REPLAY_ICS %} {% filter indent(width=4) %} -{% include "ocean_replay.yaml.j2" %} +{% include "ocean_ens_perturbations.yaml.j2" %} {% endfilter %} {% endif %} {% if EXP_WARM_START %} diff --git a/parm/stage/ocean_replay.yaml.j2 b/parm/stage/ocean_ens_perturbations.yaml.j2 similarity index 79% rename from parm/stage/ocean_replay.yaml.j2 rename to parm/stage/ocean_ens_perturbations.yaml.j2 index 8b52108bec..fede3816a7 100644 --- a/parm/stage/ocean_replay.yaml.j2 +++ b/parm/stage/ocean_ens_perturbations.yaml.j2 @@ -1,12 +1,12 @@ -ocean_replay: +ocean_ens_perturbation: mkdir: - {% for mem in range(first_mem, last_mem + 1) %} + {% for mem in range(first_mem + 1, last_mem + 1) %} {% set imem = mem - first_mem %} {% set COMOUT_OCEAN_ANALYSIS_MEM = COMOUT_OCEAN_ANALYSIS_MEM_list[imem] %} - "{{ COMOUT_OCEAN_ANALYSIS_MEM }}" {% endfor %} # mem loop copy: - {% for mem in range(first_mem, last_mem + 1) %} + {% for mem in range(first_mem + 1, last_mem + 1) %} {% set imem = mem - first_mem %} {% set COMOUT_OCEAN_ANALYSIS_MEM = COMOUT_OCEAN_ANALYSIS_MEM_list[imem] %} - ["{{ ICSDIR }}/{{ COMOUT_OCEAN_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ m_prefix }}.mom6_perturbation.nc", "{{ COMOUT_OCEAN_ANALYSIS_MEM }}/mom6_increment.nc"] diff --git a/scripts/exgfs_wave_post_pnt.sh b/scripts/exgfs_wave_post_pnt.sh index 0b8874f3fb..06769303a1 100755 --- a/scripts/exgfs_wave_post_pnt.sh +++ b/scripts/exgfs_wave_post_pnt.sh @@ -252,7 +252,9 @@ source "${USHgfs}/preamble.sh" ww3_outp_spec.inp.tmpl > ww3_outp.inp ${NLN} mod_def.$waveuoutpGRD mod_def.ww3 - HMS="${cyc}0000" + #export OFFSET_START_HOUR=$( printf "%02d" ${half_assim} ) + hh=$( printf "%02d" $(( cyc + OFFSET_START_HOUR )) ) + HMS="${hh}0000" if [[ -f "${COMIN_WAVE_HISTORY}/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${PDY}.${HMS}" ]]; then ${NLN} "${COMIN_WAVE_HISTORY}/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${PDY}.${HMS}" \ "./out_pnt.${waveuoutpGRD}" diff --git a/ush/extractvars_tools.sh b/ush/extractvars_tools.sh index daf61a3d2e..51c2586cb5 100644 --- a/ush/extractvars_tools.sh +++ b/ush/extractvars_tools.sh @@ -17,7 +17,8 @@ check_atmos() { done mapfile -t requestedvar_in_allgrb2file_arr < "${requestedvar_in_allgrb2file}" while read -r vari; do - if [[ ! ${requestedvar_in_allgrb2file_arr[*]} =~ ${vari} ]] ;then + # shellcheck disable=SC2076 + if [[ ! ${requestedvar_in_allgrb2file_arr[*]} =~ "${vari}" ]] ;then echo "WARNING: PARM VARIABLE (${vari}) is not available in pgrb and pgrb2b for f${fnhl}." fi done <"${varlistl}" diff --git a/ush/ocnice_extractvars.sh b/ush/ocnice_extractvars.sh index 51276172b9..78c4cbd91e 100755 --- a/ush/ocnice_extractvars.sh +++ b/ush/ocnice_extractvars.sh @@ -21,15 +21,23 @@ comout_rfcst_prod_ocnice=${6} [[ -d "${subdata}" ]] || mkdir -p "${subdata}" -for (( nh = FHMIN_GFS; nh <= FHMAX_GFS; nh = nh + fhout_ocnice )); do +for (( nh = FHMIN_GFS + fhout_ocnice; nh <= FHMAX_GFS; nh = nh + fhout_ocnice )); do fnh=$(printf "%3.3d" "${nh}") if [[ ${component_name} == "ocn" ]]; then - infile=${COMIN_OCEAN_NETCDF}/${datares}/${RUN}.ocean.t${cyc}z.${datares}.f${fnh}.nc + if [[ "${datares}" == "native" ]]; then + infile="${COMIN_OCEAN_HISTORY}/${RUN}.ocean.t${cyc}z.${fhout_ocnice}hr_avg.f${fnh}.nc" + else + infile="${COMIN_OCEAN_NETCDF}/${datares}/${RUN}.ocean.t${cyc}z.${datares}.f${fnh}.nc" + fi # For ocean products, add an argument to extract a subset of levels otherargs=(-d "${depthvar_name},""${zmin},""${zmax}") elif [[ ${component_name} == "ice" ]]; then - infile=${COMIN_ICE_NETCDF}/${datares}/${RUN}.ice.t${cyc}z.${datares}.f${fnh}.nc + if [[ "${datares}" == "native" ]]; then + infile="${COMIN_ICE_HISTORY}/${RUN}.ice.t${cyc}z.${fhout_ocnice}hr_avg.f${fnh}.nc" + else + infile="${COMIN_ICE_NETCDF}/${datares}/${RUN}.ice.t${cyc}z.${datares}.f${fnh}.nc" + fi otherargs=() fi outfile=${subdata}/${RUN}.${component_name}.t${cyc}z.${datares}.f${fnh}.nc diff --git a/ush/parsing_namelists_MOM6.sh b/ush/parsing_namelists_MOM6.sh index 9010851806..3ac2cb465e 100755 --- a/ush/parsing_namelists_MOM6.sh +++ b/ush/parsing_namelists_MOM6.sh @@ -41,6 +41,12 @@ cat input.nml # --------- # Prepare local variables for use in MOM_input.IN from UFSWM # The ones already defined are left commented as a reminder +# == MOM options to start from coarsed grained restarts, set to off by default +# options only available for 05 and 1 degree grids +# as restarts are coarsed grained/interpolated from the 0.25 degrees grid +local MOM6_INIT_FROM_Z=${MOM6_INIT_FROM_Z:-True} +local MOM6_WARMSTART_FILE=${MOM6_WARMSTART_FILE:-"none"} +local MOM6_INIT_UV=${MOM6_INIT_UV:-"zero"} # == MOM_domains section == # NX_GLB # NY_GLB diff --git a/workflow/rocoto/gefs_tasks.py b/workflow/rocoto/gefs_tasks.py index e214bb8c19..955f631c8e 100644 --- a/workflow/rocoto/gefs_tasks.py +++ b/workflow/rocoto/gefs_tasks.py @@ -12,7 +12,7 @@ def __init__(self, app_config: AppConfig, run: str) -> None: def stage_ic(self): resources = self.get_resource('stage_ic') - task_name = f'stage_ic' + task_name = f'gefs_stage_ic' task_dict = {'task_name': task_name, 'resources': resources, 'envars': self.envars, @@ -29,7 +29,7 @@ def stage_ic(self): def waveinit(self): resources = self.get_resource('waveinit') - task_name = f'wave_init' + task_name = f'gefs_wave_init' task_dict = {'task_name': task_name, 'resources': resources, 'envars': self.envars, @@ -45,12 +45,12 @@ def waveinit(self): def prep_emissions(self): deps = [] - dep_dict = {'type': 'task', 'name': f'stage_ic'} + dep_dict = {'type': 'task', 'name': f'gefs_stage_ic'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('prep_emissions') - task_name = 'prep_emissions' + task_name = 'gefs_prep_emissions' task_dict = {'task_name': task_name, 'resources': resources, 'envars': self.envars, @@ -66,15 +66,15 @@ def prep_emissions(self): def fcst(self): dependencies = [] - dep_dict = {'type': 'task', 'name': f'stage_ic'} + dep_dict = {'type': 'task', 'name': f'gefs_stage_ic'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave: - dep_dict = {'type': 'task', 'name': f'wave_init'} + dep_dict = {'type': 'task', 'name': f'gefs_wave_init'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_aero: - dep_dict = {'type': 'task', 'name': f'prep_emissions'} + dep_dict = {'type': 'task', 'name': f'gefs_prep_emissions'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) @@ -87,7 +87,7 @@ def fcst(self): fcst_vars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('fcst') - task_name = f'fcst_mem000_seg#seg#' + task_name = f'gefs_fcst_mem000_seg#seg#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -100,7 +100,7 @@ def fcst(self): } seg_var_dict = {'seg': ' '.join([f"{seg}" for seg in range(0, num_fcst_segments)])} - metatask_dict = {'task_name': f'fcst_mem000', + metatask_dict = {'task_name': f'gefs_fcst_mem000', 'is_serial': True, 'var_dict': seg_var_dict, 'task_dict': task_dict @@ -112,15 +112,15 @@ def fcst(self): def efcs(self): dependencies = [] - dep_dict = {'type': 'task', 'name': f'stage_ic'} + dep_dict = {'type': 'task', 'name': f'gefs_stage_ic'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave: - dep_dict = {'type': 'task', 'name': f'wave_init'} + dep_dict = {'type': 'task', 'name': f'gefs_wave_init'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_aero: - dep_dict = {'type': 'task', 'name': f'prep_emissions'} + dep_dict = {'type': 'task', 'name': f'gefs_prep_emissions'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) @@ -144,7 +144,7 @@ def efcs(self): for key, value in efcsenvars_dict.items(): efcsenvars.append(rocoto.create_envar(name=key, value=str(value))) - task_name = f'fcst_mem{member}_seg#seg#' + task_name = f'gefs_fcst_mem{member}_seg#seg#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -157,7 +157,7 @@ def efcs(self): } seg_var_dict = {'seg': ' '.join([f"{seg}" for seg in range(0, num_fcst_segments)])} - seg_metatask_dict = {'task_name': f'fcst_mem{member}', + seg_metatask_dict = {'task_name': f'gefs_fcst_mem{member}', 'is_serial': True, 'var_dict': seg_var_dict, 'task_dict': task_dict @@ -170,7 +170,7 @@ def efcs(self): # Keeping this in hopes the kludge is no longer necessary at some point # # member_var_dict = {'member': ' '.join([f"{mem:03d}" for mem in range(1, self.nmem + 1)])} - # mem_metatask_dict = {'task_name': 'fcst_ens', + # mem_metatask_dict = {'task_name': 'gefs_fcst_ens', # 'is_serial': False, # 'var_dict': member_var_dict, # 'task_dict': seg_metatask_dict @@ -215,7 +215,7 @@ def _atmosoceaniceprod(self, component: str): data = f'{history_path}/{history_file_tmpl}' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'fcst_mem#member#'} + dep_dict = {'type': 'metatask', 'name': 'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='or') @@ -227,7 +227,7 @@ def _atmosoceaniceprod(self, component: str): for key, value in postenvar_dict.items(): postenvars.append(rocoto.create_envar(name=key, value=str(value))) - task_name = f'{component}_prod_mem#member#_f#fhr#' + task_name = f'gefs_{component}_prod_mem#member#_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -254,12 +254,12 @@ def _atmosoceaniceprod(self, component: str): fhrs_next = fhrs[1:] + [fhrs[-1] + (fhrs[-1] - fhrs[-2])] fhr_var_dict['fhr_next'] = ' '.join([f"{fhr:03d}" for fhr in fhrs_next]) - fhr_metatask_dict = {'task_name': f'{component}_prod_#member#', + fhr_metatask_dict = {'task_name': f'gefs_{component}_prod_#member#', 'task_dict': task_dict, 'var_dict': fhr_var_dict} member_var_dict = {'member': ' '.join([f"{mem:03d}" for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': f'{component}_prod', + member_metatask_dict = {'task_name': f'gefs_{component}_prod', 'task_dict': fhr_metatask_dict, 'var_dict': member_var_dict} @@ -273,7 +273,7 @@ def atmos_ensstat(self): deps = [] for member in range(0, self.nmem + 1): - task = f'atmos_prod_mem{member:03d}_f#fhr#' + task = f'gefs_atmos_prod_mem{member:03d}_f#fhr#' dep_dict = {'type': 'task', 'name': task} deps.append(rocoto.add_dependency(dep_dict)) @@ -284,7 +284,7 @@ def atmos_ensstat(self): for key, value in postenvar_dict.items(): postenvars.append(rocoto.create_envar(name=key, value=str(value))) - task_name = f'atmos_ensstat_f#fhr#' + task_name = f'gefs_atmos_ensstat_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -304,7 +304,7 @@ def atmos_ensstat(self): fhr_var_dict = {'fhr': ' '.join([f"{fhr:03d}" for fhr in fhrs])} - fhr_metatask_dict = {'task_name': f'atmos_ensstat', + fhr_metatask_dict = {'task_name': f'gefs_atmos_ensstat', 'task_dict': task_dict, 'var_dict': fhr_var_dict} @@ -314,7 +314,7 @@ def atmos_ensstat(self): def wavepostsbs(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'fcst_mem#member#'} + dep_dict = {'type': 'metatask', 'name': f'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -327,7 +327,7 @@ def wavepostsbs(self): resources = self.get_resource('wavepostsbs') - task_name = f'wave_post_grid_mem#member#' + task_name = f'gefs_wave_post_grid_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -340,7 +340,7 @@ def wavepostsbs(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'wave_post_grid', + member_metatask_dict = {'task_name': 'gefs_wave_post_grid', 'task_dict': task_dict, 'var_dict': member_var_dict } @@ -351,7 +351,7 @@ def wavepostsbs(self): def wavepostbndpnt(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'fcst_mem#member#'} + dep_dict = {'type': 'metatask', 'name': f'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -363,7 +363,7 @@ def wavepostbndpnt(self): wave_post_bndpnt_envars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('wavepostbndpnt') - task_name = f'wave_post_bndpnt_mem#member#' + task_name = f'gefs_wave_post_bndpnt_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -376,7 +376,7 @@ def wavepostbndpnt(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'wave_post_bndpnt', + member_metatask_dict = {'task_name': 'gefs_wave_post_bndpnt', 'task_dict': task_dict, 'var_dict': member_var_dict } @@ -396,7 +396,7 @@ def wavepostbndpntbll(self): dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'fcst_mem#member#'} + dep_dict = {'type': 'metatask', 'name': f'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) @@ -408,7 +408,7 @@ def wavepostbndpntbll(self): wave_post_bndpnt_bull_envars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('wavepostbndpntbll') - task_name = f'wave_post_bndpnt_bull_mem#member#' + task_name = f'gefs_wave_post_bndpnt_bull_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -421,7 +421,7 @@ def wavepostbndpntbll(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'wave_post_bndpnt_bull', + member_metatask_dict = {'task_name': 'gefs_wave_post_bndpnt_bull', 'task_dict': task_dict, 'var_dict': member_var_dict } @@ -432,10 +432,10 @@ def wavepostbndpntbll(self): def wavepostpnt(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'fcst_mem#member#'} + dep_dict = {'type': 'metatask', 'name': f'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave_bnd: - dep_dict = {'type': 'task', 'name': f'wave_post_bndpnt_bull_mem#member#'} + dep_dict = {'type': 'task', 'name': f'gefs_wave_post_bndpnt_bull_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) @@ -447,7 +447,7 @@ def wavepostpnt(self): wave_post_pnt_envars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('wavepostpnt') - task_name = f'wave_post_pnt_mem#member#' + task_name = f'gefs_wave_post_pnt_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -460,7 +460,7 @@ def wavepostpnt(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'wave_post_pnt', + member_metatask_dict = {'task_name': 'gefs_wave_post_pnt', 'task_dict': task_dict, 'var_dict': member_var_dict } @@ -475,13 +475,13 @@ def extractvars(self): dep_dict = {'type': 'task', 'name': 'wave_post_grid_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ocean: - dep_dict = {'type': 'metatask', 'name': 'ocean_prod_#member#'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ocean_prod_#member#'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ice: - dep_dict = {'type': 'metatask', 'name': 'ice_prod_#member#'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ice_prod_#member#'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_atm: - dep_dict = {'type': 'metatask', 'name': 'atmos_prod_#member#'} + dep_dict = {'type': 'metatask', 'name': 'gefs_atmos_prod_#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) extractvars_envars = self.envars.copy() @@ -492,7 +492,7 @@ def extractvars(self): extractvars_envars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('extractvars') - task_name = f'extractvars_mem#member#' + task_name = f'gefs_extractvars_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -505,7 +505,7 @@ def extractvars(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'extractvars', + member_metatask_dict = {'task_name': 'gefs_extractvars', 'task_dict': task_dict, 'var_dict': member_var_dict } @@ -516,28 +516,28 @@ def extractvars(self): def arch(self): deps = [] - dep_dict = {'type': 'metatask', 'name': 'atmos_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'atmos_ensstat'} + dep_dict = {'type': 'metatask', 'name': 'gefs_atmos_ensstat'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ice: - dep_dict = {'type': 'metatask', 'name': 'ice_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ice_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ocean: - dep_dict = {'type': 'metatask', 'name': 'ocean_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ocean_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave: - dep_dict = {'type': 'metatask', 'name': 'wave_post_grid'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_grid'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'wave_post_pnt'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_pnt'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave_bnd: - dep_dict = {'type': 'metatask', 'name': 'wave_post_bndpnt'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_bndpnt'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'wave_post_bndpnt_bull'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_bndpnt_bull'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_extractvars: - dep_dict = {'type': 'metatask', 'name': 'extractvars'} + dep_dict = {'type': 'metatask', 'name': 'gefs_extractvars'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') @@ -565,30 +565,30 @@ def cleanup(self): deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) else: - dep_dict = {'type': 'metatask', 'name': 'atmos_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'atmos_ensstat'} + dep_dict = {'type': 'metatask', 'name': 'gefs_atmos_ensstat'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ice: - dep_dict = {'type': 'metatask', 'name': 'ice_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ice_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ocean: - dep_dict = {'type': 'metatask', 'name': 'ocean_prod'} + dep_dict = {'type': 'metatask', 'name': 'gefs_ocean_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave: - dep_dict = {'type': 'metatask', 'name': 'wave_post_grid'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_grid'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'wave_post_pnt'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_pnt'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave_bnd: - dep_dict = {'type': 'metatask', 'name': 'wave_post_bndpnt'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_bndpnt'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'wave_post_bndpnt_bull'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_bndpnt_bull'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') resources = self.get_resource('cleanup') - task_name = 'cleanup' + task_name = 'gefs_cleanup' task_dict = {'task_name': task_name, 'resources': resources, 'envars': self.envars, diff --git a/workflow/rocoto/gfs_tasks.py b/workflow/rocoto/gfs_tasks.py index 6b9d6358c6..7c56f25583 100644 --- a/workflow/rocoto/gfs_tasks.py +++ b/workflow/rocoto/gfs_tasks.py @@ -21,7 +21,7 @@ def stage_ic(self): cycledef = 'gdas_half' if self.run in ['gdas', 'enkfgdas'] else self.run resources = self.get_resource('stage_ic') - task_name = f'{self.run}stage_ic' + task_name = f'{self.run}_stage_ic' task_dict = {'task_name': task_name, 'resources': resources, 'envars': self.envars, @@ -48,7 +48,7 @@ def prep(self): gfs_enkf = True if self.app_config.do_hybvar and 'gfs' in self.app_config.eupd_runs else False deps = [] - dep_dict = {'type': 'metatask', 'name': 'gdasatmos_prod', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'gdas_atmos_prod', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) data = f'{atm_hist_path}/gdas.t@Hz.atmf009.nc' dep_dict = {'type': 'data', 'data': data, 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} @@ -63,7 +63,7 @@ def prep(self): cycledef = 'gdas' resources = self.get_resource('prep') - task_name = f'{self.run}prep' + task_name = f'{self.run}_prep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -86,14 +86,14 @@ def waveinit(self): cycledef = 'gdas_half,gdas' if self.run in ['gdas'] else self.run if self.app_config.mode in ['cycled']: deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) if self.run in ['gdas']: dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task_name = f'{self.run}waveinit' + task_name = f'{self.run}_waveinit' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -112,12 +112,12 @@ def waveinit(self): def waveprep(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}waveinit'} + dep_dict = {'type': 'task', 'name': f'{self.run}_waveinit'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) cycledef = 'gdas_half,gdas' if self.run in ['gdas'] else self.run resources = self.get_resource('waveprep') - task_name = f'{self.run}waveprep' + task_name = f'{self.run}_waveprep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -168,7 +168,7 @@ def aerosol_init(self): cycledef = 'gfs_seq' resources = self.get_resource('aerosol_init') - task_name = f'{self.run}aerosol_init' + task_name = f'{self.run}_aerosol_init' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -186,17 +186,17 @@ def aerosol_init(self): def anal(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_hybvar: - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) else: dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('anal') - task_name = f'{self.run}anal' + task_name = f'{self.run}_anal' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -216,19 +216,19 @@ def sfcanl(self): deps = [] if self.app_config.do_jediatmvar: - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlfinal'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}anal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_anal'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_jedisnowda: - dep_dict = {'type': 'task', 'name': f'{self.run}snowanl'} + dep_dict = {'type': 'task', 'name': f'{self.run}_snowanl'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) else: dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('sfcanl') - task_name = f'{self.run}sfcanl' + task_name = f'{self.run}_sfcanl' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -248,19 +248,19 @@ def analcalc(self): deps = [] if self.app_config.do_jediatmvar: - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlfinal'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}anal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_anal'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}sfcanl'} + dep_dict = {'type': 'task', 'name': f'{self.run}_sfcanl'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_hybvar and self.run in ['gdas']: - dep_dict = {'type': 'task', 'name': 'enkfgdasechgres', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'task', 'name': 'enkfgdas_echgres', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('analcalc') - task_name = f'{self.run}analcalc' + task_name = f'{self.run}_analcalc' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -279,12 +279,12 @@ def analcalc(self): def analdiag(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}anal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_anal'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('analdiag') - task_name = f'{self.run}analdiag' + task_name = f'{self.run}_analdiag' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -303,12 +303,12 @@ def analdiag(self): def prepatmiodaobs(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('prepatmiodaobs') - task_name = f'{self.run}prepatmiodaobs' + task_name = f'{self.run}_prepatmiodaobs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -327,10 +327,10 @@ def prepatmiodaobs(self): def atmanlinit(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prepatmiodaobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prepatmiodaobs'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_hybvar: - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) else: @@ -344,7 +344,7 @@ def atmanlinit(self): cycledef = 'gdas' resources = self.get_resource('atmanlinit') - task_name = f'{self.run}atmanlinit' + task_name = f'{self.run}_atmanlinit' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -363,12 +363,12 @@ def atmanlinit(self): def atmanlvar(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlinit'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlinit'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('atmanlvar') - task_name = f'{self.run}atmanlvar' + task_name = f'{self.run}_atmanlvar' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -387,12 +387,12 @@ def atmanlvar(self): def atmanlfv3inc(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlvar'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlvar'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('atmanlfv3inc') - task_name = f'{self.run}atmanlfv3inc' + task_name = f'{self.run}_atmanlfv3inc' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -411,12 +411,12 @@ def atmanlfv3inc(self): def atmanlfinal(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlfv3inc'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlfv3inc'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('atmanlfinal') - task_name = f'{self.run}atmanlfinal' + task_name = f'{self.run}_atmanlfinal' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -434,12 +434,12 @@ def atmanlfinal(self): def prepobsaero(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('prepobsaero') - task_name = f'{self.run}prepobsaero' + task_name = f'{self.run}_prepobsaero' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -458,12 +458,12 @@ def prepobsaero(self): def aeroanlgenb(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('aeroanlgenb') - task_name = f'{self.run}aeroanlgenb' + task_name = f'{self.run}_aeroanlgenb' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -482,18 +482,18 @@ def aeroanlgenb(self): def aeroanlinit(self): deps = [] - dep_dict = {'type': 'task', 'name': 'gdasaeroanlgenb', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'task', 'name': 'gdas_aeroanlgenb', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_prep_obs_aero: - dep_dict = {'type': 'task', 'name': f'{self.run}prepobsaero'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prepobsaero'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('aeroanlinit') - task_name = f'{self.run}aeroanlinit' + task_name = f'{self.run}_aeroanlinit' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -513,18 +513,18 @@ def aeroanlvar(self): deps = [] dep_dict = { - 'type': 'task', 'name': f'gdasaeroanlgenb', + 'type': 'task', 'name': f'gdas_aeroanlgenb', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}", } deps.append(rocoto.add_dependency(dep_dict)) dep_dict = { - 'type': 'task', 'name': f'{self.run}aeroanlinit', + 'type': 'task', 'name': f'{self.run}_aeroanlinit', } deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('aeroanlvar') - task_name = f'{self.run}aeroanlvar' + task_name = f'{self.run}_aeroanlvar' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -543,12 +543,12 @@ def aeroanlvar(self): def aeroanlfinal(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}aeroanlvar'} + dep_dict = {'type': 'task', 'name': f'{self.run}_aeroanlvar'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('aeroanlfinal') - task_name = f'{self.run}aeroanlfinal' + task_name = f'{self.run}_aeroanlfinal' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -567,12 +567,12 @@ def aeroanlfinal(self): def prepsnowobs(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('prepsnowobs') - task_name = f'{self.run}prepsnowobs' + task_name = f'{self.run}_prepsnowobs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -591,12 +591,12 @@ def prepsnowobs(self): def snowanl(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prepsnowobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prepsnowobs'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('snowanl') - task_name = f'{self.run}snowanl' + task_name = f'{self.run}_snowanl' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -614,16 +614,16 @@ def snowanl(self): def esnowrecen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}prepsnowobs'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_prepsnowobs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}snowanl'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_snowanl'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'{self.run}epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('esnowrecen') - task_name = f'{self.run}esnowrecen' + task_name = f'{self.run}_esnowrecen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -649,7 +649,7 @@ def prepoceanobs(self): dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('prepoceanobs') - task_name = f'{self.run}prepoceanobs' + task_name = f'{self.run}_prepoceanobs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -676,7 +676,7 @@ def marinebmat(self): dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('marinebmat') - task_name = f'{self.run}marinebmat' + task_name = f'{self.run}_marinebmat' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -695,16 +695,16 @@ def marinebmat(self): def marineanlinit(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}prepoceanobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_prepoceanobs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}marinebmat'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marinebmat'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'gdasfcst', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'gdas_fcst', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('marineanlinit') - task_name = f'{self.run}marineanlinit' + task_name = f'{self.run}_marineanlinit' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -723,12 +723,12 @@ def marineanlinit(self): def marineanlvar(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlinit'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlinit'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('marineanlvar') - task_name = f'{self.run}marineanlvar' + task_name = f'{self.run}_marineanlvar' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -747,12 +747,12 @@ def marineanlvar(self): def ocnanalecen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlvar'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlvar'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('ocnanalecen') - task_name = f'{self.run}ocnanalecen' + task_name = f'{self.run}_ocnanalecen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -772,9 +772,9 @@ def marineanlchkpt(self): deps = [] if self.app_config.do_hybvar: - dep_dict = {'type': 'task', 'name': f'{self.run}ocnanalecen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_ocnanalecen'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlvar'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlvar'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_mergensst: data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.sfcanl.nc' @@ -783,7 +783,7 @@ def marineanlchkpt(self): dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('marineanlchkpt') - task_name = f'{self.run}marineanlchkpt' + task_name = f'{self.run}_marineanlchkpt' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -802,12 +802,12 @@ def marineanlchkpt(self): def marineanlfinal(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlchkpt'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlchkpt'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('marineanlfinal') - task_name = f'{self.run}marineanlfinal' + task_name = f'{self.run}_marineanlfinal' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -826,12 +826,12 @@ def marineanlfinal(self): def ocnanalvrfy(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlfinal'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('ocnanalvrfy') - task_name = f'{self.run}ocnanalvrfy' + task_name = f'{self.run}_ocnanalvrfy' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -864,12 +864,12 @@ def fcst(self): def _fcst_forecast_only(self): dependencies = [] - dep_dict = {'type': 'task', 'name': f'{self.run}stage_ic'} + dep_dict = {'type': 'task', 'name': f'{self.run}_stage_ic'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave and self.run in self.app_config.wave_runs: wave_job = 'waveprep' if self.app_config.model_app in ['ATMW'] else 'waveinit' - dep_dict = {'type': 'task', 'name': f'{self.run}{wave_job}'} + dep_dict = {'type': 'task', 'name': f'{self.run}_{wave_job}'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_aero and \ @@ -883,7 +883,7 @@ def _fcst_forecast_only(self): interval = self._base['INTERVAL'] offset = timedelta_to_HMS(-interval) deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}aerosol_init'} + dep_dict = {'type': 'task', 'name': f'{self.run}_aerosol_init'} deps.append(rocoto.add_dependency(dep_dict)) dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': offset} deps.append(rocoto.add_dependency(dep_dict)) @@ -902,7 +902,7 @@ def _fcst_forecast_only(self): fcst_vars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('fcst') - task_name = f'{self.run}fcst_seg#seg#' + task_name = f'{self.run}_fcst_seg#seg#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -915,7 +915,7 @@ def _fcst_forecast_only(self): } seg_var_dict = {'seg': ' '.join([f"{seg}" for seg in range(0, num_fcst_segments)])} - metatask_dict = {'task_name': f'{self.run}fcst', + metatask_dict = {'task_name': f'{self.run}_fcst', 'is_serial': True, 'var_dict': seg_var_dict, 'task_dict': task_dict @@ -927,31 +927,31 @@ def _fcst_forecast_only(self): def _fcst_cycled(self): - dep_dict = {'type': 'task', 'name': f'{self.run}sfcanl'} + dep_dict = {'type': 'task', 'name': f'{self.run}_sfcanl'} dep = rocoto.add_dependency(dep_dict) dependencies = rocoto.create_dependency(dep=dep) if self.app_config.do_jediocnvar: - dep_dict = {'type': 'task', 'name': f'{self.run}marineanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_marineanlfinal'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_aero and self.run in self.app_config.aero_anl_runs: - dep_dict = {'type': 'task', 'name': f'{self.run}aeroanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_aeroanlfinal'} dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_jedisnowda: - dep_dict = {'type': 'task', 'name': f'{self.run}snowanl'} + dep_dict = {'type': 'task', 'name': f'{self.run}_snowanl'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) if self.run in ['gdas']: - dep_dict = {'type': 'task', 'name': f'{self.run}stage_ic'} + dep_dict = {'type': 'task', 'name': f'{self.run}_stage_ic'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) if self.app_config.do_wave and self.run in self.app_config.wave_runs: - dep_dict = {'type': 'task', 'name': f'{self.run}waveprep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_waveprep'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) @@ -968,7 +968,7 @@ def _fcst_cycled(self): fcst_vars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('fcst') - task_name = f'{self.run}fcst_seg#seg#' + task_name = f'{self.run}_fcst_seg#seg#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -981,7 +981,7 @@ def _fcst_cycled(self): } seg_var_dict = {'seg': ' '.join([f"{seg}" for seg in range(0, num_fcst_segments)])} - metatask_dict = {'task_name': f'{self.run}fcst', + metatask_dict = {'task_name': f'{self.run}_fcst', 'is_serial': True, 'var_dict': seg_var_dict, 'task_dict': task_dict @@ -1011,7 +1011,7 @@ def atmanlupp(self): deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') resources = self.get_resource('upp') - task_name = f'{self.run}atmanlupp' + task_name = f'{self.run}_atmanlupp' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1040,7 +1040,7 @@ def atmanlprod(self): deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('atmos_products') - task_name = f'{self.run}atmanlprod' + task_name = f'{self.run}_atmanlprod' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1089,7 +1089,7 @@ def _upptask(self, upp_run="forecast", task_id="atmupp"): cycledef = 'gdas_half,gdas' if self.run in ['gdas'] else self.run resources = self.get_resource('upp') - task_name = f'{self.run}{task_id}_f#fhr#' + task_name = f'{self.run}_{task_id}_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1104,7 +1104,7 @@ def _upptask(self, upp_run="forecast", task_id="atmupp"): fhrs = self._get_forecast_hours(self.run, self._configs['upp']) fhr_var_dict = {'fhr': ' '.join([f"{fhr:03d}" for fhr in fhrs])} - metatask_dict = {'task_name': f'{self.run}{task_id}', + metatask_dict = {'task_name': f'{self.run}_{task_id}', 'task_dict': task_dict, 'var_dict': fhr_var_dict } @@ -1149,14 +1149,14 @@ def _atmosoceaniceprod(self, component: str): data = f'{history_path}/{history_file_tmpl}' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='or') cycledef = 'gdas_half,gdas' if self.run in ['gdas'] else self.run resources = self.get_resource(component_dict['config']) - task_name = f'{self.run}{component}_prod_f#fhr#' + task_name = f'{self.run}_{component}_prod_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1178,7 +1178,7 @@ def _atmosoceaniceprod(self, component: str): if component in ['ocean']: fhrs_next = fhrs[1:] + [fhrs[-1] + (fhrs[-1] - fhrs[-2])] fhr_var_dict['fhr_next'] = ' '.join([f"{fhr:03d}" for fhr in fhrs_next]) - metatask_dict = {'task_name': f'{self.run}{component}_prod', + metatask_dict = {'task_name': f'{self.run}_{component}_prod', 'task_dict': task_dict, 'var_dict': fhr_var_dict} @@ -1188,12 +1188,12 @@ def _atmosoceaniceprod(self, component: str): def wavepostsbs(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('wavepostsbs') - task_name = f'{self.run}wavepostsbs' + task_name = f'{self.run}_wavepostsbs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1211,12 +1211,12 @@ def wavepostsbs(self): def wavepostbndpnt(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('wavepostbndpnt') - task_name = f'{self.run}wavepostbndpnt' + task_name = f'{self.run}_wavepostbndpnt' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1245,7 +1245,7 @@ def wavepostbndpntbll(self): dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('wavepostbndpntbll') - task_name = f'{self.run}wavepostbndpntbll' + task_name = f'{self.run}_wavepostbndpntbll' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1263,15 +1263,15 @@ def wavepostbndpntbll(self): def wavepostpnt(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave_bnd: - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostbndpntbll'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostbndpntbll'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('wavepostpnt') - task_name = f'{self.run}wavepostpnt' + task_name = f'{self.run}_wavepostpnt' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1289,12 +1289,12 @@ def wavepostpnt(self): def wavegempak(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostsbs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostsbs'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('wavegempak') - task_name = f'{self.run}wavegempak' + task_name = f'{self.run}_wavegempak' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1312,14 +1312,14 @@ def wavegempak(self): def waveawipsbulls(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostsbs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostsbs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostpnt'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostpnt'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('waveawipsbulls') - task_name = f'{self.run}waveawipsbulls' + task_name = f'{self.run}_waveawipsbulls' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1337,12 +1337,12 @@ def waveawipsbulls(self): def waveawipsgridded(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostsbs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostsbs'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('waveawipsgridded') - task_name = f'{self.run}waveawipsgridded' + task_name = f'{self.run}_waveawipsgridded' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1360,12 +1360,12 @@ def waveawipsgridded(self): def postsnd(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('postsnd') - task_name = f'{self.run}postsnd' + task_name = f'{self.run}_postsnd' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1402,7 +1402,7 @@ def fbwind(self): # prematurely starting with partial files. Unfortunately, the # ability to "group" post would make this more convoluted than # it should be and not worth the complexity. - task_name = f'{self.run}fbwind' + task_name = f'{self.run}_fbwind' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1457,7 +1457,7 @@ def _get_awipsgroups(run, config): def awips_20km_1p0deg(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -1474,7 +1474,7 @@ def awips_20km_1p0deg(self): resources = self.get_resource('awips') - task_name = f'{self.run}awips_20km_1p0deg#{varname1}#' + task_name = f'{self.run}_awips_20km_1p0deg#{varname1}#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1486,7 +1486,7 @@ def awips_20km_1p0deg(self): 'maxtries': '&MAXTRIES;' } - metatask_dict = {'task_name': f'{self.run}awips_20km_1p0deg', + metatask_dict = {'task_name': f'{self.run}_awips_20km_1p0deg', 'task_dict': task_dict, 'var_dict': var_dict } @@ -1498,7 +1498,7 @@ def awips_20km_1p0deg(self): def gempak(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmos_prod_f#fhr#'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmos_prod_f#fhr#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -1508,7 +1508,7 @@ def gempak(self): gempak_vars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('gempak') - task_name = f'{self.run}gempak_f#fhr#' + task_name = f'{self.run}_gempak_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1523,7 +1523,7 @@ def gempak(self): fhrs = self._get_forecast_hours(self.run, self._configs['gempak']) fhr_var_dict = {'fhr': ' '.join([f"{fhr:03d}" for fhr in fhrs])} - fhr_metatask_dict = {'task_name': f'{self.run}gempak', + fhr_metatask_dict = {'task_name': f'{self.run}_gempak', 'task_dict': task_dict, 'var_dict': fhr_var_dict} @@ -1533,12 +1533,12 @@ def gempak(self): def gempakmeta(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}gempak'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_gempak'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('gempak') - task_name = f'{self.run}gempakmeta' + task_name = f'{self.run}_gempakmeta' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1556,12 +1556,12 @@ def gempakmeta(self): def gempakmetancdc(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}gempak'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_gempak'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('gempak') - task_name = f'{self.run}gempakmetancdc' + task_name = f'{self.run}_gempakmetancdc' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1579,12 +1579,12 @@ def gempakmetancdc(self): def gempakncdcupapgif(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}gempak'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_gempak'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('gempak') - task_name = f'{self.run}gempakncdcupapgif' + task_name = f'{self.run}_gempakncdcupapgif' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1602,7 +1602,7 @@ def gempakncdcupapgif(self): def gempakpgrb2spec(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}npoess_pgrb2_0p5deg'} + dep_dict = {'type': 'task', 'name': f'{self.run}_npoess_pgrb2_0p5deg'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -1612,7 +1612,7 @@ def gempakpgrb2spec(self): gempak_vars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('gempak') - task_name = f'{self.run}gempakgrb2spec_f#fhr#' + task_name = f'{self.run}_gempakgrb2spec_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1636,7 +1636,7 @@ def gempakpgrb2spec(self): fhrs = self._get_forecast_hours(self.run, local_config) fhr_var_dict = {'fhr': ' '.join([f"{fhr:03d}" for fhr in fhrs])} - fhr_metatask_dict = {'task_name': f'{self.run}gempakgrb2spec', + fhr_metatask_dict = {'task_name': f'{self.run}_gempakgrb2spec', 'task_dict': task_dict, 'var_dict': fhr_var_dict} @@ -1647,14 +1647,14 @@ def gempakpgrb2spec(self): def npoess_pgrb2_0p5deg(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlprod'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlprod'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'{self.run}goesupp'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_goesupp'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') resources = self.get_resource('npoess') - task_name = f'{self.run}npoess_pgrb2_0p5deg' + task_name = f'{self.run}_npoess_pgrb2_0p5deg' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1672,12 +1672,12 @@ def npoess_pgrb2_0p5deg(self): def verfozn(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}analdiag'} + dep_dict = {'type': 'task', 'name': f'{self.run}_analdiag'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('verfozn') - task_name = f'{self.run}verfozn' + task_name = f'{self.run}_verfozn' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1695,12 +1695,12 @@ def verfozn(self): def verfrad(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}analdiag'} + dep_dict = {'type': 'task', 'name': f'{self.run}_analdiag'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('verfrad') - task_name = f'{self.run}verfrad' + task_name = f'{self.run}_verfrad' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1718,12 +1718,12 @@ def verfrad(self): def vminmon(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}anal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_anal'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('vminmon') - task_name = f'{self.run}vminmon' + task_name = f'{self.run}_vminmon' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1741,12 +1741,12 @@ def vminmon(self): def tracker(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('tracker') - task_name = f'{self.run}tracker' + task_name = f'{self.run}_tracker' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1764,12 +1764,12 @@ def tracker(self): def genesis(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('genesis') - task_name = f'{self.run}genesis' + task_name = f'{self.run}_genesis' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1787,12 +1787,12 @@ def genesis(self): def genesis_fsu(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('genesis_fsu') - task_name = f'{self.run}genesis_fsu' + task_name = f'{self.run}_genesis_fsu' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1810,12 +1810,12 @@ def genesis_fsu(self): def fit2obs(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('fit2obs') - task_name = f'{self.run}fit2obs' + task_name = f'{self.run}_fit2obs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1833,7 +1833,7 @@ def fit2obs(self): def metp(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}arch'} + dep_dict = {'type': 'task', 'name': f'{self.run}_arch'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) @@ -1853,7 +1853,7 @@ def metp(self): resources = self.get_resource('metp') - task_name = f'{self.run}metp#{varname1}#' + task_name = f'{self.run}_metp#{varname1}#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1865,7 +1865,7 @@ def metp(self): 'maxtries': '&MAXTRIES;' } - metatask_dict = {'task_name': f'{self.run}metp', + metatask_dict = {'task_name': f'{self.run}_metp', 'is_serial': True, 'task_dict': task_dict, 'var_dict': var_dict, @@ -1877,12 +1877,12 @@ def metp(self): def mos_stn_prep(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_stn_prep') - task_name = f'{self.run}mos_stn_prep' + task_name = f'{self.run}_mos_stn_prep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1900,12 +1900,12 @@ def mos_stn_prep(self): def mos_grd_prep(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_grd_prep') - task_name = f'{self.run}mos_grd_prep' + task_name = f'{self.run}_mos_grd_prep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1923,12 +1923,12 @@ def mos_grd_prep(self): def mos_ext_stn_prep(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_ext_stn_prep') - task_name = f'{self.run}mos_ext_stn_prep' + task_name = f'{self.run}_mos_ext_stn_prep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1946,12 +1946,12 @@ def mos_ext_stn_prep(self): def mos_ext_grd_prep(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_ext_grd_prep') - task_name = f'{self.run}mos_ext_grd_prep' + task_name = f'{self.run}_mos_ext_grd_prep' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1969,12 +1969,12 @@ def mos_ext_grd_prep(self): def mos_stn_fcst(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_stn_fcst') - task_name = f'{self.run}mos_stn_fcst' + task_name = f'{self.run}_mos_stn_fcst' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -1992,15 +1992,15 @@ def mos_stn_fcst(self): def mos_grd_fcst(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_grd_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_grd_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_grd_fcst') - task_name = f'{self.run}mos_grd_fcst' + task_name = f'{self.run}_mos_grd_fcst' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2018,15 +2018,15 @@ def mos_grd_fcst(self): def mos_ext_stn_fcst(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_stn_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_stn_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_ext_stn_fcst') - task_name = f'{self.run}mos_ext_stn_fcst' + task_name = f'{self.run}_mos_ext_stn_fcst' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2044,18 +2044,18 @@ def mos_ext_stn_fcst(self): def mos_ext_grd_fcst(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_stn_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_stn_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_grd_prep'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_grd_prep'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_grd_fcst'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_grd_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_ext_grd_fcst') - task_name = f'{self.run}mos_ext_grd_fcst' + task_name = f'{self.run}_mos_ext_grd_fcst' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2073,12 +2073,12 @@ def mos_ext_grd_fcst(self): def mos_stn_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_fcst'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_stn_prdgen') - task_name = f'{self.run}mos_stn_prdgen' + task_name = f'{self.run}_mos_stn_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2096,15 +2096,15 @@ def mos_stn_prdgen(self): def mos_grd_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_grd_fcst'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_grd_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_grd_prdgen') - task_name = f'{self.run}mos_grd_prdgen' + task_name = f'{self.run}_mos_grd_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2122,15 +2122,15 @@ def mos_grd_prdgen(self): def mos_ext_stn_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_stn_fcst'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_stn_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_stn_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_stn_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_ext_stn_prdgen') - task_name = f'{self.run}mos_ext_stn_prdgen' + task_name = f'{self.run}_mos_ext_stn_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2148,18 +2148,18 @@ def mos_ext_stn_prdgen(self): def mos_ext_grd_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_grd_fcst'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_grd_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_grd_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_grd_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_stn_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_stn_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_ext_grd_prdgen') - task_name = f'{self.run}mos_ext_grd_prdgen' + task_name = f'{self.run}_mos_ext_grd_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2177,12 +2177,12 @@ def mos_ext_grd_prdgen(self): def mos_wx_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_grd_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_grd_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('mos_wx_prdgen') - task_name = f'{self.run}mos_wx_prdgen' + task_name = f'{self.run}_mos_wx_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2200,15 +2200,15 @@ def mos_wx_prdgen(self): def mos_wx_ext_prdgen(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}mos_ext_grd_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_ext_grd_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}mos_wx_prdgen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_wx_prdgen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('mos_wx_ext_prdgen') - task_name = f'{self.run}mos_wx_ext_prdgen' + task_name = f'{self.run}_mos_wx_ext_prdgen' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2228,53 +2228,53 @@ def arch(self): deps = [] if self.app_config.mode in ['cycled']: if self.run in ['gfs']: - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlprod'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlprod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_vminmon: - dep_dict = {'type': 'task', 'name': f'{self.run}vminmon'} + dep_dict = {'type': 'task', 'name': f'{self.run}_vminmon'} deps.append(rocoto.add_dependency(dep_dict)) elif self.run in ['gdas']: - dep_dict = {'type': 'task', 'name': f'{self.run}atmanlprod'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmanlprod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_fit2obs: - dep_dict = {'type': 'task', 'name': f'{self.run}fit2obs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_fit2obs'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_verfozn: - dep_dict = {'type': 'task', 'name': f'{self.run}verfozn'} + dep_dict = {'type': 'task', 'name': f'{self.run}_verfozn'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_verfrad: - dep_dict = {'type': 'task', 'name': f'{self.run}verfrad'} + dep_dict = {'type': 'task', 'name': f'{self.run}_verfrad'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_vminmon: - dep_dict = {'type': 'task', 'name': f'{self.run}vminmon'} + dep_dict = {'type': 'task', 'name': f'{self.run}_vminmon'} deps.append(rocoto.add_dependency(dep_dict)) if self.run in ['gfs'] and self.app_config.do_tracker: - dep_dict = {'type': 'task', 'name': f'{self.run}tracker'} + dep_dict = {'type': 'task', 'name': f'{self.run}_tracker'} deps.append(rocoto.add_dependency(dep_dict)) if self.run in ['gfs'] and self.app_config.do_genesis: - dep_dict = {'type': 'task', 'name': f'{self.run}genesis'} + dep_dict = {'type': 'task', 'name': f'{self.run}_genesis'} deps.append(rocoto.add_dependency(dep_dict)) if self.run in ['gfs'] and self.app_config.do_genesis_fsu: - dep_dict = {'type': 'task', 'name': f'{self.run}genesis_fsu'} + dep_dict = {'type': 'task', 'name': f'{self.run}_genesis_fsu'} deps.append(rocoto.add_dependency(dep_dict)) # Post job dependencies - dep_dict = {'type': 'metatask', 'name': f'{self.run}atmos_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_atmos_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave: - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostsbs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostsbs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostpnt'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostpnt'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave_bnd: - dep_dict = {'type': 'task', 'name': f'{self.run}wavepostbndpnt'} + dep_dict = {'type': 'task', 'name': f'{self.run}_wavepostbndpnt'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ocean: if self.run in ['gfs']: - dep_dict = {'type': 'metatask', 'name': f'{self.run}ocean_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_ocean_prod'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ice: if self.run in ['gfs']: - dep_dict = {'type': 'metatask', 'name': f'{self.run}ice_prod'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_ice_prod'} deps.append(rocoto.add_dependency(dep_dict)) # MOS job dependencies if self.run in ['gfs'] and self.app_config.do_mos: @@ -2283,13 +2283,13 @@ def arch(self): "stn_prdgen", "grd_prdgen", "ext_stn_prdgen", "ext_grd_prdgen", "wx_prdgen", "wx_ext_prdgen"] for job in mos_jobs: - dep_dict = {'type': 'task', 'name': f'{self.run}mos_{job}'} + dep_dict = {'type': 'task', 'name': f'{self.run}_mos_{job}'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('arch') - task_name = f'{self.run}arch' + task_name = f'{self.run}_arch' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2309,35 +2309,35 @@ def arch(self): def cleanup(self): deps = [] if 'enkf' in self.run: - dep_dict = {'type': 'metatask', 'name': f'{self.run}eamn'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_eamn'} deps.append(rocoto.add_dependency(dep_dict)) else: - dep_dict = {'type': 'task', 'name': f'{self.run}arch'} + dep_dict = {'type': 'task', 'name': f'{self.run}_arch'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_gempak: if self.run in ['gdas']: - dep_dict = {'type': 'task', 'name': f'{self.run}gempakmetancdc'} + dep_dict = {'type': 'task', 'name': f'{self.run}_gempakmetancdc'} deps.append(rocoto.add_dependency(dep_dict)) elif self.run in ['gfs']: - dep_dict = {'type': 'task', 'name': f'{self.run}gempakmeta'} + dep_dict = {'type': 'task', 'name': f'{self.run}_gempakmeta'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}gempakncdcupapgif'} + dep_dict = {'type': 'task', 'name': f'{self.run}_gempakncdcupapgif'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_goes: - dep_dict = {'type': 'metatask', 'name': f'{self.run}gempakgrb2spec'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_gempakgrb2spec'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}npoess_pgrb2_0p5deg'} + dep_dict = {'type': 'task', 'name': f'{self.run}_npoess_pgrb2_0p5deg'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_metp and self.run in ['gfs']: - dep_dict = {'type': 'metatask', 'name': f'{self.run}metp'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_metp'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('cleanup') - task_name = f'{self.run}cleanup' + task_name = f'{self.run}_cleanup' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2356,14 +2356,14 @@ def cleanup(self): # Start of ensemble tasks def eobs(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}prep'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_prep'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('eobs') - task_name = f'{self.run}eobs' + task_name = f'{self.run}_eobs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2381,7 +2381,7 @@ def eobs(self): def eomg(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}eobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_eobs'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -2393,7 +2393,7 @@ def eomg(self): eomgenvars.append(rocoto.create_envar(name=key, value=str(value))) resources = self.get_resource('eomg') - task_name = f'{self.run}eomg_mem#member#' + task_name = f'{self.run}_eomg_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2406,7 +2406,7 @@ def eomg(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(1, self.nmem + 1)])} - metatask_dict = {'task_name': f'{self.run}eomg', + metatask_dict = {'task_name': f'{self.run}_eomg', 'var_dict': member_var_dict, 'task_dict': task_dict, } @@ -2417,12 +2417,12 @@ def eomg(self): def ediag(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}eobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_eobs'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('ediag') - task_name = f'{self.run}ediag' + task_name = f'{self.run}_ediag' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2441,14 +2441,14 @@ def ediag(self): def eupd(self): deps = [] if self.app_config.lobsdiag_forenkf: - dep_dict = {'type': 'task', 'name': f'{self.run}ediag'} + dep_dict = {'type': 'task', 'name': f'{self.run}_ediag'} else: - dep_dict = {'type': 'metatask', 'name': f'{self.run}eomg'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_eomg'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('eupd') - task_name = f'{self.run}eupd' + task_name = f'{self.run}_eupd' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2466,15 +2466,15 @@ def eupd(self): def atmensanlinit(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}prepatmiodaobs'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_prepatmiodaobs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) cycledef = "gdas" resources = self.get_resource('atmensanlinit') - task_name = f'{self.run}atmensanlinit' + task_name = f'{self.run}_atmensanlinit' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2493,14 +2493,14 @@ def atmensanlinit(self): def atmensanlobs(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlinit'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlinit'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('atmensanlobs') - task_name = f'{self.run}atmensanlobs' + task_name = f'{self.run}_atmensanlobs' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2519,14 +2519,14 @@ def atmensanlobs(self): def atmensanlsol(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlobs'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlobs'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('atmensanlsol') - task_name = f'{self.run}atmensanlsol' + task_name = f'{self.run}_atmensanlsol' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2545,14 +2545,14 @@ def atmensanlsol(self): def atmensanlletkf(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlinit'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlinit'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('atmensanlletkf') - task_name = f'{self.run}atmensanlletkf' + task_name = f'{self.run}_atmensanlletkf' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2572,16 +2572,16 @@ def atmensanlfv3inc(self): deps = [] if self.app_config.lobsdiag_forenkf: - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlsol'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlsol'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlletkf'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlletkf'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('atmensanlfv3inc') - task_name = f'{self.run}atmensanlfv3inc' + task_name = f'{self.run}_atmensanlfv3inc' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2600,12 +2600,12 @@ def atmensanlfv3inc(self): def atmensanlfinal(self): deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlfv3inc'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlfv3inc'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('atmensanlfinal') - task_name = f'{self.run}atmensanlfinal' + task_name = f'{self.run}_atmensanlfinal' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2647,12 +2647,12 @@ def _get_ecengroups(): return grp, dep, lst deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}analcalc'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_analcalc'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_jediatmens: - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlfinal'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}eupd'} + dep_dict = {'type': 'task', 'name': f'{self.run}_eupd'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) @@ -2668,7 +2668,7 @@ def _get_ecengroups(): resources = self.get_resource('ecen') - task_name = f'{self.run}ecen#{varname1}#' + task_name = f'{self.run}_ecen#{varname1}#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2680,7 +2680,7 @@ def _get_ecengroups(): 'maxtries': '&MAXTRIES;' } - metatask_dict = {'task_name': f'{self.run}ecmn', + metatask_dict = {'task_name': f'{self.run}_ecmn', 'var_dict': var_dict, 'task_dict': task_dict } @@ -2693,20 +2693,20 @@ def esfc(self): # eupd_run = 'gdas' if 'gdas' in self.app_config.eupd_runs else 'gfs' deps = [] - dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}analcalc'} + dep_dict = {'type': 'task', 'name': f'{self.run.replace("enkf","")}_analcalc'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_jediatmens: - dep_dict = {'type': 'task', 'name': f'{self.run}atmensanlfinal'} + dep_dict = {'type': 'task', 'name': f'{self.run}_atmensanlfinal'} else: - dep_dict = {'type': 'task', 'name': f'{self.run}eupd'} + dep_dict = {'type': 'task', 'name': f'{self.run}_eupd'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_jedisnowda: - dep_dict = {'type': 'task', 'name': f'{self.run}esnowrecen'} + dep_dict = {'type': 'task', 'name': f'{self.run}_esnowrecen'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('esfc') - task_name = f'{self.run}esfc' + task_name = f'{self.run}_esfc' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2725,12 +2725,12 @@ def esfc(self): def efcs(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}ecmn'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_ecmn'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}esfc'} + dep_dict = {'type': 'task', 'name': f'{self.run}_esfc'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - dep_dict = {'type': 'task', 'name': f'{self.run}stage_ic'} + dep_dict = {'type': 'task', 'name': f'{self.run}_stage_ic'} dependencies.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) @@ -2744,7 +2744,7 @@ def efcs(self): cycledef = 'gdas_half,gdas' if self.run in ['enkfgdas'] else self.run.replace('enkf', '') resources = self.get_resource('efcs') - task_name = f'{self.run}fcst_mem#member#' + task_name = f'{self.run}_fcst_mem#member#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2757,7 +2757,7 @@ def efcs(self): } member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(1, self.nmem + 1)])} - metatask_dict = {'task_name': f'{self.run}fcst', + metatask_dict = {'task_name': f'{self.run}_fcst', 'var_dict': member_var_dict, 'task_dict': task_dict } @@ -2771,16 +2771,16 @@ def echgres(self): self._is_this_a_gdas_task(self.run, 'echgres') deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run.replace("enkf","")}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run.replace("enkf","")}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.run}fcst_mem001'} + dep_dict = {'type': 'task', 'name': f'{self.run}_fcst_mem001'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) cycledef = 'gdas_half,gdas' if self.run in ['enkfgdas'] else self.run resources = self.get_resource('echgres') - task_name = f'{self.run}echgres' + task_name = f'{self.run}_echgres' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2821,7 +2821,7 @@ def _get_eposgroups(epos): return grp, dep, lst deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}fcst'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_fcst'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -2839,7 +2839,7 @@ def _get_eposgroups(epos): resources = self.get_resource('epos') - task_name = f'{self.run}epos#{varname1}#' + task_name = f'{self.run}_epos#{varname1}#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2851,7 +2851,7 @@ def _get_eposgroups(epos): 'maxtries': '&MAXTRIES;' } - metatask_dict = {'task_name': f'{self.run}epmn', + metatask_dict = {'task_name': f'{self.run}_epmn', 'var_dict': var_dict, 'task_dict': task_dict } @@ -2863,7 +2863,7 @@ def _get_eposgroups(epos): def earc(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}epmn'} + dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) @@ -2878,7 +2878,7 @@ def earc(self): var_dict = {'grp': groups} - task_name = f'{self.run}earc#grp#' + task_name = f'{self.run}_earc#grp#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -2890,7 +2890,7 @@ def earc(self): 'maxtries': '&MAXTRIES;' } - metatask_dict = {'task_name': f'{self.run}eamn', + metatask_dict = {'task_name': f'{self.run}_eamn', 'var_dict': var_dict, 'task_dict': task_dict }