Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b24d78b
Initial commit
DavidNew-NOAA Oct 15, 2025
ca397fc
Rest of marine analysis
DavidNew-NOAA Oct 15, 2025
fe4ee87
Leftover
DavidNew-NOAA Oct 15, 2025
aafb59b
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 15, 2025
9bfbe4b
Debug
DavidNew-NOAA Oct 16, 2025
c3ff384
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 16, 2025
e300687
Add recentering
DavidNew-NOAA Oct 16, 2025
793f5e4
Cleanup
DavidNew-NOAA Oct 16, 2025
ad98dcf
Debug
DavidNew-NOAA Oct 17, 2025
691dcf3
Add marine local ensemble da model templates
DavidNew-NOAA Oct 20, 2025
1d0e534
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 20, 2025
0efed24
Debug
DavidNew-NOAA Oct 20, 2025
fd3d668
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 20, 2025
b2df224
Debug
DavidNew-NOAA Oct 20, 2025
6b7f6c6
Clean up
DavidNew-NOAA Oct 20, 2025
0955594
Incorporate Rahul's changes
DavidNew-NOAA Oct 21, 2025
043bab7
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 21, 2025
48ebafa
Debug
DavidNew-NOAA Oct 21, 2025
d8e473e
Merge branch 'develop' into feature/marine-refactor
DavidNew-NOAA Oct 22, 2025
39d13ca
Debug
DavidNew-NOAA Oct 22, 2025
cef3704
Update jcb-gdas hash
DavidNew-NOAA Oct 22, 2025
6d64895
Update jcb-gdas hash after merger
DavidNew-NOAA Oct 22, 2025
4631502
Wrong jcb-gdas hash
DavidNew-NOAA Oct 22, 2025
dc36a52
Debug
DavidNew-NOAA Oct 22, 2025
0dbc127
Disable conventional_ps
DavidNew-NOAA Oct 22, 2025
fcd5b28
Debug
DavidNew-NOAA Oct 22, 2025
ee17585
Bring back conventional ps
DavidNew-NOAA Oct 23, 2025
1f08048
Small adjustment
DavidNew-NOAA Oct 23, 2025
972a495
Debug
DavidNew-NOAA Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion parm/jcb-gdas
Submodule jcb-gdas updated 39 files
+2 −2 algorithm/marine/soca_ensb.yaml.j2
+1 −1 algorithm/obstats/atmos/conventional_ps_template.yaml.j2
+53 −0 algorithm/obstats/atmos/prepbufr_adpsfc_template.yaml.j2
+53 −0 algorithm/obstats/atmos/prepbufr_adpupa_template.yaml.j2
+53 −0 algorithm/obstats/atmos/prepbufr_sfcshp_template.yaml.j2
+7 −3 algorithm/obstats/atmos_gsi/gsi_sfc_ps_template.yaml.j2
+10 −0 model/marine/marine_background_ensemble.yaml.j2
+4 −0 model/marine/marine_output_increment.yaml.j2
+4 −0 model/marine/marine_output_mean_prior.yaml.j2
+4 −0 model/marine/marine_output_variance_posterior.yaml.j2
+4 −0 model/marine/marine_output_variance_prior.yaml.j2
+4 −0 model/marine/marine_posterior_output.yaml.j2
+1 −1 observations/atmosphere/conventional_ps.yaml.j2
+368 −0 observations/atmosphere/prepbufr_adpsfc.yaml.j2
+368 −0 observations/atmosphere/prepbufr_adpupa.yaml.j2
+368 −0 observations/atmosphere/prepbufr_sfcshp.yaml.j2
+6 −1 observations/marine/adt_rads_all.yaml.j2
+14 −9 observations/marine/icec_amsr2_north.yaml.j2
+14 −9 observations/marine/icec_amsr2_south.yaml.j2
+6 −1 observations/marine/icec_generic_passive.yaml.j2
+6 −1 observations/marine/icec_ssmis_f17_l2.yaml.j2
+6 −1 observations/marine/insitu_profile_bathy.yaml.j2
+6 −1 observations/marine/insitu_profile_glider.yaml.j2
+6 −1 observations/marine/insitu_profile_marinemammal.yaml.j2
+6 −1 observations/marine/insitu_profile_tesac.yaml.j2
+6 −1 observations/marine/insitu_profile_tesac_salinity.yaml.j2
+6 −1 observations/marine/insitu_profile_tropical.yaml.j2
+6 −1 observations/marine/insitu_profile_xbtctd.yaml.j2
+6 −1 observations/marine/insitu_salt_profile_argo.yaml.j2
+6 −1 observations/marine/insitu_surface_altkob.yaml.j2
+6 −1 observations/marine/insitu_surface_dbuoyb_drifter.yaml.j2
+6 −1 observations/marine/insitu_surface_trkob.yaml.j2
+6 −1 observations/marine/insitu_surface_trkob_salinity.yaml.j2
+6 −1 observations/marine/insitu_temp_profile_argo.yaml.j2
+6 −1 observations/marine/insitu_temp_surface_drifter.yaml.j2
+6 −1 observations/marine/sss_smap_l2.yaml.j2
+6 −1 observations/marine/sss_smos_l2.yaml.j2
+6 −1 observations/marine/sst_generic.yaml.j2
+6 −1 observations/marine/sst_generic_geo.yaml.j2
56 changes: 42 additions & 14 deletions parm/marine/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 }}'
enspert_relpath: '{{ ENSPERT_RELPATH }}'
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 }}'
marine_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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -105,3 +105,31 @@ obs_variables: {{ obs_variables | default({}) }}

# COM path for configuration files
marine_config_path: '{{COMOUT_CONF}}'

# Local Ensemble DA (LETKF)
# -------------------------

# 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

# Using LETKF app? (used in obs YAMLs)
marine_letkf_app: {{ letkf_app | default(false) }}
marine_letkf_dist_halo_size: '{{ DIST_HALO_SIZE }}'


5 changes: 5 additions & 0 deletions parm/marine/jcb-prototype_letkf.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# JEDI algorithm being invoked
algorithm: local_ensemble_da

# Observations
{% include OBS_LIST_YAML %}
124 changes: 124 additions & 0 deletions parm/marine/marine_bmat_config.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
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'
- '{{ 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' %}
{% endif %}
{% endfilter %}

link:
- [ "{{ DATA }}/../staticb", "{{ DATA }}/staticb" ]

data_out:
copy:
# soca grid
- ['{{ DATA }}/soca_gridspec.nc', '{{ COMOUT_OCEAN_BMATRIX }}']

# Copy the diffusion coefficient files to the ROTDIR
- ['{{ 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.{{ 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.{{ 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.{{ 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
- ['{{ 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 %}
8 changes: 0 additions & 8 deletions parm/marine/marine_bmat_copy_bkgerr.yaml.j2

This file was deleted.

49 changes: 0 additions & 49 deletions parm/marine/marine_bmat_jedi_config.yaml.j2

This file was deleted.

39 changes: 0 additions & 39 deletions parm/marine/marine_bmat_save.yaml.j2

This file was deleted.

Loading