From 1a444c52977334780f2c8e622c0d2a1a85f22fcf Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Wed, 4 Mar 2020 22:04:53 +0000 Subject: [PATCH 1/7] bug fix, POSTGRB2TBL undefined --- workflow/config/base.yaml | 1 + workflow/platforms/hera.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/workflow/config/base.yaml b/workflow/config/base.yaml index eaed2f8771e..afafeb1dbe6 100644 --- a/workflow/config/base.yaml +++ b/workflow/config/base.yaml @@ -75,6 +75,7 @@ config_base: # Utilities needed in the scripts (mostly post) {doc.platform.config_base_extras} + export POSTGRB2TBL="{doc.places.HOMEgfs}/sorc/gfs_post.fd/parm/params_grib2_tbl_new" # Toggle to turn on/off GFS downstream processing. export DO_BUFRSND="{tools.YES_NO(doc.downstream.DO_BUFRSND)}" # Run GFS_POSTSND diff --git a/workflow/platforms/hera.yaml b/workflow/platforms/hera.yaml index 6f1159dc804..b5e8c8c3cf7 100644 --- a/workflow/platforms/hera.yaml +++ b/workflow/platforms/hera.yaml @@ -36,7 +36,7 @@ platform: !Platform BASE_GIT: "/scratch1/NCEPDEV/global/glopara/git/" config_base_extras: !expand | - echo "place holder for NWPROD and associated utilities, now go through load_gfs_modules.sh" + echo "place holder for NWPROD and associated utilities, all except POSTGRB2TBL are going through load_gfs_modules.sh" CHGRP_RSTPROD_COMMAND: "chgrp rstprod" From 57b03622e769fbf6d1218bb3427877a1ea5d7eb6 Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Fri, 6 Mar 2020 16:12:54 +0000 Subject: [PATCH 2/7] clean up unused schema move default value into defaults/ --- workflow/defaults/case.yaml | 30 +++++++++++------------------- workflow/defaults/downstream.yaml | 6 ++++++ workflow/defaults/post.yaml | 14 ++++++++++++++ workflow/schema/case.yaml | 31 ------------------------------- workflow/schema/chgres.yaml | 10 ---------- workflow/schema/downstream.yaml | 23 ----------------------- workflow/schema/post.yaml | 12 ++++-------- 7 files changed, 35 insertions(+), 91 deletions(-) delete mode 100644 workflow/schema/case.yaml delete mode 100644 workflow/schema/chgres.yaml diff --git a/workflow/defaults/case.yaml b/workflow/defaults/case.yaml index 62ce0422923..e06cedfe0cd 100644 --- a/workflow/defaults/case.yaml +++ b/workflow/defaults/case.yaml @@ -3,13 +3,6 @@ # of the case files, default files, platform file, and everywhere # else, and applies any validation from the schema/ directory. -fv3_settings: !Immediate - - !MergeMapping - - CDUMP: gfs - Template: *fv3_settings_template - - !calc doc.fv3_defaults - - !calc doc.case.get('fv3_settings',{}) - ocn_settings: !Immediate - !MergeMapping - CDUMP: gfs @@ -32,7 +25,6 @@ schedvar: !Immediate fv3_gfs_settings: !Immediate - !MergeMapping - - !calc doc.fv3_settings - CDUMP: gfs Template: *fv3_settings_template - !calc doc.fv3_gfs_defaults @@ -41,32 +33,31 @@ fv3_gfs_settings: !Immediate fv3_enkf_settings: !Immediate - !MergeMapping - - !calc doc.fv3_settings - - !calc doc.fv3_enkf_defaults - CDUMP: gdas Template: *fv3_settings_template + - !calc doc.fv3_enkf_defaults - !calc doc.case.get('fv3_enkf_settings',{}) - !calc doc.get('user_fv3_enkf_settings',{}) fv3_gdas_settings: !Immediate - !MergeMapping - - !calc doc.fv3_settings - CDUMP: gdas Template: *fv3_settings_template - !calc doc.fv3_gdas_defaults - !calc doc.case.get('fv3_gdas_settings',{}) - - !calc doc.get('user_fv3_gfs_settings',{}) + - !calc doc.get('user_fv3_gdas_settings',{}) -gfs_output_settings: !Immediate +output_settings: !Immediate - !MergeMapping - - !calc doc.gfs_output_settings_defaults - - { Template: *gfs_output_settings_template } - - !calc doc.case.get('gfs_output_settings',{}) - - !calc doc.get('user_gfs_output_settings',{}) + - Template: *output_settings_template + - !calc doc.output_settings_defaults + - !calc doc.case.get('output_settings',{}) + - !calc doc.get('user_output_settings',{}) data_assimilation: !Immediate - !MergeMapping - { Template: *data_assimilation_template } + - !calc doc.data_assimilation_defaults - !calc doc.case.get('data_assimilation',{}) - !calc doc.get('user_data_assimilation',{}) @@ -101,6 +92,7 @@ places: !Immediate nsst: !Immediate - !MergeMapping - Template: *nsst_schema + - !calc doc.nsst_defaults - !calc doc.case.get('nsst',{}) - !calc doc.get('user_nsst',{}) @@ -119,6 +111,7 @@ settings: !Immediate archiving: !Immediate - !MergeMapping - Template: *archive_settings_template + - !calc doc.archiving_defaults - !calc doc.case.get('archiving',{}) - !calc doc.get('user_archiving',{}) @@ -129,11 +122,10 @@ suite_overrides: !Immediate - !calc doc.get('user_suite_overrides',[]) validate_me: - - fv3_settings - fv3_gfs_settings - fv3_enkf_settings - fv3_gdas_settings - - gfs_output_settings + - output_settings - data_assimilation - post - downstream diff --git a/workflow/defaults/downstream.yaml b/workflow/defaults/downstream.yaml index d9ba91a7ebf..ab1f8b6647f 100644 --- a/workflow/defaults/downstream.yaml +++ b/workflow/defaults/downstream.yaml @@ -1,4 +1,6 @@ downstream_defaults: &downstream_defaults + CDUMPFCST: gdas + CDFNL: gdas DO_POST_PROCESSING: NO DO_BUFRSND: NO DO_GEMPAK: NO @@ -6,6 +8,10 @@ downstream_defaults: &downstream_defaults DO_FAX: NO DO_WAFS: NO DO_BULLETINS: NO + FHOUT_CYCLONE_GFS: 6 + FHOUT_CYCLONE_GDAS: 3 + MKPGB4PRCP: yes + VDUMP: gfs VRFYFITS: NO VSDB_STEP1: NO VSDB_STEP2: NO diff --git a/workflow/defaults/post.yaml b/workflow/defaults/post.yaml index 4bb05e63b07..b3588fa7a5a 100644 --- a/workflow/defaults/post.yaml +++ b/workflow/defaults/post.yaml @@ -1,7 +1,21 @@ # default settings for post jobs post_defaults: &post_defaults + GOESF: yes + GTGF: no + FLXF: yes + PGB1F: yes + GFS_DOWNSTREAM: yes + downset: 1 NPOSTGRP: 5 + master_grid: "0p25deg" ocnpost_defaults: &ocnpost_defaults + GOESF: yes + GTGF: no + FLXF: yes + PGB1F: yes + GFS_DOWNSTREAM: yes + downset: 2 NPOSTGRP: 1 + master_grid: "0p25deg" diff --git a/workflow/schema/case.yaml b/workflow/schema/case.yaml deleted file mode 100644 index 3ee39bbffe4..00000000000 --- a/workflow/schema/case.yaml +++ /dev/null @@ -1,31 +0,0 @@ -case_template: !Template &case_template - gfs_cyc: - type: int - default: 2 - allowed: [ 0, 1, 2, 4 ] - description: | - When to run GFS forecast. Data assimilation is run for every - cycle regardless of these values - * 0: no GFS cycle - * 1: 00Z only - * 2: 00Z and 12Z only - * 4: all 4 cycles (0, 6, 12, 18 Z) - - SDATE: - type: datetime - description: | - First cycle to run. In the cycled workflow, this is a - "half-cycle" in that it only runs the parts of the workflow that - do not require a prior cycle. The first "real" cycle is the - following cycle. - - EDATE: - type: datetime - description: Last cycle to run GDAS. - - experiment_name: - type: string - default: !calc doc.experiment_name - description: | - User-defined experiment name; should be a-z followed by alphanumeric. - Formerly known as PSLOT. diff --git a/workflow/schema/chgres.yaml b/workflow/schema/chgres.yaml deleted file mode 100644 index 4de42b7a6d5..00000000000 --- a/workflow/schema/chgres.yaml +++ /dev/null @@ -1,10 +0,0 @@ -chgres_template: !Template &chgres_template - CHGRESVARS_ENKF: - type: string - default: "use_ufo=.true.,nopdpvv=.true." - - CHGRESTHREAD: - type: int - default: 12 - description: Number of threads to use for chgres - diff --git a/workflow/schema/downstream.yaml b/workflow/schema/downstream.yaml index bc936f8b6b1..816a6e1fbdd 100644 --- a/workflow/schema/downstream.yaml +++ b/workflow/schema/downstream.yaml @@ -8,83 +8,63 @@ downstream_schema: &downstream_schema !Template VDUMP: type: string - default: "gfs" description: verifying dump CDUMPFCST: type: string - default: "gdas" description: Fit-to-obs with GDAS/GFS prepbufr CDFNL: type: string - default: "gdas" description: Scores verification against GDAS/GFS analysis MKPGB4PRCP: type: bool - default: yes description: make 0.25-deg pgb files in ARCDIR for precip verification VRFYFITS: type: bool - default: YES description: "Fit to observations" VSDB_STEP1: type: bool - default: YES description: "populate VSDB database" VSDB_STEP2: type: bool - default: NO VRFYG2OBS: type: bool - default: YES description: "Grid to observations, see note below if turning ON" VRFYPRCP: type: bool - default: YES description: "Precip threat scores" VRFYRAD: type: bool - default: YES description: "Radiance data assimilation monitoring" VRFYOZN: type: bool - default: YES description: "Ozone data assimilation monitoring" VRFYMINMON: type: bool - default: YES description: "GSI minimization monitoring" VRFYTRAK: type: bool - default: YES description: "Hurricane track verification" VRFYGENESIS: type: bool - default: YES description: "Cyclone genesis verification" RUNMOS: type: bool - default: YES description: "Run GFS MOS" DO_POST_PROCESSING: type: bool - default: NO description: "Run post processing tasks (BUFRSND, GEMPAK, AWIPS, FAX, WAFS, BULLETINS" DO_BUFRSND: type: bool - default: NO description: "Run GFS_POSTSND" DO_GEMPAK: type: bool - default: NO description: "Run GEMPAK" DO_AWIPS: type: bool - default: NO description: "Run AWIPS" DO_FAX: type: bool - default: NO description: "Run FAX" DO_WAFS: type: bool @@ -92,12 +72,9 @@ downstream_schema: &downstream_schema !Template description: "Run WAFS" DO_BULLETINS: type: bool - default: NO description: "Run BULLETINS" FHOUT_CYCLONE_GFS: type: int - default: 6 FHOUT_CYCLONE_GDAS: type: int - default: 3 diff --git a/workflow/schema/post.yaml b/workflow/schema/post.yaml index 1d71b6ac10a..1ce3862a7c4 100644 --- a/workflow/schema/post.yaml +++ b/workflow/schema/post.yaml @@ -4,22 +4,18 @@ post_schema: &post_schema !Template GOESF: type: bool - default: yes description: make synthetic goes imagery GTGF: type: bool - default: no description: make gtg icing product FLXF: type: bool - default: yes description: grib2 flux file written by post - PGB1F: { type: bool, default: yes } - GFS_DOWNSTREAM: { type: bool, default: yes } - downset: { type: int, default: 1 } - NPOSTGRP: { type: int, default: 5 } + PGB1F: { type: bool } + GFS_DOWNSTREAM: { type: bool } + downset: { type: int } + NPOSTGRP: { type: int } master_grid: type: string - default: "0p25deg" allowed: [ "1deg", "0p5deg", "0p25deg", "0p125deg" ] description: Original grid of the post From 2068e438e959be3342b89a71620c9b0e0b3747a0 Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Fri, 6 Mar 2020 19:40:23 +0000 Subject: [PATCH 3/7] move all default values into /defaults from /schema It's better if we have one place to manage default values for configurable variables other than two Default values only for reference. Please throughly test to make sure it could reproduce. --- workflow/cases/coupled_free_forecast.yaml | 23 +- workflow/config/base.yaml | 38 ++-- workflow/config/fcst.yaml | 44 ++-- workflow/config/fv3.yaml | 60 +++--- workflow/defaults/archiving.yaml | 10 + workflow/defaults/data_assimilation.yaml | 37 ++++ workflow/defaults/default_resources.yaml | 4 +- workflow/defaults/fv3.yaml | 15 -- workflow/defaults/fv3_enkf.yaml | 201 ++++++++++++++--- workflow/defaults/fv3_gdas.yaml | 156 +++++++++++++- workflow/defaults/fv3_gfs.yaml | 158 +++++++++++++- workflow/defaults/gfs_output_settings.yaml | 7 - workflow/defaults/nsst.yaml | 8 + workflow/defaults/output_settings.yaml | 38 ++++ workflow/defaults/places.yaml | 12 ++ workflow/defaults/settings.yaml | 14 +- workflow/layout/cycled_gfs.yaml | 14 +- workflow/layout/free_forecast_gfs.yaml | 6 +- workflow/layout/nco.yaml | 14 +- workflow/layout/public_release_v1.yaml | 2 +- workflow/schema/archiving.yaml | 9 - workflow/schema/data_assimilation.yaml | 44 +--- workflow/schema/downstream.yaml | 1 - workflow/schema/fv3.yaml | 240 +++------------------ workflow/schema/ice.yaml | 1 - workflow/schema/nsst.yaml | 6 - workflow/schema/ocn.yaml | 1 - workflow/schema/output.yaml | 35 +-- workflow/schema/places.yaml | 28 +-- workflow/schema/post.yaml | 2 +- workflow/schema/settings.yaml | 54 +---- workflow/top.yaml | 4 +- 32 files changed, 760 insertions(+), 526 deletions(-) create mode 100644 workflow/defaults/archiving.yaml create mode 100644 workflow/defaults/data_assimilation.yaml delete mode 100644 workflow/defaults/fv3.yaml delete mode 100644 workflow/defaults/gfs_output_settings.yaml create mode 100644 workflow/defaults/nsst.yaml create mode 100644 workflow/defaults/output_settings.yaml diff --git a/workflow/cases/coupled_free_forecast.yaml b/workflow/cases/coupled_free_forecast.yaml index 31b575a004c..3303f6c084e 100644 --- a/workflow/cases/coupled_free_forecast.yaml +++ b/workflow/cases/coupled_free_forecast.yaml @@ -1,9 +1,4 @@ case: - fv3_settings: - nst_anl: False - hord_mt_nh_nonmono: 5 - hord_xx_nh_nonmono: 5 - places: workflow_file: layout/free_forecast_gfs.yaml MOM6IC: /scratch1/NCEPDEV/nems/Bin.Li/S2S/FROM_HPSS @@ -21,7 +16,7 @@ case: nsst: NST_MODEL: 0 - gfs_output_settings: + output_settings: OCN_INTERVAL: 24 FHOUT_GFS: 6 FHMIN_GFS: 0 @@ -33,16 +28,16 @@ case: CASE: C384 LEVS: 65 DELTIM: 450 - layout_x: 6 - layout_y: 8 - fv3_threads: 2 - WRITE_GROUP: 1 - WRTTASK_PER_GROUP: 24 - WRTIOBUF: "32M" + nst_anl: no + layout: + x: 6 + y: 8 + nth: 2 + WGRP: 1 + WGRP_NTASKS: 24 + WRTIOBUF: "32M" OCNPETS: 120 ICEPETS: 48 - hord_mt_nh_nonmono: 5 - hord_xx_nh_nonmono: 5 cdmbgwd: "1.0,1.2" post: diff --git a/workflow/config/base.yaml b/workflow/config/base.yaml index afafeb1dbe6..ac646f44043 100644 --- a/workflow/config/base.yaml +++ b/workflow/config/base.yaml @@ -158,7 +158,7 @@ config_base: #export COMOUTwmo="$ROTDIR/$CDUMP.$PDY/$cyc/wmo" # Resolution specific parameters - export LEVS={doc.fv3_settings.LEVS} + export LEVS={doc.fv3_gfs_settings.LEVS} export CASE="{doc.fv3_gfs_settings.CASE}" export CASE_ENKF="{doc.fv3_enkf_settings.CASE}" @@ -171,30 +171,30 @@ config_base: fi # Output frequency of the forecast model (for cycling) - export FHMIN={doc.gfs_output_settings.FHMIN_GDAS} - export FHMAX={doc.gfs_output_settings.FHMAX_GDAS} - export FHOUT={doc.gfs_output_settings.FHOUT_GDAS} + export FHMIN={doc.output_settings.FHMIN_GDAS} + export FHMAX={doc.output_settings.FHMAX_GDAS} + export FHOUT={doc.output_settings.FHOUT_GDAS} # GFS cycle info export gfs_cyc={doc.settings.gfs_cyc} # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. # GFS output and frequency - export FHMIN_GFS={doc.gfs_output_settings.FHMIN_GFS} - export FHMAX_GFS={doc.gfs_output_settings.FHMAX_GFS} - export FHOUT_GFS={doc.gfs_output_settings.FHOUT_GFS} - export FHMAX_HF_GFS={doc.gfs_output_settings.FHMAX_HF_GFS} - export FHOUT_HF_GFS={doc.gfs_output_settings.FHOUT_HF_GFS} - export FHRLST="{doc.gfs_output_settings.gfs_forecast_hours}" + export FHMIN_GFS={doc.output_settings.FHMIN_GFS} + export FHMAX_GFS={doc.output_settings.FHMAX_GFS} + export FHOUT_GFS={doc.output_settings.FHOUT_GFS} + export FHMAX_HF_GFS={doc.output_settings.FHMAX_HF_GFS} + export FHOUT_HF_GFS={doc.output_settings.FHOUT_HF_GFS} + export FHRLST="{doc.output_settings.gfs_forecast_hours}" # I/O QUILTING, true--use Write Component; false--use GFDL FMS # if quilting=true, choose OUTPUT_GRID as cubed_sphere_grid in netcdf or gaussian_grid # if gaussian_grid, set OUTPUT_FILE for nemsio or netcdf - export QUILTING="{tools.fort(doc.fv3_settings.QUILTING)}" - export OUTPUT_GRID="{doc.gfs_output_settings.OUTPUT_GRID}" - export OUTPUT_FILE="{doc.gfs_output_settings.OUTPUT_FILE_TYPE}" + export QUILTING="{tools.fort(doc.fv3_gdas_settings.QUILTING)}" + export OUTPUT_GRID="{doc.output_settings.OUTPUT_GRID}" + export OUTPUT_FILE="{doc.output_settings.OUTPUT_FILE_TYPE}" # Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL - export imp_physics={doc.fv3_settings.imp_physics} + export imp_physics={doc.fv3_gfs_settings.imp_physics} # Shared parameters # Hybrid related @@ -206,20 +206,20 @@ config_base: # EnKF output frequency if [ $DOHYBVAR = "YES" ]; then - export FHMIN_ENKF={doc.gfs_output_settings.FHMIN_ENKF} - export FHMAX_ENKF={doc.gfs_output_settings.FHMAX_ENKF} - export FHOUT_ENKF={doc.gfs_output_settings.FHOUT_ENKF} + export FHMIN_ENKF={doc.output_settings.FHMIN_ENKF} + export FHMAX_ENKF={doc.output_settings.FHMAX_ENKF} + export FHOUT_ENKF={doc.output_settings.FHOUT_ENKF} if [ $l4densvar = ".true." ]; then export FHOUT=1 fi fi # If YES, NSST is turned on in anal and/or fcst steps - export DONST="{tools.YES_NO(doc.fv3_settings.DONST)}" + export DONST="{tools.YES_NO(doc.fv3_gdas_settings.DONST)}" if [ $DONST = "YES" ]; then export FNTSFA=" "; fi # The switch to apply SST elevation correction or not - export nst_anl={tools.fort(doc.fv3_settings.nst_anl)} + export nst_anl={tools.fort(doc.fv3_gfs_settings.nst_anl)} # Analysis increments to zero in CALCINCEXEC export INCREMENTS_TO_ZERO="{tools.join(doc.data_assimilation.INCREMENTS_TO_ZERO,',')}" diff --git a/workflow/config/fcst.yaml b/workflow/config/fcst.yaml index 7c14856d4f6..f15ed81d288 100644 --- a/workflow/config/fcst.yaml +++ b/workflow/config/fcst.yaml @@ -9,18 +9,18 @@ config_fcst: do: "nems_fv3_mom6_cice5.x" - otherwise: "global_fv3gfs.x" more_exports_for_microphys: !FirstTrue - - when: !calc ( doc.fv3_settings.imp_physics==11 ) + - when: !calc ( doc.fv3_gdas_settings.imp_physics==11 ) do: !expand | - export hord_mt_nh_nonmono={doc.fv3_settings.hord_mt_nh_nonmono} - export hord_xx_nh_nonmono={doc.fv3_settings.hord_xx_nh_nonmono} - export vtdm4_nh_nonmono={doc.fv3_settings.vtdm4_nh_nonmono} - export nord={doc.fv3_settings.nord} - export dddmp={doc.fv3_settings.dddmp} - export d4_bg={doc.fv3_settings.d4_bg} + export hord_mt_nh_nonmono={doc.fv3_gdas_settings.phy_dependent_var.hord_mt_nh_nonmono} + export hord_xx_nh_nonmono={doc.fv3_gdas_settings.phy_dependent_var.hord_xx_nh_nonmono} + export vtdm4_nh_nonmono={doc.fv3_gdas_settings.phy_dependent_var.vtdm4_nh_nonmono} + export nord={doc.fv3_gdas_settings.phy_dependent_var.nord} + export dddmp={doc.fv3_gdas_settings.phy_dependent_var.dddmp} + export d4_bg={doc.fv3_gdas_settings.phy_dependent_var.d4_bg} - otherwise: "" level_127: !FirstTrue - - when: !calc doc.fv3_settings.LEVS==128 + - when: !calc doc.fv3_gdas_settings.LEVS==128 do: !expand | export tau=5.0 export rf_cutoff=1.0e3 @@ -60,8 +60,8 @@ config_fcst: export npe_fcst="{resource_a[0].mpi_ranks}" export npe_fcst_gfs="{resource_b[0].mpi_ranks}" export npe_node_fcst="{resource_a[0].max_ppn}" - export nth_fcst="{doc.fv3_gfs_settings.fv3_threads}" - export NTHREADS_FV3="{doc.fv3_gfs_settings.fv3_threads}" + export nth_fcst="{doc.fv3_gfs_settings.layout.nth}" + export NTHREADS_FV3="{doc.fv3_gfs_settings.layout.nth}" export memory_fcst="1024M" ####################################################################### @@ -83,24 +83,24 @@ config_fcst: export FCSTEXEC="{FCSTEXEC}" # Model configuration - export TYPE="{doc.fv3_settings.nh_type}" - export MONO="{doc.fv3_settings.MONO}" + export TYPE="{doc.fv3_gdas_settings.nh_type}" + export MONO="{doc.fv3_gdas_settings.MONO}" # Use stratosphere h2o physics - export h2o_phys="{tools.fort(doc.fv3_settings.h2o_phys)}" + export h2o_phys="{tools.fort(doc.fv3_gdas_settings.h2o_phys)}" # Options of stratosphere O3 physics reaction coefficients - export new_o3forc="{tools.YES_NO(doc.fv3_settings_template.new_o3force)}" + export new_o3forc="{tools.YES_NO(doc.fv3_gdas_settings.new_o3force)}" # Microphysics configuration - export dnats={doc.fv3_settings.dnats} - export cal_pre="{tools.fort(doc.fv3_settings.cal_pre)}" - export do_sat_adj="{tools.fort(doc.fv3_settings.do_sat_adj)}" - export random_clds="{tools.fort(doc.fv3_settings.random_clds)}" - #export cnvcld="{tools.fort(doc.fv3_settings.cnvcld)}" - export ncld={doc.fv3_settings.ncld} - export FIELD_TABLE="{doc.fv3_settings.FIELD_TABLE}" - export nwat={doc.fv3_settings.nwat} + export dnats={doc.fv3_gfs_settings.phy_dependent_var.dnats} + export cal_pre="{tools.fort(doc.fv3_gfs_settings.phy_dependent_var.cal_pre)}" + export do_sat_adj="{tools.fort(doc.fv3_gfs_settings.phy_dependent_var.do_sat_adjust)}" + export random_clds="{tools.fort(doc.fv3_gfs_settings.phy_dependent_var.random_clds)}" + #export cnvcld="{tools.fort(doc.fv3_gdas_settings.cnvcld)}" + export ncld={doc.fv3_gfs_settings.phy_dependent_var.ncld} + export FIELD_TABLE="{doc.fv3_gdas_settings.phy_dependent_var.FIELD_TABLE}" + export nwat={doc.fv3_gfs_settings.phy_dependent_var.nwat} {more_exports_for_microphys} {level_127} diff --git a/workflow/config/fv3.yaml b/workflow/config/fv3.yaml index cfe7bfa5504..c8d173fce68 100644 --- a/workflow/config/fv3.yaml +++ b/workflow/config/fv3.yaml @@ -43,57 +43,57 @@ config_fv3: forecast_mode=$( echo "$1" | tr a-z A-Z ) case $forecast_mode in - "GFS") + "gfs") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_gfs_settings.DELTIM} - export layout_x={doc.fv3_gfs_settings.layout_x} - export layout_y={doc.fv3_gfs_settings.layout_y} - export layout_x_gfs={doc.fv3_gfs_settings.layout_x} - export layout_y_gfs={doc.fv3_gfs_settings.layout_y} + export layout_x={doc.fv3_gfs_settings.layout.x} + export layout_y={doc.fv3_gfs_settings.layout.y} + export layout_x_gfs={doc.fv3_gfs_settings.layout.x} + export layout_y_gfs={doc.fv3_gfs_settings.layout.y} export npe_node_fcst={doc.partition_common.resources.run_gdasfcst[0].max_ppn} export nth_fv3=2 export npe_fv3={doc.partition_common.resources.run_gdasfcst[0].mpi_ranks} export cdmbgwd={doc.fv3_gfs_settings.cdmbgwd} # mountain blocking and gravity wave drag - export WRITE_GROUP={doc.fv3_gfs_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP={doc.fv3_gfs_settings.WRTTASK_PER_GROUP} - export WRITE_GROUP_GFS={doc.fv3_gfs_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP_GFS={doc.fv3_gfs_settings.WRTTASK_PER_GROUP} - export WRTIOBUF={doc.fv3_gfs_settings.WRTIOBUF} + export WRITE_GROUP={doc.fv3_gfs_settings.layout.WGRP} + export WRTTASK_PER_GROUP={doc.fv3_gfs_settings.layout.WGRP_NTASKS} + export WRITE_GROUP_GFS={doc.fv3_gfs_settings.layout.WGRP} + export WRTTASK_PER_GROUP_GFS={doc.fv3_gfs_settings.layout.WGRP_NTASKS} + export WRTIOBUF={doc.fv3_gfs_settings.layout.WRTIOBUF} ;; - "GDAS") + "gdas") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_gdas_settings.DELTIM} - export layout_x={doc.fv3_gdas_settings.layout_x} - export layout_y={doc.fv3_gdas_settings.layout_y} - export layout_x_gfs={doc.fv3_gdas_settings.layout_x} - export layout_y_gfs={doc.fv3_gdas_settings.layout_y} + export layout_x={doc.fv3_gdas_settings.layout.x} + export layout_y={doc.fv3_gdas_settings.layout.y} + export layout_x_gfs={doc.fv3_gdas_settings.layout.x} + export layout_y_gfs={doc.fv3_gdas_settings.layout.y} export npe_node_fcst={doc.partition_common.resources.run_gdasfcst[0].max_ppn} export nth_fv3=2 export npe_fv3={doc.partition_common.resources.run_gdasfcst[0].mpi_ranks} export cdmbgwd={doc.fv3_gdas_settings.cdmbgwd} - export WRITE_GROUP={doc.fv3_gdas_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP={doc.fv3_gdas_settings.WRTTASK_PER_GROUP} - export WRITE_GROUP_GFS={doc.fv3_gdas_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP_GFS={doc.fv3_gdas_settings.WRTTASK_PER_GROUP} - export WRTIOBUF={doc.fv3_gdas_settings.WRTIOBUF} + export WRITE_GROUP={doc.fv3_gdas_settings.layout.WGRP} + export WRTTASK_PER_GROUP={doc.fv3_gdas_settings.layout.WGRP_NTASKS} + export WRITE_GROUP_GFS={doc.fv3_gdas_settings.layout.WGRP} + export WRTTASK_PER_GROUP_GFS={doc.fv3_gdas_settings.layout.WGRP_NTASKS} + export WRTIOBUF={doc.fv3_gdas_settings.layout.WRTIOBUF} ;; - "ENKF") + "enkf") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_enkf_settings.DELTIM} - export layout_x={doc.fv3_enkf_settings.layout_x} - export layout_y={doc.fv3_enkf_settings.layout_y} - export layout_x_gfs={doc.fv3_enkf_settings.layout_x} - export layout_y_gfs={doc.fv3_enkf_settings.layout_y} + export layout_x={doc.fv3_enkf_settings.layout.x} + export layout_y={doc.fv3_enkf_settings.layout.y} + export layout_x_gfs={doc.fv3_enkf_settings.layout.x} + export layout_y_gfs={doc.fv3_enkf_settings.layout.y} export npe_node_fcst={doc.partition_common.resources.run_efcs[0].max_ppn} export nth_fv3=2 export npe_fv3={doc.partition_common.resources.run_efcs[0].mpi_ranks} export cdmbgwd={doc.fv3_enkf_settings.cdmbgwd} - export WRITE_GROUP={doc.fv3_enkf_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP={doc.fv3_enkf_settings.WRTTASK_PER_GROUP} - export WRITE_GROUP_GFS={doc.fv3_enkf_settings.WRITE_GROUP} - export WRTTASK_PER_GROUP_GFS={doc.fv3_enkf_settings.WRTTASK_PER_GROUP} - export WRTIOBUF={doc.fv3_enkf_settings.WRTIOBUF} + export WRITE_GROUP={doc.fv3_enkf_settings.layout.WGRP} + export WRTTASK_PER_GROUP={doc.fv3_enkf_settings.layout.WGRP_NTASKS} + export WRITE_GROUP_GFS={doc.fv3_enkf_settings.layout.WGRP} + export WRTTASK_PER_GROUP_GFS={doc.fv3_enkf_settings.layout.WGRP_NTASKS} + export WRTIOBUF={doc.fv3_enkf_settings.layout.WRTIOBUF} ;; *) echo "CDUMP undefined!" diff --git a/workflow/defaults/archiving.yaml b/workflow/defaults/archiving.yaml new file mode 100644 index 00000000000..9d227a22970 --- /dev/null +++ b/workflow/defaults/archiving.yaml @@ -0,0 +1,10 @@ +archiving_defaults: &archiving_defaults + archive_to_hpss: yes + arch_cyc: 18 + arch_warmicfreq: 6 + arch_fcsticfreq: 3 + copy_fit2obs_files: yes + scrub_in_archive: yes + scrub_in_archive_start: 144 + scrub_in_archive_end: 24 + ATARDIR: "/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" diff --git a/workflow/defaults/data_assimilation.yaml b/workflow/defaults/data_assimilation.yaml new file mode 100644 index 00000000000..43654dbac6d --- /dev/null +++ b/workflow/defaults/data_assimilation.yaml @@ -0,0 +1,37 @@ +data_assimilation_defaults: &data_assimilation_defaults + DOHYBVAR: YES + NMEM_ENKF: 80 + NMEM_EOMGGRP: 10 + NMEM_EFCSGRP: 10 + NMEM_EARCGRP: 10 + RECENTER_ENKF: YES + SMOOTH_ENKF: YES + assim_freq: 6 + l4densvar: YES + lwrite4danl: NO + + NSPLIT: 4 + NAM_ENKF: "analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" + INCREMENTS_TO_ZERO: [ delz_inc, clwmr_inc, icmr_inc ] + PREP_REALTIME: no + DO_EMCSFC: NO + PROCESS_TROPCY: no + DO_RELOCATE: no + DO_MAKEPREPBUFR: YES + OPREFIX: "$CDUMP.$cycle." + COM_OBS: "$DMPDIR" + COMIN_OBS: !FirstTrue + - when: !calc ( COM_OBS=="$DMPDIR" ) + do: "$DMPDIR/$CDATE/$CDUMP$DUMP_SUFFIX" + - when: !calc ( COM_OBS=="$COMROOT" ) + do: "$COMROOT/$CDUMP.$PDY/$CYC" + - otherwise: !error "Unknown COM_OBS value: {COM_OBS}" + RERUN_EFCSGRP: NO + RERUN_EOMGGRP: YES + GENDIAG: YES + NEPOSGRP: 7 + OBSINPUT_INVOBS: "dmesh(1)=225.0,dmesh(2)=225.0" + OBSQC_INVOBS: "tcp_width=60.0,tcp_ermin=2.0,tcp_ermax=12.0" + ENKF_INNOVATE_GROUPS: !calc ( NMEM_ENKF // NMEM_EOMGGRP ) + ENKF_FORECAST_GROUPS: !calc ( NMEM_ENKF // NMEM_EFCSGRP ) + ENKF_ARCHIVE_GROUPS: !calc ( NMEM_ENKF // NMEM_EARCGRP ) diff --git a/workflow/defaults/default_resources.yaml b/workflow/defaults/default_resources.yaml index da42441c7f8..3b41ebbbca7 100644 --- a/workflow/defaults/default_resources.yaml +++ b/workflow/defaults/default_resources.yaml @@ -308,7 +308,7 @@ default_resources: &default_resources - batch_memory: "1024M" mpi_ranks: !icalc doc.fv3_gfs_settings.ATMPETS+doc.fv3_gfs_settings.OCNPETS+doc.fv3_gfs_settings.ICEPETS max_ppn: !icalc doc.gfs_resource_table.gfsfcst_ppn - OMP_NUM_THREADS: !icalc doc.fv3_gfs_settings.fv3_threads + OMP_NUM_THREADS: !icalc doc.fv3_gfs_settings.layout.nth walltime: !icalc doc.gfs_resource_table.coupfcst_wall memory_per_rank: !icalc doc.gfs_resource_table.get('gfsfcst_mem_per_rank',None) @@ -316,7 +316,7 @@ default_resources: &default_resources - batch_memory: "1024M" mpi_ranks: !icalc doc.fv3_gfs_settings.ATMPETS+doc.fv3_gfs_settings.OCNPETS+doc.fv3_gfs_settings.ICEPETS max_ppn: !icalc doc.gfs_resource_table.gfsfcst_ppn - OMP_NUM_THREADS: !icalc doc.fv3_gfs_settings.fv3_threads + OMP_NUM_THREADS: !icalc doc.fv3_gfs_settings.layout.nth walltime: !icalc doc.gfs_resource_table.coupfcst_medcold_wall memory_per_rank: !icalc doc.gfs_resource_table.get('gfsfcst_mem_per_rank',None) diff --git a/workflow/defaults/fv3.yaml b/workflow/defaults/fv3.yaml deleted file mode 100644 index 4363267e25b..00000000000 --- a/workflow/defaults/fv3.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# default settings for fv3 core - -fv3_defaults: &fv3_defaults - CASE: C384 - LEVS: 65 - DELTIM: 450 - layout_x: 6 - layout_y: 8 - fv3_threads: 2 - cdmbgwd: "3.5,0.25" - WRITE_GROUP: 1 - WRTTASK_PER_GROUP: 24 - WRTIOBUF: "32M" - OCNPETS: 120 - ICEPETS: 48 diff --git a/workflow/defaults/fv3_enkf.yaml b/workflow/defaults/fv3_enkf.yaml index 85e53a6fe81..fdbf459abe5 100644 --- a/workflow/defaults/fv3_enkf.yaml +++ b/workflow/defaults/fv3_enkf.yaml @@ -1,32 +1,32 @@ -# This file is used to configure the ENKF-related config files. The -# ENKF is not included in this release, so these settings are not -# needed. However, they do need to be set to valid values because -# there is validation of the fv3_enkf_settings variables elsewhere in -# the YAML documents. - fv3_enkf_defaults: &fv3_enkf_defaults - QUILTING: True - layout_x: 4 - layout_y: 6 - ATMPETS: !FirstTrue - - when: !calc doc.fv3_enkf_settings.QUILTING - do: !calc layout_x * layout_y * 6 + WRITE_GROUP * WRTTASK_PER_GROUP - - otherwise: !calc layout_x * layout_y * 6 - - FHSWR: 3600. - FHLWR: 3600. - IEMS: 1 - ISOL: 2 - IAER: 111 - ICO2: 2 - dspheat: YES - shal_cnv: NO - FHZER: 6 + CDUMP: gdas + CASE: C192 + LEVS: 65 FHCYC: 1 - restart_interval: 6 + FHCYC_GDAS: 1 + FHCYC_GFS: 24 + FHSWR: 3600 + FHLWR: 3600 + FHZER: 6 FHMAX: 6 + QUILTING: True + WRITE_NEMSIOFILE: YES + WRITE_NEMSIOFLIP: yes + nst_anl: yes + lprecip_accu: yes + DONST: YES + MONO: "non-mono" + MEMBER: -1 + d4_bg: 0.15 + dddmp: 0.2 + ISEED: 0 + SET_STP_SEED: YES + + DO_SHUM: YES + SHUM: 0.005 + SHUM_TAU: 21600. + SHUM_LSCALE: 500000. -# Stochastic physics parameters (only for ensemble forecasts) DO_SKEB: YES SKEB: 0.3 SKEB_TAU: 21600. @@ -34,20 +34,157 @@ fv3_enkf_defaults: &fv3_enkf_defaults SKEBNORM: 0 SKEB_NPASS: 30 SKEB_VDOF: 5 - DO_SHUM: YES - SHUM: 0.005 - SHUM_TAU: 21600. - SHUM_LSCALE: 500000. + DO_SPPT: YES - DOIAU_ENKF: NO - IAUFHRS_ENKF: 6 - IAU_DELTHRS_ENKF: 6 SPPT: 0.5 SPPT_TAU: 21600. SPPT_LSCALE: 500000. SPPT_LOGIT: YES SPPT_SFCLIMIT: YES + DOIAU_ENKF: NO + IAUFHRS_ENKF: 6 + IAU_DELTHRS_ENKF: 6 + k_split: 1 n_split: 12 + + RUN_EFCSGRP: NO + zhao_mic: YES + nh_type: 'nh' + USE_COUPLER_RES: NO + cdmbgwd: !FirstTrue + - when: !calc CASE=="C48" + do: "0.071,2.1,1.0,1.0" + - when: !calc CASE=="C96" + do: "0.14,1.8,1.0,1.0" + - when: !calc CASE=="C192" + do: "0.23,1.5,1.0,1.0" + - when: !calc CASE=="C384" + do: "1.1,0.72,1.0,1.0" + - when: !calc CASE=="C768" + do: "4.0,0.15,1.0,1.0" + - when: !calc CASE=="C1152" + do: "4.0,0.10,1.0,1.0" + - when: !calc CASE=="C3072" + do: "4.0,0.05,1.0,1.0" + - otherwise: "" + message: "Newly defined CASE, please make sure cdmbgwd is set correctly in case file under fv3_enkf_settings!" + + DELTIM: !FirstTrue + - when: !calc CASE=="C384" + do: 240 + - when: !calc CASE=="C768" + do: 225 + - when: !calc CASE=="C1152" + do: 150 + - when: !calc CASE=="C3072" + do: 90 + - otherwise: 450 + + layout: !Select + select: !calc CASE + otherwise: !error "Unknown FV3 deterministic grid: {doc.fv3_enkf_settings.CASE}" + cases: + C48: { x: 2,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C96: { x: 4,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C192: { x: 4, y: 6, nth: 2, WGRP: 2, WGRP_NTASKS: 24, WRTIOBUF: "8M" } + C384: { x: 6, y: 6, nth: 2, WGRP: 3, WGRP_NTASKS: 24, WRTIOBUF: "16M" } + C768: { x: 8, y: 16, nth: 2, WGRP: 4, WGRP_NTASKS: 60, WRTIOBUF: "32M" } + C1152: { x: 8, y: 16, nth: 4, WGRP: 4, WGRP_NTASKS: 84, WRTIOBUF: "48M" } + C3072: { x: 16,y: 32, nth: 4, WGRP: 4, WGRP_NTASKS: 120, WRTIOBUF: "64M" } +# layout_x: layout.x +# layout_y: layout.y +# fv3_thread: layout.nth +# WRITE_GROUP: layout.WGRP +# WRTTASK_PER_GROUP: layout.WGRP_NTASKS +# WRTIOBUF: layout.WRTIOBUF + + new_o3force: yes + h2o_phys: yes + do_vort_damp: yes + cnvcld: true consv_te: 1. + fv_sg_adj: 450 + dspheat: YES + shal_cnv: NO + agrid_vel_rst: yes + IEMS: 1 + IALB: 1 + ISOL: 2 + IAER: 111 + ICO2: 2 + warm_start: true + read_increment: no + restart_interval: 6 + imp_physics: "11" +# if_present: !FirstTrue +# - when: !calc ( imp_physics==99 ) +# do: +# ncld: 1 +# nwat: 2 + phy_dependent_var: !Select + select: !calc imp_physics + otherwise: !error "Unknown imp_physics option: {imp_physics} !" + cases: + "99": + ncld: 1 + nwat: 2 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_zhaocarr" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "6": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_wsm6" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "8": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_thompson" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "11": + ncld: 5 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_gfdl_satmedmf" + dnats: 1 + cal_pre: false + do_sat_adjust: true + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + + ATMPETS: !FirstTrue + - when: !calc QUILTING + do: !calc layout.x * layout.y * 6 + layout.WGRP * layout.WGRP_NTASKS + - otherwise: !calc layout.x * layout.y * 6 diff --git a/workflow/defaults/fv3_gdas.yaml b/workflow/defaults/fv3_gdas.yaml index 416fc3b9b42..0d9900b6eac 100644 --- a/workflow/defaults/fv3_gdas.yaml +++ b/workflow/defaults/fv3_gdas.yaml @@ -1,6 +1,156 @@ fv3_gdas_defaults: &fv3_gdas_defaults + CDUMP: gdas + CASE: C384 + LEVS: 65 + FHCYC: 24 + FHCYC_GDAS: 1 + FHCYC_GFS: 24 QUILTING: True + WRITE_NEMSIOFILE: YES + WRITE_NEMSIOFLIP: yes + nst_anl: yes + lprecip_accu: yes + DONST: YES + MONO: "non-mono" + MEMBER: -1 + d4_bg: 0.15 + dddmp: 0.2 + ISEED: 0 + SET_STP_SEED: YES + DO_SHUM: NO + DO_SKEB: NO + DO_SPPT: NO + RUN_EFCSGRP: NO + zhao_mic: YES + nh_type: 'nh' + USE_COUPLER_RES: NO + cdmbgwd: !FirstTrue + - when: !calc CASE=="C48" + do: "0.071,2.1,1.0,1.0" + - when: !calc CASE=="C96" + do: "0.14,1.8,1.0,1.0" + - when: !calc CASE=="C192" + do: "0.23,1.5,1.0,1.0" + - when: !calc CASE=="C384" + do: "1.1,0.72,1.0,1.0" + - when: !calc CASE=="C768" + do: "4.0,0.15,1.0,1.0" + - when: !calc CASE=="C1152" + do: "4.0,0.10,1.0,1.0" + - when: !calc CASE=="C3072" + do: "4.0,0.05,1.0,1.0" + - otherwise: "" + message: "Newly defined CASE, please make sure cdmbgwd is set correctly in case file under fv3_gdas_settings!" + + DELTIM: !FirstTrue + - when: !calc CASE=="C384" + do: 240 + - when: !calc CASE=="C768" + do: 225 + - when: !calc CASE=="C1152" + do: 150 + - when: !calc CASE=="C3072" + do: 90 + - otherwise: 450 + + layout: !Select + select: !calc CASE + otherwise: !error "Unknown FV3 deterministic grid: {doc.fv3_gdas_settings.CASE}" + cases: + C48: { x: 2,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C96: { x: 4,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C192: { x: 4, y: 6, nth: 2, WGRP: 2, WGRP_NTASKS: 24, WRTIOBUF: "8M" } + C384: { x: 6, y: 6, nth: 2, WGRP: 3, WGRP_NTASKS: 24, WRTIOBUF: "16M" } + C768: { x: 8, y: 16, nth: 2, WGRP: 4, WGRP_NTASKS: 60, WRTIOBUF: "32M" } + C1152: { x: 8, y: 16, nth: 4, WGRP: 4, WGRP_NTASKS: 84, WRTIOBUF: "48M" } + C3072: { x: 16,y: 32, nth: 4, WGRP: 4, WGRP_NTASKS: 120, WRTIOBUF: "64M" } +# layout_x: layout.x +# layout_y: layout.y +# fv3_thread: layout.nth +# WRITE_GROUP: layout.WGRP +# WRTTASK_PER_GROUP: layout.WGRP_NTASKS +# WRTIOBUF: layout.WRTIOBUF + + new_o3force: yes + h2o_phys: yes + do_vort_damp: yes + cnvcld: true + consv_te: 1. + fv_sg_adj: 450 + dspheat: YES + shal_cnv: YES + agrid_vel_rst: yes + IEMS: 1 + IALB: 1 + ISOL: 2 + IAER: 111 + ICO2: 2 + warm_start: true + read_increment: no + restart_interval: 6 + imp_physics: "11" + phy_dependent_var: !Select + select: !calc imp_physics + otherwise: !error "Unknown imp_physics option: {imp_physics} !" + cases: + "99": + ncld: 1 + nwat: 2 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_zhaocarr" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "6": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_wsm6" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "8": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_thompson" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "11": + ncld: 5 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_gfdl_satmedmf" + dnats: 1 + cal_pre: false + do_sat_adjust: true + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + ATMPETS: !FirstTrue - - when: !calc doc.fv3_gdas_settings.QUILTING - do: !calc layout_x * layout_y * 6 + WRITE_GROUP * WRTTASK_PER_GROUP - - otherwise: !calc layout_x * layout_y * 6 + - when: !calc QUILTING + do: !calc layout.x * layout.y * 6 + layout.WGRP * layout.WGRP_NTASKS + - otherwise: !calc layout.x * layout.y * 6 diff --git a/workflow/defaults/fv3_gfs.yaml b/workflow/defaults/fv3_gfs.yaml index 7fd97d8b0f1..f8cacbf1541 100644 --- a/workflow/defaults/fv3_gfs.yaml +++ b/workflow/defaults/fv3_gfs.yaml @@ -1,6 +1,158 @@ fv3_gfs_defaults: &fv3_gfs_defaults + CDUMP: gfs + CASE: C384 + LEVS: 65 + FHCYC: 24 + FHCYC_GDAS: 1 + FHCYC_GFS: 24 QUILTING: True + WRITE_NEMSIOFILE: YES + WRITE_NEMSIOFLIP: yes + nst_anl: yes + lprecip_accu: yes + DONST: YES + MONO: "non-mono" + MEMBER: -1 + d4_bg: 0.15 + dddmp: 0.2 + ISEED: 0 + SET_STP_SEED: YES + DO_SHUM: NO + DO_SKEB: NO + DO_SPPT: NO + RUN_EFCSGRP: NO + zhao_mic: YES + nh_type: 'nh' + USE_COUPLER_RES: NO + cdmbgwd: !FirstTrue + - when: !calc CASE=="C48" + do: "0.071,2.1,1.0,1.0" + - when: !calc CASE=="C96" + do: "0.14,1.8,1.0,1.0" + - when: !calc CASE=="C192" + do: "0.23,1.5,1.0,1.0" + - when: !calc CASE=="C384" + do: "1.1,0.72,1.0,1.0" + - when: !calc CASE=="C768" + do: "4.0,0.15,1.0,1.0" + - when: !calc CASE=="C1152" + do: "4.0,0.10,1.0,1.0" + - when: !calc CASE=="C3072" + do: "4.0,0.05,1.0,1.0" + - otherwise: "" + message: "Newly defined CASE, please make sure cdmbgwd is set correctly in case file under fv3_gfs_settings!" + + DELTIM: !FirstTrue + - when: !calc CASE=="C384" + do: 240 + - when: !calc CASE=="C768" + do: 225 + - when: !calc CASE=="C1152" + do: 150 + - when: !calc CASE=="C3072" + do: 90 + - otherwise: 450 + + layout: !Select + select: !calc CASE + otherwise: !error "Unknown FV3 deterministic grid: {doc.fv3_gfs_settings.CASE}" + cases: + C48: { x: 2,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C96: { x: 4,y: 4, nth: 1, WGRP: 1, WGRP_NTASKS: 24, WRTIOBUF: "4M" } + C192: { x: 4, y: 6, nth: 2, WGRP: 2, WGRP_NTASKS: 24, WRTIOBUF: "8M" } + C384: { x: 6, y: 6, nth: 2, WGRP: 3, WGRP_NTASKS: 24, WRTIOBUF: "16M" } + C768: { x: 8, y: 16, nth: 2, WGRP: 4, WGRP_NTASKS: 60, WRTIOBUF: "32M" } + C1152: { x: 8, y: 16, nth: 4, WGRP: 4, WGRP_NTASKS: 84, WRTIOBUF: "48M" } + C3072: { x: 16,y: 32, nth: 4, WGRP: 4, WGRP_NTASKS: 120, WRTIOBUF: "64M" } +# layout_x: layout.x +# layout_y: layout.y +# fv3_thread: layout.nth +# WRITE_GROUP: layout.WGRP +# WRTTASK_PER_GROUP: layout.WGRP_NTASKS +# WRTIOBUF: layout.WRTIOBUF + + new_o3force: yes + h2o_phys: yes + do_vort_damp: yes + cnvcld: true + consv_te: 1. + fv_sg_adj: 450 + dspheat: YES + shal_cnv: YES + agrid_vel_rst: yes + IEMS: 1 + IALB: 1 + ISOL: 2 + IAER: 111 + ICO2: 2 + warm_start: true + read_increment: no + restart_interval: 6 + imp_physics: "11" + phy_dependent_var: !Select + select: !calc imp_physics + otherwise: !error "Unknown imp_physics option: {imp_physics} !" + cases: + "99": + ncld: 1 + nwat: 2 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_zhaocarr" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "6": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_wsm6" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "8": + ncld: 2 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_thompson" + dnats: 0 + cal_pre: false + do_sat_adjust: false + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + "11": + ncld: 5 + nwat: 6 + FIELD_TABLE: "$HOMEgfs/parm/parm_fv3diag/field_table_gfdl_satmedmf" + dnats: 1 + cal_pre: false + do_sat_adjust: true + random_clds: false + hord_mt_nh_nonmono: 5 + hord_xx_nh_nonmono: 5 + vtdm4_nh_nonmono: 0.02 + nord: 2 + dddmp: 0.1 + d4_bg: 0.12 + ATMPETS: !FirstTrue - - when: !calc doc.fv3_gfs_settings.QUILTING - do: !calc layout_x * layout_y * 6 + WRITE_GROUP * WRTTASK_PER_GROUP - - otherwise: !calc layout_x * layout_y * 6 + - when: !calc QUILTING + do: !calc layout.x * layout.y * 6 + layout.WGRP * layout.WGRP_NTASKS + - otherwise: !calc layout.x * layout.y * 6 + OCNPETS: 120 + ICEPETS: 48 diff --git a/workflow/defaults/gfs_output_settings.yaml b/workflow/defaults/gfs_output_settings.yaml deleted file mode 100644 index 7b04d97dc28..00000000000 --- a/workflow/defaults/gfs_output_settings.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# This file sets default values for the GFS output settings. See -# schema/output.yaml for documentation. - -gfs_output_settings_defaults: &gfs_output_settings_defaults - FHMAX_GFS: 384 - FHOUT_GFS: 3 - OUTPUT_GRID: gaussian_grid diff --git a/workflow/defaults/nsst.yaml b/workflow/defaults/nsst.yaml new file mode 100644 index 00000000000..1ac69093986 --- /dev/null +++ b/workflow/defaults/nsst.yaml @@ -0,0 +1,8 @@ +nsst_defaults: &nsst_defaults + NST_MODEL: 2 + NST_RESV: 0 + ZSEA1: 0 + ZSEA2: 0 + NST_GSI: 3 + NSTINFO: 0 + NST_SPINUP: 0 diff --git a/workflow/defaults/output_settings.yaml b/workflow/defaults/output_settings.yaml new file mode 100644 index 00000000000..fad2f14d3f9 --- /dev/null +++ b/workflow/defaults/output_settings.yaml @@ -0,0 +1,38 @@ +# This file sets default values for the GFS output settings. See +# schema/output.yaml for documentation. + +output_settings_defaults: &output_settings_defaults + FHMIN_GFS: 0 + FHMAX_GFS: 384 + FHOUT_GFS: 3 + FHMIN_ENKF: 3 + FHMAX_ENKF: 9 + FHOUT_ENKF: !FirstTrue + - when: doc.data_assimilation.l4densvar + do: 1 + - otherwise: 3 + FHMIN_GDAS: 0 + FHMAX_GDAS: 9 + FHOUT_GDAS: 3 + + FHMAX_HF_GFS: 0 + FHOUT_HF_GFS: 1 + OCN_INTERVAL: 120 + + NCO_NAMING_CONV: YES + OUTPUT_FILE_TYPE: nemsio + OUTPUT_GRID: gaussian_grid + + gfs_forecast_hours: !calc >- + tools.uniq(sorted( + tools.seq(FHMIN_GFS,FHMAX_HF_GFS,FHOUT_HF_GFS) + + tools.seq(FHMIN_GFS,FHMAX_GFS, FHOUT_GFS))) + gdas_forecast_hours: !calc "tools.seq(FHMIN_GDAS,FHMAX_GDAS,FHOUT_GDAS)" + ocnpost_hours: !calc "tools.seq(FHMIN_GFS,FHMAX_GFS-OCN_INTERVAL,OCN_INTERVAL)" + enkf_epos_fhr: !calc "tools.seq(FHMIN_ENKF,FHMAX_ENKF,FHOUT_ENKF)" + wafs_last_hour: 120 + awips_g2_hours: !calc ( tools.seq(0,240,6) ) + awips_20km_1p0_hours: !calc >- + tools.uniq(sorted( + tools.seq(0,84,3) + + tools.seq(90,240,6))) diff --git a/workflow/defaults/places.yaml b/workflow/defaults/places.yaml index 9d0dcd1b7a7..24c40ddb155 100644 --- a/workflow/defaults/places.yaml +++ b/workflow/defaults/places.yaml @@ -21,6 +21,18 @@ default_places: &default_places # SHORT_TERM_TEMP: !error GOT HERE # LONG_TERM_TEMP: !error GOT HERE TOO + NOSCRUB: !FirstTrue + - when: !calc doc.platform.get('NOSCRUB_DIR','') + do: !calc doc.platform.NOSCRUB_DIR + - otherwise: !expand "{doc.places.EXPROOT}/noscrub/{tools.env('USER')}" + + BASE_SVN: !calc doc.platform.BASE_SVN + BASE_GIT: !calc doc.platform.BASE_GIT + + ics_from: opsgfs + parexp: prnemsrn + HPSS_PAR_PATH: !expand "/5year/NCEPDEV/emc-global/emc.glopara/WCOSS_C/{parexp}" + ECF_ROOT: !calc tools.env("ECF_ROOT","/dev/null/ECF_ROOT") ECF_HOME: !calc tools.env("ECF_HOME","/dev/null/ECF_HOME") ecflow_def_dir: !expand '{ECF_ROOT}/defs' diff --git a/workflow/defaults/settings.yaml b/workflow/defaults/settings.yaml index b09e8b86ee2..d01946f1412 100644 --- a/workflow/defaults/settings.yaml +++ b/workflow/defaults/settings.yaml @@ -18,19 +18,29 @@ default_settings: &default_settings rocoto_cycle_throttle: 2 max_job_tries: 2 + dev_safeguards: true # REALTIME and realtime - an alias that should be removed once we're # sure it is consistent among the yaml files: realtime: NO + run_vrfy_jobs: true four_cycle_mode: NO nco_mode: NO use_nco_ecflow_headers: NO print_esmf: .false. + prod_util_module: !calc doc.platform.get("prod_util_module","prod_util") + ecflow_real_clock: no + ecflow_virtual_clock: no + ecflow_hybrid_clock: no gfs_cyc: 4 nems_temp: 'atm' nems_temp_cold: 'atm' + ics_from: opsgfs + + parexp: prnemsrn + HPSS_PAR_PATH: !expand "/5year/NCEPDEV/emc-global/emc.glopara/WCOSS_C/{parexp}" cplflx: .false. cplice: !calc cplflx @@ -43,6 +53,7 @@ default_settings: &default_settings KEEPDATA: NO DUMP_SUFFIX: "" run_gsi: No + run_enkf: !calc run_gsi chgres_and_convert_ics: Yes # awips setting @@ -55,9 +66,6 @@ default_settings: &default_settings ecflow_module: !calc doc.platform.get("ecflow_module","ecflow") - ecflow_real_clock: no - ecflow_virtual_clock: no - ecflow_hybrid_clock: no ecflow_totality_limit: yes ecflow_rocoto_cdate_workaround: !FirstTrue diff --git a/workflow/layout/cycled_gfs.yaml b/workflow/layout/cycled_gfs.yaml index f7cf895216d..8c39f267698 100644 --- a/workflow/layout/cycled_gfs.yaml +++ b/workflow/layout/cycled_gfs.yaml @@ -153,7 +153,7 @@ suite: !Cycle post: !TaskArray RUN: !calc up.RUN Dimensions: - fhr: !calc doc.gfs_output_settings.gdas_forecast_hours + fhr: !calc doc.output_settings.gdas_forecast_hours post_manager_el: !TaskElement <<: *exclusive_task_template RUN: !calc up.RUN @@ -308,7 +308,7 @@ suite: !Cycle post: !TaskArray Trigger: !Depend forecast Dimensions: - fhr: !calc doc.gfs_output_settings.enkf_epos_fhr + fhr: !calc doc.output_settings.enkf_epos_fhr jgdas_enkf_post_fhr: !TaskElement <<: *exclusive_task_template Foreach: [ fhr ] @@ -436,7 +436,7 @@ suite: !Cycle post: !TaskArray RUN: !calc up.RUN Dimensions: - fhr: !calc doc.gfs_output_settings.gfs_forecast_hours + fhr: !calc doc.output_settings.gfs_forecast_hours jgfs_post_manager_el: !TaskElement <<: *exclusive_task_template RUN: !calc up.RUN @@ -504,7 +504,7 @@ suite: !Cycle /usr/bin/env post_times={FHR} FHRLST={FHR} FHRGRP={FHR} &HOMEgfs;/jobs/{J_JOB} jgfs_pgrb2_spec_post: !FirstTrue - - when: !calc max(doc.gfs_output_settings.gfs_forecast_hours)>=384 + - when: !calc max(doc.output_settings.gfs_forecast_hours)>=384 do: !Task <<: *exclusive_task_template Dummy: true ## <-- Node is not implemented yet @@ -548,7 +548,7 @@ suite: !Cycle grib_wafs: !TaskArray Disable: !calc not doc.downstream.DO_WAFS Dimensions: - fhr: !calc tools.seq(0,doc.gfs_output_settings.wafs_last_hour,6) + fhr: !calc tools.seq(0,doc.output_settings.wafs_last_hour,6) jgfs_wafs: !TaskElement <<: *exclusive_task_template Name: !expand 'jgfs_wafs_f{dimval.fhr:03d}' @@ -609,7 +609,7 @@ suite: !Cycle awips_20km_1p0: !TaskArray Disable: !calc not doc.downstream.DO_AWIPS Dimensions: - fhr: !calc " sorted(list(set(doc.gfs_output_settings.gfs_forecast_hours)&set(doc.gfs_output_settings.awips_20km_1p0_hours))) " + fhr: !calc " sorted(list(set(doc.output_settings.gfs_forecast_hours)&set(doc.output_settings.awips_20km_1p0_hours))) " # tasks every 6 hours till f240 jgfs_awips: !TaskElement <<: *exclusive_task_template @@ -626,7 +626,7 @@ suite: !Cycle awips_g2: !TaskArray Disable: !calc not doc.downstream.DO_AWIPS Dimensions: - fhr: !calc " sorted(list(set(doc.gfs_output_settings.gfs_forecast_hours)&set(doc.gfs_output_settings.awips_g2_hours))) " + fhr: !calc " sorted(list(set(doc.output_settings.gfs_forecast_hours)&set(doc.output_settings.awips_g2_hours))) " jgfs_awips: !TaskElement <<: *exclusive_task_template Foreach: [ fhr ] diff --git a/workflow/layout/free_forecast_gfs.yaml b/workflow/layout/free_forecast_gfs.yaml index 1b6e6677496..e205e6efaa0 100644 --- a/workflow/layout/free_forecast_gfs.yaml +++ b/workflow/layout/free_forecast_gfs.yaml @@ -77,7 +77,7 @@ suite: !Cycle post: !TaskArray RUN: !calc up.RUN Dimensions: - fhr: !calc doc.gfs_output_settings.gfs_forecast_hours + fhr: !calc doc.output_settings.gfs_forecast_hours jgfs_post_manager_el: !TaskElement <<: *exclusive_task_template RUN: !calc up.RUN @@ -145,14 +145,14 @@ suite: !Cycle RUN: !calc up.RUN Disable: !calc not doc.settings.cplflx Dimensions: - fhr: !calc doc.gfs_output_settings.ocnpost_hours + fhr: !calc doc.output_settings.ocnpost_hours jgfs_ocnpost_fhr_el: !TaskElement <<: *exclusive_task_template Foreach: [ fhr ] resources: !calc partition.resources.run_one_node_downstream Name: !expand p_{dimval.fhr:03d} FHR: !expand "{dimval.fhr:03d}" - OCN_FHRLST: !calc "tools.seq(dimval.fhr, dimval.fhr+doc.gfs_output_settings.OCN_INTERVAL, 6)" + OCN_FHRLST: !calc "tools.seq(dimval.fhr, dimval.fhr+doc.output_settings.OCN_INTERVAL, 6)" J_JOB: rocoto/ocnpost.sh Trigger: !Depend up.forecast ecflow_def: !expand "edit FHR '{FHR}'" diff --git a/workflow/layout/nco.yaml b/workflow/layout/nco.yaml index b199e543a5e..ad9d82cb110 100644 --- a/workflow/layout/nco.yaml +++ b/workflow/layout/nco.yaml @@ -119,7 +119,7 @@ suite: !Cycle post: !TaskArray RUN: !calc up.RUN Dimensions: - fhr: !calc doc.gfs_output_settings.gdas_forecast_hours + fhr: !calc doc.output_settings.gdas_forecast_hours post_manager_el: !TaskElement <<: *exclusive_task_template RUN: !calc up.RUN @@ -254,7 +254,7 @@ suite: !Cycle post: !TaskArray Trigger: !Depend forecast Dimensions: - fhr: !calc doc.gfs_output_settings.enkf_epos_fhr + fhr: !calc doc.output_settings.enkf_epos_fhr jgdas_enkf_post_fhr: !TaskElement <<: *exclusive_task_template Foreach: [ fhr ] @@ -351,7 +351,7 @@ suite: !Cycle post: !TaskArray RUN: !calc up.RUN Dimensions: - fhr: !calc doc.gfs_output_settings.gfs_forecast_hours + fhr: !calc doc.output_settings.gfs_forecast_hours jgfs_post_manager_el: !TaskElement <<: *exclusive_task_template RUN: !calc up.RUN @@ -415,7 +415,7 @@ suite: !Cycle export post_times={FHR} FHRLST={FHR} FHRGRP={FHR} &HOMEgfs;/jobs/{J_JOB} jgfs_pgrb2_spec_post: !FirstTrue - - when: !calc max(doc.gfs_output_settings.gfs_forecast_hours)>=384 + - when: !calc max(doc.output_settings.gfs_forecast_hours)>=384 do: !Task <<: *exclusive_task_template Trigger: !Depend ( jgfs_post_f336 & jgfs_post_f348 & jgfs_post_f360 & jgfs_post_f372 & jgfs_post_f384 ) @@ -455,7 +455,7 @@ suite: !Cycle grib_wafs: !TaskArray Dimensions: - fhr: !calc tools.seq(0,doc.gfs_output_settings.wafs_last_hour,6) + fhr: !calc tools.seq(0,doc.output_settings.wafs_last_hour,6) jgfs_wafs: !TaskElement <<: *exclusive_task_template Name: !expand 'jgfs_wafs_f{dimval.fhr:03d}' @@ -512,7 +512,7 @@ suite: !Cycle awips_20km_1p0: !TaskArray Dimensions: - fhr: !calc " sorted(list(set(doc.gfs_output_settings.gfs_forecast_hours)&set(doc.gfs_output_settings.awips_20km_1p0_hours))) " + fhr: !calc " sorted(list(set(doc.output_settings.gfs_forecast_hours)&set(doc.output_settings.awips_20km_1p0_hours))) " # tasks every 6 hours till f240 jgfs_awips: !TaskElement <<: *exclusive_task_template @@ -527,7 +527,7 @@ suite: !Cycle awips_g2: !TaskArray Dimensions: - fhr: !calc " sorted(list(set(doc.gfs_output_settings.gfs_forecast_hours)&set(doc.gfs_output_settings.awips_g2_hours))) " + fhr: !calc " sorted(list(set(doc.output_settings.gfs_forecast_hours)&set(doc.output_settings.awips_g2_hours))) " jgfs_awips: !TaskElement <<: *exclusive_task_template Foreach: [ fhr ] diff --git a/workflow/layout/public_release_v1.yaml b/workflow/layout/public_release_v1.yaml index 4c6fed50716..c8475770fe3 100644 --- a/workflow/layout/public_release_v1.yaml +++ b/workflow/layout/public_release_v1.yaml @@ -57,7 +57,7 @@ suite: !Cycle post: !TaskArray model: !calc up.model Dimensions: - fhr: !calc doc.gfs_output_settings.gfs_forecast_hours + fhr: !calc doc.output_settings.gfs_forecast_hours # jgfs_post_manager_el - used to generate the jgfs_post_manager # task. That task is only executed in ecFlow; it watches the diff --git a/workflow/schema/archiving.yaml b/workflow/schema/archiving.yaml index fd89781b2d8..b8bc4a25da6 100644 --- a/workflow/schema/archiving.yaml +++ b/workflow/schema/archiving.yaml @@ -1,45 +1,36 @@ archive_settings_template: !Template &archive_settings_template archive_to_hpss: - default: yes description: save data to HPSS archive type: bool arch_cyc: - default: 18 description: cycle for archiving files for warm_start capability type: int arch_warmicfreq: - default: 6 description: archive frequency in days for warm_start capability type: int arch_fcsticfreq: - default: 3 descripton: archive frequency in days for gdas/gfs forecast-only capability type: int copy_fit2obs_files: - default: yes description: online archive of nemsio files for fit2obs verification type: bool scrub_in_archive: type: bool - default: yes description: "delete GDAS/GFS COM directories at the end of the archive job" scrub_in_archive_start: type: int - default: 144 description: "starting hour of previous cycles to be removed from rotating directory during archive job" scrub_in_archive_end: type: int - default: 24 description: "ending hour of previous cycles to be removed from rotating directory during archive job" ATARDIR: type: string - default: "/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" description: "Archiving directory on HPSS for the current workflow. Default is a shell expression typically used in config.base." diff --git a/workflow/schema/data_assimilation.yaml b/workflow/schema/data_assimilation.yaml index b141a83691f..20ab15928a9 100644 --- a/workflow/schema/data_assimilation.yaml +++ b/workflow/schema/data_assimilation.yaml @@ -5,111 +5,85 @@ data_assimilation_template: !Template &data_assimilation_template DOHYBVAR: type: bool - default: YES description: flag (YES or NO) for hybrid ensemble variational option NMEM_ENKF: type: int - default: 80 description: Number of members of the GFS ENKF ensemble. - NMEM_EOMGGRP: { type: int, default: 10 } - NMEM_EFCSGRP: { type: int, default: 10 } - NMEM_EARCGRP: { type: int, default: 10 } - RECENTER_ENKF: { type: bool, default: YES } - SMOOTH_ENKF: { type: bool, default: YES } - assim_freq: { type: int, default: 6 } - l4densvar: { type: bool, default: YES } - lwrite4danl: { type: bool, default: NO } + NMEM_EOMGGRP: { type: int } + NMEM_EFCSGRP: { type: int } + NMEM_EARCGRP: { type: int } + RECENTER_ENKF: { type: bool } + SMOOTH_ENKF: { type: bool } + assim_freq: { type: int } + l4densvar: { type: bool } + lwrite4danl: { type: bool } NSPLIT: type: int - default: 4 description: "Execute prepbufr in parallel. Operational GFS default is 3." NAM_ENKF: type: string - default: "analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" INCREMENTS_TO_ZERO: type: string list - default: [ delz_inc, clwmr_inc, icmr_inc ] PREP_REALTIME: type: bool - default: no DO_EMCSFC: type: bool - default: NO description: "Whether to run EMC SFC job" PROCESS_TROPCY: type: bool - default: no DO_RELOCATE: type: bool - default: no DO_MAKEPREPBUFR: type: bool - default: YES description: If NO, will copy prepbufr from globaldump. Otherwise, generates prepbufr file anew. OPREFIX: type: string - default: "$CDUMP.$cycle." description: Format for dump file name prefix COM_OBS: type: string - default: "$DMPDIR" description: Top folder for COMIN_OBS (DMPDIR or COMROOT) COMIN_OBS: type: string description: Location to draw observation data from (global dump archive or com) - default: !FirstTrue - - when: !calc ( COM_OBS=="$DMPDIR" ) - do: "$DMPDIR/$CDATE/$CDUMP$DUMP_SUFFIX" - - when: !calc ( COM_OBS=="$COMROOT" ) - do: "$COMROOT/$CDUMP.$PDY/$CYC" - - otherwise: !error "Unknown COM_OBS value: {COM_OBS}" RERUN_EFCSGRP: type: bool - default: NO description: Rerun failed ensemble forecast group members automatically. RERUN_EOMGGRP: type: bool - default: YES GENDIAG: type: bool - default: YES NEPOSGRP: type: int - default: 7 OBSINPUT_INVOBS: type: string - default: "dmesh(1)=225.0,dmesh(2)=225.0" + OBSQC_INVOBS: type: string - default: "tcp_width=60.0,tcp_ermin=2.0,tcp_ermax=12.0" ENKF_INNOVATE_GROUPS: type: int - default: !calc ( NMEM_ENKF // NMEM_EOMGGRP ) ENKF_FORECAST_GROUPS: type: int - default: !calc ( NMEM_ENKF // NMEM_EFCSGRP ) ENKF_ARCHIVE_GROUPS: type: int - default: !calc ( NMEM_ENKF // NMEM_EARCGRP ) # These variable largely eliminate the need for explicitly setting # USH directories, FIX files, PARM files, EXECutables below diff --git a/workflow/schema/downstream.yaml b/workflow/schema/downstream.yaml index 816a6e1fbdd..8e3859bfe22 100644 --- a/workflow/schema/downstream.yaml +++ b/workflow/schema/downstream.yaml @@ -68,7 +68,6 @@ downstream_schema: &downstream_schema !Template description: "Run FAX" DO_WAFS: type: bool - default: NO description: "Run WAFS" DO_BULLETINS: type: bool diff --git a/workflow/schema/fv3.yaml b/workflow/schema/fv3.yaml index 35540698e85..61aaba6eb3f 100644 --- a/workflow/schema/fv3.yaml +++ b/workflow/schema/fv3.yaml @@ -4,97 +4,57 @@ fv3_settings_template: !Template &fv3_settings_template imp_physics: - type: int - allowed: [ 99, 8, 6, 10, 11 ] - default: 11 + type: string + allowed: [ "99", "8", "6", "10", "11" ] description: "Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL" - if_present: !FirstTrue - - when: !calc ( imp_physics==99 ) - do: !Template - ncld: { type: int, default: 1 } - nwat: { type: int, default: 2 } - FIELD_TABLE: - type: string - default: "$HOMEgfs/parm/parm_fv3diag/field_table_zhaocarr" - - when: !calc ( imp_physics == 6 ) - do: !Template - ncld: { type: int, default: 2 } - nwat: { type: int, default: 6 } - FIELD_TABLE: - type: string - default: "$HOMEgfs/parm/parm_fv3diag/field_table_wsm6" - - when: !calc ( imp_physics == 8 ) - do: !Template - ncld: { type: int, default: 2 } - nwat: { type: int, default: 6 } - FIELD_TABLE: - type: string - default: "$HOMEgfs/parm/parm_fv3diag/field_table_thompson" - - when: !calc ( imp_physics == 11 ) - do: !Template - ncld: { type: int, default: 5 } - nwat: { type: int, default: 6 } - FIELD_TABLE: - type: string - default: "$HOMEgfs/parm/parm_fv3diag/field_table_gfdl" - dnats: { type: int, default: 1 } - cal_pre: { type: bool, default: false } - do_sat_adj: { type: bool, default: true } - random_clds: { type: bool, default: false } - hord_mt_nh_nonmono: { type: int, default: 6 } - hord_xx_nh_nonmono: { type: int, default: 6 } - vtdm4_nh_nonmono: { type: float, default: 0.02 } - nord: { type: int, default: 2 } - dddmp: { type: float, default: 0.1 } - d4_bg: { type: float, default: 0.12 } - - otherwise: !error "Unknown imp_physics value: {imp_physics}" new_o3force: type: bool - default: yes description: Options of stratosphere O3 physics reaction coefficients h2o_phys: type: bool - default: yes description: Use stratosphere h2o physics do_vort_damp: type: bool - default: yes description: vorticity and divergence damping consv_te: type: float - default: 1. description: conserve total energy fv_sg_adj: type: int - default: 450 description: time-scale to remove 2dz instability dspheat: type: bool - default: YES description: dissipative heating shal_cnv: type: bool - default: YES description: shallow convection flag agrid_vel_rst: type: bool - default: yes description: "write velocity restarts on A grid?" - cal_pre: { type: bool, default: true } - do_sat_adjust: { type: bool, default: false } - random_clds: { type: bool, default: true } - cnvcld: { type: bool, default: true } - dnats: { type: int, default: 0 } - IEMS: { type: int, default: 1 } - IALB: { type: int, default: 1 } - ISOL: { type: int, default: 2 } - IAER: { type: int, default: 111 } - ICO2: { type: int, default: 2 } - warm_start: { type: bool, default: true } - read_increment: { type: bool, default: no } - restart_interval: { type: int, default: 6 } +# cal_pre: { type: bool } +# do_sat_adjust: { type: bool } +# random_clds: { type: bool } + cnvcld: { type: bool } +# ncld: { type: int } +# nwat: { type: int } +# hord_mt_nh_nonmono: { type: int } +# hord_xx_nh_nonmono: { type: int } +# vtdm4_nh_nonmono: { type: float } +# nord: { type: int } +# dddmp: { type: float } +# d4_bg: { type: float } +# dnats: { type: int } + IEMS: { type: int } + IALB: { type: int } + ISOL: { type: int } + IAER: { type: int } + ICO2: { type: int } + warm_start: { type: bool } + read_increment: { type: bool } + restart_interval: { type: int } +# FIELD_TABLE: { type: string } LEVS: type: int @@ -102,53 +62,42 @@ fv3_settings_template: !Template &fv3_settings_template FHCYC: type: int - default: 24 description: Surface cycle update frequency (gdas=1,gfs=24) FHCYC_GDAS: type: int - default: 1 description: Surface cycle update frequency for the GDAS FHCYC_GFS: type: int - default: 24 description: Surface cycle update frequency for the GFS QUILTING: type: bool - default: YES description: Should output quilting be used? WRITE_NEMSIOFILE: type: bool - default: YES description: Should nemsio output be used (yes/true) instead of netcdf (no/false)? - WRITE_NEMSIOFLIP: { type: bool, default: yes } - nst_anl: { type: bool, default: yes } - lprecip_accu: { type: bool, default: yes, + WRITE_NEMSIOFLIP: { type: bool } + nst_anl: { type: bool } + lprecip_accu: { type: bool, description: "Precipitation accumulation, true--no bucket, false--bucket=FHZER" } - DONST: { type: bool, default: YES } + DONST: { type: bool } MONO: type: string - default: "non-mono" allowed: [ mono, non-mono ] MEMBER: type: int stage: [ execution ] - default: -1 description: "-1: control, 0: ensemble mean, >0: ensemble member $MEMBER" - d4_bg: { type: float, default: 0.15 } - dddmp: { type: float, default: 0.2 } - ISEED: type: int - default: 0 stage: [ execution ] description: > Default seed for shum, skeb, and sppt, if specific seeds @@ -156,152 +105,31 @@ fv3_settings_template: !Template &fv3_settings_template SET_STP_SEED: type: bool - default: YES description: > Automatically set seeds for SKEB, SHUM, and SPPT at execution time based on simulation date and member. DO_SHUM: type: bool - default: NO - if_present: !FirstTrue - - when: !calc DO_SHUM - do: - ISEED_SHUM: { type: int, optional: true } - SHUM: { type: float, default: -999. } - SHUM_TAU: { type: float, default: -999. } - SHUM_LSCALE: { type: float, default: -999. } - - otherwise: null DO_SKEB: type: bool - default: NO - if_present: !FirstTrue - - when: !calc DO_SKEB - do: - ISEED_SHUM: { type: int, optional: true } - SKEB_TAU: { type: float, default: -999. } - SKEB_LSCALE: { type: float, default: -999. } - SKEBNORM: { type: int, default: 1 } - SKEB: { type: float, default: -999. } - - otherwise: null DO_SPPT: type: bool - default: NO - if_present: !FirstTrue - - when: !calc DO_SPPT==True - do: - ISEED_SHUM: { type: int, optional: true } - SPPT: { type: float } - SPPT_TAU: { type: float, default: -999. } - SPPT_LSCALE: { type: float, default: -999. } - SPPT_SFCLIMIT: { type: bool, default: yes } - - otherwise: !Message "Don't SPPT" - RUN_EFCSGRP: { type: bool, default: NO } - ncld: { type: int, default: 1 } - nwat: { type: int, default: 2 } - zhao_mic: { type: bool, default: YES } - nh_type: { type: string, default: 'nh' } - USE_COUPLER_RES: { type: bool, default: NO } + RUN_EFCSGRP: { type: bool } + zhao_mic: { type: bool } + nh_type: { type: string } + USE_COUPLER_RES: { type: bool } cdmbgwd: { type: string, optional: true } CDUMP: type: string allowed: [ gfs, gdas ] + DELTIM: { type: int } + CASE: type: string allowed: [ 'C48', 'C96', 'C192', 'C384', 'C768', 'C1152', 'C3072' ] - if_present: !FirstTrue - - when: !calc (CASE == "C48") - do: !Template - DELTIM: { type: int, default: 450 } - layout_x: { type: int, default: 2 } - layout_y: { type: int, default: 4 } - fv3_threads: { type: int, default: 1 } - cdmbgwd: - type: string - default: "0.062,3.5,1.0,1.0" - description: "mountain blocking and gravity wave drag" - WRITE_GROUP: { type: int, default: 1 } - WRTTASK_PER_GROUP: { type: int, default: 24 } - WRTIOBUF: { type: string, default: "4M" } - - - when: !calc (CASE == "C96") - do: !Template - DELTIM: { type: int, default: 450 } - layout_x: { type: int, default: 4 } - layout_y: { type: int, default: 4 } - fv3_threads: { type: int, default: 1 } - cdmbgwd: - type: string - default: "0.125,3.0,1.0,1.0" - description: "mountain blocking and gravity wave drag" - WRITE_GROUP: { type: int, default: 1 } - WRTTASK_PER_GROUP: { type: int, default: 24 } - WRTIOBUF: { type: string, default: "4M" } - - - when: !calc (CASE == "C192") - do: !Template - DELTIM: { type: int, default: 450 } - layout_x: { type: int, default: 4 } - layout_y: { type: int, default: 6 } - fv3_threads: { type: int, default: 2 } - cdmbgwd: - type: string - default: "0.23,1.5,1.0,1.0" - description: "mountain blocking and gravity wave drag" - WRITE_GROUP: { type: int, default: 2 } - WRTTASK_PER_GROUP: { type: int, default: 24 } - WRTIOBUF: { type: string, default: "8M" } - - - when: !calc (CASE == "C384") - do: !Template - DELTIM: { type: int, default: 240 } - layout_x: { type: int, default: 6 } - layout_y: { type: int, default: 6 } - fv3_threads: { type: int, default: 2 } - cdmbgwd: - type: string - default: "1.1,0.72,1.0,1.0" - description: "mountain blocking and gravity wave drag" - WRITE_GROUP: { type: int, default: 3 } - WRTTASK_PER_GROUP: { type: int, default: 24 } - WRTIOBUF: { type: string, default: "16M" } - - - when: !calc (CASE == "C768") - do: !Template - DELTIM: { type: int, default: 225 } - layout_x: { type: int, default: 8 } - layout_y: { type: int, default: 16 } - fv3_threads: { type: int, default: 2 } - cdmbgwd: - type: string - default: "3.5,0.25,1.0,1.0" - description: "mountain blocking and gravity wave drag" - WRITE_GROUP: { type: int, default: 4 } - WRTTASK_PER_GROUP: { type: int, default: 60 } - WRTIOBUF: { type: string, default: "32M" } - - - when: !calc (CASE == "C1152") - do: !Template - DELTIM: { type: int, default: 150 } - layout_x: { type: int, default: 8 } - layout_y: { type: int, default: 16 } - fv3_threads: { type: int, default: 4 } - WRITE_GROUP: { type: int, default: 4 } - WRTTASK_PER_GROUP: { type: int, default: 84 } - WRTIOBUF: { type: string, default: "48M" } - - - when: !calc (CASE == "C3072") - do: !Template - DELTIM: { type: int, default: 90 } - layout_x: { type: int, default: 16 } - layout_y: { type: int, default: 32 } - fv3_threads: { type: int, default: 4 } - WRITE_GROUP: { type: int, default: 4 } - WRTTASK_PER_GROUP: { type: int, default: 120 } - WRTIOBUF: { type: string, default: "64M" } - - otherwise: !error "Unknown case: {CASE}" diff --git a/workflow/schema/ice.yaml b/workflow/schema/ice.yaml index 089e798316e..afbcf32552a 100644 --- a/workflow/schema/ice.yaml +++ b/workflow/schema/ice.yaml @@ -3,5 +3,4 @@ ice_settings_template: !Template &ice_settings_template MOD: type: string allowed: [ cice5, cice6 ] - default: cice5 description: "model selection for ice" diff --git a/workflow/schema/nsst.yaml b/workflow/schema/nsst.yaml index cf195664ba8..1efcc8eb05a 100644 --- a/workflow/schema/nsst.yaml +++ b/workflow/schema/nsst.yaml @@ -2,24 +2,19 @@ nsst_schema: &nsst_schema !Template NST_MODEL: type: int allowed: [ 0, 1, 2 ] - default: 2 description: >- nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled NST_RESV: type: int - default: 0 allowed: [ 0, 1 ] ZSEA1: type: int - default: 0 ZSEA2: type: int - default: 0 NST_GSI: type: int allowed: [ 0, 1, 2, 3, 4 ] - default: 3 description: | 0: No NST info at all; 1: Input NST info but not used in GSI; @@ -28,7 +23,6 @@ nsst_schema: &nsst_schema !Template NSTINFO: type: int - default: 0 description: number of elements added in obs. data array NST_SPINUP: type: int diff --git a/workflow/schema/ocn.yaml b/workflow/schema/ocn.yaml index d8f79d48e5f..a349d09fd9e 100644 --- a/workflow/schema/ocn.yaml +++ b/workflow/schema/ocn.yaml @@ -6,5 +6,4 @@ ocn_settings_template: !Template &ocn_settings_template MOD: type: string allowed: [ mom6, hycom ] - default: mom6 description: "model selection for ocean" diff --git a/workflow/schema/output.yaml b/workflow/schema/output.yaml index 42868b81439..50500481c88 100644 --- a/workflow/schema/output.yaml +++ b/workflow/schema/output.yaml @@ -1,99 +1,72 @@ -gfs_output_settings_template: !Template &gfs_output_settings_template +output_settings_template: !Template &output_settings_template FHOUT_GFS: type: int - default: 3 description: GFS forecast output frequency in hours FHMIN_GFS: type: int - default: 0 description: GFS forecast initial hour for output + FHMAX_GFS: + type: int + description: GFS total forecast hour for output FHMIN_ENKF: type: int - default: 3 description: GDAS ENKF initial hour for output FHMAX_ENKF: type: int - default: 9 description: GDAS ENKF forecast length FHOUT_ENKF: type: int description: GDAS ENKF output frequency in hours - default: !FirstTrue - - when: doc.data_assimilation.l4densvar - do: 1 - - otherwise: 3 FHMIN_GDAS: type: int - default: 0 description: GDAS initial hour for output FHMAX_GDAS: type: int - default: 9 description: GDAS forecast length FHOUT_GDAS: type: int - default: 3 description: GDAS output frequency in hours FHMAX_HF_GFS: type: int - default: 0 description: Last forecast hour with high-frequency output for gfs FHOUT_HF_GFS: type: int - default: 1 description: Output frequency until FHMAX_HF_GFS hours. OCN_INTERVAL: type: int - default: 120 description: Interval for separating ocean post job. NCO_NAMING_CONV: type: bool - default: YES description: "YES = use standard, operational, naming conventions. NO = use non-standard naming conventions" OUTPUT_FILE_TYPE: type: string - default: nemsio description: "Type of model output file" gfs_forecast_hours: type: int list - default: !calc >- - tools.uniq(sorted( - tools.seq(FHMIN_GFS,FHMAX_HF_GFS,FHOUT_HF_GFS) + - tools.seq(FHMIN_GFS,FHMAX_GFS, FHOUT_GFS))) ocnpost_hours: type: int list - default: !calc "tools.seq(FHMIN_GFS,FHMAX_GFS-OCN_INTERVAL,OCN_INTERVAL)" gdas_forecast_hours: type: int list - default: !calc "tools.seq(FHMIN_GDAS,FHMAX_GDAS,FHOUT_GDAS)" enkf_epos_fhr: type: int list - default: !calc "tools.seq(FHMIN_ENKF,FHMAX_ENKF,FHOUT_ENKF)" wafs_last_hour: type: int - default: !calc 120 awips_g2_hours: type: int list - default: !calc ( tools.seq(0,240,6) ) awips_20km_1p0_hours: type: int list - default: !calc >- - tools.uniq(sorted( - tools.seq(0,84,3) + - tools.seq(90,240,6))) - diff --git a/workflow/schema/places.yaml b/workflow/schema/places.yaml index 10d98ef1945..23ed39f5151 100644 --- a/workflow/schema/places.yaml +++ b/workflow/schema/places.yaml @@ -19,19 +19,15 @@ places_schema: &places_schema !Template # SHORT_TERM_TEMP: { type: string } # LONG_TERM_TEMP: { type: string } - HOMEDIR: - type: string - default: !FirstTrue - - when: !calc doc.platform.get('SAVE_DIR','') - do: !calc doc.platform.SAVE_DIR - - otherwise: !expand "{doc.places.EXPROOT}/save/{tools.env('USER')}" +# HOMEDIR: +# type: string +# default: !FirstTrue +# - when: !calc doc.platform.get('SAVE_DIR','') +# do: !calc doc.platform.SAVE_DIR +# - otherwise: !expand "{doc.places.EXPROOT}/save/{tools.env('USER')}" NOSCRUB: type: string - default: !FirstTrue - - when: !calc doc.platform.get('NOSCRUB_DIR','') - do: !calc doc.platform.NOSCRUB_DIR - - otherwise: !expand "{doc.places.EXPROOT}/noscrub/{tools.env('USER')}" description: "Disk area used to store reduced output, verification statistics, and other small files that may be desired between runs. The workflow will not scrub this." FIXgsi: { type: string, optional: true } @@ -40,28 +36,16 @@ places_schema: &places_schema !Template HOMEobsproc_prep: type: string optional: true - default: !expand "{doc.platform.BASE_GIT}/obsproc/obsproc_prep_RB-5.2.0" HOMEobsproc_network: type: string optional: true - default: !expand "{doc.platform.BASE_GIT}/obsproc/obsproc_global_RB-3.2.0" BASE_VERIF: { type: string, optional: true } BASE_SVN: type: string - default: !calc doc.platform.BASE_SVN BASE_GIT: type: string - default: !calc doc.platform.BASE_GIT ics_from: type: string - default: opsgfs allowed: [ opsgfs, pargfs ] description: initial conditions from opsgfs or pargfs - if_present: !Template - parexp: - type: string - default: prnemsrn - HPSS_PAR_PATH: - type: string - default: !expand "/5year/NCEPDEV/emc-global/emc.glopara/WCOSS_C/{parexp}" diff --git a/workflow/schema/post.yaml b/workflow/schema/post.yaml index 1ce3862a7c4..7d2e0d67ad4 100644 --- a/workflow/schema/post.yaml +++ b/workflow/schema/post.yaml @@ -1,4 +1,4 @@ -# This is used to set default values for grib product generation. +# This is used to set variable design for grib product generation. # Reconfiguring These variables are not supported in this release. post_schema: &post_schema !Template diff --git a/workflow/schema/settings.yaml b/workflow/schema/settings.yaml index c4a275db522..7606d59234d 100644 --- a/workflow/schema/settings.yaml +++ b/workflow/schema/settings.yaml @@ -1,24 +1,30 @@ settings_schema: !Template &settings_schema + gfs_cyc: + type: int + allowed: [ 0, 1, 2, 4 ] + description: | + When to run GFS forecast. Data assimilation is run for every + cycle regardless of these values + * 0: no GFS cycle + * 1: 00Z only + * 2: 00Z and 12Z only + * 4: all 4 cycles (0, 6, 12, 18 Z) dev_safeguards: type: bool - default: true description: "Add backup triggers in workflow to handle scheduling delays, such as the forecast finishing any posts start. Only turn this off for NCO operational deliveries." realtime: type: bool - default: false description: "Simulation of an event that is currently happening (ie.: a forecast)" run_vrfy_jobs: type: bool - default: true description: "Run the EMC product generation jobs." four_cycle_mode: type: bool description: "Enable NCO-like four cycle suite. Requires a special setup for your ecFlow server, and a prepared directory structure designed to look like NCEP production. Do not use unless you know what you're doing." - default: false if_present: !FirstTrue - when: !calc four_cycle_mode take: !FirstTrue @@ -28,52 +34,36 @@ settings_schema: !Template &settings_schema - otherwise: !error "In four cycle mode, the experiment must be prod, para, or test, not {doc.names.experiment}." - otherwise: null -# ecf_module_commands: -# type: str -# default: !FirstTrue -# - when: !calc four_cycle_mode -# take: !calc doc.platform.four_cycle_mode_modules -# - otherwise: !expand | -# source "$HOMEgfs/ush/load_fv3gfs_modules.sh" {task_type} - rocoto_cycle_throttle: type: int description: "Maximum number of cycles active at once in a Rocoto workflow" - default: 2 rocoto_task_throttle: type: int description: "Maximum number of tasks active (queued/running) at once in a Rocoto workflow" - default: 5 use_nco_ecflow_headers: type: bool description: "Use the NCO model-ver.h instead of experiment-specific paths. This will cause you to use the scripts and code in NCEP Operational areas instead of your own scripts and code. Only use this option if you know what you're doing." - default: !calc four_cycle_mode prod_util_module: - type: str - default: !calc doc.platform.get("prod_util_module","prod_util") + type: string description: Name of the unix modulefile to load to obtain NCEP production shell utilities. ecflow_real_clock: type: bool - default: no description: the ecflow suite definition should specify a real clock ecflow_virtual_clock: type: bool - default: no description: the ecflow suite definition should specify a virtual clock ecflow_hybrid_clock: type: bool - default: no description: the ecflow suite definition should specify a hybrid clock ecflow_totality_limit: type: bool - default: yes description: 'Place the entire suite in the "/totality_limit:TOTALITY" limit so that the server can limit the total number of jobs running.' run_gsi: @@ -83,7 +73,6 @@ settings_schema: !Template &settings_schema run_enkf: type: bool description: "Enable Ensemble Kalman Filter" - default: !calc run_gsi chgres_and_convert_ics: type: bool @@ -91,7 +80,6 @@ settings_schema: !Template &settings_schema max_job_tries: type: int - default: 1 description: "Number of times to try running a job. Set to 1 for no retries." IC_CDUMP: @@ -100,18 +88,6 @@ settings_schema: !Template &settings_schema optional: true description: Get initial conditions from gfs or gdas - gfs_cyc: - type: int - default: 4 - allowed: [ 0, 1, 2, 4 ] - description: | - When to run GFS forecast. Data assimilation is run for every - cycle regardless of these values - * 0: no GFS cycle - * 1: 00Z only - * 2: 00Z and 12Z only - * 4: all 4 cycles (0, 6, 12, 18 Z) - SDATE: type: datetime description: | @@ -126,13 +102,5 @@ settings_schema: !Template &settings_schema ics_from: type: string - default: opsgfs allowed: [ opsgfs, pargfs ] description: initial conditions from opsgfs or pargfs - if_present: !Template - parexp: - type: string - default: prnemsrn - HPSS_PAR_PATH: - type: string - default: !expand "/5year/NCEPDEV/emc-global/emc.glopara/WCOSS_C/{parexp}" diff --git a/workflow/top.yaml b/workflow/top.yaml index 57d3cdbd1ef..e7375eba740 100644 --- a/workflow/top.yaml +++ b/workflow/top.yaml @@ -15,8 +15,8 @@ fv3_gdas_settings: !Immediate fv3_enkf_settings: !Immediate - !calc doc.case.fv3_enkf_settings -gfs_output_settings: !Immediate - - !calc doc.case.get('gfs_output_settings',{}) +output_settings: !Immediate + - !calc doc.case.get('output_settings',{}) schedvar: !Immediate - !MergeMapping From 8845076def295bea4baf0309330c4b10bc78f07f Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Mon, 9 Mar 2020 15:06:34 +0000 Subject: [PATCH 4/7] model_configure_DATM --- ush/parsing_model_configure_DATM.sh | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 ush/parsing_model_configure_DATM.sh diff --git a/ush/parsing_model_configure_DATM.sh b/ush/parsing_model_configure_DATM.sh new file mode 100755 index 00000000000..c3fb5d1ac52 --- /dev/null +++ b/ush/parsing_model_configure_DATM.sh @@ -0,0 +1,40 @@ +#! /bin/sh + +##### +## "parsing_model_configure_DATM.sh" +## This script writes model configure file +## for DATM model +## +## This is the child script of ex-global forecast, +## writing model configure file for DATM +## This script is a direct execution. +##### + +DATM_model_configure(){ + +rm -f model_configure +cat > model_configure < Date: Mon, 9 Mar 2020 18:26:53 +0000 Subject: [PATCH 5/7] merge in the latest revision from IPD work --- scripts/exglobal_fcst_nemsfv3gfs.sh | 96 +++++++++---------------- ush/cplvalidate.sh | 1 + ush/forecast_postdet.sh | 104 +++++++++++++++++++++------- ush/forecast_predet.sh | 20 +++++- ush/nems_configure.sh | 14 +++- ush/parsing_model_configure_FV3.sh | 17 +++-- ush/parsing_namelists_FV3.sh | 73 ++++++++++++++----- 7 files changed, 214 insertions(+), 111 deletions(-) diff --git a/scripts/exglobal_fcst_nemsfv3gfs.sh b/scripts/exglobal_fcst_nemsfv3gfs.sh index 76da4a5b1fc..a64dc125fb7 100755 --- a/scripts/exglobal_fcst_nemsfv3gfs.sh +++ b/scripts/exglobal_fcst_nemsfv3gfs.sh @@ -1,4 +1,4 @@ -#!/bin/ksh +#!/bin/bash ################################################################################ ## UNIX Script Documentation Block ## Script name: exglobal_fcst_nemsfv3gfs.sh @@ -72,7 +72,6 @@ ## 2. nems.configure ## 3. model_configure ## 4. input.nml - ####################### # Main body starts here ####################### @@ -83,29 +82,8 @@ if [ $VERBOSE = "YES" ] ; then set -x fi -## Run in sandbox if no $machine defined -## Locate mod_forecast script folder -if [ -z $machine ]; then - machine='sandbox' - echo "MAIN: !!!Running in sandbox mode!!!" - unameOut="$(uname -s)" - case "${unameOut}" in - Linux*) - SCRIPTDIR=$(dirname $(readlink -f "$0") )/../ush - echo "MAIN: Linux environment. Current Script locates in $SCRIPTDIR." - ;; - Darwin*) - SCRIPTDIR=$(pwd)/../ush - echo "MAIN: MacOS environment. Current Script locates in $SCRIPTDIR." - ;; - CYGWIN*) echo CYGWIN ;; - MINGW*) echo MinGw ;; - *) echo "UNKNOWN:${unameOut}" - esac -else - SCRIPTDIR=$(dirname $(readlink -f "$0") )/../ush - echo "MAIN: environment loaded for $machine platform,Current Script locates in $SCRIPTDIR." -fi +SCRIPTDIR=$(dirname $(readlink -f "$0") )/../ush +echo "MAIN: environment loaded for $machine platform,Current Script locates in $SCRIPTDIR." # include all subroutines. Executions later. source $SCRIPTDIR/cplvalidate.sh # validation of cpl* @@ -114,6 +92,7 @@ source $SCRIPTDIR/forecast_det.sh # include functions for run type determinatio source $SCRIPTDIR/forecast_postdet.sh # include functions for variables after run type determination source $SCRIPTDIR/nems_configure.sh # include functions for nems_configure processing source $SCRIPTDIR/parsing_model_configure_FV3.sh +source $SCRIPTDIR/parsing_model_configure_DATM.sh # Compset string. For nems.configure.* template selection. Default ATM only confignamevarfornems=${confignamevarfornems:-'atm'} @@ -125,15 +104,12 @@ cplwav=${cplwav:-.false.} # ? how to control 1-way/2-way? cplchem=${cplchem:-.false.} # Chemistry model cplice=${cplice:-.false.} # ICE model -OCNTIM=${OCNTIM:-1800} +OCNTIM=${OCNTIM:-3600} DELTIM=${DELTIM:-450} ICETIM=${DELTIM} -CPL_SLOW=${OCNTIM} -CPL_FAST=${ICETIM} -# Coupling control switches, for coupling purpose, off by default - -[[ $machine = 'sandbox' ]] && RUN=gfs +CPL_SLOW=${CPL_SLOW:-$OCNTIM} +CPL_FAST=${CPL_FAST:-$ICETIM} echo "MAIN: $confignamevarfornems selected" echo "MAIN: Forecast script started for $confignamevarfornems on $machine" @@ -149,7 +125,7 @@ common_predet echo $RUN case $RUN in - 'data') Data_ATM_setup;; + 'data') DATM_predet;; 'gfs') FV3_GFS_predet;; 'gdas') FV3_GFS_predet;; 'gefs') FV3_GEFS_predet;; @@ -174,6 +150,7 @@ echo "MAIN: RUN Type Determined" echo "MAIN: Post-determination set up of run type" echo $RUN case $RUN in + 'data') DATM_postdet;; 'gfs') FV3_GFS_postdet;; 'gdas') FV3_GFS_postdet;; 'gefs') FV3_GEFS_postdet;; @@ -186,6 +163,7 @@ echo "MAIN: Post-determination set up of run type finished" echo "MAIN: Writing name lists and model configuration" case $RUN in + 'data') DATM_nml;; 'gfs') FV3_GFS_nml;; 'gdas') FV3_GFS_nml;; 'gefs') FV3_GEFS_nml;; @@ -194,7 +172,13 @@ esac #no namelist for data atmosphere [[ $cplwav = .true. ]] && WW3_nml [[ $cplice = .true. ]] && CICE_nml [[ $cplchem = .true. ]] && GSD_nml -Common_model_configure + +case $RUN in + 'data') DATM_model_configure;; + 'gfs') FV3_model_configure;; + 'gdas') FV3_model_configure;; + 'gefs') FV3_model_configure;; +esac echo "MAIN: Name lists and model configuration written" echo "MAIN: Writing NEMS Configure file" @@ -204,39 +188,26 @@ echo "MAIN: NEMS configured" #------------------------------------------------------------------ # run the executable -if [ $machine != 'sandbox' ]; then - $NCP $FCSTEXECDIR/$FCSTEXEC $DATA/. - export OMP_NUM_THREADS=$NTHREADS_FV3 - $APRUN_FV3 $DATA/$FCSTEXEC 1>&1 2>&2 - export ERR=$? - export err=$ERR - $ERRSCRIPT || exit $err -else - echo "MAIN: mpirun launch here" -fi +$NCP $FCSTEXECDIR/$FCSTEXEC $DATA/. +export OMP_NUM_THREADS=$NTHREADS_FV3 +$APRUN_FV3 $DATA/$FCSTEXEC 1>&1 2>&2 +export ERR=$? +export err=$ERR +$ERRSCRIPT || exit $err -if [ $machine != 'sandbox' ]; then - case $RUN in - 'data') data_out_Data_ATM;; - 'gfs') data_out_GFS;; - 'gdas') data_out_GFS;; - 'gefs') data_out_GEFS;; - esac - [[ $cplflx = .true. ]] && MOM6_out - [[ $cplwav = .true. ]] && WW3_out - [[ $cplice = .true. ]] && CICE_out - [[ $cplchem = .true. ]] && GSD_out -else - echo "MAIN: Running on sandbox mode, no output linking" -fi +case $RUN in + 'data') data_out_Data_ATM;; + 'gfs') data_out_GFS;; + 'gdas') data_out_GFS;; + 'gefs') data_out_GEFS;; +esac +[[ $cplflx = .true. ]] && MOM6_out +[[ $cplwav = .true. ]] && WW3_out +[[ $cplice = .true. ]] && CICE_out +[[ $cplchem = .true. ]] && GSD_out echo "MAIN: Output copied to COMROT" #------------------------------------------------------------------ -# Clean up before leaving -if [ $mkdata = "YES" ]; then rm -rf $DATA; fi - -#------------------------------------------------------------------ -#set +x if [ $VERBOSE = "YES" ] ; then echo $(date) EXITING $0 with return code $err >&2 fi @@ -246,5 +217,6 @@ if [ $err != 0 ]; then exit $err else echo "MAIN: $confignamevarfornems Forecast completed at normal status" + if [ $mkdata = "YES" ]; then rm -rf $DATA; fi exit 0 fi diff --git a/ush/cplvalidate.sh b/ush/cplvalidate.sh index ef888bfb421..f6ffa42ec05 100755 --- a/ush/cplvalidate.sh +++ b/ush/cplvalidate.sh @@ -12,6 +12,7 @@ cplvalidate(){ echo "SUB cplvalidate: validating cpl** switches for $confignamevarfornems" case $confignamevarfornems in 'atm') combination=.false..false..false..false..false.;; + 'datm') combination=.true..true..false..false..false.;; 'med_atm_ocn_ice') combination=.true..true..true..false..false.;; 'blocked_atm_wav') combination=.true..false..false..true..false.;; 'leapfrog_atm_wav')combination=.true..false..false..true..false.;; diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 9ceb8940f20..0f8853fb0cc 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -16,6 +16,21 @@ FV3_GEFS_postdet(){ # soft link commands insert here } +DATM_postdet(){ +###################################################################### +# 3.1 Link DATM inputs (ie forcing files) # +###################################################################### + +#TODO: This should be some loop through CDATE-> CDATE+ FORECAST length +#and get input from either CFSR or GEFS or Whatever... +#Currently assumes you only need the month of DATM input for IC date + +# DATM forcing file name convention is ${DATM_FILENAME_BASE}.$YYYYMMDDHH.nc +echo "Link DATM forcing files" +DATMINPUTDIR="/scratch2/NCEPDEV/marineda/DATM_INPUT/CFSR/${SYEAR}${SMONTH}" +ln -sf ${DATMINPUTDIR}/${DATM_FILENAME_BASE}*.nc $DATA/DATM_INPUT/ +} + FV3_GFS_postdet(){ echo "SUB ${FUNCNAME[0]}: $RERUN and $warm_start determined for $RUN" @@ -180,6 +195,16 @@ EOF O3FORC=global_o3prdlos.f77 fi H2OFORC=${H2OFORC:-"global_h2o_pltc.f77"} + #### + # copy CCN_ACTIVATE.BIN for Thompson microphysics + if [ $imp_physics -eq 8 ]; then + $NCP $FV3INP/CCN_ACTIVATE.BIN CCN_ACTIVATE.BIN + #### + $NCP /scratch1/NCEPDEV/stmp2/Lin.Gan/RUNDIRS/gsdsuite-NEW/2019100900/gfs/fcst.383441/freezeH2O.dat freezeH2O.dat + $NCP /scratch1/NCEPDEV/stmp2/Lin.Gan/RUNDIRS/gsdsuite-NEW/2019100900/gfs/fcst.383441/qr_acr_qg.dat qr_acr_qg.dat + $NCP /scratch1/NCEPDEV/stmp2/Lin.Gan/RUNDIRS/gsdsuite-NEW/2019100900/gfs/fcst.383441/qr_acr_qs.dat qr_acr_qs.dat + sleep 60 + fi $NLN $FIX_AM/${O3FORC} $DATA/global_o3prdlos.f77 $NLN $FIX_AM/${H2OFORC} $DATA/global_h2oprdlos.f77 $NLN $FIX_AM/global_solarconstant_noaa_an.txt $DATA/solarconstant_noaa_an.txt @@ -362,9 +387,9 @@ EOF else ISEED=${ISEED:-0} fi - DO_SKEB=${DO_SKEB:-"NO"} - DO_SPPT=${DO_SPPT:-"NO"} - DO_SHUM=${DO_SHUM:-"NO"} + DO_SKEB=${DO_SKEB:-".false."} + DO_SPPT=${DO_SPPT:-".false."} + DO_SHUM=${DO_SHUM:-".false."} JCAP_STP=${JCAP_STP:-$JCAP_CASE} LONB_STP=${LONB_STP:-$LONB_CASE} LATB_STP=${LATB_STP:-$LATB_CASE} @@ -415,6 +440,12 @@ FV3_GFS_nml(){ echo SUB ${FUNCNAME[0]}: FV3 name lists and model configure file created } +DATM_nml(){ + source $SCRIPTDIR/parsing_namelists_DATM.sh + DATM_namelists + echo SUB ${FUNCNAME[0]}: DATM name lists and model configure file created +} + data_out_GFS() { # data in take for FV3GFS @@ -581,37 +612,57 @@ MOM6_out() CICE_postdet() { echo "SUB ${FUNCNAME[0]}: CICE after run type determination" + + year=$(echo $CDATE|cut -c 1-4) + #BL2018 + stepsperhr=$((3600/$DT_CICE)) + #BL2018 + nhours=$(${NHOUR} ${CDATE} ${SYEAR}010100) + istep0=$((nhours*stepsperhr)) + npt=$((FHMAX*$stepsperhr)) # Need this in order for dump_last to work + + histfreq_n=${histfreq_n:-6} + restart_interval=${restart_interval:-1296000} # restart write interval in seconds, default 15 days + dumpfreq_n=$restart_interval # restart write interval in seconds + + #BL2018 + #dumpfreq='d' + #dumpfreq='s' + if [ -d $ROTDIR/../NEXT_IC ]; then + #continuing run "hot start" + RUNTYPE='continue' + USE_RESTART_TIME='.true.' + restart_pond_lvl=${restart_pond_lvl:-".true."} + else + #using cold start IC + RUNTYPE='initial' + USE_RESTART_TIME='.false.' + restart_pond_lvl=${restart_pond_lvl:-".false."} + fi + + dumpfreq_n=${dumpfreq_n:-"${restart_interval}"} + dumpfreq=${dumpfreq:-"s"} # "s" or "d" or "m" for restarts at intervals of "seconds", "days" or "months" + + iceres=${iceres:-"mx025"} + ice_grid_file=${ice_grid_file:-"grid_cice_NEMS_${iceres}.nc"} + ice_kmt_file=${ice_kmt_file:-"kmtu_cice_NEMS_${iceres}.nc"} + + #TODO iceic name... this might need to be update? + iceic="cice5_model.res_$CDATE.nc" + # Copy CICE5 IC - pre-generated from CFSv2 - cp -p $ICSDIR/$CDATE/cice5_model_0.25.res_$CDATE.nc $DATA/cice5_model.res_$CDATE.nc + cp -p $ICSDIR/$CDATE/cice5_model_0.25.res_$CDATE.nc $DATA/$iceic #cp -p $ICSDIR/$CDATE/cpc/cice5_model_0.25.res_$CDATE.nc ./cice5_model.res_$CDATE.nc - # Copy CICE5 fixed files, and namelists - cp -p $FIXcice/kmtu_cice_NEMS_mx025.nc $DATA/ - cp -p $FIXcice/grid_cice_NEMS_mx025.nc $DATA/ + echo "Link CICE fixed files" + ln -sf $FIXcice/${ice_grid_file} $DATA/ + ln -sf $FIXcice/${ice_kmt_file} $DATA/ # Copy grid_spec and mosaic files cp -pf $FIXgrid/$CASE/${CASE}_mosaic* $DATA/INPUT/ cp -pf $FIXgrid/$CASE/grid_spec.nc $DATA/INPUT/ cp -pf $FIXgrid/$CASE/ocean_mask.nc $DATA/INPUT/ cp -pf $FIXgrid/$CASE/land_mask* $DATA/INPUT/ - - iceic=cice5_model.res_$CDATE.nc - year=$(echo $CDATE|cut -c 1-4) - #BL2018 - stepsperhr=$((3600/$ICETIM)) - #BL2018 - nhours=$($NHOUR $CDATE ${year}010100) - steps=$((nhours*stepsperhr)) - npt=$((FHMAX*$stepsperhr)) # Need this in order for dump_last to work - - histfreq_n=${histfreq_n:-6} - restart_interval=${restart_interval:-1296000} # restart write interval in seconds, default 15 days - dumpfreq_n=$restart_interval # restart write interval in seconds - - #BL2018 - #dumpfreq='d' - #dumpfreq='s' - } CICE_nml() @@ -683,3 +734,6 @@ GSD_out() echo "SUB ${FUNCNAME[0]}: Copying output data for GSD" # soft link commands insert here } + + + diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh index 956a4ffc7c1..008d7c748ed 100755 --- a/ush/forecast_predet.sh +++ b/ush/forecast_predet.sh @@ -21,6 +21,20 @@ common_predet(){ ICSDIR=${ICSDIR:-$pwd} # cold start initial conditions } +DATM_predet(){ + SYEAR=$(echo $CDATE | cut -c1-4) + SMONTH=$(echo $CDATE | cut -c5-6) + SDAY=$(echo $CDATE | cut -c7-8) + SHOUR=$(echo $CDATE | cut -c9-10) + # directory set up + if [ ! -d $DATA ]; then mkdir -p $DATA; fi + if [ ! -d $DATA/DATM_INPUT ]; then mkdir -p $DATA/DATM_INPUT; fi + FHMAX=${FHMAX:-9} +# Go to Run Directory (DATA) +cd $DATA + +} + FV3_GFS_predet(){ echo "SUB ${FUNCNAME[0]}: Defining variables for FV3GFS" CDUMP=${CDUMP:-gdas} @@ -83,7 +97,11 @@ FV3_GFS_predet(){ NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS_FCST:-${nth_fv3:-1}}} cores_per_node=${cores_per_node:-${npe_node_max:-24}} ntiles=${ntiles:-6} - NTASKS_TOT=${NTASKS_TOT:-$npe_fcst} + if [ $MEMBER -lt 0 ]; then + NTASKS_TOT=${NTASKS_TOT:-$npe_fcst} + else + NTASKS_TOT=${NTASKS_TOT:-$npe_efcs} + fi TYPE=${TYPE:-"nh"} # choices: nh, hydro MONO=${MONO:-"non-mono"} # choices: mono, non-mono diff --git a/ush/nems_configure.sh b/ush/nems_configure.sh index 4f4a5063e34..27d37b51d2f 100755 --- a/ush/nems_configure.sh +++ b/ush/nems_configure.sh @@ -26,6 +26,14 @@ else coldstart=false fi +ATM_model=${ATM_model:-'fv3'} +OCN_model=${OCN_model:-'mom6'} +ICE_model=${ICE_model:-'cice'} + +ATMPETS=${ATMPETS:-8} +OCNPETS=${OCNPETS:-8} +ICEPETS=${ICEPETS:-8} + rm -f $DATA/nems.configure med_petlist_bounds=${med_petlist_bounds:-"0 $(( $ATMPETS-1 ))"} @@ -63,12 +71,12 @@ ice_petlist_bounds=${ice_petlist_bounds:-"$(( $ATMPETS+$OCNPETS )) $(( $ATMPETS+ # Copy the selected template into run directory cp $SCRIPTDIR/nems.configure.$confignamevarfornems.IN tmp1 sed -i -e "s;@\[med_model\];nems;g" tmp1 -sed -i -e "s;@\[atm_model\];fv3;g" tmp1 +sed -i -e "s;@\[atm_model\];$ATM_model;g" tmp1 sed -i -e "s;@\[med_petlist_bounds\];$med_petlist_bounds;g" tmp1 sed -i -e "s;@\[atm_petlist_bounds\];$atm_petlist_bounds;g" tmp1 if [ $cplflx = .true. ]; then - sed -i -e "s;@\[ocn_model\];mom6;g" tmp1 + sed -i -e "s;@\[ocn_model\];$OCN_model;g" tmp1 sed -i -e "s;@\[ocn_petlist_bounds\];$ocn_petlist_bounds;g" tmp1 sed -i -e "s;@\[DumpFields\];$DumpFields;g" tmp1 sed -i -e "s;@\[coldstart\];$coldstart;g" tmp1 @@ -80,7 +88,7 @@ if [ $cplwav = .true. ]; then sed -i -e "s;@\[wav_model\];ww3;g" tmp1 fi if [ $cplice = .true. ]; then - sed -i -e "s;@\[ice_model\];cice;g" tmp1 + sed -i -e "s;@\[ice_model\];$ICE_model;g" tmp1 sed -i -e "s;@\[ice_petlist_bounds\];$ice_petlist_bounds;g" tmp1 fi if [ $cplchem = .true. ]; then diff --git a/ush/parsing_model_configure_FV3.sh b/ush/parsing_model_configure_FV3.sh index 7d346fb2d23..304128c8740 100755 --- a/ush/parsing_model_configure_FV3.sh +++ b/ush/parsing_model_configure_FV3.sh @@ -10,7 +10,7 @@ ## This script is a direct execution. ##### -Common_model_configure(){ +FV3_model_configure(){ rm -f model_configure cat > model_configure < model_configure < input.nml <> input.nml << EOF + ccpp_suite = ${CCPP_SUITE:-"FV3_GFS_v15"} +EOF +fi + +cat >> input.nml < input.nml < input.nml < input.nml <> input.nml << EOF + ltaerosol = ${ltaerosol:-".F."} + lradar = ${lradar:-".F."} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay= ${do_mynnsfclay:-".false."} + lsoil_lsm = ${lsoil_lsm:-"4"} + ttendlim = ${ttendlim:-0.005} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect=${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom=${bl_mynn_edmf_mom:-"1"} +EOF +fi + +cat >> input.nml < input.nml < input.nml <> input.nml << EOF cplflx = $cplflx EOF +fi # Add namelist for IAU if [ $DOIAU = "YES" ]; then @@ -304,6 +344,7 @@ cat >> input.nml <> input.nml <> input.nml << EOF skeb = $SKEB iseed_skeb = ${ISEED_SKEB:-$ISEED} @@ -385,7 +426,7 @@ EOF EOF fi - if [ $DO_SHUM = "YES" ]; then + if [ $DO_SHUM = ".true." ]; then cat >> input.nml << EOF shum = $SHUM iseed_shum = ${ISEED_SHUM:-$ISEED} @@ -394,7 +435,7 @@ EOF EOF fi - if [ $DO_SPPT = "YES" ]; then + if [ $DO_SPPT = ".true." ]; then cat >> input.nml << EOF sppt = $SPPT iseed_sppt = ${ISEED_SPPT:-$ISEED} From c21ecc8f679c6e9d6e0143b9c4b19881393e35e5 Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Mon, 9 Mar 2020 21:14:50 +0000 Subject: [PATCH 6/7] add stoch variables to config.fcst scripts update: CCPP and IPD works --- workflow/cases/coupled_free_forecast.yaml | 3 +++ workflow/config/efcs.yaml | 8 ++++---- workflow/config/fcst.yaml | 23 +++++++++++++++++++++++ workflow/defaults/fv3_gfs.yaml | 7 ++++--- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/workflow/cases/coupled_free_forecast.yaml b/workflow/cases/coupled_free_forecast.yaml index 3303f6c084e..c779e79507d 100644 --- a/workflow/cases/coupled_free_forecast.yaml +++ b/workflow/cases/coupled_free_forecast.yaml @@ -29,6 +29,9 @@ case: LEVS: 65 DELTIM: 450 nst_anl: no + DO_SKEB: true + DO_SHUM: false + DO_SPPT: true layout: x: 6 y: 8 diff --git a/workflow/config/efcs.yaml b/workflow/config/efcs.yaml index f6e8ad00a81..f14b4dbaa38 100644 --- a/workflow/config/efcs.yaml +++ b/workflow/config/efcs.yaml @@ -36,19 +36,19 @@ config_efcs: export NMEM_EFCSGRP={doc.data_assimilation.NMEM_EFCSGRP} export RERUN_EFCSGRP="{tools.YES_NO(doc.data_assimilation.RERUN_EFCSGRP)}" - # Stochastic physics parameters (only for ensemble forecasts) - export DO_SKEB="{tools.YES_NO(doc.fv3_enkf_settings.DO_SKEB)}" + # Stochastic physics parameters + export DO_SKEB="{tools.fort(doc.fv3_enkf_settings.DO_SKEB)}" export SKEB={doc.fv3_enkf_settings.SKEB} export SKEB_TAU={doc.fv3_enkf_settings.SKEB_TAU} export SKEB_LSCALE={doc.fv3_enkf_settings.SKEB_LSCALE} export SKEBNORM={doc.fv3_enkf_settings.SKEBNORM} export SKEB_NPASS={doc.fv3_enkf_settings.SKEB_NPASS} export SKEB_VDOF={doc.fv3_enkf_settings.SKEB_VDOF} - export DO_SHUM="{tools.YES_NO(doc.fv3_enkf_settings.DO_SHUM)}" + export DO_SHUM="{tools.fort(doc.fv3_enkf_settings.DO_SHUM)}" export SHUM={doc.fv3_enkf_settings.SHUM} export SHUM_TAU={doc.fv3_enkf_settings.SHUM_TAU} export SHUM_LSCALE={doc.fv3_enkf_settings.SHUM_LSCALE} - export DO_SPPT="{tools.YES_NO(doc.fv3_enkf_settings.DO_SPPT)}" + export DO_SPPT="{tools.fort(doc.fv3_enkf_settings.DO_SPPT)}" export SPPT={doc.fv3_enkf_settings.SPPT} export SPPT_TAU={doc.fv3_enkf_settings.SPPT_TAU} export SPPT_LSCALE={doc.fv3_enkf_settings.SPPT_LSCALE} diff --git a/workflow/config/fcst.yaml b/workflow/config/fcst.yaml index 39c12daa55f..04eb81f2fcc 100644 --- a/workflow/config/fcst.yaml +++ b/workflow/config/fcst.yaml @@ -104,6 +104,29 @@ config_fcst: {more_exports_for_microphys} {level_127} + # Stochastic physics parameters + export SEEDLET=1 + export ISEED_SKEB=$((SDATE*1000 + SEEDLET*10 + 1)) + export ISEED_SHUM=$((SDATE*1000 + SEEDLET*10 + 2)) + export ISEED_SPPT=$((SDATE*1000 + SEEDLET*10 + 3)) + export DO_SKEB="{tools.fort(doc.fv3_gfs_settings.DO_SKEB)}" + export DO_SHUM="{tools.fort(doc.fv3_gfs_settings.DO_SHUM)}" + export DO_SPPT="{tools.fort(doc.fv3_gfs_settings.DO_SPPT)}" + + export skeb=0.6,-999,-999,-999,-999 + export iseed_skeb=$ISEED_SKEB + export skeb_tau=2.16E4,1.728E5,2.592E6,7.776E6,3.1536E7 + export skeb_lscale=500.E3,1000.E3,2000.E3,2000.E3,2000.E3 + export skebnorm=1 + + export sppt=0.8,0.4,0.2,0.08,0.04 + export iseed_sppt=$ISEED_SPPT + export sppt_tau=2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7 + export sppt_lscale=500.E3,1000.E3,2000.E3,2000.E3,2000.E3 + export sppt_logit=.TRUE. + export sppt_sfclimit=.true. + export use_zmtnblck=.true. + #--------------------------------------------------------------------- # Disable the use of coupler.res; get model start time from model_configure export USE_COUPLER_RES="NO" diff --git a/workflow/defaults/fv3_gfs.yaml b/workflow/defaults/fv3_gfs.yaml index 877e9779de5..70775ecfd09 100644 --- a/workflow/defaults/fv3_gfs.yaml +++ b/workflow/defaults/fv3_gfs.yaml @@ -17,9 +17,10 @@ fv3_gfs_defaults: &fv3_gfs_defaults dddmp: 0.2 ISEED: 0 SET_STP_SEED: YES - DO_SHUM: NO - DO_SKEB: NO - DO_SPPT: NO + DO_SHUM: false + DO_SKEB: false + DO_SPPT: false + RUN_EFCSGRP: NO zhao_mic: YES nh_type: 'nh' From b8b757b17b2019be89d3e9aa55fc607627642f59 Mon Sep 17 00:00:00 2001 From: "jian.kuang" Date: Tue, 10 Mar 2020 14:12:34 +0000 Subject: [PATCH 7/7] capital case CDUMP values in config.fv3 --- workflow/config/fv3.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflow/config/fv3.yaml b/workflow/config/fv3.yaml index c8d173fce68..5ea5b6ca7f3 100644 --- a/workflow/config/fv3.yaml +++ b/workflow/config/fv3.yaml @@ -43,7 +43,7 @@ config_fv3: forecast_mode=$( echo "$1" | tr a-z A-Z ) case $forecast_mode in - "gfs") + "GFS") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_gfs_settings.DELTIM} export layout_x={doc.fv3_gfs_settings.layout.x} @@ -61,7 +61,7 @@ config_fv3: export WRTTASK_PER_GROUP_GFS={doc.fv3_gfs_settings.layout.WGRP_NTASKS} export WRTIOBUF={doc.fv3_gfs_settings.layout.WRTIOBUF} ;; - "gdas") + "GDAS") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_gdas_settings.DELTIM} export layout_x={doc.fv3_gdas_settings.layout.x} @@ -78,7 +78,7 @@ config_fv3: export WRTTASK_PER_GROUP_GFS={doc.fv3_gdas_settings.layout.WGRP_NTASKS} export WRTIOBUF={doc.fv3_gdas_settings.layout.WRTIOBUF} ;; - "enkf") + "ENKF") echo "BEGIN: config.fv3 for $forecast_mode" export DELTIM={doc.fv3_enkf_settings.DELTIM} export layout_x={doc.fv3_enkf_settings.layout.x}