From 34afedcb56a15f5e94ba930e95ebea92b4e3418f Mon Sep 17 00:00:00 2001 From: CoryMartin-NOAA Date: Fri, 18 Oct 2024 15:31:39 +0000 Subject: [PATCH 1/4] start of aero da using jcb --- .../aero/aero_bias_staging.yaml.j2 | 0 algorithm/aero/aero_gen_diagb.yaml.j2 | 0 algorithm/aero/aero_gen_diffusion.yaml.j2 | 0 algorithm/aero/aero_interp_bkg.yaml.j2 | 0 algorithm/aero/aero_obs_staging.yaml.j2 | 0 model/aero/aero_3dvar_outer_loop_1.yaml.j2 | 17 +++++ model/aero/aero_3dvar_outer_loop_2.yaml.j2 | 17 +++++ model/aero/aero_background.yaml.j2 | 10 +++ ..._background_error_static_diffusion.yaml.j2 | 33 ++++++++++ .../aero_final_increment_cubed_sphere.yaml.j2 | 23 +++++++ .../aero_final_increment_gaussian.yaml.j2 | 18 ++++++ model/aero/aero_geometry_background.yaml.j2 | 11 ++++ model/aero/aero_model_pseudo.yaml.j2 | 13 ++++ observations/aero/viirs_n20_aod.yaml.j2 | 63 +++++++++++++++++++ observations/aero/viirs_n21_aod.yaml.j2 | 63 +++++++++++++++++++ observations/aero/viirs_npp_aod.yaml.j2 | 63 +++++++++++++++++++ 16 files changed, 331 insertions(+) rename model/aero/aero_geometry.yaml.j2 => algorithm/aero/aero_bias_staging.yaml.j2 (100%) create mode 100644 algorithm/aero/aero_gen_diagb.yaml.j2 create mode 100644 algorithm/aero/aero_gen_diffusion.yaml.j2 create mode 100644 algorithm/aero/aero_interp_bkg.yaml.j2 create mode 100644 algorithm/aero/aero_obs_staging.yaml.j2 create mode 100644 model/aero/aero_3dvar_outer_loop_1.yaml.j2 create mode 100644 model/aero/aero_3dvar_outer_loop_2.yaml.j2 create mode 100644 model/aero/aero_background.yaml.j2 create mode 100644 model/aero/aero_background_error_static_diffusion.yaml.j2 create mode 100644 model/aero/aero_final_increment_cubed_sphere.yaml.j2 create mode 100644 model/aero/aero_final_increment_gaussian.yaml.j2 create mode 100644 model/aero/aero_geometry_background.yaml.j2 create mode 100644 model/aero/aero_model_pseudo.yaml.j2 create mode 100644 observations/aero/viirs_n20_aod.yaml.j2 create mode 100644 observations/aero/viirs_n21_aod.yaml.j2 create mode 100644 observations/aero/viirs_npp_aod.yaml.j2 diff --git a/model/aero/aero_geometry.yaml.j2 b/algorithm/aero/aero_bias_staging.yaml.j2 similarity index 100% rename from model/aero/aero_geometry.yaml.j2 rename to algorithm/aero/aero_bias_staging.yaml.j2 diff --git a/algorithm/aero/aero_gen_diagb.yaml.j2 b/algorithm/aero/aero_gen_diagb.yaml.j2 new file mode 100644 index 0000000..e69de29 diff --git a/algorithm/aero/aero_gen_diffusion.yaml.j2 b/algorithm/aero/aero_gen_diffusion.yaml.j2 new file mode 100644 index 0000000..e69de29 diff --git a/algorithm/aero/aero_interp_bkg.yaml.j2 b/algorithm/aero/aero_interp_bkg.yaml.j2 new file mode 100644 index 0000000..e69de29 diff --git a/algorithm/aero/aero_obs_staging.yaml.j2 b/algorithm/aero/aero_obs_staging.yaml.j2 new file mode 100644 index 0000000..e69de29 diff --git a/model/aero/aero_3dvar_outer_loop_1.yaml.j2 b/model/aero/aero_3dvar_outer_loop_1.yaml.j2 new file mode 100644 index 0000000..68529a1 --- /dev/null +++ b/model/aero/aero_3dvar_outer_loop_1.yaml.j2 @@ -0,0 +1,17 @@ +- ninner: 35 + gradient norm reduction: 1e-10 + test: on + geometry: + fms initialization: + namelist filename: {{aero_fv3jedi_files_path}}/fmsmpp.nml + field table filename: {{aero_fv3jedi_files_path}}/field_table + akbk: {{aero_fv3jedi_files_path}}/akbk.nc4 + layout: + - {{aero_layout_x}} + - {{aero_layout_y}} + npx: {{aero_npx_anl}} + npy: {{aero_npy_anl}} + npz: {{aero_npz_anl}} + field metadata override: {{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml + diagnostics: + departures: bkgmob diff --git a/model/aero/aero_3dvar_outer_loop_2.yaml.j2 b/model/aero/aero_3dvar_outer_loop_2.yaml.j2 new file mode 100644 index 0000000..7ca1a03 --- /dev/null +++ b/model/aero/aero_3dvar_outer_loop_2.yaml.j2 @@ -0,0 +1,17 @@ +- ninner: 35 + gradient norm reduction: 1e-10 + test: on + geometry: + fms initialization: + namelist filename: {{aero_fv3jedi_files_path}}/fmsmpp.nml + field table filename: {{aero_fv3jedi_files_path}}/field_table + akbk: {{aero_fv3jedi_files_path}}/akbk.nc4 + layout: + - {{aero_layout_x}} + - {{aero_layout_y}} + npx: {{aero_npx_anl}} + npy: {{aero_npy_anl}} + npz: {{aero_npz_anl}} + field metadata override: {{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml + diagnostics: + departures: bkgmob1 diff --git a/model/aero/aero_background.yaml.j2 b/model/aero/aero_background.yaml.j2 new file mode 100644 index 0000000..2c44489 --- /dev/null +++ b/model/aero/aero_background.yaml.j2 @@ -0,0 +1,10 @@ +datapath: {{ aero_background_path }} +filetype: fms restart +datetime: '{{ aero_background_time_iso }}' +filename is datetime templated: true +filename_core: '%yyyy%mm%dd.%hh%MM%ss.fv_core.res.nc' +filename_trcr: '%yyyy%mm%dd.%hh%MM%ss.fv_tracer.res.nc' +filename_cplr: '%yyyy%mm%dd.%hh%MM%ss.coupler.res' +state variables: [t,delp,sphum,so4,bc1,bc2,oc1,oc2, + dust1,dust2,dust3,dust4,dust5, + seas1,seas2,seas3,seas4] \ No newline at end of file diff --git a/model/aero/aero_background_error_static_diffusion.yaml.j2 b/model/aero/aero_background_error_static_diffusion.yaml.j2 new file mode 100644 index 0000000..73af01b --- /dev/null +++ b/model/aero/aero_background_error_static_diffusion.yaml.j2 @@ -0,0 +1,33 @@ +covariance model: SABER +saber central block: + saber block name: diffusion + read: + groups: + - variables: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] + horizontal: + filepath: "{{aero_berror_data_directory}}/diffusion_hz" + vertical: + levels: {{aero_npz_anl}} + filepath: "{{aero_berror_data_directory}}/diffusion_vt" +saber outer blocks: +- saber block name: StdDev + read: + model file: + datetime: "{{ aero_cycle_time_iso }}" + set datetime on read: true + filetype: fms restart + psinfile: true + datapath: "{{aero_berror_data_directory}}" + filename_core: '{{ aero_cycle_time_fv3 }}.stddev.fv_core.res.nc' + filename_trcr: '{{ aero_cycle_time_fv3 }}.stddev.fv_tracer.res.nc' + filename_cplr: '{{ aero_cycle_time_fv3 }}.stddev.coupler.res' + date: "{{ aero_cycle_time_iso }}" diff --git a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 new file mode 100644 index 0000000..8df9f72 --- /dev/null +++ b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 @@ -0,0 +1,23 @@ +geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{aero_layout_x}} + - {{aero_layout_y}} + npx: {{aero_npx_anl}} + npy: {{aero_npy_anl}} + npz: {{aero_npz_anl}} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" +output: + state component: + datapath: ./anl + prefix: aeroinc + filetype: fms restart + filename_core: '{{ aero_cycle_time_fv3 }}.fv_core.res.nc' + filename_trcr: '{{ aero_cycle_time_fv3 }}.fv_tracer.res.nc' + filename_cplr: '{{ aero_cycle_time_fv3 }}.coupler.res' + state variables: [t,delp,sphum,so4,bc1,bc2,oc1,oc2, + dust1,dust2,dust3,dust4,dust5, + seas1,seas2,seas3,seas4] \ No newline at end of file diff --git a/model/aero/aero_final_increment_gaussian.yaml.j2 b/model/aero/aero_final_increment_gaussian.yaml.j2 new file mode 100644 index 0000000..78f57a2 --- /dev/null +++ b/model/aero/aero_final_increment_gaussian.yaml.j2 @@ -0,0 +1,18 @@ +grid type: regular gaussian +local interpolator type: atlas interpolator +interpolation method: + type: finite-element +number of latitude gridpoints: {{ aero_npy_ges - 1 }} +variables to output: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] +all model levels: true +datapath: ./anl +prefix: aeroinc_gauss \ No newline at end of file diff --git a/model/aero/aero_geometry_background.yaml.j2 b/model/aero/aero_geometry_background.yaml.j2 new file mode 100644 index 0000000..834e2fc --- /dev/null +++ b/model/aero/aero_geometry_background.yaml.j2 @@ -0,0 +1,11 @@ +fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" +akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" +layout: +- {{aero_layout_x}} +- {{aero_layout_y}} +npx: {{aero_npx_ges}} +npy: {{aero_npy_ges}} +npz: {{aero_npz_ges}} +field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" diff --git a/model/aero/aero_model_pseudo.yaml.j2 b/model/aero/aero_model_pseudo.yaml.j2 new file mode 100644 index 0000000..61af8db --- /dev/null +++ b/model/aero/aero_model_pseudo.yaml.j2 @@ -0,0 +1,13 @@ +name: PSEUDO +datapath: {{ aero_background_path}} +filetype: fms restart +filename is datetime templated: true +filename_core: '%yyyy%mm%dd.%hh%MM%ss.fv_core.res.nc' +filename_trcr: '%yyyy%mm%dd.%hh%MM%ss.fv_tracer.res.nc' +filename_sfcd: '%yyyy%mm%dd.%hh%MM%ss.sfc_data.nc' +filename_sfcw: '%yyyy%mm%dd.%hh%MM%ss.fv_srf_wnd.res.nc' +filename_cplr: '%yyyy%mm%dd.%hh%MM%ss.coupler.res' +tstep: {{aero_forecast_timestep}} +model variables: [t,delp,sphum,so4,bc1,bc2,oc1,oc2, + dust1,dust2,dust3,dust4,dust5, + seas1,seas2,seas3,seas4] diff --git a/observations/aero/viirs_n20_aod.yaml.j2 b/observations/aero/viirs_n20_aod.yaml.j2 new file mode 100644 index 0000000..5ef6aca --- /dev/null +++ b/observations/aero/viirs_n20_aod.yaml.j2 @@ -0,0 +1,63 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: viirs_n20_aod + obsdatain: + engine: + type: H5File + obsfile: "{{aero_obsdatain_path}}/{{aero_obsdatain_prefix}}{{observation_from_jcb}}{{aero_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{aero_obsdataout_path}}/{{aero_obsdataout_prefix}}{{observation_from_jcb}}{{aero_obsdataout_suffix}}" + io pool: + max pool size: 1 + simulated variables: [aerosolOpticalDepth] + channels: 4 + + # Observation Operator + # -------------------- + get values: + interpolation method: barycentric + time interpolation: linear + obs operator: + name: AodCRTM + Absorbers: [H2O,O3] + obs options: + Sensor_ID: &{{observation_from_jcb}}_sensor_id v.viirs-m_j1 + EndianType: little_endian + AerosolOption: aerosols_gocart_default + CoefficientPath: "{{crtm_coefficient_path}}" + obs error: + covariance model: diagonal + + # Observation Bias Correction (VarBC) + # ----------------------------------- + + # Observation Filters (QC) + # ------------------------ + obs filters: + - filter: PreQC + maxvalue: 1 + - filter: Domain Check + where: + - variable: + name: latitude@MetaData + minvalue: -60 + maxvalue: 60 + - filter: Bounds Check + filter variables: + - name: aerosolOpticalDepth + channels: 4 + minvalue: 0 + maxvalue: 4.9 + action: + name: reject + - filter: Background Check + channels: 4 + threshold: 3.0 + action: + name: inflate error + inflation factor: 3.0 diff --git a/observations/aero/viirs_n21_aod.yaml.j2 b/observations/aero/viirs_n21_aod.yaml.j2 new file mode 100644 index 0000000..9ea4140 --- /dev/null +++ b/observations/aero/viirs_n21_aod.yaml.j2 @@ -0,0 +1,63 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: viirs_n21_aod + obsdatain: + engine: + type: H5File + obsfile: "{{aero_obsdatain_path}}/{{aero_obsdatain_prefix}}{{observation_from_jcb}}{{aero_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{aero_obsdataout_path}}/{{aero_obsdataout_prefix}}{{observation_from_jcb}}{{aero_obsdataout_suffix}}" + io pool: + max pool size: 1 + simulated variables: [aerosolOpticalDepth] + channels: 4 + + # Observation Operator + # -------------------- + get values: + interpolation method: barycentric + time interpolation: linear + obs operator: + name: AodCRTM + Absorbers: [H2O,O3] + obs options: + Sensor_ID: &{{observation_from_jcb}}_sensor_id v.viirs-m_j2 + EndianType: little_endian + AerosolOption: aerosols_gocart_default + CoefficientPath: "{{crtm_coefficient_path}}" + obs error: + covariance model: diagonal + + # Observation Bias Correction (VarBC) + # ----------------------------------- + + # Observation Filters (QC) + # ------------------------ + obs filters: + - filter: PreQC + maxvalue: 1 + - filter: Domain Check + where: + - variable: + name: latitude@MetaData + minvalue: -60 + maxvalue: 60 + - filter: Bounds Check + filter variables: + - name: aerosolOpticalDepth + channels: 4 + minvalue: 0 + maxvalue: 4.9 + action: + name: reject + - filter: Background Check + channels: 4 + threshold: 3.0 + action: + name: inflate error + inflation factor: 3.0 diff --git a/observations/aero/viirs_npp_aod.yaml.j2 b/observations/aero/viirs_npp_aod.yaml.j2 new file mode 100644 index 0000000..57cad00 --- /dev/null +++ b/observations/aero/viirs_npp_aod.yaml.j2 @@ -0,0 +1,63 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: viirs_npp_aod + obsdatain: + engine: + type: H5File + obsfile: "{{aero_obsdatain_path}}/{{aero_obsdatain_prefix}}{{observation_from_jcb}}{{aero_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{aero_obsdataout_path}}/{{aero_obsdataout_prefix}}{{observation_from_jcb}}{{aero_obsdataout_suffix}}" + io pool: + max pool size: 1 + simulated variables: [aerosolOpticalDepth] + channels: 4 + + # Observation Operator + # -------------------- + get values: + interpolation method: barycentric + time interpolation: linear + obs operator: + name: AodCRTM + Absorbers: [H2O,O3] + obs options: + Sensor_ID: &{{observation_from_jcb}}_sensor_id v.viirs-m_npp + EndianType: little_endian + AerosolOption: aerosols_gocart_default + CoefficientPath: "{{crtm_coefficient_path}}" + obs error: + covariance model: diagonal + + # Observation Bias Correction (VarBC) + # ----------------------------------- + + # Observation Filters (QC) + # ------------------------ + obs filters: + - filter: PreQC + maxvalue: 1 + - filter: Domain Check + where: + - variable: + name: latitude@MetaData + minvalue: -60 + maxvalue: 60 + - filter: Bounds Check + filter variables: + - name: aerosolOpticalDepth + channels: 4 + minvalue: 0 + maxvalue: 4.9 + action: + name: reject + - filter: Background Check + channels: 4 + threshold: 3.0 + action: + name: inflate error + inflation factor: 3.0 From 9c8d0851331f1a0431726f3a9ce00557456a5bc7 Mon Sep 17 00:00:00 2001 From: CoryMartin-NOAA Date: Mon, 21 Oct 2024 20:00:54 +0000 Subject: [PATCH 2/4] Working with JCB for aerosol DA --- algorithm/aero/aero_bias_staging.yaml.j2 | 0 .../aero/aero_convert_background.yaml.j2 | 48 +++++++++++ algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 | 81 +++++++++++++++++++ .../aero/aero_gen_bmatrix_diffusion.yaml.j2 | 48 +++++++++++ algorithm/aero/aero_gen_diagb.yaml.j2 | 0 algorithm/aero/aero_gen_diffusion.yaml.j2 | 0 algorithm/aero/aero_interp_bkg.yaml.j2 | 0 algorithm/aero/aero_obs_staging.yaml.j2 | 0 model/aero/aero_3dfgat_outer_loop_1.yaml.j2 | 1 + model/aero/aero_3dfgat_outer_loop_2.yaml.j2 | 1 + 10 files changed, 179 insertions(+) delete mode 100644 algorithm/aero/aero_bias_staging.yaml.j2 create mode 100644 algorithm/aero/aero_convert_background.yaml.j2 create mode 100644 algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 create mode 100644 algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 delete mode 100644 algorithm/aero/aero_gen_diagb.yaml.j2 delete mode 100644 algorithm/aero/aero_gen_diffusion.yaml.j2 delete mode 100644 algorithm/aero/aero_interp_bkg.yaml.j2 delete mode 100644 algorithm/aero/aero_obs_staging.yaml.j2 create mode 120000 model/aero/aero_3dfgat_outer_loop_1.yaml.j2 create mode 120000 model/aero/aero_3dfgat_outer_loop_2.yaml.j2 diff --git a/algorithm/aero/aero_bias_staging.yaml.j2 b/algorithm/aero/aero_bias_staging.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/algorithm/aero/aero_convert_background.yaml.j2 b/algorithm/aero/aero_convert_background.yaml.j2 new file mode 100644 index 0000000..6438153 --- /dev/null +++ b/algorithm/aero/aero_convert_background.yaml.j2 @@ -0,0 +1,48 @@ +input geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_ges }} + npy: {{ aero_npy_ges }} + npz: {{ aero_npz_ges }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" +output geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_anl }} + npy: {{ aero_npy_anl }} + npz: {{ aero_npz_anl }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" +states: +- input: + datetime: '{{ aero_background_error_time_iso }}' + filetype: fms restart + state variables: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] + datapath: ./bkg + filename_core: '{{ aero_background_error_time_fv3 }}.fv_core.res.nc' + filename_trcr: '{{ aero_background_error_time_fv3 }}.fv_tracer.res.nc' + filename_cplr: '{{ aero_background_error_time_fv3 }}.coupler.res' + output: + filetype: fms restart + datapath: ./bkg + filename_core: 'anlres.fv_core.res.nc' + filename_trcr: 'anlres.fv_tracer.res.nc' + filename_cplr: 'anlres.coupler.res' \ No newline at end of file diff --git a/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 new file mode 100644 index 0000000..a4496d9 --- /dev/null +++ b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 @@ -0,0 +1,81 @@ +geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_anl }} + npy: {{ aero_npy_anl }} + npz: {{ aero_npz_anl }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" +date: '{{ aero_background_error_time_iso }}' +background: + datetime: '{{ aero_background_error_time_iso }}' + filetype: fms restart + state variables: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] + datapath: ./bkg + filename_core: '{{ aero_background_error_time_fv3 }}.anlres.fv_core.res.nc' + filename_trcr: '{{ aero_background_error_time_fv3 }}.anlres.fv_tracer.res.nc' + filename_cplr: '{{ aero_background_error_time_fv3 }}.anlres.coupler.res' +background error: + filetype: fms restart + datapath: ./stddev + filename_trcr: stddev.fv_tracer.res.nc + filename_cplr: stddev.coupler.res + +climate background error: + geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_clim_b }} + npy: {{ aero_npy_clim_b }} + npz: {{ aero_npz_clim_b }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" + climate background error stddev: + filetype: fms restart + skip coupler file: true + datapath: ./clm_stddev + filename_trcr: stddev.fv_tracer.res.nc + filename_cplr: stddev.coupler.res + diagb weight: {{ aero_diagb_weight }} + staticb rescaling factor: {{ aero_diagb_static_rescale_factor }} + +variables: + name: + - mass_fraction_of_sulfate_in_air + - mass_fraction_of_hydrophobic_black_carbon_in_air + - mass_fraction_of_hydrophilic_black_carbon_in_air + - mass_fraction_of_hydrophobic_organic_carbon_in_air + - mass_fraction_of_hydrophilic_organic_carbon_in_air + - mass_fraction_of_dust001_in_air + - mass_fraction_of_dust002_in_air + - mass_fraction_of_dust003_in_air + - mass_fraction_of_dust004_in_air + - mass_fraction_of_dust005_in_air + - mass_fraction_of_sea_salt001_in_air + - mass_fraction_of_sea_salt002_in_air + - mass_fraction_of_sea_salt003_in_air + - mass_fraction_of_sea_salt004_in_air + +rescale: {{ aero_diagb_rescale_factor }} # rescales the filtered std. dev. by "rescale" +number of halo points: {{ aero_diagb_n_halo }} +number of neighbors: {{ aero_diagb_n_neighbors }} +simple smoothing: + horizontal iterations: {{ aero_diagb_smooth_horiz_iter }} + vertical iterations: {{ aero_diagb_smooth_vert_iter }} diff --git a/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 new file mode 100644 index 0000000..949a27b --- /dev/null +++ b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 @@ -0,0 +1,48 @@ +geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_anl }} + npy: {{ aero_npy_anl }} + npz: {{ aero_npz_anl }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" +date: '{{ aero_background_error_time_iso }}' +background: + datetime: '{{ aero_background_error_time_iso }}' + filetype: fms restart + state variables: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] + datapath: ./bkg + filename_core: '{{ aero_background_error_time_fv3 }}.anlres.fv_core.res.nc' + filename_trcr: '{{ aero_background_error_time_fv3 }}.anlres.fv_tracer.res.nc' + filename_cplr: '{{ aero_background_error_time_fv3 }}.anlres.coupler.res' +background error: + covariance model: SABER + saber central block: + saber block name: diffusion + calibration: + normalization: + iterations: {{ aero_diffusion_iter }} + groups: + - horizontal: + fixed value: {{ aero_diffusion_horiz_len }} + write: + filepath: "{{ aero_berror_diffusion_directory }}/diffusion_hz" + - vertical: + levels: {{ aero_npz_ges }} + fixed value: {{ aero_diffusion_fixed_val }} + as gaussian: true + write: + filepath: "{{ aero_berror_diffusion_directory }}/diffusion_vt" \ No newline at end of file diff --git a/algorithm/aero/aero_gen_diagb.yaml.j2 b/algorithm/aero/aero_gen_diagb.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/algorithm/aero/aero_gen_diffusion.yaml.j2 b/algorithm/aero/aero_gen_diffusion.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/algorithm/aero/aero_interp_bkg.yaml.j2 b/algorithm/aero/aero_interp_bkg.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/algorithm/aero/aero_obs_staging.yaml.j2 b/algorithm/aero/aero_obs_staging.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/model/aero/aero_3dfgat_outer_loop_1.yaml.j2 b/model/aero/aero_3dfgat_outer_loop_1.yaml.j2 new file mode 120000 index 0000000..be2ee77 --- /dev/null +++ b/model/aero/aero_3dfgat_outer_loop_1.yaml.j2 @@ -0,0 +1 @@ +aero_3dvar_outer_loop_1.yaml.j2 \ No newline at end of file diff --git a/model/aero/aero_3dfgat_outer_loop_2.yaml.j2 b/model/aero/aero_3dfgat_outer_loop_2.yaml.j2 new file mode 120000 index 0000000..d029b98 --- /dev/null +++ b/model/aero/aero_3dfgat_outer_loop_2.yaml.j2 @@ -0,0 +1 @@ +aero_3dvar_outer_loop_2.yaml.j2 \ No newline at end of file From 050162cb07baaf4eb0003b580074d010671db57d Mon Sep 17 00:00:00 2001 From: CoryMartin-NOAA Date: Mon, 21 Oct 2024 20:08:37 +0000 Subject: [PATCH 3/4] Fix EOLs --- algorithm/aero/aero_convert_background.yaml.j2 | 2 +- algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 | 14 +++++++------- model/aero/aero_background.yaml.j2 | 2 +- .../aero/aero_final_increment_cubed_sphere.yaml.j2 | 2 +- model/aero/aero_final_increment_gaussian.yaml.j2 | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/algorithm/aero/aero_convert_background.yaml.j2 b/algorithm/aero/aero_convert_background.yaml.j2 index 6438153..4ccee63 100644 --- a/algorithm/aero/aero_convert_background.yaml.j2 +++ b/algorithm/aero/aero_convert_background.yaml.j2 @@ -45,4 +45,4 @@ states: datapath: ./bkg filename_core: 'anlres.fv_core.res.nc' filename_trcr: 'anlres.fv_tracer.res.nc' - filename_cplr: 'anlres.coupler.res' \ No newline at end of file + filename_cplr: 'anlres.coupler.res' diff --git a/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 index 949a27b..59f05e0 100644 --- a/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 +++ b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 @@ -30,19 +30,19 @@ background: filename_cplr: '{{ aero_background_error_time_fv3 }}.anlres.coupler.res' background error: covariance model: SABER - saber central block: + saber central block: saber block name: diffusion calibration: normalization: - iterations: {{ aero_diffusion_iter }} + iterations: {{ aero_diffusion_iter }} groups: - horizontal: - fixed value: {{ aero_diffusion_horiz_len }} + fixed value: {{ aero_diffusion_horiz_len }} write: - filepath: "{{ aero_berror_diffusion_directory }}/diffusion_hz" + filepath: "{{ aero_berror_diffusion_directory }}/diffusion_hz" - vertical: - levels: {{ aero_npz_ges }} - fixed value: {{ aero_diffusion_fixed_val }} + levels: {{ aero_npz_ges }} + fixed value: {{ aero_diffusion_fixed_val }} as gaussian: true write: - filepath: "{{ aero_berror_diffusion_directory }}/diffusion_vt" \ No newline at end of file + filepath: "{{ aero_berror_diffusion_directory }}/diffusion_vt" diff --git a/model/aero/aero_background.yaml.j2 b/model/aero/aero_background.yaml.j2 index 2c44489..012c50d 100644 --- a/model/aero/aero_background.yaml.j2 +++ b/model/aero/aero_background.yaml.j2 @@ -7,4 +7,4 @@ filename_trcr: '%yyyy%mm%dd.%hh%MM%ss.fv_tracer.res.nc' filename_cplr: '%yyyy%mm%dd.%hh%MM%ss.coupler.res' state variables: [t,delp,sphum,so4,bc1,bc2,oc1,oc2, dust1,dust2,dust3,dust4,dust5, - seas1,seas2,seas3,seas4] \ No newline at end of file + seas1,seas2,seas3,seas4] diff --git a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 index 8df9f72..e3930a4 100644 --- a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 +++ b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 @@ -20,4 +20,4 @@ output: filename_cplr: '{{ aero_cycle_time_fv3 }}.coupler.res' state variables: [t,delp,sphum,so4,bc1,bc2,oc1,oc2, dust1,dust2,dust3,dust4,dust5, - seas1,seas2,seas3,seas4] \ No newline at end of file + seas1,seas2,seas3,seas4] diff --git a/model/aero/aero_final_increment_gaussian.yaml.j2 b/model/aero/aero_final_increment_gaussian.yaml.j2 index 78f57a2..aa77242 100644 --- a/model/aero/aero_final_increment_gaussian.yaml.j2 +++ b/model/aero/aero_final_increment_gaussian.yaml.j2 @@ -1,4 +1,4 @@ -grid type: regular gaussian +grid type: regular gaussian local interpolator type: atlas interpolator interpolation method: type: finite-element @@ -15,4 +15,4 @@ variables to output: [mass_fraction_of_sulfate_in_air, mass_fraction_of_sea_salt004_in_air] all model levels: true datapath: ./anl -prefix: aeroinc_gauss \ No newline at end of file +prefix: aeroinc_gauss From 26f4344ce60c7a274fa35a8e861118d5d526b5c0 Mon Sep 17 00:00:00 2001 From: CoryMartin-NOAA Date: Tue, 22 Oct 2024 14:11:00 +0000 Subject: [PATCH 4/4] address reviewer comments --- algorithm/aero/aero_convert_background.yaml.j2 | 4 ++-- algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 | 6 +++--- algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 | 2 +- model/aero/aero_final_increment_cubed_sphere.yaml.j2 | 2 +- model/aero/aero_final_increment_gaussian.yaml.j2 | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/algorithm/aero/aero_convert_background.yaml.j2 b/algorithm/aero/aero_convert_background.yaml.j2 index 4ccee63..0a1344f 100644 --- a/algorithm/aero/aero_convert_background.yaml.j2 +++ b/algorithm/aero/aero_convert_background.yaml.j2 @@ -36,13 +36,13 @@ states: mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, mass_fraction_of_sea_salt004_in_air] - datapath: ./bkg + datapath: {{ aero_background_path }} filename_core: '{{ aero_background_error_time_fv3 }}.fv_core.res.nc' filename_trcr: '{{ aero_background_error_time_fv3 }}.fv_tracer.res.nc' filename_cplr: '{{ aero_background_error_time_fv3 }}.coupler.res' output: filetype: fms restart - datapath: ./bkg + datapath: {{ aero_background_path }} filename_core: 'anlres.fv_core.res.nc' filename_trcr: 'anlres.fv_tracer.res.nc' filename_cplr: 'anlres.coupler.res' diff --git a/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 index a4496d9..d1f3eda 100644 --- a/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 +++ b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 @@ -24,13 +24,13 @@ background: mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, mass_fraction_of_sea_salt004_in_air] - datapath: ./bkg + datapath: {{ aero_background_path }} filename_core: '{{ aero_background_error_time_fv3 }}.anlres.fv_core.res.nc' filename_trcr: '{{ aero_background_error_time_fv3 }}.anlres.fv_tracer.res.nc' filename_cplr: '{{ aero_background_error_time_fv3 }}.anlres.coupler.res' background error: filetype: fms restart - datapath: ./stddev + datapath: {{ aero_standard_deviation_path }} filename_trcr: stddev.fv_tracer.res.nc filename_cplr: stddev.coupler.res @@ -50,7 +50,7 @@ climate background error: climate background error stddev: filetype: fms restart skip coupler file: true - datapath: ./clm_stddev + datapath: {{ aero_climatological_b_path }} filename_trcr: stddev.fv_tracer.res.nc filename_cplr: stddev.coupler.res diagb weight: {{ aero_diagb_weight }} diff --git a/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 index 59f05e0..0462daa 100644 --- a/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 +++ b/algorithm/aero/aero_gen_bmatrix_diffusion.yaml.j2 @@ -24,7 +24,7 @@ background: mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, mass_fraction_of_sea_salt004_in_air] - datapath: ./bkg + datapath: {{ aero_background_path }} filename_core: '{{ aero_background_error_time_fv3 }}.anlres.fv_core.res.nc' filename_trcr: '{{ aero_background_error_time_fv3 }}.anlres.fv_tracer.res.nc' filename_cplr: '{{ aero_background_error_time_fv3 }}.anlres.coupler.res' diff --git a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 index e3930a4..e34a7fc 100644 --- a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 +++ b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 @@ -12,7 +12,7 @@ geometry: field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" output: state component: - datapath: ./anl + datapath: {{ aero_analysis_path }} prefix: aeroinc filetype: fms restart filename_core: '{{ aero_cycle_time_fv3 }}.fv_core.res.nc' diff --git a/model/aero/aero_final_increment_gaussian.yaml.j2 b/model/aero/aero_final_increment_gaussian.yaml.j2 index aa77242..97ffc8d 100644 --- a/model/aero/aero_final_increment_gaussian.yaml.j2 +++ b/model/aero/aero_final_increment_gaussian.yaml.j2 @@ -14,5 +14,5 @@ variables to output: [mass_fraction_of_sulfate_in_air, mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, mass_fraction_of_sea_salt004_in_air] all model levels: true -datapath: ./anl +datapath: {{ aero_analysis_path }} prefix: aeroinc_gauss