Skip to content

Commit

Permalink
Switch to 2DVar for snow DA + use JCB (#1410)
Browse files Browse the repository at this point in the history
Closes #1324 

This PR, combined with a companion workflow PR, switches the snow
analysis to be 2DVar for both deterministic and ensemble mean, to use
JCB to generate YAMLs and to leverage the g-w Jedi class. It also
updates the IMS snow cover processing hash to use `snodl` instead of
`snwpdh`
  • Loading branch information
CoryMartin-NOAA authored Dec 13, 2024
1 parent 6659e33 commit d9a1af6
Show file tree
Hide file tree
Showing 14 changed files with 67 additions and 549 deletions.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
hour_str = "{{ current_cycle | strftime('%H') }}",
res = {{ CASE_ENS[1:] }},
frac_grid = .true.,
rst_path = "{{ DATAROOT }}/anl/mem{{ MYMEM }}",
inc_path = "{{ DATAROOT }}/inc/ensmean",
rst_path = "{{ DATA }}/anl/mem{{ MYMEM }}",
inc_path = "{{ DATA }}/anl",
orog_path = "{{ HOMEgfs }}/fix/orog/{{ CASE_ENS }}",
otype = "{{ CASE_ENS }}.mx{{ OCNRES }}_oro_data"
/
103 changes: 48 additions & 55 deletions parm/snow/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
algorithm_path: "{{PARMgfs}}/gdas/jcb-algorithms"
app_path_algorithm: "{{PARMgfs}}/gdas/jcb-gdas/algorithm/snow"
app_path_model: "{{PARMgfs}}/gdas/jcb-gdas/model/snow"
app_path_observations: "{{PARMgfs}}/gdas/jcb-gdas/observations/atmosphere"
app_path_observation_chronicle: "{{PARMgfs}}/gdas/jcb-gdas/observation_chronicle/atmosphere"
app_path_observations: "{{PARMgfs}}/gdas/jcb-gdas/observations/snow"
app_path_observation_chronicle: "{{PARMgfs}}/gdas/jcb-gdas/observation_chronicle/snow"


# Places where we deviate from the generic file name of a yaml
# ------------------------------------------------------------
#final_increment_file: final_increment_gaussian
final_increment_file: final_increment_cubed_sphere
output_ensemble_increments_file: output_ensemble_increments_gaussian
final_increment_file: snow_final_increment_fms
model_file: model_pseudo
initial_condition_file: background # Initial conditions for 4D apps is background

Expand All @@ -23,60 +21,52 @@ window_length: "{{ SNOW_WINDOW_LENGTH }}"
bound_to_include: begin

# Default background time is for 3D applications
{% if DOIAU %}
{% set bkg_time_iso = SNOW_WINDOW_BEGIN | to_isotime %}
{% set bkg_time_fv3 = SNOW_WINDOW_BEGIN | to_fv3time %}
{% else %}
{% set bkg_time_iso = current_cycle | to_isotime %}
{% set bkg_time_fv3 = current_cycle | to_fv3time %}
{% endif %}
snow_background_time_iso: "{{ bkg_time_iso }}"
snow_background_time_fv3: "{{ bkg_time_fv3 }}"
snow_increment_time_iso: "{{ bkg_time_iso }}"
snow_increment_time_fv3: "{{ bkg_time_fv3 }}"


# Analysis standard things
# ------------------------
analysis_variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr]
analysis_variables: [totalSnowDepth]
minimizer: DRPCG
final_diagnostics_departures: anlmob
final_prints_frequency: PT3H
cost_type: 3D-Var
number_of_outer_loops: 2
number_of_outer_loops: 1

# Model things
# ------------
# Geometry
layout_x: {{ layout_x | default(1, true) }}
layout_y: {{ layout_y | default(1, true) }}
npx_ges: {{ npx_ges | default(49, true) }}
npy_ges: {{ npy_ges | default(49, true) }}
npz_ges: {{ npz_ges | default(127, true) }}
npx_anl: {{ npx_anl | default(49, true) }}
npy_anl: {{ npy_anl | default(49, true) }}
npz_anl: {{ npz_anl | default(127, true) }}

fv3jedi_files_path: ./fv3jedi # Ideally this would be {{DATA}}/fv3jedi but FMS
snow_layout_x: {{ layout_x | default(1, true) }}
snow_layout_y: {{ layout_y | default(1, true) }}
snow_npx_ges: {{ npx_ges | default(49, true) }}
snow_npy_ges: {{ npy_ges | default(49, true) }}
snow_npz_ges: {{ npz_ges | default(127, true) }}
snow_npx_anl: {{ npx_ges | default(49, true) }}
snow_npy_anl: {{ npy_ges | default(49, true) }}
snow_npz_anl: {{ npz_ges | default(127, true) }}

snow_fv3jedi_files_path: ./fv3jedi # Ideally this would be {{DATA}}/fv3jedi but FMS
snow_orog_files_path: "{{ FIXgfs }}/orog/{{ CASE }}"
snow_orog_prefix: "{{ CASE }}.mx{{ OCNRES }}"

# Background
background_path: ./bkg
snow_background_path: {{snow_bkg_path}}
background_ensemble_path: ./ens/mem%mem%

# Background error
bump_data_directory: "{{ DATA }}/berror"
gsibec_path: "{{ DATA }}/berror"
snow_bump_data_directory: "{{ DATA }}/berror"
number_ensemble_members: {{ NMEM_ENS | default(1, true) }}
layout_gsib_x: {{ layout_gsib_x | default(1, true) }}
layout_gsib_y: {{ layout_gsib_y | default(1, true) }}

background_error_file: "{{BERROR_YAML}}"
snow_background_error_file: "{{BERROR_YAML}}"

# Forecasting
forecast_length: "{{ ATM_WINDOW_LENGTH }}"
forecast_timestep: "{{ BKG_TSTEP }}"

# Write final increment on Guassian grid in variational
final_increment_prefix: "./anl/atminc."
snow_forecast_length: "{{ SNOW_WINDOW_LENGTH }}"
snow_forecast_timestep: "{{ BKG_TSTEP }}"


# Observation things
Expand All @@ -86,29 +76,32 @@ observations: all_observations
crtm_coefficient_path: "{{ DATA }}/crtm/"

# Naming conventions for observational files
atm_obsdatain_path: "{{atm_obsdatain_path}}"
atm_obsdatain_prefix: "{{OPREFIX}}"
atm_obsdatain_suffix: ".tm00.nc"
snow_obsdataroot_path: "{{COMIN_OBS}}"
snow_obsdatain_path: "{{snow_obsdatain_path}}"
snow_obsdatain_prefix: "{{OPREFIX}}"
snow_obsdatain_suffix: ".tm00.bufr_d"

atm_obsdataout_path: "{{atm_obsdataout_path}}"
atm_obsdataout_prefix: diag_
atm_obsdataout_suffix: "_{{ current_cycle | to_YMDH }}.nc"
snow_obsdataout_path: "{{snow_obsdataout_path}}"
snow_obsdataout_prefix: diag_
snow_obsdataout_suffix: "_{{ current_cycle | to_YMDH }}.nc"

# Naming conventions for bias correction files
atm_obsbiasin_path: "{{DATA}}/obs/"
atm_obsbiasin_prefix: "{{GPREFIX}}"
atm_obsbiasin_suffix: ".satbias.nc"
atm_obstlapsein_prefix: "{{GPREFIX}}"
atm_obstlapsein_suffix: ".tlapse.txt"
atm_obsbiascovin_prefix: "{{GPREFIX}}"
atm_obsbiascovin_suffix: ".satbias_cov.nc"

atm_obsbiasout_path: "{{DATA}}/bc/"
atm_obsbiasout_prefix: "{{APREFIX}}"
atm_obsbiasout_suffix: ".satbias.nc"
atm_obsbiascovout_prefix: "{{APREFIX}}"
atm_obsbiascovout_suffix: ".satbias_cov.nc"

snow_obsbiasin_path: "{{DATA}}/obs/"
snow_obsbiasin_prefix: "{{GPREFIX}}"
snow_obsbiasin_suffix: ".satbias.nc"
snow_obstlapsein_prefix: "{{GPREFIX}}"
snow_obstlapsein_suffix: ".tlapse.txt"
snow_obsbiascovin_prefix: "{{GPREFIX}}"
snow_obsbiascovin_suffix: ".satbias_cov.nc"

snow_obsbiasout_path: "{{DATA}}/bc/"
snow_obsbiasout_prefix: "{{APREFIX}}"
snow_obsbiasout_suffix: ".satbias.nc"
snow_obsbiascovout_prefix: "{{APREFIX}}"
snow_obsbiascovout_suffix: ".satbias_cov.nc"

# Ensemble mean things
snow_number_ensemble_members: {{NMEM_ENS}}

# Local Ensemble DA (LETKF)
# -------------------------
Expand All @@ -133,5 +126,5 @@ driver_save_posterior_mean_increment: false
driver_save_posterior_ensemble_increments: true

# Diagnostics
ensemble_increment_prefix: "./anl/mem%{member}%/atminc."
#posterior_output_gaussian: "./mem%{member}%/atmanl."
ensemble_increment_prefix: "./anl/mem%{member}%/snowinc."
#posterior_output_gaussian: "./mem%{member}%/snowanl."
12 changes: 12 additions & 0 deletions parm/snow/jcb-prototype_2dvar.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Algorithm
# ---------
algorithm: 3dvar

# Observation things
# ------------------
observations:
# - adpsfc_snow
- ims_snow
# - ghcn_snow
- sfcsno
- snocvr_snow
66 changes: 0 additions & 66 deletions parm/snow/letkfoi/letkfoi.yaml.j2

This file was deleted.

109 changes: 0 additions & 109 deletions parm/snow/obs/config/adpsfc_snow.yaml.j2

This file was deleted.

Loading

0 comments on commit d9a1af6

Please sign in to comment.