From b24d78bd55cf74a8c75291241efd5796aaf58ce3 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 15 Oct 2025 15:51:29 +0000 Subject: [PATCH 01/23] Initial commit --- parm/marine/jcb-base.yaml.j2 | 26 ++++++------- parm/marine/marine_bmat_copy_bkgerr.yaml.j2 | 8 ---- parm/marine/marine_bmat_save.yaml.j2 | 39 ------------------- ...nfig.yaml.j2 => marine_det_config.yaml.j2} | 0 parm/marine/marine_det_stage_bkg.yaml.j2 | 22 +++-------- parm/marine/marine_ens_stage_bkg.yaml.j2 | 27 ++++--------- parm/marine/marine_stage_fix_025.yaml.j2 | 8 ++-- parm/marine/marine_stage_fix_100.yaml.j2 | 6 +-- parm/marine/marine_stage_fix_500.yaml.j2 | 8 ++-- parm/marine/marine_stage_utilities.yaml.j2 | 1 - 10 files changed, 35 insertions(+), 110 deletions(-) delete mode 100644 parm/marine/marine_bmat_copy_bkgerr.yaml.j2 delete mode 100644 parm/marine/marine_bmat_save.yaml.j2 rename parm/marine/{marine_det_jedi_config.yaml.j2 => marine_det_config.yaml.j2} (100%) diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index a93db5c48..bafc0ab85 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -18,8 +18,8 @@ final_increment_file: marine_final_increment # Assimilation standard things (not prepended with model choice) # ---------------------------- pslot: '{{ PSLOT }}' -window_begin: '{{ MARINE_WINDOW_BEGIN | to_isotime }}' -window_length: '{{MARINE_WINDOW_LENGTH}}' +window_begin: '{{ WINDOW_BEGIN | to_isotime }}' +window_length: '{{ WINDOW_LENGTH }}' bound_to_include: begin minimizer: RPCG final_diagnostics_departures: oman @@ -37,18 +37,18 @@ analysis_variables: # Model things # ------------ -marine_window_begin: '{{MARINE_WINDOW_BEGIN}}' -marine_window_middle: '{{MARINE_WINDOW_MIDDLE}}' -marine_window_begin_iso: '{{ MARINE_WINDOW_BEGIN | to_isotime }}' -marine_window_middle_iso: '{{ MARINE_WINDOW_MIDDLE | to_isotime }}' -marine_window_end_iso: '{{ MARINE_WINDOW_END | to_isotime }}' +marine_window_begin: '{{ WINDOW_BEGIN }}' +marine_window_middle: '{{ WINDOW_MIDDLE }}' +marine_window_begin_iso: '{{ WINDOW_BEGIN | to_isotime }}' +marine_window_middle_iso: '{{ WINDOW_MIDDLE | to_isotime }}' +marine_window_end_iso: '{{ WINDOW_END | to_isotime }}' enspert_relpath: '{{ ENSPERT_RELPATH }}' {% if DOIAU %} -marine_cice_date_fms: '{{ MARINE_WINDOW_BEGIN | to_fv3time }}' -marine_cice_date_iso: '{{ MARINE_WINDOW_BEGIN | to_isotime }}' +marine_cice_date_fms: '{{ WINDOW_BEGIN | to_fv3time }}' +marine_cice_date_iso: '{{ WINDOW_BEGIN | to_isotime }}' {% else %} -marine_cice_date_fms: '{{ MARINE_WINDOW_MIDDLE | to_fv3time }}' -marine_cice_date_iso: '{{ MARINE_WINDOW_MIDDLE | to_isotime }}' +marine_cice_date_fms: '{{ WINDOW_MIDDLE | to_fv3time }}' +marine_cice_date_iso: '{{ WINDOW_MIDDLE | to_isotime }}' {% endif %} # Geometry @@ -57,7 +57,7 @@ marine_vt_levels: '{{MOM6_LEVS}}' # Initial conditions marine_background_path: ./INPUT/ -marine_background_time: '{{ MARINE_WINDOW_BEGIN | to_isotime }}' +marine_background_time: '{{ WINDOW_BEGIN | to_isotime }}' # Pseudo model marine_forecast_timestep: PT3H @@ -66,7 +66,7 @@ marine_forecast_timestep: PT3H background_error_file: '{{berror_model}}' marine_number_ensemble_members: '{{NMEM_ENS}}' marine_number_ensemble_members_per_mpi: '{{NMEM_ENS_PER_MPI}}' -marine_stddev_time: '{{ MARINE_WINDOW_MIDDLE | to_isotime }}' +marine_stddev_time: '{{ WINDOW_MIDDLE | to_isotime }}' # Observations observations: all_observations diff --git a/parm/marine/marine_bmat_copy_bkgerr.yaml.j2 b/parm/marine/marine_bmat_copy_bkgerr.yaml.j2 deleted file mode 100644 index 7f8b79fb0..000000000 --- a/parm/marine/marine_bmat_copy_bkgerr.yaml.j2 +++ /dev/null @@ -1,8 +0,0 @@ -copy_req: -# diag B -- ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] -- ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} -- ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] -- ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] -{% endif %} diff --git a/parm/marine/marine_bmat_save.yaml.j2 b/parm/marine/marine_bmat_save.yaml.j2 deleted file mode 100644 index c3ac2c611..000000000 --- a/parm/marine/marine_bmat_save.yaml.j2 +++ /dev/null @@ -1,39 +0,0 @@ -copy: -# soca grid -- ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}'] -# Copy the diffusion coefficient files to the ROTDIR -{% for diff_type in ['hz', 'vt'] %} -- ['{{ DATAstaticb }}/{{ diff_type }}_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}{{ diff_type }}_ocean.nc'] -{% endfor %} -# diag B -- ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_parametric_stddev.nc'] -- ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_parametric_stddev.nc'] -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} -- ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_ens_stddev.nc'] -- ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_ens_stddev.nc'] -- ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.recentering_error.nc'] -- ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.recentering_error.nc'] -{% endif %} -# ensemble perturbation diagnostics -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} -- ['{{ DATA }}/ocn.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc'] -- ['{{ DATA }}/ice.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc'] -# ssh diagnostics -{% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} -- ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.{{ string }}.nc'] -{% endfor %} -{% endif %} -# yaml files -- ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}bmat_fields_metadata.yaml'] -- ['{{ DATA }}/gridgen.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}gridgen.yaml'] -- ['{{ DATA }}/obsop_name_map.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}obsop_name_map.yaml'] -- ['{{ DATA }}/soca_chgres.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_chgres.yaml'] -- ['{{ DATA }}/soca_diagb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_diagb.yaml'] -- ['{{ DATA }}/soca_parameters_diffusion_hz.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_parameters_diffusion_hz.yaml'] -- ['{{ DATA }}/soca_parameters_diffusion_vt.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_parameters_diffusion_vt.yaml'] -- ['{{ DATA }}/soca_setcorscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_setcorscales.yaml'] -- ['{{ DATA }}/soca_vtscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_vtscales.yaml'] -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} -- ['{{ DATA }}/soca_ensb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensb.yaml'] -- ['{{ DATA }}/soca_ensweights.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensweights.yaml'] -{% endif %} diff --git a/parm/marine/marine_det_jedi_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 similarity index 100% rename from parm/marine/marine_det_jedi_config.yaml.j2 rename to parm/marine/marine_det_config.yaml.j2 diff --git a/parm/marine/marine_det_stage_bkg.yaml.j2 b/parm/marine/marine_det_stage_bkg.yaml.j2 index a0474ee59..e5ae48d62 100644 --- a/parm/marine/marine_det_stage_bkg.yaml.j2 +++ b/parm/marine/marine_det_stage_bkg.yaml.j2 @@ -1,23 +1,13 @@ -###################################### -# set some variables -###################################### -{% set gPDY = previous_cycle | to_YMD %} -{% set gcyc = previous_cycle | strftime("%H") %} -###################################### -# create ens bkg directories -###################################### -mkdir: -- "{{ DATA }}/bkg" - ###################################### # copy ensemble background files ###################################### -copy: + # stage initial conditions -- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ gcyc }}z.inst.f003.nc", "{{ DATA }}/INPUT/MOM.res.nc"] -- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ gcyc }}z.inst.f003.nc", "{{ DATA }}/INPUT/cice.res.nc"] +- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.f003.nc", "{{ DATA }}/INPUT/MOM.res.nc"] +- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.f003.nc", "{{ DATA }}/INPUT/cice.res.nc"] + # stage f006 and f009 backgrounds {% for fcsth in ['f006', 'f009'] %} -- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ gcyc }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ocean.bkg.{{ fcsth }}.nc"] -- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ gcyc }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ice.bkg.{{ fcsth }}.nc"] +- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ocean.bkg.{{ fcsth }}.nc"] +- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ice.bkg.{{ fcsth }}.nc"] {% endfor %} diff --git a/parm/marine/marine_ens_stage_bkg.yaml.j2 b/parm/marine/marine_ens_stage_bkg.yaml.j2 index ccef98db1..299607ebb 100644 --- a/parm/marine/marine_ens_stage_bkg.yaml.j2 +++ b/parm/marine/marine_ens_stage_bkg.yaml.j2 @@ -1,31 +1,20 @@ -###################################### -# set some variables -###################################### -{% set gPDY = previous_cycle | to_YMD %} -{% set gcyc = previous_cycle | strftime("%H") %} -{% set PDY = current_cycle | to_YMD %} -{% set cyc = current_cycle | strftime("%H") %} -###################################### -# create working directories -###################################### -mkdir: -- "{{ DATAens }}/ens" - ###################################### # copy ensemble background files ###################################### -copy: + {% for mem in range(1, NMEM_ENS + 1) %} {% set gmem = mem+mem_offset %} {% if gmem > NMEM_ENS_MAX %} {% set gmem = gmem-NMEM_ENS_MAX %} {% endif %} + # define variables used in the history template {% set tmpl_dict = {'${ROTDIR}':ROTDIR, '${RUN}': GDUMP_ENS, - '${YMD}':gPDY, - '${HH}':gcyc, - '${MEMDIR}':"mem" + '%03d' % gmem} %} - - ["{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ocean.t{{ gcyc }}z.inst.f006.nc", "{{ DATAens }}/ens/ocean.{{ mem }}.nc"] - - ["{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ice.t{{ gcyc }}z.inst.f006.nc", "{{ DATAens }}/ens/ice.{{ mem }}.nc"] + '${YMD}':previous_cycle | to_YMD, + '${HH}':previous_cycle | strftime('%H'), + '${MEMDIR}':'mem' + '%03d' % gmem} %} + + - ['{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ocean.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ocean.{{ mem }}.nc'] + - ['{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ice.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ice.{{ mem }}.nc'] {% endfor %} diff --git a/parm/marine/marine_stage_fix_025.yaml.j2 b/parm/marine/marine_stage_fix_025.yaml.j2 index 54c43e329..fe4fbbeb3 100644 --- a/parm/marine/marine_stage_fix_025.yaml.j2 +++ b/parm/marine/marine_stage_fix_025.yaml.j2 @@ -1,10 +1,7 @@ -mkdir: -- "{{ DATA }}/INPUT" -- "{{ DATA }}/anl_geom" ###################################### # fix files to copy ###################################### -copy: + # Deterministic resource files - ["{{ INPUT_FIX_DIR }}/rossrad.nc", "{{ DATA }}/rossrad.nc"] - ["{{ INPUT_FIX_DIR }}/field_table", "{{ DATA }}/field_table"] @@ -25,6 +22,7 @@ copy: - ["{{ INPUT_FIX_DIR }}/INPUT/geothermal_davies2013_v1.nc", "{{ DATA }}/INPUT/geothermal_davies2013_v1.nc"] - ["{{ INPUT_FIX_DIR }}/INPUT/interpolate_zgrid_46L.nc", "{{ DATA }}/INPUT/interpolate_zgrid_46L.nc"] - ["{{ INPUT_FIX_DIR }}/INPUT/C384_mosaic.nc", "{{ DATA }}/INPUT/C384_mosaic.nc"] + # Analysis resource files - ["{{ ANL_GEOM }}/soca_gridspec.nc", "{{ DATA }}/anl_geom/soca_gridspec.nc"] -- ["{{ ANL_GEOM }}/MOM_input", "{{ DATA }}/anl_geom/MOM_input"] \ No newline at end of file +- ["{{ ANL_GEOM }}/MOM_input", "{{ DATA }}/anl_geom/MOM_input"] diff --git a/parm/marine/marine_stage_fix_100.yaml.j2 b/parm/marine/marine_stage_fix_100.yaml.j2 index aa92bf5d2..3332e8cf3 100644 --- a/parm/marine/marine_stage_fix_100.yaml.j2 +++ b/parm/marine/marine_stage_fix_100.yaml.j2 @@ -1,10 +1,7 @@ -mkdir: -- "{{ DATA }}/INPUT" -- "{{ DATA }}/anl_geom" ###################################### # fix files to copy ###################################### -copy: + # Deterministic resource files - ["{{ INPUT_FIX_DIR }}/rossrad.nc", "{{ DATA }}/rossrad.nc"] - ["{{ INPUT_FIX_DIR }}/field_table", "{{ DATA }}/field_table"] @@ -25,6 +22,7 @@ copy: - ["{{ INPUT_FIX_DIR }}/INPUT/topo_edits_011818.nc", "{{ DATA }}/INPUT/topo_edits_011818.nc"] - ["{{ INPUT_FIX_DIR }}/INPUT/MOM_channels_SPEAR", "{{ DATA }}/INPUT/MOM_channels_SPEAR"] - ["{{ INPUT_FIX_DIR }}/INPUT/seawifs_1998-2006_smoothed_2X.nc", "{{ DATA }}/INPUT/seawifs_1998-2006_smoothed_2X.nc"] + # Analysis resource files - ["{{ ANL_GEOM }}/soca_gridspec.nc", "{{ DATA }}/anl_geom/soca_gridspec.nc"] - ["{{ ANL_GEOM }}/MOM_input", "{{ DATA }}/anl_geom/MOM_input"] diff --git a/parm/marine/marine_stage_fix_500.yaml.j2 b/parm/marine/marine_stage_fix_500.yaml.j2 index fb1ed7211..c3679da39 100644 --- a/parm/marine/marine_stage_fix_500.yaml.j2 +++ b/parm/marine/marine_stage_fix_500.yaml.j2 @@ -1,10 +1,7 @@ -mkdir: -- "{{ DATA }}/INPUT" -- "{{ DATA }}/anl_geom" ###################################### # fix files to copy ###################################### -copy: + # Deterministic resource files - ["{{ INPUT_FIX_DIR }}/rossrad.nc", "{{ DATA }}/rossrad.nc"] - ["{{ INPUT_FIX_DIR }}/field_table", "{{ DATA }}/field_table"] @@ -17,6 +14,7 @@ copy: - ["{{ INPUT_FIX_DIR }}/INPUT/ocean_hgrid.nc", "{{ DATA }}/INPUT/ocean_hgrid.nc"] - ["{{ INPUT_FIX_DIR }}/INPUT/ocean_mosaic.nc", "{{ DATA }}/INPUT/ocean_mosaic.nc"] - ["{{ INPUT_FIX_DIR }}/INPUT/ocean_topog.nc", "{{ DATA }}/INPUT/ocean_topog.nc"] + # Analysis resource files - ["{{ ANL_GEOM }}/soca_gridspec.nc", "{{ DATA }}/anl_geom/soca_gridspec.nc"] -- ["{{ ANL_GEOM }}/MOM_input", "{{ DATA }}/anl_geom/MOM_input"] \ No newline at end of file +- ["{{ ANL_GEOM }}/MOM_input", "{{ DATA }}/anl_geom/MOM_input"] diff --git a/parm/marine/marine_stage_utilities.yaml.j2 b/parm/marine/marine_stage_utilities.yaml.j2 index 29846c922..dbd87f684 100644 --- a/parm/marine/marine_stage_utilities.yaml.j2 +++ b/parm/marine/marine_stage_utilities.yaml.j2 @@ -1,6 +1,5 @@ ###################################### # Utility yaml files to copy ###################################### -copy: - ["{{ HOMEgfs }}/parm/gdas/marine/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] - ["{{ HOMEgfs }}/parm/gdas/marine/obsop_name_map.yaml", "{{ DATA }}/obsop_name_map.yaml"] From ca397fc5f2c8acd888e1d46f7fbe2b9f90b8e737 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 15 Oct 2025 18:43:24 +0000 Subject: [PATCH 02/23] Rest of marine analysis --- parm/marine/marine_bmat_config.yaml.j2 | 126 ++++++++++++++++++++ parm/marine/marine_bmat_jedi_config.yaml.j2 | 49 -------- parm/marine/marine_det_config.yaml.j2 | 119 +++++++++++++++--- 3 files changed, 226 insertions(+), 68 deletions(-) create mode 100644 parm/marine/marine_bmat_config.yaml.j2 delete mode 100644 parm/marine/marine_bmat_jedi_config.yaml.j2 diff --git a/parm/marine/marine_bmat_config.yaml.j2 b/parm/marine/marine_bmat_config.yaml.j2 new file mode 100644 index 000000000..709c9ef13 --- /dev/null +++ b/parm/marine/marine_bmat_config.yaml.j2 @@ -0,0 +1,126 @@ +jedi_config: + gridgen: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_gridgen + soca_diagb: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_diagb.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_diagb + soca_chgres: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jedi_args: ['soca', 'convertstate'] + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_chgres + soca_parameters_diffusion_vt: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_parameters_diffusion_vt + soca_setcorscales: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_setcorscales.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_setcorscales + soca_parameters_diffusion_hz: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_parameters_diffusion_hz + soca_ensb: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_ens_handler.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_ensb + soca_ensweights: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_hybridweights.x' + mpi_cmd: '{{ APRUN_MARINEBMAT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_ensweights + +data_in: + mkdir: + - '{{ DATA }}/bkg' + - '{{ DATA }}/INPUT' + - '{{ DATA }}/anl_geom' + - '{{ DATA }}/staticb + - '{{ DATAens }}/ens' + + copy: +{% filter indent(width=4) %} +{% include 'marine_det_stage_bkg.yaml.j2' %} +{% include 'marine_stage_utilities.yaml.j2' %} +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} +{% include 'marine_ens_stage_bkg.yaml.j2' %} +{% endif %} +{% endfilter %} + + link: + - [ '{{ DATAstaticb }}', '{{ DATA }}/staticb' ] + +data_out: + copy_req: + # soca grid + - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}'] + + # Copy the diffusion coefficient files to the ROTDIR + {% for diff_type in ['hz', 'vt'] %} + - ['{{ DATAstaticb }}/{{ diff_type }}_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}{{ diff_type }}_ocean.nc'] + {% endfor %} + + # diag B + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_parametric_stddev.nc'] + + {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.recentering_error.nc'] + - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.recentering_error.nc'] + {% endif %} + + # ensemble perturbation diagnostics + {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATA }}/ocn.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc'] + - ['{{ DATA }}/ice.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc'] + + # ssh diagnostics + - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_steric_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_unbal_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_total_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.steric_explained_variance.nc'] + {% endif %} + + # yaml files + - ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}bmat_fields_metadata.yaml'] + - ['{{ DATA }}/gridgen.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}gridgen.yaml'] + - ['{{ DATA }}/obsop_name_map.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}obsop_name_map.yaml'] + - ['{{ DATA }}/soca_chgres.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_chgres.yaml'] + - ['{{ DATA }}/soca_diagb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_diagb.yaml'] + - ['{{ DATA }}/soca_parameters_diffusion_hz.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_parameters_diffusion_hz.yaml'] + - ['{{ DATA }}/soca_parameters_diffusion_vt.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_parameters_diffusion_vt.yaml'] + - ['{{ DATA }}/soca_setcorscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_setcorscales.yaml'] + - ['{{ DATA }}/soca_vtscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_vtscales.yaml'] + {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATA }}/soca_ensb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensb.yaml'] + - ['{{ DATA }}/soca_ensweights.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensweights.yaml'] + {% endif %} + + # diag + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] + {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] + {% endif %} diff --git a/parm/marine/marine_bmat_jedi_config.yaml.j2 b/parm/marine/marine_bmat_jedi_config.yaml.j2 deleted file mode 100644 index 80a3c0325..000000000 --- a/parm/marine/marine_bmat_jedi_config.yaml.j2 +++ /dev/null @@ -1,49 +0,0 @@ -gridgen: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_gridgen -soca_diagb: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_diagb.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_diagb -soca_chgres: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jedi_args: ['soca', 'convertstate'] - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_chgres -soca_parameters_diffusion_vt: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_parameters_diffusion_vt -soca_setcorscales: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_setcorscales.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_setcorscales -soca_parameters_diffusion_hz: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_parameters_diffusion_hz -soca_ensb: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_ens_handler.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_ensb -soca_ensweights: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_hybridweights.x' - mpi_cmd: '{{ APRUN_MARINEBMAT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_ensweights diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 76a1e4910..082bc9c79 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -1,19 +1,100 @@ -var: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas.x' - mpi_cmd: '{{ APRUN_MARINEANLVAR }}' - jedi_args: ['soca', 'variational'] - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo_yaml: '{{ JCB_ALGO_YAML_VAR }}' -soca_incpostproc: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_incr_handler.x' - mpi_cmd: '{{ APRUN_MARINEANLCHKPT }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_incpostproc -soca_diag_stats: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_obsstats.x' - mpi_cmd: '{{ APRUN_MARINEANLOBSSTATS }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_diag_stats +jedi_config: + var: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas.x' + mpi_cmd: '{{ APRUN_MARINEANLVAR }}' + jedi_args: ['soca', 'variational'] + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo_yaml: '{{ JCB_ALGO_YAML_VAR }}' + soca_incpostproc: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_incr_handler.x' + mpi_cmd: '{{ APRUN_MARINEANLCHKPT }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_incpostproc + soca_diag_stats: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_obsstats.x' + mpi_cmd: '{{ APRUN_MARINEANLOBSSTATS }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_diag_stats + +data_in: + mkdir: + - '{{ DATA }}/bkg' + - '{{ DATA }}/INPUT' + - '{{ DATA }}/anl_geom' + - '{{ DATA }}/Data' + - '{{ DATA }}/obs' + - '{{ DATA }}/diags' + + copy: + # stage soca grid + - ["{{ COMIN_OCEAN_BMATRIX }}/soca_gridspec.nc", "{{ DATA }}"] + + # stage ensemble weights +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ["{{ COMIN_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc", "{{ DATA }}/ocean.ens_weights.nc"] + - ["{{ COMIN_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc", "{{ DATA }}/ice.ens_weights.nc"] +{% endif %} + + # stage CICE6 restart + - ["{{ COMIN_ICE_RESTART_PREV }}/{{ rst_date }}.cice_model.res.nc", "{{ DATA }}/Data"] + +{% filter indent(width=4) %} +{% include 'marine_det_stage_bkg.yaml.j2' %} +{% include 'marine_stage_utilities.yaml.j2' %} +{% endfilter %} + + copy_opt: +{% for ob_name in observations %} + - ['{{ COMIN_OBS }}/{{ OPREFIX }}{{ ob_name }}.nc', '{{ DATA }}/obs'] +{% endfor %} + + link: + - [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] + +data_out: + mkdir: + - '{{ COMOUT_OCEAN_ANALYSIS }}/diags' + - '{{ COMOUT_OCEAN_ANALYSIS }}/bump' + + copy: + # IAU increment + - ['{{ DATA }}/ocn.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocninc.nc'] + +{% for domain in ['ocn','ice'] %} + # Increments + - ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.incr.nc'] + + # Analysis at the start of the window + - ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.an.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.ana.nc'] + + # Diagonal of the background error for the cycle + #- ['{{ DATA }}/{{ domain }}.bkgerr_stddev.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.bkgerr_stddev.nc'] + + # Recentering error + #- ['{{ DATA }}/static_ens/{{ domain }}.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.recentering_error.nc'] +{% endfor %} + + # Postprocessed ice increment + - ['{{ DATA }}/ice.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ice.incr.postproc.nc'] + + # ssh diagnostics +{% if NMEM_ENS > 2 %} + {% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} + - ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocn.{{ string }}.nc'] + {% endfor %} +{% endif %} + + # DA grid (computed for the start of the window) + - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ RUN }}.t{{ WINDOW_BEGIN | strftime('%H') }}z.ocngrid.nc'] + + # CICE analysis restart + - ['{{ DATA }}/Data/{{ cice_rst_date }}.cice_model.res.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] + + # YAML files + - ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}'] + - ['{{ DATA }}/obsop_name_map.yaml', '{{ COMOUT_CONF }}/'] + - ['{{ DATA }}/soca_incpostproc.yaml', '{{ COMOUT_CONF }}/'] + - ['{{ DATA }}/var.yaml', '{{ COMOUT_CONF }}/'] From fe4ee878e081643044858fe2d41a6126943ee2d9 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 15 Oct 2025 18:43:54 +0000 Subject: [PATCH 03/23] Leftover --- parm/marine/marine_bmat_config.yaml.j2 | 38 ++++++++++++-------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/parm/marine/marine_bmat_config.yaml.j2 b/parm/marine/marine_bmat_config.yaml.j2 index 709c9ef13..5152ef724 100644 --- a/parm/marine/marine_bmat_config.yaml.j2 +++ b/parm/marine/marine_bmat_config.yaml.j2 @@ -7,7 +7,7 @@ jedi_config: jcb_algo: soca_gridgen soca_diagb: rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_diagb.x' + exe_src: '{{ EXECgfs }}/gdas_socxa_diagb.x' mpi_cmd: '{{ APRUN_MARINEBMAT }}' jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' jcb_algo: soca_diagb @@ -75,32 +75,30 @@ data_out: - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}'] # Copy the diffusion coefficient files to the ROTDIR - {% for diff_type in ['hz', 'vt'] %} +{% for diff_type in ['hz', 'vt'] %} - ['{{ DATAstaticb }}/{{ diff_type }}_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}{{ diff_type }}_ocean.nc'] - {% endfor %} +{% endfor %} # diag B - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_parametric_stddev.nc'] - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_parametric_stddev.nc'] - - {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_ens_stddev.nc'] - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_ens_stddev.nc'] - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.recentering_error.nc'] - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.recentering_error.nc'] - {% endif %} +{% endif %} +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} # ensemble perturbation diagnostics - {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - ['{{ DATA }}/ocn.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc'] - ['{{ DATA }}/ice.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc'] # ssh diagnostics - - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_steric_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_unbal_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ssh_total_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.steric_explained_variance.nc'] - {% endif %} + {% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} + - ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.{{ string }}.nc'] + {% endfor %} +{% endif %} # yaml files - ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}bmat_fields_metadata.yaml'] @@ -112,15 +110,15 @@ data_out: - ['{{ DATA }}/soca_parameters_diffusion_vt.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_parameters_diffusion_vt.yaml'] - ['{{ DATA }}/soca_setcorscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_setcorscales.yaml'] - ['{{ DATA }}/soca_vtscales.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_vtscales.yaml'] - {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - ['{{ DATA }}/soca_ensb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensb.yaml'] - ['{{ DATA }}/soca_ensweights.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensweights.yaml'] - {% endif %} +{% endif %} # diag - - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] - {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] - {% endif %} + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] +{% endif %} From 9bfbe4b48ba6893b416625b043ea0cad33805ad1 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 16 Oct 2025 14:50:27 +0000 Subject: [PATCH 04/23] Debug --- parm/marine/marine_bmat_config.yaml.j2 | 22 +++++++++++----------- parm/marine/marine_det_config.yaml.j2 | 1 + 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/parm/marine/marine_bmat_config.yaml.j2 b/parm/marine/marine_bmat_config.yaml.j2 index 5152ef724..cc06b36c3 100644 --- a/parm/marine/marine_bmat_config.yaml.j2 +++ b/parm/marine/marine_bmat_config.yaml.j2 @@ -7,7 +7,7 @@ jedi_config: jcb_algo: soca_gridgen soca_diagb: rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_socxa_diagb.x' + exe_src: '{{ EXECgfs }}/gdas_soca_diagb.x' mpi_cmd: '{{ APRUN_MARINEBMAT }}' jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' jcb_algo: soca_diagb @@ -54,12 +54,12 @@ data_in: - '{{ DATA }}/bkg' - '{{ DATA }}/INPUT' - '{{ DATA }}/anl_geom' - - '{{ DATA }}/staticb - '{{ DATAens }}/ens' copy: {% filter indent(width=4) %} {% include 'marine_det_stage_bkg.yaml.j2' %} +{% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} {% include 'marine_stage_utilities.yaml.j2' %} {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} {% include 'marine_ens_stage_bkg.yaml.j2' %} @@ -67,10 +67,18 @@ data_in: {% endfilter %} link: - - [ '{{ DATAstaticb }}', '{{ DATA }}/staticb' ] + - [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] data_out: copy_req: + # diag + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] +{% endif %} + # soca grid - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}'] @@ -114,11 +122,3 @@ data_out: - ['{{ DATA }}/soca_ensb.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensb.yaml'] - ['{{ DATA }}/soca_ensweights.yaml', '{{ COMOUT_CONF }}/{{ APREFIX }}soca_ensweights.yaml'] {% endif %} - - # diag - - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] -{% endif %} diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 082bc9c79..34000c503 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -43,6 +43,7 @@ data_in: {% filter indent(width=4) %} {% include 'marine_det_stage_bkg.yaml.j2' %} +{% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} {% include 'marine_stage_utilities.yaml.j2' %} {% endfilter %} From e300687e5b1c285d42b06c6c5ae4bada8d654ba9 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 16 Oct 2025 19:44:58 +0000 Subject: [PATCH 05/23] Add recentering --- parm/marine/marine_det_config.yaml.j2 | 8 +- parm/marine/marine_det_save.yaml.j2 | 41 ---------- parm/marine/marine_det_stage.yaml.j2 | 22 ------ parm/marine/marine_ecen_config.yaml.j2 | 88 +++++++++++++++++++++ parm/marine/marine_ecen_jedi_config.yaml.j2 | 12 --- parm/marine/marine_ens_config.yaml.j2 | 49 ++++++++++++ parm/marine/marine_ens_stage_bkg.yaml.j2 | 4 +- 7 files changed, 143 insertions(+), 81 deletions(-) delete mode 100644 parm/marine/marine_det_save.yaml.j2 delete mode 100644 parm/marine/marine_det_stage.yaml.j2 create mode 100644 parm/marine/marine_ecen_config.yaml.j2 delete mode 100644 parm/marine/marine_ecen_jedi_config.yaml.j2 create mode 100644 parm/marine/marine_ens_config.yaml.j2 diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 34000c503..3465b6e20 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -28,7 +28,7 @@ data_in: - '{{ DATA }}/obs' - '{{ DATA }}/diags' - copy: + copy_req: # stage soca grid - ["{{ COMIN_OCEAN_BMATRIX }}/soca_gridspec.nc", "{{ DATA }}"] @@ -48,9 +48,9 @@ data_in: {% endfilter %} copy_opt: -{% for ob_name in observations %} - - ['{{ COMIN_OBS }}/{{ OPREFIX }}{{ ob_name }}.nc', '{{ DATA }}/obs'] -{% endfor %} +{% filter indent(width=4) %} +{% include 'marine_stage_obs.yaml.j2' %} +{% endfilter %} link: - [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] diff --git a/parm/marine/marine_det_save.yaml.j2 b/parm/marine/marine_det_save.yaml.j2 deleted file mode 100644 index bdc28905b..000000000 --- a/parm/marine/marine_det_save.yaml.j2 +++ /dev/null @@ -1,41 +0,0 @@ -{% set bcyc = MARINE_WINDOW_BEGIN | strftime('%H') %} -{% if DOIAU %} -{% set cice_rst_date = MARINE_WINDOW_BEGIN | to_fv3time %} -{% else %} -{% set cice_rst_date = current_cycle | to_fv3time %} -{% endif %} - -mkdir: -- '{{ COMOUT_OCEAN_ANALYSIS }}/diags' -- '{{ COMOUT_OCEAN_ANALYSIS }}/bump' - -copy: -# IAU increment -- ['{{ DATA }}/ocn.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocninc.nc'] -{% for domain in ['ocn','ice'] %} -# Increments -- ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.incr.nc'] -# Analysis at the start of the window -- ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.an.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.ana.nc'] -# Diagonal of the background error for the cycle -#- ['{{ DATA }}/{{ domain }}.bkgerr_stddev.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.bkgerr_stddev.nc'] -# Recentering error -#- ['{{ DATA }}/static_ens/{{ domain }}.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.recentering_error.nc'] -{% endfor %} -# Postprocessed ice increment -- ['{{ DATA }}/ice.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ice.incr.postproc.nc'] -# ssh diagnostics -{% if NMEM_ENS > 2 %} -{% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} -- ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocn.{{ string }}.nc'] -{% endfor %} -{% endif %} -# DA grid (computed for the start of the window) -- ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ RUN }}.t{{ bcyc }}z.ocngrid.nc'] -# CICE analysis restart -- ['{{ DATA }}/Data/{{ cice_rst_date }}.cice_model.res.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] -# YAML files -- ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}'] -- ['{{ DATA }}/obsop_name_map.yaml', '{{ COMOUT_CONF }}/'] -- ['{{ DATA }}/soca_incpostproc.yaml', '{{ COMOUT_CONF }}/'] -- ['{{ DATA }}/var.yaml', '{{ COMOUT_CONF }}/'] diff --git a/parm/marine/marine_det_stage.yaml.j2 b/parm/marine/marine_det_stage.yaml.j2 deleted file mode 100644 index 6c5d3fc2f..000000000 --- a/parm/marine/marine_det_stage.yaml.j2 +++ /dev/null @@ -1,22 +0,0 @@ -{% if DOIAU %} -{% set rst_date = MARINE_WINDOW_BEGIN | to_fv3time %} -{% else %} -{% set rst_date = current_cycle | to_fv3time %} -{% endif %} - -mkdir: -- "{{ DATA }}/Data" - -link: -- [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] - -copy: -# stage soca grid -- ["{{ COMIN_OCEAN_BMATRIX }}/soca_gridspec.nc", "{{ DATA }}"] -# stage ensemble weights -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} -- ["{{ COMIN_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc", "{{ DATA }}/ocean.ens_weights.nc"] -- ["{{ COMIN_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc", "{{ DATA }}/ice.ens_weights.nc"] -{% endif %} -# stage CICE6 restart -- ["{{ COMIN_ICE_RESTART_PREV }}/{{ rst_date }}.cice_model.res.nc", "{{ DATA }}/Data"] diff --git a/parm/marine/marine_ecen_config.yaml.j2 b/parm/marine/marine_ecen_config.yaml.j2 new file mode 100644 index 000000000..0242bb73e --- /dev/null +++ b/parm/marine/marine_ecen_config.yaml.j2 @@ -0,0 +1,88 @@ +jedi_config: + gridgen: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x' + mpi_cmd: '{{ APRUN_MARINEANLECEN }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_gridgen + ens_handler: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_anpproc.x' + mpi_cmd: '{{ APRUN_MARINEANLECEN }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_ens_handler + +data_in: + mkdir: + - '{{ DATA }}/bkg' + - '{{ DATA }}/INPUT' + - '{{ DATA }}/anl_geom' + - '{{ DATA }}/ens' + + link: +{% for imem in range(1,NMEM_ENS+1) %} + {% for domain in ['ocean', 'ice'] %} + - [ "{{ DATA }}/../ensdata/ens/{{ domain }}.{{ imem | string }}.nc", '{{ DATA }}/ens/' ] + {% endfor %} +{% endfor %} + + copy_req: +{% for imem in range(1,NMEM_ENS+1) %} + {% set memchar = 'mem%03d' | format(imem) %} + {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, + '${RUN}': 'enkfgdas', + '${YMD}': previous_cycle | to_YMD, + '${HH}': previous_cycle | strftime('%H'), + '${MEMDIR}': memchar }) %} + - ['{{ COM_ICE_RESTART_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.cice_model.res.nc', '{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc'] +{% endfor %} + +{% filter indent(width=4) %} +{% include 'marine_det_stage_bkg.yaml.j2' %} +{% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} +{% include 'marine_stage_utilities.yaml.j2' %} +{% endfilter %} + +data_out: + mkdir: +{% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, + '${RUN}': RUN, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}': 'ensstat' }) %} + - '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' + - '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' +{% for imem in range(1,NMEM_ENS+1) %} + {% set memchar = 'mem%03d' | format(imem) %} + {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, + '${RUN}': RUN, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}': memchar }) %} + - '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' + - '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' +{% endfor %} + + copy: +{% for imem in range(1,NMEM_ENS+1) %} + {% set imem0 = imem-1 %} + {% set memchar = 'mem%03d' | format(imem) %} + {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, + '${RUN}': RUN, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}': memchar }) %} + # ocean increments are saved as 0..n-1 + - ['{{ DATA }}/ocn.recenter.ens.{{ imem0 | string}}.{{ WINDOW_END | to_isotime }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.t{{ "%02d" | format(cyc) }}z.ocninc.nc'] + + # ice restarts are saved as 1..n + - ['{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] +{% endfor %} +{% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, + '${RUN}': RUN, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}': 'ensstat' }) %} + + - ['{{ DATA }}/ocn.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ocean.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] + - ['{{ DATA }}/ice.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ice.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] diff --git a/parm/marine/marine_ecen_jedi_config.yaml.j2 b/parm/marine/marine_ecen_jedi_config.yaml.j2 deleted file mode 100644 index 9bebb152a..000000000 --- a/parm/marine/marine_ecen_jedi_config.yaml.j2 +++ /dev/null @@ -1,12 +0,0 @@ -gridgen: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x' - mpi_cmd: '{{ APRUN_MARINEANLECEN }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_gridgen -ens_handler: - rundir: '{{ DATA }}' - exe_src: '{{ EXECgfs }}/gdas_soca_anpproc.x' - mpi_cmd: '{{ APRUN_MARINEANLECEN }}' - jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: soca_ens_handler diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 new file mode 100644 index 000000000..ae5ba8e4c --- /dev/null +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -0,0 +1,49 @@ +jedi_config: + gridgen: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x' + mpi_cmd: '{{ APRUN_MARINEANLLETKF }}' + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: soca_gridgen + letkf: + rundir: '{{ DATA }}' + exe_src: '{{ EXECgfs }}/gdas.x' + mpi_cmd: '{{ APRUN_MARINEANLLETKF }}' + jedi_args: ['soca', 'localensembleda'] + jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' + jcb_algo: + +data_in: + mkdir: + - "{{ DATA }}/letkf_output" + - "{{ DATA }}/obs" + - "{{ DATA }}/diags" + + # make comout directories +{% for mem in range(1, NMEM_ENS + 1) %} + {% set tmpl_dict = {'${ROTDIR}':ROTDIR, + '${RUN}':GDUMP_ENS, + '${YMD}':current_cycle | to_YMD, + '${HH}':current_cycle | strftime("%H"), + '${MEMDIR}':"mem" + '%03d' % mem} %} + + - "{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" + - "{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" +{% endfor %} + + copy_req: + # copy mom input template and det bkg + - ["{{ PARMgfs }}/gdas/marine/fms/input.nml", "{{ DATA }}/mom_input.nml.tmpl"] + - ["{{ PARMgfs }}/gdas/marine/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] + - ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.f009.nc", "{{ DATA }}/INPUT/MOM.res.nc"] + - ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.f009.nc", "{{ DATA }}/INPUT/cice.res.nc"] + +{% filter indent(width=4) %} +{% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} +{% include 'marine_ens_stage_bkg.yaml.j2' %} +{% endfilter %} + + copy_opt: +{% filter indent(width=4) %} +{% include 'marine_stage_obs.yaml.j2' %} +{% endfilter %} diff --git a/parm/marine/marine_ens_stage_bkg.yaml.j2 b/parm/marine/marine_ens_stage_bkg.yaml.j2 index 299607ebb..891f05f15 100644 --- a/parm/marine/marine_ens_stage_bkg.yaml.j2 +++ b/parm/marine/marine_ens_stage_bkg.yaml.j2 @@ -15,6 +15,6 @@ '${HH}':previous_cycle | strftime('%H'), '${MEMDIR}':'mem' + '%03d' % gmem} %} - - ['{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ocean.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ocean.{{ mem }}.nc'] - - ['{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ice.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ice.{{ mem }}.nc'] +- ['{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ocean.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ocean.{{ mem }}.nc'] +- ['{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ice.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ice.{{ mem }}.nc'] {% endfor %} From 793f5e4471c5aec6d4904ebe61d0e3ec6f8123fb Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 16 Oct 2025 19:50:20 +0000 Subject: [PATCH 06/23] Cleanup --- parm/marine/jcb-prototype_letkf.yaml.j2 | 5 ++++ parm/marine/marine_ecen_save.yaml.j2 | 39 ------------------------- parm/marine/marine_ecen_stage.yaml.j2 | 18 ------------ parm/marine/marine_ens_config.yaml.j2 | 2 +- parm/marine/marine_ens_save.yaml.j2 | 31 -------------------- parm/marine/marine_ens_stage.yaml.j2 | 30 ------------------- 6 files changed, 6 insertions(+), 119 deletions(-) create mode 100644 parm/marine/jcb-prototype_letkf.yaml.j2 delete mode 100644 parm/marine/marine_ecen_save.yaml.j2 delete mode 100644 parm/marine/marine_ecen_stage.yaml.j2 delete mode 100644 parm/marine/marine_ens_save.yaml.j2 delete mode 100644 parm/marine/marine_ens_stage.yaml.j2 diff --git a/parm/marine/jcb-prototype_letkf.yaml.j2 b/parm/marine/jcb-prototype_letkf.yaml.j2 new file mode 100644 index 000000000..165cc48a5 --- /dev/null +++ b/parm/marine/jcb-prototype_letkf.yaml.j2 @@ -0,0 +1,5 @@ +# JEDI algorithm being invoked +algorithm: local_ensemble_da + +# Observations +{% include OBS_LIST_YAML %} diff --git a/parm/marine/marine_ecen_save.yaml.j2 b/parm/marine/marine_ecen_save.yaml.j2 deleted file mode 100644 index 0fc340953..000000000 --- a/parm/marine/marine_ecen_save.yaml.j2 +++ /dev/null @@ -1,39 +0,0 @@ -mkdir: -{% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, - '${RUN}': RUN, - '${YMD}': current_cycle | to_YMD, - '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': 'ensstat' }) %} -- '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' -- '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' -{% for imem in range(1,NMEM_ENS+1) %} - {% set memchar = 'mem%03d' | format(imem) %} - {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, - '${RUN}': RUN, - '${YMD}': current_cycle | to_YMD, - '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': memchar }) %} -- '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' -- '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' -{% endfor %} -copy: -{% for imem in range(1,NMEM_ENS+1) %} - {% set imem0 = imem-1 %} - {% set memchar = 'mem%03d' | format(imem) %} - {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, - '${RUN}': RUN, - '${YMD}': current_cycle | to_YMD, - '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': memchar }) %} -# ocean increments are saved as 0..n-1 -- ['{{ DATA }}/ocn.recenter.ens.{{ imem0 | string}}.{{ MARINE_WINDOW_END_ISO }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.t{{ "%02d" | format(cyc) }}z.ocninc.nc'] -# ice restarts are saved as 1..n -- ['{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] -{% endfor %} -{% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, - '${RUN}': RUN, - '${YMD}': current_cycle | to_YMD, - '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': 'ensstat' }) %} -- ['{{ DATA }}/ocn.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ocean.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] -- ['{{ DATA }}/ice.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ice.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] diff --git a/parm/marine/marine_ecen_stage.yaml.j2 b/parm/marine/marine_ecen_stage.yaml.j2 deleted file mode 100644 index 131e6eff0..000000000 --- a/parm/marine/marine_ecen_stage.yaml.j2 +++ /dev/null @@ -1,18 +0,0 @@ -mkdir: -- '{{ DATA }}/ens' -link: -{% for imem in range(1,NMEM_ENS+1) %} - {% for domain in ['ocean', 'ice'] %} -- [ "{{ DATA }}/../ensdata/ens/{{ domain }}.{{ imem | string }}.nc", '{{ DATA }}/ens/' ] - {% endfor %} -{% endfor %} -copy: -{% for imem in range(1,NMEM_ENS+1) %} - {% set memchar = 'mem%03d' | format(imem) %} - {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, - '${RUN}': 'enkfgdas', - '${YMD}': previous_cycle | to_YMD, - '${HH}': previous_cycle | strftime('%H'), - '${MEMDIR}': memchar }) %} -- ['{{ COM_ICE_RESTART_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.cice_model.res.nc', '{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc'] -{% endfor %} diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index ae5ba8e4c..f8b570edb 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -11,7 +11,7 @@ jedi_config: mpi_cmd: '{{ APRUN_MARINEANLLETKF }}' jedi_args: ['soca', 'localensembleda'] jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo: + jcb_algo_yaml: jcb-prototype_letkf.yaml.j2 data_in: mkdir: diff --git a/parm/marine/marine_ens_save.yaml.j2 b/parm/marine/marine_ens_save.yaml.j2 deleted file mode 100644 index cad85be78..000000000 --- a/parm/marine/marine_ens_save.yaml.j2 +++ /dev/null @@ -1,31 +0,0 @@ -{% set PDY = current_cycle | to_YMD %} -{% set cyc = current_cycle | strftime("%H") %} -{% set timestr = WINDOW_BEGIN | to_isotime %} -{% set antimestr = WINDOW_MIDDLE | to_isotime %} -###################################### -# save letkf analysis to comout -###################################### -copy: -{% for mem in range(1, NMEM_ENS + 1) %} - {% set tmpl_dict = {'${ROTDIR}':ROTDIR, - '${RUN}': GDUMP_ENS, - '${YMD}':PDY, - '${HH}':cyc, - '${MEMDIR}':"mem" + '%03d' % mem} %} - {% set COMOUT_OCEAN_LETKF_MEM = COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) %} - {% set COMOUT_ICE_LETKF_MEM = COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) %} - - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF_MEM }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.analysis.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ timestr }}.PT3H.nc", "{{ COMOUT_ICE_LETKF_MEM }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.analysis.nc"] -{% endfor %} -# Save LETKF background and analysis mean and variance, mean analysis increment - - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ antimestr }}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ antimestr }}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ cyc }}z.ensmean_incr.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ timestr }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ cyc }}z.ensmean_incr.nc"] diff --git a/parm/marine/marine_ens_stage.yaml.j2 b/parm/marine/marine_ens_stage.yaml.j2 deleted file mode 100644 index e40071f32..000000000 --- a/parm/marine/marine_ens_stage.yaml.j2 +++ /dev/null @@ -1,30 +0,0 @@ -{% set PDY = current_cycle | to_YMD %} -{% set cyc = current_cycle | strftime("%H") %} -{% set gcyc = previous_cycle | strftime("%H") %} -###################################### -mkdir: -- "{{ DATA }}/letkf_output" -- "{{ DATA }}/obs" -- "{{ DATA }}/diags" -- "{{ COMOUT_OCEAN_LETKF }}" -- "{{ COMOUT_ICE_LETKF }}" -###################################### -# make comout directories -###################################### -{% for mem in range(1, NMEM_ENS + 1) %} - {% set tmpl_dict = {'${ROTDIR}':ROTDIR, - '${RUN}':GDUMP_ENS, - '${YMD}':PDY, - '${HH}':cyc, - '${MEMDIR}':"mem" + '%03d' % mem} %} -- "{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" -- "{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" -{% endfor %} -###################################### -# copy mom input template and det bkg -###################################### -copy: -- ["{{ PARMgfs }}/gdas/marine/fms/input.nml", "{{ DATA }}/mom_input.nml.tmpl"] -- ["{{ PARMgfs }}/gdas/marine/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] -- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ gcyc }}z.inst.f009.nc", "{{ DATA }}/INPUT/MOM.res.nc"] -- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ gcyc }}z.inst.f009.nc", "{{ DATA }}/INPUT/cice.res.nc"] From ad98dcf2f4f03e36460b80cd596133411e93d79b Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Fri, 17 Oct 2025 19:50:35 +0000 Subject: [PATCH 07/23] Debug --- parm/jcb-gdas | 2 +- parm/marine/jcb-base.yaml.j2 | 7 +++- parm/marine/jcb-prototype_letkf.yaml.j2 | 3 +- parm/marine/marine_det_config.yaml.j2 | 6 ++-- parm/marine/marine_ens_config.yaml.j2 | 43 ++++++++++++++++++++++++- 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index a7b9b36a2..d04bff03c 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit a7b9b36a235fc3be989814bd5f2e35109d290c7d +Subproject commit d04bff03c245b47c3349bea0ee382f8ae1df9f36 diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index bafc0ab85..977a96b70 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -42,7 +42,7 @@ marine_window_middle: '{{ WINDOW_MIDDLE }}' marine_window_begin_iso: '{{ WINDOW_BEGIN | to_isotime }}' marine_window_middle_iso: '{{ WINDOW_MIDDLE | to_isotime }}' marine_window_end_iso: '{{ WINDOW_END | to_isotime }}' -enspert_relpath: '{{ ENSPERT_RELPATH }}' +marine_enspert_relpath: '{{ ENSPERT_RELPATH }}' {% if DOIAU %} marine_cice_date_fms: '{{ WINDOW_BEGIN | to_fv3time }}' marine_cice_date_iso: '{{ WINDOW_BEGIN | to_isotime }}' @@ -81,6 +81,8 @@ marine_obsdataout_path: '{{DATA}}/diags' marine_obsdataout_prefix: '' marine_obsdataout_suffix: '.nc' +marine_letkf_dist_halo_size: '{{ DIST_HALO_SIZE }}' + # Outer loops marine_ninner_1: '{{NINNER}}' marine_grad_red_1: 1e-7 @@ -105,3 +107,6 @@ obs_variables: {{ obs_variables | default({}) }} # COM path for configuration files marine_config_path: '{{COMOUT_CONF}}' + +# Using LETKF app? +letkf_app: '{{ letkf_app }}' diff --git a/parm/marine/jcb-prototype_letkf.yaml.j2 b/parm/marine/jcb-prototype_letkf.yaml.j2 index 165cc48a5..4445978a0 100644 --- a/parm/marine/jcb-prototype_letkf.yaml.j2 +++ b/parm/marine/jcb-prototype_letkf.yaml.j2 @@ -1,5 +1,6 @@ # JEDI algorithm being invoked -algorithm: local_ensemble_da +# Note: This should be changed to "local_ensemble_da" when JCB infrastructure is in place +algorithm: marine_letkf # Observations {% include OBS_LIST_YAML %} diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 3465b6e20..56e1917b6 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -48,9 +48,9 @@ data_in: {% endfilter %} copy_opt: -{% filter indent(width=4) %} -{% include 'marine_stage_obs.yaml.j2' %} -{% endfilter %} +{% for ob_name in observations %} + - ['{{ COMIN_OBS }}/{{ OPREFIX }}{{ ob_name }}.nc', '{{ DATA }}/obs'] +{% endfor %} link: - [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index f8b570edb..e2db66854 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -11,13 +11,16 @@ jedi_config: mpi_cmd: '{{ APRUN_MARINEANLLETKF }}' jedi_args: ['soca', 'localensembleda'] jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo_yaml: jcb-prototype_letkf.yaml.j2 + jcb_algo_yaml: '{{ PARMgfs }}/gdas/marine/jcb-prototype_letkf.yaml.j2' data_in: mkdir: + - '{{ DATA }}/INPUT' + - '{{ DATA }}/anl_geom' - "{{ DATA }}/letkf_output" - "{{ DATA }}/obs" - "{{ DATA }}/diags" + - '{{ DATAens }}/ens' # make comout directories {% for mem in range(1, NMEM_ENS + 1) %} @@ -47,3 +50,41 @@ data_in: {% filter indent(width=4) %} {% include 'marine_stage_obs.yaml.j2' %} {% endfilter %} + +data_out: + mkdir: + - '{{ COMOUT_OCEAN_LETKF }}/diags' + + copy_req: + # save letkf analysis to comout +{% for mem in range(1, NMEM_ENS + 1) %} + {% set tmpl_dict = {'${ROTDIR}':ROTDIR, + '${RUN}': GDUMP_ENS, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime("%H"), + '${MEMDIR}':"mem" + '%03d' % mem} %} + {% set COMOUT_OCEAN_LETKF_MEM = COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) %} + {% set COMOUT_ICE_LETKF_MEM = COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) %} + + - ["{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF_MEM }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.analysis.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF_MEM }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.analysis.nc"] +{% endfor %} +# Save LETKF background and analysis mean and variance, mean analysis increment + - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_prior.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensvar_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensvar_prior.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_post.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensvar_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensvar_post.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_incr.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_incr.nc"] + + - ['{{ DATA }}//letkf.yaml', '{{ COMOUT_CONF}}/soca_letkf.yaml'] + + copy_opt: + # save obs diags +{% for ob_name in observations %} + - ['{{ DATA }}/diags/{{ ob_name }}.nc', '{{ COMOUT_OCEAN_LETKF }}/diags'] +{% endfor %} From 691dcf3a09a331f595f59f4fe446dd8081101a32 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Mon, 20 Oct 2025 13:38:27 +0000 Subject: [PATCH 08/23] Add marine local ensemble da model templates --- parm/jcb-gdas | 2 +- parm/marine/jcb-base.yaml.j2 | 26 ++++++++++++++++++++++++- parm/marine/jcb-prototype_letkf.yaml.j2 | 3 +-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index d04bff03c..2740f13f5 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit d04bff03c245b47c3349bea0ee382f8ae1df9f36 +Subproject commit 2740f13f5f00766d0ef84ef39465ed52fc1f2047 diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index 977a96b70..f73cafb02 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -108,5 +108,29 @@ obs_variables: {{ obs_variables | default({}) }} # COM path for configuration files marine_config_path: '{{COMOUT_CONF}}' -# Using LETKF app? +# Local Ensemble DA (LETKF) +# ------------------------- + +# Using LETKF app? (used in obs YAMLs) letkf_app: '{{ letkf_app }}' + +# Solver +local_ensemble_da_solver: Deterministic LETKF + +# Increment variables +increment_variables: [sea_water_salinity, sea_water_potential_temperature, sea_surface_height_above_geoid, sea_water_cell_thickness, eastward_sea_water_velocity, northward_sea_water_velocity, sea_ice_area_fraction] + +# Driver +driver_save_posterior_mean: true +driver_save_prior_mean: true +driver_save_posterior_mean_increment: true +driver_save_prior_variance: true +driver_save_posterior_variance: true +driver_do_posterior_observer: true + +# Inflation +inflation_rtps: 0.5 +inflation_rtpp: 0.6 +inflation_mult: 1.1 + + diff --git a/parm/marine/jcb-prototype_letkf.yaml.j2 b/parm/marine/jcb-prototype_letkf.yaml.j2 index 4445978a0..165cc48a5 100644 --- a/parm/marine/jcb-prototype_letkf.yaml.j2 +++ b/parm/marine/jcb-prototype_letkf.yaml.j2 @@ -1,6 +1,5 @@ # JEDI algorithm being invoked -# Note: This should be changed to "local_ensemble_da" when JCB infrastructure is in place -algorithm: marine_letkf +algorithm: local_ensemble_da # Observations {% include OBS_LIST_YAML %} From 0efed24ec32746a93b44d1c84900d8b57e9c449f Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Mon, 20 Oct 2025 18:08:23 +0000 Subject: [PATCH 09/23] Debug --- parm/jcb-gdas | 2 +- parm/marine/jcb-base.yaml.j2 | 2 +- parm/marine/marine_ens_config.yaml.j2 | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index 2740f13f5..aeaa7e2fc 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit 2740f13f5f00766d0ef84ef39465ed52fc1f2047 +Subproject commit aeaa7e2fcd5856026aa75360b03cc35626bf0804 diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index f73cafb02..4f1f4c513 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -112,7 +112,7 @@ marine_config_path: '{{COMOUT_CONF}}' # ------------------------- # Using LETKF app? (used in obs YAMLs) -letkf_app: '{{ letkf_app }}' +marine_letkf_app: '{{ letkf_app }}' # Solver local_ensemble_da_solver: Deterministic LETKF diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index e2db66854..6112aab28 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -47,9 +47,9 @@ data_in: {% endfilter %} copy_opt: -{% filter indent(width=4) %} -{% include 'marine_stage_obs.yaml.j2' %} -{% endfilter %} +{% for ob_name in observations %} + - ['{{ COMIN_OBS }}/{{ OPREFIX }}{{ ob_name }}.nc', '{{ DATA }}/obs'] +{% endfor %} data_out: mkdir: From b2df2243053163aedc50e42b0ab11cfac2da27f5 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Mon, 20 Oct 2025 19:35:35 +0000 Subject: [PATCH 10/23] Debug --- parm/marine/jcb-base.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index 4f1f4c513..a1534718d 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -112,7 +112,7 @@ marine_config_path: '{{COMOUT_CONF}}' # ------------------------- # Using LETKF app? (used in obs YAMLs) -marine_letkf_app: '{{ letkf_app }}' +marine_letkf_app: {{ letkf_app | default(false) }} # Solver local_ensemble_da_solver: Deterministic LETKF From 6b7f6c65527dac1fa0b39bfe61b2dd66758521d8 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Mon, 20 Oct 2025 20:21:08 +0000 Subject: [PATCH 11/23] Clean up --- parm/marine/jcb-base.yaml.j2 | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/parm/marine/jcb-base.yaml.j2 b/parm/marine/jcb-base.yaml.j2 index a1534718d..939da94df 100644 --- a/parm/marine/jcb-base.yaml.j2 +++ b/parm/marine/jcb-base.yaml.j2 @@ -81,8 +81,6 @@ marine_obsdataout_path: '{{DATA}}/diags' marine_obsdataout_prefix: '' marine_obsdataout_suffix: '.nc' -marine_letkf_dist_halo_size: '{{ DIST_HALO_SIZE }}' - # Outer loops marine_ninner_1: '{{NINNER}}' marine_grad_red_1: 1e-7 @@ -111,9 +109,6 @@ marine_config_path: '{{COMOUT_CONF}}' # Local Ensemble DA (LETKF) # ------------------------- -# Using LETKF app? (used in obs YAMLs) -marine_letkf_app: {{ letkf_app | default(false) }} - # Solver local_ensemble_da_solver: Deterministic LETKF @@ -133,4 +128,8 @@ inflation_rtps: 0.5 inflation_rtpp: 0.6 inflation_mult: 1.1 +# Using LETKF app? (used in obs YAMLs) +marine_letkf_app: {{ letkf_app | default(false) }} +marine_letkf_dist_halo_size: '{{ DIST_HALO_SIZE }}' + From 0955594832ae6acf3989fe6f92eef51b2211624d Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 21 Oct 2025 16:35:48 +0000 Subject: [PATCH 12/23] Incorporate Rahul's changes --- parm/marine/marine_bmat_config.yaml.j2 | 38 +++++++---------- parm/marine/marine_det_config.yaml.j2 | 52 +++++++++++++----------- parm/marine/marine_det_stage_bkg.yaml.j2 | 15 +++---- parm/marine/marine_ecen_config.yaml.j2 | 26 ++++++------ parm/marine/marine_ens_config.yaml.j2 | 48 ++++++++-------------- parm/marine/marine_ens_stage_bkg.yaml.j2 | 4 +- 6 files changed, 81 insertions(+), 102 deletions(-) diff --git a/parm/marine/marine_bmat_config.yaml.j2 b/parm/marine/marine_bmat_config.yaml.j2 index cc06b36c3..4be970f76 100644 --- a/parm/marine/marine_bmat_config.yaml.j2 +++ b/parm/marine/marine_bmat_config.yaml.j2 @@ -70,42 +70,34 @@ data_in: - [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ] data_out: - copy_req: - # diag - - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] -{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] -{% endif %} - + copy: # soca grid - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}'] # Copy the diffusion coefficient files to the ROTDIR -{% for diff_type in ['hz', 'vt'] %} - - ['{{ DATAstaticb }}/{{ diff_type }}_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}{{ diff_type }}_ocean.nc'] -{% endfor %} + - ['{{ DATAstaticb }}/hz_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}hz.nc'] + - ['{{ DATAstaticb }}/vt_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}vt.nc'] # diag B - - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_parametric_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}bkgerr_parametric_stddev.nc'] {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.recentering_error.nc'] - - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.recentering_error.nc'] + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] + - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] {% endif %} {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} # ensemble perturbation diagnostics - - ['{{ DATA }}/ocn.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc'] - - ['{{ DATA }}/ice.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc'] + - ['{{ DATA }}/ocn.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] + - ['{{ DATA }}/ice.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] # ssh diagnostics - {% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} - - ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.{{ string }}.nc'] - {% endfor %} + - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_steric_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_unbal_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_total_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}steric_explained_variance.nc'] {% endif %} # yaml files diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 56e1917b6..ddd0b1c52 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -34,8 +34,8 @@ data_in: # stage ensemble weights {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - - ["{{ COMIN_OCEAN_BMATRIX }}/{{ APREFIX }}ocean.ens_weights.nc", "{{ DATA }}/ocean.ens_weights.nc"] - - ["{{ COMIN_ICE_BMATRIX }}/{{ APREFIX }}ice.ens_weights.nc", "{{ DATA }}/ice.ens_weights.nc"] + - ["{{ COMIN_OCEAN_BMATRIX }}/{{ APREFIX }}ens_weights.nc", "{{ DATA }}/ocean.ens_weights.nc"] + - ["{{ COMIN_ICE_BMATRIX }}/{{ APREFIX }}ens_weights.nc", "{{ DATA }}/ice.ens_weights.nc"] {% endif %} # stage CICE6 restart @@ -61,41 +61,45 @@ data_out: - '{{ COMOUT_OCEAN_ANALYSIS }}/bump' copy: - # IAU increment - - ['{{ DATA }}/ocn.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocninc.nc'] + # Ocean IAU increment (intended for MOM6) + - ['{{ DATA }}/ocn.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}mom6_increment.i006.nc'] -{% for domain in ['ocn','ice'] %} - # Increments - - ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.incr.nc'] + # Ocean increment and analysis from JEDI + - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] + - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.an.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] - # Analysis at the start of the window - - ['{{ DATA }}/Data/{{ domain }}.3dvarfgat_pseudo.an.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.ana.nc'] - - # Diagonal of the background error for the cycle - #- ['{{ DATA }}/{{ domain }}.bkgerr_stddev.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.bkgerr_stddev.nc'] - - # Recentering error - #- ['{{ DATA }}/static_ens/{{ domain }}.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}{{ domain }}.recentering_error.nc'] -{% endfor %} + # SeaIce increment and analysis from JEDI + - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] + - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.an.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] # Postprocessed ice increment - - ['{{ DATA }}/ice.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ice.incr.postproc.nc'] + - ['{{ DATA }}/ice.inc.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}pp_increment.i006.nc'] # ssh diagnostics -{% if NMEM_ENS > 2 %} - {% for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance'] %} - - ['{{ DATA }}/staticb/ocn.{{ string }}.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ocn.{{ string }}.nc'] - {% endfor %} -{% endif %} + {% if NMEM_ENS > 2 %} + - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_steric_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_unbal_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_total_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}steric_explained_variance.nc'] + {% endif %} # DA grid (computed for the start of the window) - - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ RUN }}.t{{ WINDOW_BEGIN | strftime('%H') }}z.ocngrid.nc'] + - ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_gridspec.tm03.nc'] # CICE analysis restart - - ['{{ DATA }}/Data/{{ cice_rst_date }}.cice_model.res.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] + - ['{{ DATA }}/Data/{{ cice_rst_date }}.cice_model.res.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ cice_rst_date }}.analysis.cice_model.res.nc'] # YAML files - ['{{ DATA }}/fields_metadata.yaml', '{{ COMOUT_CONF }}'] - ['{{ DATA }}/obsop_name_map.yaml', '{{ COMOUT_CONF }}/'] - ['{{ DATA }}/soca_incpostproc.yaml', '{{ COMOUT_CONF }}/'] - ['{{ DATA }}/var.yaml', '{{ COMOUT_CONF }}/'] + + copy_opt: + # Ocean background and recentering error files + - ['{{ DATA }}/ocn.bkgerr_stddev.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] + - ['{{ DATA }}/static_ens/ocn.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] + + # Seaice background and recentering error files + - ['{{ DATA }}/ice.bkgerr_stddev.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] + - ['{{ DATA }}/static_ens/ice.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] diff --git a/parm/marine/marine_det_stage_bkg.yaml.j2 b/parm/marine/marine_det_stage_bkg.yaml.j2 index e5ae48d62..1a07ee411 100644 --- a/parm/marine/marine_det_stage_bkg.yaml.j2 +++ b/parm/marine/marine_det_stage_bkg.yaml.j2 @@ -2,12 +2,9 @@ # copy ensemble background files ###################################### -# stage initial conditions -- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.f003.nc", "{{ DATA }}/INPUT/MOM.res.nc"] -- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.f003.nc", "{{ DATA }}/INPUT/cice.res.nc"] - -# stage f006 and f009 backgrounds -{% for fcsth in ['f006', 'f009'] %} -- ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ocean.bkg.{{ fcsth }}.nc"] -- ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.{{ fcsth }}.nc", "{{ DATA }}/bkg/ice.bkg.{{ fcsth }}.nc"] -{% endfor %} +- ["{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX }}inst.f003.nc", "{{ DATA }}/INPUT/MOM.res.nc"] +- ["{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX }}inst.f006.nc", "{{ DATA }}/bkg/ocean.bkg.f006.nc"] +- ["{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX }}inst.f009.nc", "{{ DATA }}/bkg/ocean.bkg.f009.nc"] +- ["{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX }}inst.f003.nc", "{{ DATA }}/INPUT/cice.res.nc"] +- ["{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX }}inst.f006.nc", "{{ DATA }}/bkg/ice.bkg.f006.nc"] +- ["{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX }}inst.f009.nc", "{{ DATA }}/bkg/ice.bkg.f009.nc"] diff --git a/parm/marine/marine_ecen_config.yaml.j2 b/parm/marine/marine_ecen_config.yaml.j2 index 0242bb73e..f35a7a9ba 100644 --- a/parm/marine/marine_ecen_config.yaml.j2 +++ b/parm/marine/marine_ecen_config.yaml.j2 @@ -21,9 +21,8 @@ data_in: link: {% for imem in range(1,NMEM_ENS+1) %} - {% for domain in ['ocean', 'ice'] %} - - [ "{{ DATA }}/../ensdata/ens/{{ domain }}.{{ imem | string }}.nc", '{{ DATA }}/ens/' ] - {% endfor %} + - [ "{{ DATA }}/../ensdata/ens/ocean.{{ imem | string }}.nc", '{{ DATA }}/ens/' ] + - [ "{{ DATA }}/../ensdata/ens/ice.{{ imem | string }}.nc", '{{ DATA }}/ens/' ] {% endfor %} copy_req: @@ -52,37 +51,36 @@ data_out: '${MEMDIR}': 'ensstat' }) %} - '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' - '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' + {% for imem in range(1,NMEM_ENS+1) %} - {% set memchar = 'mem%03d' | format(imem) %} {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, '${RUN}': RUN, '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': memchar }) %} + '${MEMDIR}': 'mem%03d' | format(imem) }) %} - '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' - '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}' {% endfor %} - copy: + copy_req: + {% for imem in range(1,NMEM_ENS+1) %} - {% set imem0 = imem-1 %} - {% set memchar = 'mem%03d' | format(imem) %} {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, '${RUN}': RUN, '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime('%H'), - '${MEMDIR}': memchar }) %} + '${MEMDIR}': 'mem%03d' | format(imem) }) %} # ocean increments are saved as 0..n-1 - - ['{{ DATA }}/ocn.recenter.ens.{{ imem0 | string}}.{{ WINDOW_END | to_isotime }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.t{{ "%02d" | format(cyc) }}z.ocninc.nc'] + - ['{{ DATA }}/ocn.recenter.ens.{{ imem-1 | string}}.{{ MARINE_WINDOW_END_ISO }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}mom6_increment.i006.nc'] # ice restarts are saved as 1..n - - ['{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.cice_model_anl.res.nc'] + - ['{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.analysis.cice_model.res.nc'] {% endfor %} + {% set tmpl_dict = ({ '${ROTDIR}': ROTDIR, '${RUN}': RUN, '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime('%H'), '${MEMDIR}': 'ensstat' }) %} - - - ['{{ DATA }}/ocn.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ocean.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] - - ['{{ DATA }}/ice.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ RUN }}.ice.t{{ "%02d" | format(cyc) }}z.bg_ensvar.nc'] + - ['{{ DATA }}/ocn.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] + - ['{{ DATA }}/ice.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index 6112aab28..9561417f1 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -22,24 +22,12 @@ data_in: - "{{ DATA }}/diags" - '{{ DATAens }}/ens' - # make comout directories -{% for mem in range(1, NMEM_ENS + 1) %} - {% set tmpl_dict = {'${ROTDIR}':ROTDIR, - '${RUN}':GDUMP_ENS, - '${YMD}':current_cycle | to_YMD, - '${HH}':current_cycle | strftime("%H"), - '${MEMDIR}':"mem" + '%03d' % mem} %} - - - "{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" - - "{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}" -{% endfor %} - copy_req: # copy mom input template and det bkg - ["{{ PARMgfs }}/gdas/marine/fms/input.nml", "{{ DATA }}/mom_input.nml.tmpl"] - ["{{ PARMgfs }}/gdas/marine/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] - - ["{{ COMIN_OCEAN_HISTORY_PREV }}/gdas.ocean.t{{ previous_cycle | strftime("%H") }}z.inst.f009.nc", "{{ DATA }}/INPUT/MOM.res.nc"] - - ["{{ COMIN_ICE_HISTORY_PREV }}/gdas.ice.t{{ previous_cycle | strftime("%H") }}z.inst.f009.nc", "{{ DATA }}/INPUT/cice.res.nc"] + - ["{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX_ENS }}inst.f009.nc", "{{ DATA }}/INPUT/MOM.res.nc"] + - ["{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX_ENS }}inst.f009.nc", "{{ DATA }}/INPUT/cice.res.nc"] {% filter indent(width=4) %} {% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} @@ -56,6 +44,7 @@ data_out: - '{{ COMOUT_OCEAN_LETKF }}/diags' copy_req: + # save letkf analysis to comout {% for mem in range(1, NMEM_ENS + 1) %} {% set tmpl_dict = {'${ROTDIR}':ROTDIR, @@ -63,25 +52,24 @@ data_out: '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime("%H"), '${MEMDIR}':"mem" + '%03d' % mem} %} - {% set COMOUT_OCEAN_LETKF_MEM = COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) %} - {% set COMOUT_ICE_LETKF_MEM = COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) %} - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF_MEM }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.analysis.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF_MEM }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.analysis.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc"] {% endfor %} -# Save LETKF background and analysis mean and variance, mean analysis increment - - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ocean.t{{ current_cycle | strftime("%H") }}z.ensmean_incr.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ GDUMP_ENS }}.ice.t{{ current_cycle | strftime("%H") }}z.ensmean_incr.nc"] - - ['{{ DATA }}//letkf.yaml', '{{ COMOUT_CONF}}/soca_letkf.yaml'] + # Save LETKF background and analysis mean and variance, mean analysis increment + - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] + - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] + + - ['{{ DATA }}/letkf.yaml', '{{ COMOUT_CONF}}/soca_letkf.yaml'] copy_opt: # save obs diags diff --git a/parm/marine/marine_ens_stage_bkg.yaml.j2 b/parm/marine/marine_ens_stage_bkg.yaml.j2 index 891f05f15..2f2c2e7fe 100644 --- a/parm/marine/marine_ens_stage_bkg.yaml.j2 +++ b/parm/marine/marine_ens_stage_bkg.yaml.j2 @@ -15,6 +15,6 @@ '${HH}':previous_cycle | strftime('%H'), '${MEMDIR}':'mem' + '%03d' % gmem} %} -- ['{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ocean.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ocean.{{ mem }}.nc'] -- ['{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GDUMP_ENS }}.ice.t{{ previous_cycle | strftime('%H') }}z.inst.f006.nc', '{{ DATAens }}/ens/ice.{{ mem }}.nc'] +- ['{{ COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GPREFIX_ENS }}inst.f006.nc', '{{ DATAens }}/ens/ocean.{{ mem }}.nc'] +- ['{{ COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) }}/{{ GPREFIX_ENS }}inst.f006.nc', '{{ DATAens }}/ens/ice.{{ mem }}.nc'] {% endfor %} From 48ebafa1310416e5194ac667cd768d19351c5d2c Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 21 Oct 2025 16:53:18 +0000 Subject: [PATCH 13/23] Debug --- parm/marine/marine_ens_config.yaml.j2 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index 9561417f1..5230d2f91 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -59,17 +59,17 @@ data_out: # Save LETKF background and analysis mean and variance, mean analysis increment - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] + - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] - - ['{{ DATA }}/letkf.yaml', '{{ COMOUT_CONF}}/soca_letkf.yaml'] + - ['{{ DATA }}/letkf.yaml', '{{ COMOUT_CONF }}/soca_letkf.yaml'] copy_opt: # save obs diags From 39d13ca51df18ad71fa256a5673058631fec65a5 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 18:03:30 +0000 Subject: [PATCH 14/23] Debug --- parm/marine/marine_bmat_config.yaml.j2 | 24 ++++++++++----- parm/marine/marine_det_config.yaml.j2 | 24 +++++++-------- parm/marine/marine_ecen_config.yaml.j2 | 7 +++-- parm/marine/marine_ens_config.yaml.j2 | 42 +++++++++++++------------- 4 files changed, 53 insertions(+), 44 deletions(-) diff --git a/parm/marine/marine_bmat_config.yaml.j2 b/parm/marine/marine_bmat_config.yaml.j2 index 4be970f76..5f4213a82 100644 --- a/parm/marine/marine_bmat_config.yaml.j2 +++ b/parm/marine/marine_bmat_config.yaml.j2 @@ -78,26 +78,34 @@ data_out: - ['{{ DATAstaticb }}/hz_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}hz.nc'] - ['{{ DATAstaticb }}/vt_ocean.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}vt.nc'] + # diag B rename (do we really need this?) + - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc'] +{% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} + - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc'] + - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc','{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc'] +{% endif %} + # diag B - ['{{ DATAstaticb }}/ocn.bkgerr_parametric_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}bkgerr_parametric_stddev.nc'] - ['{{ DATAstaticb }}/ice.bkgerr_parametric_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}bkgerr_parametric_stddev.nc'] {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} - ['{{ DATAstaticb }}/ocn.bkgerr_ens_stddev.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}bkgerr_ens_stddev.nc'] - ['{{ DATAstaticb }}/ice.bkgerr_ens_stddev.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}bkgerr_ens_stddev.nc'] - - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] - - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] + - ['{{ DATAstaticb }}/ocn.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] + - ['{{ DATAstaticb }}/ice.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}recentering_error.nc'] {% endif %} {% if DOHYBVAR_OCN == "YES" or NMEM_ENS >= 2 %} # ensemble perturbation diagnostics - - ['{{ DATA }}/ocn.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] - - ['{{ DATA }}/ice.ens_weights.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] + - ['{{ DATA }}/ocn.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] + - ['{{ DATA }}/ice.ens_weights.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_BMATRIX }}/{{ APREFIX }}ens_weights.nc'] # ssh diagnostics - - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_steric_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_unbal_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_total_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}steric_explained_variance.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_steric_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_unbal_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}ssh_total_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_BMATRIX }}/{{ APREFIX }}steric_explained_variance.nc'] {% endif %} # yaml files diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index ddd0b1c52..0591f4818 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -65,22 +65,22 @@ data_out: - ['{{ DATA }}/ocn.inc.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}mom6_increment.i006.nc'] # Ocean increment and analysis from JEDI - - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] - - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.an.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] + - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] + - ['{{ DATA }}/Data/ocn.3dvarfgat_pseudo.an.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] # SeaIce increment and analysis from JEDI - - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] - - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.an.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] + - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_increment.i006.nc'] + - ['{{ DATA }}/Data/ice.3dvarfgat_pseudo.an.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}jedi_analysis.a006.nc'] # Postprocessed ice increment - ['{{ DATA }}/ice.inc.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}pp_increment.i006.nc'] # ssh diagnostics {% if NMEM_ENS > 2 %} - - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_steric_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_unbal_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_total_stddev.nc'] - - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}steric_explained_variance.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_steric_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_steric_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_unbal_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_unbal_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.ssh_total_stddev.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}ssh_total_stddev.nc'] + - ['{{ DATA }}/staticb/ocn.steric_explained_variance.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}steric_explained_variance.nc'] {% endif %} # DA grid (computed for the start of the window) @@ -97,9 +97,9 @@ data_out: copy_opt: # Ocean background and recentering error files - - ['{{ DATA }}/ocn.bkgerr_stddev.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] - - ['{{ DATA }}/static_ens/ocn.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] + - ['{{ DATA }}/ocn.bkgerr_stddev.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] + - ['{{ DATA }}/static_ens/ocn.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_OCEAN_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] # Seaice background and recentering error files - - ['{{ DATA }}/ice.bkgerr_stddev.incr.{{ MARINE_WINDOW_MIDDLE_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] - - ['{{ DATA }}/static_ens/ice.ssh_recentering_error.incr.{{ MARINE_WINDOW_BEGIN_ISO }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] + - ['{{ DATA }}/ice.bkgerr_stddev.incr.{{ WINDOW_MIDDLE | to_isotime }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}bkgerr_stddev.nc'] + - ['{{ DATA }}/static_ens/ice.ssh_recentering_error.incr.{{ WINDOW_BEGIN | to_isotime }}.nc', '{{ COMOUT_ICE_ANALYSIS }}/{{ APREFIX }}recentering_error.nc'] diff --git a/parm/marine/marine_ecen_config.yaml.j2 b/parm/marine/marine_ecen_config.yaml.j2 index f35a7a9ba..e0e433271 100644 --- a/parm/marine/marine_ecen_config.yaml.j2 +++ b/parm/marine/marine_ecen_config.yaml.j2 @@ -70,8 +70,9 @@ data_out: '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime('%H'), '${MEMDIR}': 'mem%03d' | format(imem) }) %} + # ocean increments are saved as 0..n-1 - - ['{{ DATA }}/ocn.recenter.ens.{{ imem-1 | string}}.{{ MARINE_WINDOW_END_ISO }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}mom6_increment.i006.nc'] + - ['{{ DATA }}/ocn.recenter.ens.{{ (imem-1) | string }}.{{ WINDOW_END | to_isotime }}.PT0S.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}mom6_increment.i006.nc'] # ice restarts are saved as 1..n - ['{{ DATA }}/ens/cice_model.res.{{ imem | string }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ cice_rst_date }}.analysis.cice_model.res.nc'] @@ -82,5 +83,5 @@ data_out: '${YMD}': current_cycle | to_YMD, '${HH}': current_cycle | strftime('%H'), '${MEMDIR}': 'ensstat' }) %} - - ['{{ DATA }}/ocn.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] - - ['{{ DATA }}/ice.ensvar.incr.{{ MARINE_WINDOW_END_ISO }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] + - ['{{ DATA }}/ocn.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] + - ['{{ DATA }}/ice.ensvar.incr.{{ WINDOW_END | to_isotime }}.nc', '{{ COM_ICE_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}bg_ensvar.nc'] diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index 5230d2f91..836a5d8f6 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -17,17 +17,17 @@ data_in: mkdir: - '{{ DATA }}/INPUT' - '{{ DATA }}/anl_geom' - - "{{ DATA }}/letkf_output" - - "{{ DATA }}/obs" - - "{{ DATA }}/diags" + - '{{ DATA }}/letkf_output' + - '{{ DATA }}/obs' + - '{{ DATA }}/diags' - '{{ DATAens }}/ens' copy_req: # copy mom input template and det bkg - - ["{{ PARMgfs }}/gdas/marine/fms/input.nml", "{{ DATA }}/mom_input.nml.tmpl"] - - ["{{ PARMgfs }}/gdas/marine/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] - - ["{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX_ENS }}inst.f009.nc", "{{ DATA }}/INPUT/MOM.res.nc"] - - ["{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX_ENS }}inst.f009.nc", "{{ DATA }}/INPUT/cice.res.nc"] + - ['{{ PARMgfs }}/gdas/marine/fms/input.nml', '{{ DATA }}/mom_input.nml.tmpl'] + - ['{{ PARMgfs }}/gdas/marine/fields_metadata.yaml', '{{ DATA }}/fields_metadata.yaml'] + - ['{{ COMIN_OCEAN_HISTORY_PREV }}/{{ GPREFIX }}inst.f009.nc', '{{ DATA }}/INPUT/MOM.res.nc'] + - ['{{ COMIN_ICE_HISTORY_PREV }}/{{ GPREFIX }}inst.f009.nc', '{{ DATA }}/INPUT/cice.res.nc'] {% filter indent(width=4) %} {% include 'marine_stage_fix_' ~ OCNRES ~ '.yaml.j2' %} @@ -50,24 +50,24 @@ data_out: {% set tmpl_dict = {'${ROTDIR}':ROTDIR, '${RUN}': GDUMP_ENS, '${YMD}': current_cycle | to_YMD, - '${HH}': current_cycle | strftime("%H"), - '${MEMDIR}':"mem" + '%03d' % mem} %} + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}':'mem' + '%03d' % mem} %} - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc"] + - ['{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc'] {% endfor %} # Save LETKF background and analysis mean and variance, mean analysis increment - - ["{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc"] - - ["{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] - - ["{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc", "{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc"] + - ['{{ DATA }}/letkf_output/ocn.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.mean_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_prior.nc'] + - ['{{ DATA }}/letkf_output/ocn.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.var_prior.fc.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_prior.nc'] + - ['{{ DATA }}/letkf_output/ocn.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_post.nc'] + - ['{{ DATA }}/letkf_output/ocn.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc', '{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.var_post.an.{{ WINDOW_MIDDLE | to_isotime}}.nc', '{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensvar_post.nc'] + - ['{{ DATA }}/letkf_output/ocn.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_OCEAN_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.inc.ens.0.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COMOUT_ICE_LETKF }}/{{ APREFIX_ENS }}ensmean_incr.nc'] - ['{{ DATA }}/letkf.yaml', '{{ COMOUT_CONF }}/soca_letkf.yaml'] From cef3704e981c865e038537cc565373a92e6119ae Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 18:11:25 +0000 Subject: [PATCH 15/23] Update jcb-gdas hash --- parm/jcb-gdas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index aeaa7e2fc..ec1db3317 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit aeaa7e2fcd5856026aa75360b03cc35626bf0804 +Subproject commit ec1db331743ddbe7b733e0637f8872cd08563330 From 6d6489551e44552d88ce03f015f9a0a1161f99cb Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 18:16:00 +0000 Subject: [PATCH 16/23] Update jcb-gdas hash after merger --- parm/jcb-gdas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index ec1db3317..f02b89bc8 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit ec1db331743ddbe7b733e0637f8872cd08563330 +Subproject commit f02b89bc86e5d9a12021cbfc76719a2d9508642d From 4631502153d1deafe862161c0794c1d6fa77a5e8 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 18:30:33 +0000 Subject: [PATCH 17/23] Wrong jcb-gdas hash --- parm/jcb-gdas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/jcb-gdas b/parm/jcb-gdas index f02b89bc8..bbe8d736a 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit f02b89bc86e5d9a12021cbfc76719a2d9508642d +Subproject commit bbe8d736a6f7c93edc5c913fb49584e6fcb57a2e From dc36a52c54ccf070242ba6ec0bd6ae3aa1ef5c5e Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 19:43:07 +0000 Subject: [PATCH 18/23] Debug --- parm/marine/marine_ens_config.yaml.j2 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index 836a5d8f6..117d6755a 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -43,6 +43,17 @@ data_out: mkdir: - '{{ COMOUT_OCEAN_LETKF }}/diags' +{% for mem in range(1, NMEM_ENS + 1) %} + {% set tmpl_dict = {'${ROTDIR}':ROTDIR, + '${RUN}': GDUMP_ENS, + '${YMD}': current_cycle | to_YMD, + '${HH}': current_cycle | strftime('%H'), + '${MEMDIR}':'mem' + '%03d' % mem} %} + + - '{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}' + - '{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}' +{% endfor %} + copy_req: # save letkf analysis to comout From 0dbc127edd3c0720ccdd796bfeedd3d23cbf8cdc Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 19:55:05 +0000 Subject: [PATCH 19/23] Disable conventional_ps --- parm/atm/atm_obs_list.yaml.j2 | 2 +- test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parm/atm/atm_obs_list.yaml.j2 b/parm/atm/atm_obs_list.yaml.j2 index 688bc979e..27dda89c1 100644 --- a/parm/atm/atm_obs_list.yaml.j2 +++ b/parm/atm/atm_obs_list.yaml.j2 @@ -7,7 +7,7 @@ observations: #- aircraft_wind #- snowcvr #- abi_g16 -- conventional_ps +#- conventional_ps - scatwnd.ascat_metop-b - scatwnd.ascat_metop-c - satwnd.abi_goes-16 diff --git a/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 b/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 index b2e9a8ada..0d94aeeed 100644 --- a/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 +++ b/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 @@ -1,7 +1,7 @@ observations: - scatwnd.ascat_metop-b - atms_n20 -- conventional_ps +#- conventional_ps - gnssro_cosmic2 - ozone.ompsnp_npp - ozone.ompstc_npp From fcd5b283444069399c8a19fc344fbbdc0d1ca203 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 22 Oct 2025 23:26:06 +0000 Subject: [PATCH 20/23] Debug --- parm/marine/marine_ens_config.yaml.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parm/marine/marine_ens_config.yaml.j2 b/parm/marine/marine_ens_config.yaml.j2 index 117d6755a..c8dd4d4a4 100644 --- a/parm/marine/marine_ens_config.yaml.j2 +++ b/parm/marine/marine_ens_config.yaml.j2 @@ -64,8 +64,8 @@ data_out: '${HH}': current_cycle | strftime('%H'), '${MEMDIR}':'mem' + '%03d' % mem} %} - - ['{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc'] - - ['{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}analysis.nc'] + - ['{{ DATA }}/letkf_output/ocn.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_OCEAN_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}jedi_analysis.a006.nc'] + - ['{{ DATA }}/letkf_output/ice.letkf.ens.{{ mem }}.{{ WINDOW_BEGIN | to_isotime }}.PT3H.nc', '{{ COM_ICE_LETKF_TMPL | replace_tmpl(tmpl_dict) }}/{{ APREFIX_ENS }}jedi_analysis.a006.nc'] {% endfor %} # Save LETKF background and analysis mean and variance, mean analysis increment From ee1758511fd65bf7ed8c2028cf19df100fbeaacf Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 23 Oct 2025 13:17:30 +0000 Subject: [PATCH 21/23] Bring back conventional ps --- parm/atm/atm_obs_list.yaml.j2 | 2 +- parm/jcb-gdas | 2 +- test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parm/atm/atm_obs_list.yaml.j2 b/parm/atm/atm_obs_list.yaml.j2 index 27dda89c1..688bc979e 100644 --- a/parm/atm/atm_obs_list.yaml.j2 +++ b/parm/atm/atm_obs_list.yaml.j2 @@ -7,7 +7,7 @@ observations: #- aircraft_wind #- snowcvr #- abi_g16 -#- conventional_ps +- conventional_ps - scatwnd.ascat_metop-b - scatwnd.ascat_metop-c - satwnd.abi_goes-16 diff --git a/parm/jcb-gdas b/parm/jcb-gdas index bbe8d736a..9c08fbdd0 160000 --- a/parm/jcb-gdas +++ b/parm/jcb-gdas @@ -1 +1 @@ -Subproject commit bbe8d736a6f7c93edc5c913fb49584e6fcb57a2e +Subproject commit 9c08fbdd004c7f695c06c160e0a0505bd5987f42 diff --git a/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 b/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 index 0d94aeeed..b2e9a8ada 100644 --- a/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 +++ b/test/gw-ci/atm/atm_obs_list_ufs_hybatmDA.yaml.j2 @@ -1,7 +1,7 @@ observations: - scatwnd.ascat_metop-b - atms_n20 -#- conventional_ps +- conventional_ps - gnssro_cosmic2 - ozone.ompsnp_npp - ozone.ompstc_npp From 1f08048935e07b982cbab01b009e15b826ad6357 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 23 Oct 2025 14:19:29 +0000 Subject: [PATCH 22/23] Small adjustment --- parm/marine/marine_det_config.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 0591f4818..9375897c9 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -5,7 +5,7 @@ jedi_config: mpi_cmd: '{{ APRUN_MARINEANLVAR }}' jedi_args: ['soca', 'variational'] jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo_yaml: '{{ JCB_ALGO_YAML_VAR }}' + jcb_algo_yaml: '${PARMgfs}/gdas/marine/marine-jcb-3dfgat.yaml.j2' soca_incpostproc: rundir: '{{ DATA }}' exe_src: '{{ EXECgfs }}/gdas_soca_incr_handler.x' From 972a495821060605b6e0f0f40ba8e81c7188ec34 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 23 Oct 2025 18:09:53 +0000 Subject: [PATCH 23/23] Debug --- parm/marine/marine_det_config.yaml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/marine/marine_det_config.yaml.j2 b/parm/marine/marine_det_config.yaml.j2 index 9375897c9..24d562c70 100644 --- a/parm/marine/marine_det_config.yaml.j2 +++ b/parm/marine/marine_det_config.yaml.j2 @@ -5,7 +5,7 @@ jedi_config: mpi_cmd: '{{ APRUN_MARINEANLVAR }}' jedi_args: ['soca', 'variational'] jcb_base_yaml: '{{ PARMgfs }}/gdas/marine/jcb-base.yaml.j2' - jcb_algo_yaml: '${PARMgfs}/gdas/marine/marine-jcb-3dfgat.yaml.j2' + jcb_algo_yaml: '{{ PARMgfs }}/gdas/marine/jcb-prototype_3dfgat.yaml.j2' soca_incpostproc: rundir: '{{ DATA }}' exe_src: '{{ EXECgfs }}/gdas_soca_incr_handler.x'