From f9d18a67d6487d45676cfbf92f43858c5266bb0d Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 10:26:30 -0700 Subject: [PATCH 01/11] deprecate horizfilt/vertconv --- src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc | 2 +- src/soca/LinearVariableChange/VertConv/VertConv.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc b/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc index f5720830a..02fc85815 100644 --- a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc +++ b/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc @@ -26,7 +26,7 @@ namespace soca { // ----------------------------------------------------------------------------- static LinearVariableChangeMaker - makerLinearVariableChangeHorizFilt_("HorizFiltSOCA"); + makerLinearVariableChangeHorizFilt_("DEPRECATED_HorizFiltSOCA"); // ----------------------------------------------------------------------------- HorizFilt::HorizFilt(const State & bkg, diff --git a/src/soca/LinearVariableChange/VertConv/VertConv.cc b/src/soca/LinearVariableChange/VertConv/VertConv.cc index 3f38ff15b..41466a309 100644 --- a/src/soca/LinearVariableChange/VertConv/VertConv.cc +++ b/src/soca/LinearVariableChange/VertConv/VertConv.cc @@ -27,7 +27,7 @@ namespace soca { // --------------------------------------------------------------------------- static LinearVariableChangeMaker - makerLinearVariableCHangeVertConv_("VertConvSOCA"); + makerLinearVariableCHangeVertConv_("DEPRECATED_VertConvSOCA"); // --------------------------------------------------------------------------- VertConv::VertConv(const State & bkg, From 8e6ce6a16ab57969ffe50feb3c969df059eb3dbf Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 10:27:55 -0700 Subject: [PATCH 02/11] remove old tests --- test/CMakeLists.txt | 19 --------- test/testinput/dirac_horizfilt.yml | 58 -------------------------- test/testinput/varchange_horizfilt.yml | 25 ----------- test/testinput/varchange_vertconv.yml | 25 ----------- test/testref/dirac_horizfilt.test | 20 --------- 5 files changed, 147 deletions(-) delete mode 100644 test/testinput/dirac_horizfilt.yml delete mode 100644 test/testinput/varchange_horizfilt.yml delete mode 100644 test/testinput/varchange_vertconv.yml delete mode 100644 test/testref/dirac_horizfilt.test diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7603a46d8..e45069c96 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -22,7 +22,6 @@ set( soca_test_input testinput/convertstate.yml testinput/diffstates.yml testinput/dirac_diffusion.yml - testinput/dirac_horizfilt.yml testinput/dirac_mlbalance.yml testinput/dirac_soca_cor_nicas_scales.yml testinput/dirac_soca_cov.yml @@ -86,8 +85,6 @@ set( soca_test_input testinput/varchange_bkgerrgodas.yml testinput/varchange_bkgerrsoca.yml testinput/varchange_bkgerrsoca_stddev.yml - testinput/varchange_horizfilt.yml - testinput/varchange_vertconv.yml ) set( soca_test_ref @@ -114,7 +111,6 @@ set( soca_test_ref testref/convertstate.test testref/diffstates.test testref/dirac_diffusion.test - testref/dirac_horizfilt.test testref/dirac_soca_cor_nicas_scales.test testref/dirac_soca_cov.test testref/dirac_soca_mask.test @@ -404,11 +400,6 @@ soca_add_test( NAME varchange_bkgerrfilt SRC TestVariableChange.cc TEST_DEPENDS test_soca_gridgen ) -soca_add_test( NAME varchange_horizfilt - SRC TestVariableChange.cc - NOTRAPFPE - TEST_DEPENDS test_soca_gridgen ) - soca_add_test( NAME varchange_bkgerrsoca SRC TestVariableChange.cc TEST_DEPENDS test_soca_gridgen ) @@ -421,11 +412,6 @@ soca_add_test( NAME varchange_bkgerrgodas SRC TestVariableChange.cc TEST_DEPENDS test_soca_gridgen ) -soca_add_test( NAME varchange_vertconv - SRC TestVariableChange.cc - TEST_DEPENDS test_soca_gridgen ) - - # Observation localization methods #--------------------------------------------------------------------------------------------------- soca_add_test( NAME obslocalization @@ -606,11 +592,6 @@ soca_add_test( NAME dirac_socahyb_cov test_soca_static_socaerror_init test_soca_parameters_bump_loc) -soca_add_test( NAME dirac_horizfilt - EXE soca_error_covariance_toolbox.x - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init) - soca_add_test( NAME dirac_soca_mask EXE soca_error_covariance_toolbox.x NOTRAPFPE diff --git a/test/testinput/dirac_horizfilt.yml b/test/testinput/dirac_horizfilt.yml deleted file mode 100644 index 709253ebd..000000000 --- a/test/testinput/dirac_horizfilt.yml +++ /dev/null @@ -1,58 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - date: &date 2018-04-15T00:00:00Z - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &soca_vars [cicen, hicen, socn, tocn, ssh, hocn, mld, layer_depth] - -background error: - covariance model: SocaError - analysis variables: [none] - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [] - - name: ice - variables: [] - - linear variable change: - - input variables: *soca_vars - output variables: *soca_vars - - linear variable changes: - - linear variable change name: HorizFiltSOCA - niter: 2 - scale_dist: 1000e3 - scale_flow: 1.0 - filter variables: [tocn, socn, ssh, cicen, hicen] - input variables: *soca_vars - output variables: *soca_vars - -dirac: - ixdir: [1, 17, 41, 31, 51, 63, 81, 14, 16, 43] - iydir: [8, 21, 19, 33, 29, 26, 16, 41, 5, 43] - izdir: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - ifdir: [1, 2, 3, 3, 3, 3, 3, 3, 4, 5] - -output dirac: - datadir: data_generated/dirac_horizfilt - date: *date - exp: dirac_horizfilt_%id% - type: an - -test: - reference filename: testref/dirac_horizfilt.test - test output filename: testoutput/dirac_horizfilt.test \ No newline at end of file diff --git a/test/testinput/varchange_horizfilt.yml b/test/testinput/varchange_horizfilt.yml deleted file mode 100644 index ae584d215..000000000 --- a/test/testinput/varchange_horizfilt.yml +++ /dev/null @@ -1,25 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - date: 2018-04-15T00:00:00Z - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &soca_vars [cicen, hicen, socn, tocn, uocn, vocn, ssh, hocn] - -linear variable change tests: -- tolerance inverse: 1e-12 - test inverse: 0 - linear variable change: - input variables: *soca_vars - output variables: *soca_vars - linear variable changes: - - linear variable change name: HorizFiltSOCA - niter: 3 - scale_flow: 0.5 - scale_dist: 1e6 - filter variables: *soca_vars diff --git a/test/testinput/varchange_vertconv.yml b/test/testinput/varchange_vertconv.yml deleted file mode 100644 index acb7b5895..000000000 --- a/test/testinput/varchange_vertconv.yml +++ /dev/null @@ -1,25 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - date: &date 2018-04-15T00:00:00Z - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &soca_vars [cicen, hicen, socn, tocn, uocn, vocn, ssh, hocn, mld, layer_depth] - -linear variable change tests: -- tolerance inverse: 1e-12 - test inverse: 0 - linear variable change: - input variables: *soca_vars - output variables: *soca_vars - linear variable changes: - - linear variable change name: VertConvSOCA - Lz_min: 10.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 diff --git a/test/testref/dirac_horizfilt.test b/test/testref/dirac_horizfilt.test deleted file mode 100644 index 644274907..000000000 --- a/test/testref/dirac_horizfilt.test +++ /dev/null @@ -1,20 +0,0 @@ -Input Dirac increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=1.0000000000000000 mean=0.0006086427267194 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=1.0000000000000000 mean=0.0000243457090688 - tocn min=0.0000000000000000 max=1.0000000000000000 mean=0.0000243457090688 - ssh min=0.0000000000000000 max=1.0000000000000000 mean=0.0018259281801582 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -Covariance(SocaError) * Increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=0.0706209843078967 mean=0.0006196773314960 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=0.0612176275842096 mean=0.0000243884350009 - tocn min=0.0000000000000000 max=0.0650411300919666 mean=0.0000235579338913 - ssh min=0.0000000000000000 max=0.4761893337418804 mean=0.0018541991132237 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 From 017e7a7285205b2fdbc6acf879d338cea9a658af Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 11:32:15 -0700 Subject: [PATCH 03/11] remove 3dvar_godas --- test/CMakeLists.txt | 12 +- test/testinput/3dvar_diffusion.yml | 18 +- test/testinput/3dvar_godas.yml | 279 ---------------------- test/testinput/addincrement.yml | 6 +- test/testinput/checkpointmodel.yml | 4 +- test/testinput/convertincrement.yml | 4 +- test/testinput/convertstate_soca2cice.yml | 6 +- test/testref/3dvar_godas.test | 44 ---- test/testref/addincrement.test | 8 +- test/testref/checkpointmodel.test | 8 +- test/testref/convertincrement.test | 12 +- 11 files changed, 38 insertions(+), 363 deletions(-) delete mode 100644 test/testinput/3dvar_godas.yml delete mode 100644 test/testref/3dvar_godas.test diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e45069c96..9921b770e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,7 +3,6 @@ set( soca_test_input testinput/3dhyb_diffusion.yml testinput/3dhybfgat.yml testinput/3dvar_diffusion.yml - testinput/3dvar_godas.yml testinput/3dvar_single_ob.yml testinput/3dvar_soca.yml testinput/3dvar_zero_ob.yml @@ -92,7 +91,6 @@ set( soca_test_ref testref/3dhyb_diffusion.test testref/3dhybfgat.test testref/3dvar_diffusion.test - testref/3dvar_godas.test testref/3dvar_single_ob.test testref/3dvar_soca.test testref/3dvar_zero_ob.test @@ -765,27 +763,27 @@ soca_add_test( NAME letkf_split_solver test_soca_letkf_split_observer ) -# other executables that depends on increments from 3dvar_godas run +# other executables that depends on increments from 3dvar_diffusion run #--------------------------------------------------------------------------------------------------- soca_add_test( NAME addincrement EXE soca_addincrement.x TEST_DEPENDS test_soca_gridgen - 3dvar_godas ) + test_soca_3dvar_diffusion ) # Remapping MOM6 (horiz+vertical interpolation) soca_add_test( NAME convertincrement EXE soca_convertincrement.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - 3dvar_godas ) + test_soca_3dvar_diffusion ) # restart checkpointing soca_add_test( NAME checkpointmodel EXE soca_checkpoint_model.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_godas) + test_soca_3dvar_diffusion) if( ${icepack_FOUND} ) # Apply the Soca2Cice nonlinear change of variable @@ -797,5 +795,5 @@ if( ${icepack_FOUND} ) MPI 2 NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_godas) + test_soca_3dvar_diffusion) endif() diff --git a/test/testinput/3dvar_diffusion.yml b/test/testinput/3dvar_diffusion.yml index 6fc947d37..b3d9708c3 100644 --- a/test/testinput/3dvar_diffusion.yml +++ b/test/testinput/3dvar_diffusion.yml @@ -95,7 +95,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sst_coolskin.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/sst_coolskin.3dvar.nc obsdatain: engine: type: H5File @@ -111,7 +111,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sst.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/sst.3dvar.nc obsdatain: engine: type: H5File @@ -133,7 +133,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sss.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/sss.3dvar.nc obsdatain: engine: type: H5File @@ -159,7 +159,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/adt.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/adt.3dvar.nc obsdatain: engine: type: H5File @@ -190,7 +190,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/prof_T.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/prof_T.3dvar.nc obsdatain: engine: type: H5File @@ -210,7 +210,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/prof_S.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/prof_S.3dvar.nc obsdatain: engine: type: H5File @@ -232,7 +232,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/icec.3dvar_diffusion.nc + obsfile: data_generated/3dvar_diffusion/icec.3dvar.nc obsdatain: engine: type: H5File @@ -262,12 +262,12 @@ variational: state component: datadir: data_generated/3dvar_diffusion date: *bkg_date - exp: 3dvar_diffusion.iter1 + exp: 3dvar.iter1 type: incr output: datadir: data_generated/3dvar_diffusion - exp: 3dvar_diffusion + exp: 3dvar type: an final: diff --git a/test/testinput/3dvar_godas.yml b/test/testinput/3dvar_godas.yml deleted file mode 100644 index 672cf4f90..000000000 --- a/test/testinput/3dvar_godas.yml +++ /dev/null @@ -1,279 +0,0 @@ -# common filters used later on -_: &land_mask - filter: Domain Check - where: - - variable: {name: GeoVaLs/sea_area_fraction} - minvalue: 0.5 - -cost function: - cost type: 3D-Var - time window: - begin: 2018-04-14T00:00:00Z - length: P2D - analysis variables: &soca_vars [cicen, hicen, hsnon, socn, tocn, ssh, hocn, sw, lhf, shf, lw, us, mld, layer_depth] - geometry: &geom - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - - background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - sfc_filename: sfc.res.nc - date: &bkg_date 2018-04-15T00:00:00Z - state variables: *soca_vars - - background error: - covariance model: SocaError - analysis variables: [cicen, hicen, hsnon, socn, tocn, ssh, sw, lhf, shf, lw, us] - date: *bkg_date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [hsnon, socn, tocn, ssh, sw, lhf, shf, lw, us] - - name: ice - variables: [cicen, hicen] - - linear variable change: - input variables: *soca_vars - output variables: *soca_vars - linear variable changes: - - linear variable change name: BkgErrFILT - ocean_depth_min: 1000 # [m] - rescale_bkgerr: 1.0 - efold_z: 2500.0 # [m] - - - linear variable change name: BkgErrGODAS - # optionally save the calculated parameters to a file - output: - filename: data_generated/3dvar_godas/bkgerrgodas.nc - sst_bgerr_file: data_static/godas_sst_bgerr.nc - t_min: 0.1 - t_max: 2.0 - t_dz: 20.0 - t_efold: 500.0 - s_min: 0.0 - s_max: 0.25 - ssh_min: 0.0 # value at EQ - ssh_max: 0.1 # value in Extratropics - ssh_phi_ex: 20 # lat of transition from extratropics - cicen_min: 0.1 - cicen_max: 0.5 - hicen_min: 10.0 - hicen_max: 100.0 - - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - - - linear variable change name: BalanceSOCA - kst: - dsdtmax: 0.1 - dsdzmin: 3.0e-6 - dtdzmin: 1.0e-6 - nlayers: 999 - ksshts: - nlayers: 10 - dcdt: - filename: data_static/72x35x25/dcdt.nc - name: dcdt - - observations: - observers: - - obs space: - name: CoolSkin - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/sst_coolskin.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sst.nc - simulated variables: [seaSurfaceTemperature] - obs operator: - name: CoolSkin - obs error: - covariance model: diagonal - - - obs space: - name: SeaSurfaceTemp - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/sst.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sst.nc - simulated variables: [seaSurfaceTemperature] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Thinning - amount: 0.1 - random seed: 0 - - - obs space: - name: SeaSurfaceSalinity - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/sss.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sss.nc - simulated variables: [seaSurfaceSalinity] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - filter: Domain Check - where: - - variable: {name: GeoVaLs/distance_from_coast} - minvalue: 1500e3 - - filter: Domain Check - where: - - variable: {name: GeoVaLs/sea_surface_temperature} - minvalue: 15 - - - obs space: - name: ADT - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/adt.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/adt.nc - simulated variables: [absoluteDynamicTopography] - obs operator: - name: ADT - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Bounds Check - minvalue: -2.0 - maxvalue: 2.0 - - filter: Perform Action - action: - name: assign error - error function: - name: ObsFunction/LinearCombination - options: - variables: [GeoVaLs/mesoscale_representation_error, - ObsError/absoluteDynamicTopography] - coefs: [1.0, - 1.0] - - - obs space: - name: InsituTemperature - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/prof_T.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/prof.nc - simulated variables: [waterTemperature] - obs operator: - name: InsituTemperature - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Background Check - threshold: 5 - - - obs space: - name: InsituSalinity - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/prof_S.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/prof.nc - simulated variables: [salinity] - obs operator: - name: VertInterp - observation alias file: testinput/obsop_name_map.yml - vertical coordinate: sea_water_depth - observation vertical coordinate: depth - interpolation method: linear - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - - obs space: - name: SeaIceFraction - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_godas/icec.3dvar_godas.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/icec.nc - simulated variables: [seaIceFraction] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - -variational: - minimizer: - algorithm: RPCG - iterations: - - geometry: *geom - ninner: 5 - gradient norm reduction: 1e-15 - test: on - diagnostics: - departures: ombg - online diagnostics: - write increment: true - increment: - state component: - datadir: data_generated/3dvar_godas - date: *bkg_date - exp: 3dvar_godas.iter1 - type: incr - -output: - datadir: data_generated/3dvar_godas - exp: 3dvar_godas - type: an - -final: - diagnostics: - departures: oman - -test: - reference filename: testref/3dvar_godas.test - test output filename: testoutput/3dvar_godas.test - float relative tolerance: 1e-5 diff --git a/test/testinput/addincrement.yml b/test/testinput/addincrement.yml index fd4624dfa..0aa2b2fbc 100644 --- a/test/testinput/addincrement.yml +++ b/test/testinput/addincrement.yml @@ -16,9 +16,9 @@ state: increment: read_from_file: 1 - basename: data_generated/3dvar_godas/ - ocn_filename: ocn.3dvar_godas.iter1.incr.2018-04-15T00:00:00Z.nc - ice_filename: ice.3dvar_godas.iter1.incr.2018-04-15T00:00:00Z.nc + basename: data_generated/3dvar_diffusion/ + ocn_filename: ocn.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc + ice_filename: ice.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc date: *bkg_date added variables: [hsnon, socn, tocn] diff --git a/test/testinput/checkpointmodel.yml b/test/testinput/checkpointmodel.yml index 7392c9557..f34ffef77 100644 --- a/test/testinput/checkpointmodel.yml +++ b/test/testinput/checkpointmodel.yml @@ -21,8 +21,8 @@ background: analysis: read_from_file: 1 date: *date - basename: data_generated/3dvar_godas/ - ocn_filename: ocn.3dvar_godas.an.2018-04-15T00:00:00Z.nc + basename: data_generated/3dvar_diffusion/ + ocn_filename: ocn.3dvar.an.2018-04-15T00:00:00Z.nc state variables: [socn, tocn, hocn] test: diff --git a/test/testinput/convertincrement.yml b/test/testinput/convertincrement.yml index ef30f46c1..2dfd73731 100644 --- a/test/testinput/convertincrement.yml +++ b/test/testinput/convertincrement.yml @@ -23,8 +23,8 @@ increments: input variables: [tocn, socn, ssh, hocn] input: read_from_file: 1 - basename: data_generated/3dvar_godas/ - ocn_filename: ocn.3dvar_godas.iter1.incr.2018-04-15T00:00:00Z.nc + basename: data_generated/3dvar_diffusion/ + ocn_filename: ocn.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc date: 2018-04-15T00:00:00Z state variables: [ssh, tocn, socn, hocn] trajectory: diff --git a/test/testinput/convertstate_soca2cice.yml b/test/testinput/convertstate_soca2cice.yml index 85e91e540..cd3881ddd 100644 --- a/test/testinput/convertstate_soca2cice.yml +++ b/test/testinput/convertstate_soca2cice.yml @@ -27,9 +27,9 @@ variable change: states: - input: read_from_file: 1 - basename: data_generated/3dvar_godas/ - ocn_filename: ocn.3dvar_godas.an.2018-04-15T00:00:00Z.nc - ice_filename: ice.3dvar_godas.an.2018-04-15T00:00:00Z.nc + basename: data_generated/3dvar_diffusion/ + ocn_filename: ocn.3dvar.an.2018-04-15T00:00:00Z.nc + ice_filename: ice.3dvar.an.2018-04-15T00:00:00Z.nc date: &bkg_date 2018-04-15T00:00:00Z state variables: [tocn, socn, hocn, cicen, hicen, hsnon] output: diff --git a/test/testref/3dvar_godas.test b/test/testref/3dvar_godas.test deleted file mode 100644 index a36a198b4..000000000 --- a/test/testref/3dvar_godas.test +++ /dev/null @@ -1,44 +0,0 @@ -CostJb : Nonlinear Jb = 0.0000000000000000e+00 -CostJo : Nonlinear Jo(CoolSkin) = 1.6662193028378610e+04, nobs = 199, Jo/n = 8.3729613207932715e+01, err = 3.6419991997020579e-01 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 1.6138515459546179e+03, nobs = 174, Jo/n = 9.2750088847966552e+00, err = 3.6280357515271239e-01 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 5.5606890102213500e+00, nobs = 29, Jo/n = 1.9174789690418448e-01, err = 1.0000000000000000e+00 -CostJo : Nonlinear Jo(ADT) = 1.0183179843106859e-02, nobs = 94, Jo/n = 1.0833170045858361e-04, err = 2.7969331641360029e+01 -CostJo : Nonlinear Jo(InsituTemperature) = 3.5224618031508840e+02, nobs = 206, Jo/n = 1.7099329141509145e+00, err = 8.9914415723945484e-01 -CostJo : Nonlinear Jo(InsituSalinity) = 3.4706220681200762e+02, nobs = 218, Jo/n = 1.5920284716147139e+00, err = 6.0819699545777528e-01 -CostJo : Nonlinear Jo(SeaIceFraction) = 5.9780675099388782e+02, nobs = 89, Jo/n = 6.7169297864481781e+00, err = 1.0000000149011612e-01 -CostFunction: Nonlinear J = 1.9578730584644272e+04 -RPCGMinimizer: reduction in residual norm = 1.3835204684592348e-01 -CostFunction::addIncrement: Analysis: - Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0000754351015983 max=1.0003473321988883 mean=0.1175504050745892 - hicen min=0.0000000000000000 max=4.0326673084246947 mean=0.4712515705773916 - hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5443926214474004 - tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0184359934491134 - ssh min=-1.9244129564152344 max=0.9272827077132950 mean=-0.2767862293413312 - hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 - sw min=-225.0944189546596022 max=0.0000000000000000 mean=-71.7382886319574595 - lhf min=-38.1375462432529417 max=256.5949858143854385 mean=42.0096925172668492 - shf min=-58.9492932951061732 max=201.3742507522742926 mean=6.0753280052543435 - lw min=0.0000000000000000 max=88.0360941609201433 mean=31.3955350224489038 - us min=0.0044035807951232 max=0.0196691484916628 mean=0.0086904765642143 - mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 -layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 - - - - - - - - - -CostJb : Nonlinear Jb = 0.4608661630977090 -CostJo : Nonlinear Jo(CoolSkin) = 16105.3314205920578388, nobs = 199, Jo/n = 80.9313136713168717, err = 0.3641999199702058 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 1581.1942000180506511, nobs = 174, Jo/n = 9.0873229886094862, err = 0.3628035751527124 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 5.5600831894793306, nobs = 29, Jo/n = 0.1917270065337700, err = 1.0000000000000000 -CostJo : Nonlinear Jo(ADT) = 0.0101835734665084, nobs = 94, Jo/n = 0.0001083358879416, err = 27.9693316413600286 -CostJo : Nonlinear Jo(InsituTemperature) = 349.7151439586605193, nobs = 206, Jo/n = 1.6976463298964102, err = 0.8991441572394548 -CostJo : Nonlinear Jo(InsituSalinity) = 345.6508595190978212, nobs = 218, Jo/n = 1.5855544014637515, err = 0.6081969954577753 -CostJo : Nonlinear Jo(SeaIceFraction) = 596.9325970112806772, nobs = 89, Jo/n = 6.7071078315874235, err = 0.1000000014901161 -CostFunction: Nonlinear J = 18984.8553540251923550 diff --git a/test/testref/addincrement.test b/test/testref/addincrement.test index a92d53cb9..3a3136678 100644 --- a/test/testref/addincrement.test +++ b/test/testref/addincrement.test @@ -14,15 +14,15 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 Increment: Valid time: 2018-04-15T00:00:00Z hsnon min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=-0.0001690995347179 max=0.0038940161787005 mean=0.0000028952948985 - tocn min=-0.0937972082266029 max=0.0997618261536270 mean=0.0008710350957508 + socn min=-0.0003650232880738 max=0.0121100304079027 mean=0.0000121413142709 + tocn min=-0.2288274475241922 max=0.1912045489894477 mean=0.0017103542723563 State plus increment: Valid time: 2018-04-15T00:00:00Z cicen min=0.0000000000000000 max=1.0000000000000000 mean=0.1175125761012928 hicen min=0.0000000000000000 max=4.0326673084246947 mean=0.4712515705773916 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5443926214474004 - tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0184359934491134 + socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5444018674667745 + tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0192753126257168 ssh min=-1.9244847628277935 max=0.9272826517867588 mean=-0.2767903423591662 hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 uocn min=-0.8581693992488438 max=0.7000954286848975 mean=-0.0002591771954069 diff --git a/test/testref/checkpointmodel.test b/test/testref/checkpointmodel.test index d927be231..9f5a34a14 100644 --- a/test/testref/checkpointmodel.test +++ b/test/testref/checkpointmodel.test @@ -7,12 +7,12 @@ input background: analysis: Valid time: 2018-04-15T00:00:00Z - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5443926214474004 - tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0184359934491134 + socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5444018674667745 + tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0192753126257168 hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 output background: Valid time: 2018-04-15T00:00:00Z - socn min=10.7210460395083924 max=38.0000000000000000 mean=34.5397730325752050 - tocn min=-1.8000000000000000 max=31.7004645720658580 mean=6.0185743158039484 + socn min=10.7210460395083924 max=38.0000000000000000 mean=34.5397822785945863 + tocn min=-1.8000000000000000 max=31.7004645720658580 mean=6.0194137897063893 hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 diff --git a/test/testref/convertincrement.test b/test/testref/convertincrement.test index baf2afc23..fb504d96e 100644 --- a/test/testref/convertincrement.test +++ b/test/testref/convertincrement.test @@ -1,8 +1,8 @@ Input increment: Valid time: 2018-04-15T00:00:00Z - tocn min=-0.0937972082266029 max=0.0997618261536270 mean=0.0008710350957508 - socn min=-0.0001690995347179 max=0.0038940161787005 mean=0.0000028952948985 - ssh min=-0.0001526377801940 max=0.0006307438564272 mean=0.0000041130178348 + tocn min=-0.2288274475241922 max=0.1912045489894477 mean=0.0017103542723563 + socn min=-0.0003650232880738 max=0.0121100304079027 mean=0.0000121413142709 + ssh min=-0.0004316711867977 max=0.0007832967709081 mean=0.0000269161355756 hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Trajectory state: Valid time: 2018-04-15T00:00:00Z @@ -14,7 +14,7 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 Output increment: Valid time: 2018-04-15T00:00:00Z - tocn min=-0.0937972082266029 max=0.0997618261536270 mean=0.0008710350957508 - socn min=-0.0001690995347179 max=0.0038940161787005 mean= -nan - ssh min=-0.0005499802226468 max=0.0017030540476014 mean=0.0000319457667209 + tocn min=-0.2288274475241922 max=0.1912045489894477 mean=0.0017103542723563 + socn min=-0.0003650232880738 max=0.0121100304079027 mean= -nan + ssh min=-0.0062629389176039 max=0.0042019447975279 mean=0.0002526550079651 hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 From 2e8252c9c03672016558e93821bfe0c404105aa7 Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 15:11:52 -0700 Subject: [PATCH 04/11] remove SocaError --- src/soca/Covariance/CMakeLists.txt | 4 - src/soca/Covariance/ErrorCovariance.cc | 91 ---- src/soca/Covariance/ErrorCovariance.h | 19 +- src/soca/Covariance/ErrorCovarianceFortran.h | 31 -- .../Covariance/soca_covariance.interface.F90 | 125 ----- src/soca/Covariance/soca_covariance_mod.F90 | 468 ------------------ test/executables/TestErrorCovariance.cc | 17 - 7 files changed, 8 insertions(+), 747 deletions(-) delete mode 100644 src/soca/Covariance/ErrorCovariance.cc delete mode 100644 src/soca/Covariance/ErrorCovarianceFortran.h delete mode 100644 src/soca/Covariance/soca_covariance.interface.F90 delete mode 100644 src/soca/Covariance/soca_covariance_mod.F90 delete mode 100644 test/executables/TestErrorCovariance.cc diff --git a/src/soca/Covariance/CMakeLists.txt b/src/soca/Covariance/CMakeLists.txt index 92b252f54..55cff65d4 100644 --- a/src/soca/Covariance/CMakeLists.txt +++ b/src/soca/Covariance/CMakeLists.txt @@ -1,7 +1,3 @@ soca_target_sources( - ErrorCovariance.cc ErrorCovariance.h - ErrorCovarianceFortran.h - soca_covariance_mod.F90 - soca_covariance.interface.F90 ) \ No newline at end of file diff --git a/src/soca/Covariance/ErrorCovariance.cc b/src/soca/Covariance/ErrorCovariance.cc deleted file mode 100644 index 57191ded2..000000000 --- a/src/soca/Covariance/ErrorCovariance.cc +++ /dev/null @@ -1,91 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#include - -#include "soca/Covariance/ErrorCovariance.h" -#include "soca/Covariance/ErrorCovarianceFortran.h" -#include "soca/Geometry/Geometry.h" -#include "soca/Increment/Increment.h" -#include "soca/State/State.h" - -#include "eckit/config/Configuration.h" - -#include "oops/assimilation/GMRESR.h" -#include "oops/base/IdentityMatrix.h" -#include "oops/base/Variables.h" -#include "oops/util/Logger.h" - -using oops::Log; - -// ----------------------------------------------------------------------------- -namespace soca { - // ----------------------------------------------------------------------------- - - ErrorCovariance::ErrorCovariance(const Geometry & resol, - const oops::Variables &, - const eckit::Configuration & conf, - const State & bkg, - const State & traj) { - // bkg: Background state, invariant wrt outer-loop. - const eckit::Configuration * configc = &conf; - vars_ = oops::Variables(conf, "analysis variables"); - soca_b_setup_f90(keyFtnConfig_, &configc, resol.toFortran(), - bkg.toFortran(), vars_); - Log::trace() << "ErrorCovariance created" << std::endl; - } - - // ----------------------------------------------------------------------------- - - ErrorCovariance::~ErrorCovariance() { - soca_b_delete_f90(keyFtnConfig_); - Log::trace() << "ErrorCovariance destructed" << std::endl; - } - - // ----------------------------------------------------------------------------- - - void ErrorCovariance::linearize(const State & traj, const Geometry & resol) { - geom_.reset(new Geometry(resol)); - Log::trace() << "Trajectory for ErrorCovariance" << std::endl; - } - - // ----------------------------------------------------------------------------- - - void ErrorCovariance::multiply(const Increment & dxin, Increment & dxout) - const { - dxout = dxin; - soca_b_mult_f90(keyFtnConfig_, dxin.toFortran(), dxout.toFortran()); - Log::trace() << "ErrorCovariance multiply" << std::endl; - } - - // ----------------------------------------------------------------------------- - - void ErrorCovariance::inverseMultiply(const Increment & dxin, - Increment & dxout) const { - // oops::IdentityMatrix Id; - // dxout.zero(); - // GMRESR(dxout, dxin, *this, Id, 10, 1.0e-6); - dxout = dxin; - Log::trace() << "ErrorCovariance inversemultiply" << std::endl; - } - - // ----------------------------------------------------------------------------- - - // void ErrorCovariance::doRandomize(Increment & dx) const { - void ErrorCovariance::randomize(Increment & dx) const { - soca_b_randomize_f90(keyFtnConfig_, dx.toFortran()); - } - - // ----------------------------------------------------------------------------- - - void ErrorCovariance::print(std::ostream & os) const { - os << "ErrorCovariance::print not implemented"; - } - - // ----------------------------------------------------------------------------- - -} // namespace soca diff --git a/src/soca/Covariance/ErrorCovariance.h b/src/soca/Covariance/ErrorCovariance.h index 3c102dcdc..57a01e96d 100644 --- a/src/soca/Covariance/ErrorCovariance.h +++ b/src/soca/Covariance/ErrorCovariance.h @@ -42,20 +42,17 @@ namespace soca { ErrorCovariance(const Geometry &, const oops::Variables &, const eckit::Configuration &, - const State &, const State &); - ~ErrorCovariance(); + const State &, const State &) { + throw eckit::NotImplemented("You should not be using SocaError, use SABER!");} + ~ErrorCovariance() {} - void linearize(const State &, const Geometry &); - void multiply(const Increment &, Increment &) const; - void inverseMultiply(const Increment &, Increment &) const; - void randomize(Increment &) const; + void linearize(const State &, const Geometry &) {} + void multiply(const Increment &, Increment &) const {} + void inverseMultiply(const Increment &, Increment &) const {} + void randomize(Increment &) const {} private: - void print(std::ostream &) const; - int keyFtnConfig_; - boost::scoped_ptr geom_; - boost::scoped_ptr traj_; - oops::Variables vars_; + void print(std::ostream &) const {} }; // ----------------------------------------------------------------------------- diff --git a/src/soca/Covariance/ErrorCovarianceFortran.h b/src/soca/Covariance/ErrorCovarianceFortran.h deleted file mode 100644 index 4acd138cb..000000000 --- a/src/soca/Covariance/ErrorCovarianceFortran.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * (C) Copyright 2019-2021 UCAR - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#ifndef SOCA_COVARIANCE_ERRORCOVARIANCEFORTRAN_H_ -#define SOCA_COVARIANCE_ERRORCOVARIANCEFORTRAN_H_ - -#include "soca/Fortran.h" - -// Forward declarations -namespace eckit { - class Configuration; -} - -namespace soca { - - extern "C" { - void soca_b_setup_f90(F90bmat &, const eckit::Configuration * const *, - const F90geom &, const F90flds &, - const oops::Variables &); - void soca_b_delete_f90(F90bmat &); - void soca_b_mult_f90(const F90bmat &, const F90flds &, - const F90flds &); - void soca_b_invmult_f90(const F90bmat &, const F90flds &, const F90flds &); - void soca_b_randomize_f90(const F90bmat &, const F90flds &); - } -} // namespace soca -#endif // SOCA_COVARIANCE_ERRORCOVARIANCEFORTRAN_H_ diff --git a/src/soca/Covariance/soca_covariance.interface.F90 b/src/soca/Covariance/soca_covariance.interface.F90 deleted file mode 100644 index f4da66f4a..000000000 --- a/src/soca/Covariance/soca_covariance.interface.F90 +++ /dev/null @@ -1,125 +0,0 @@ -! (C) Copyright 2017-2021 UCAR. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> C++ interfaces for soca_covariance_mod::soca_cov -module soca_covariance_mod_c - -use fckit_configuration_module, only: fckit_configuration -use iso_c_binding -use oops_variables_mod, only: oops_variables - -! soca modules -use soca_covariance_mod, only: soca_cov -use soca_geom_mod_c, only : soca_geom_registry -use soca_geom_mod, only : soca_geom -use soca_increment_mod, only : soca_increment -use soca_increment_reg, only : soca_increment_registry -use soca_state_mod, only : soca_state -use soca_state_reg, only : soca_state_registry - -implicit none -private - -#define LISTED_TYPE soca_cov - -!> Linked list interface - defines registry_t type -#include "oops/util/linkedList_i.f" - -!> Global registry for soca_cov -type(registry_t), public :: soca_cov_registry - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ -!> Linked list implementation -#include "oops/util/linkedList_c.f" -! ------------------------------------------------------------------------------ - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_covariance_mod::soca_cov::setup() -!! -!! Setup for the SOCA model's background error covariance matrix -subroutine soca_b_setup_c(c_key_self, c_conf, c_key_geom, c_key_bkg, c_vars) & - & bind (c,name='soca_b_setup_f90') - integer(c_int), intent(inout) :: c_key_self !< The background covariance structure - type(c_ptr), intent(in) :: c_conf !< The configuration - integer(c_int), intent(in) :: c_key_geom !< Geometry - integer(c_int), intent(in) :: c_key_bkg !< Background - type(c_ptr),value, intent(in) :: c_vars !< List of variables - - type(soca_cov), pointer :: self - type(soca_geom), pointer :: geom - type(soca_state), pointer :: bkg - type(oops_variables) :: vars - - call soca_geom_registry%get(c_key_geom, geom) - call soca_cov_registry%init() - call soca_cov_registry%add(c_key_self) - call soca_cov_registry%get(c_key_self, self) - call soca_state_registry%get(c_key_bkg,bkg) - vars = oops_variables(c_vars) - call self%setup(fckit_configuration(c_conf), geom, bkg, vars) - -end subroutine soca_b_setup_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_covariance_mod::soca_cov::delete() -!! -!! Delete for the SOCA model's background error covariance matrix -subroutine soca_b_delete_c(c_key_self) bind (c,name='soca_b_delete_f90') - integer(c_int), intent(inout) :: c_key_self !< The background covariance structure - - type(soca_cov), pointer :: self - - call soca_cov_registry%get(c_key_self,self) - call self%delete() - call soca_cov_registry%remove(c_key_self) - -end subroutine soca_b_delete_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_covariance_mod::soca_cov::mult() -subroutine soca_b_mult_c(c_key_self, c_key_in, c_key_out) bind(c,name='soca_b_mult_f90') - integer(c_int), intent(inout) :: c_key_self !< The background covariance structure - integer(c_int), intent(in) :: c_key_in !< " to Increment in - integer(c_int), intent(in) :: c_key_out !< " to Increment out - - type(soca_cov), pointer :: self - type(soca_increment), pointer :: xin - type(soca_increment), pointer :: xout - - call soca_cov_registry%get(c_key_self, self) - call soca_increment_registry%get(c_key_in, xin) - call soca_increment_registry%get(c_key_out, xout) - - call xout%copy(xin) !< xout = xin - call self%mult(xout) !< xout = C.xout - -end subroutine soca_b_mult_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_covariance_mod::soca_cov::sqrt_c_mult() -!! -!! Generate randomized C^1/2 x increment -subroutine soca_b_randomize_c(c_key_self, c_key_out) bind(c,name='soca_b_randomize_f90') - integer(c_int), intent(in) :: c_key_self !< covar config structure - integer(c_int), intent(in) :: c_key_out !< Randomized increment - - type(soca_cov), pointer :: self - type(soca_increment), pointer :: xout - - call soca_cov_registry%get(c_key_self, self) - call soca_increment_registry%get(c_key_out, xout) - - ! Randomize increment - call self%sqrt_C_mult(xout) !< xout = C^1/2.xout - -end subroutine soca_b_randomize_c - -end module soca_covariance_mod_c diff --git a/src/soca/Covariance/soca_covariance_mod.F90 b/src/soca/Covariance/soca_covariance_mod.F90 deleted file mode 100644 index 3ed0c615c..000000000 --- a/src/soca/Covariance/soca_covariance_mod.F90 +++ /dev/null @@ -1,468 +0,0 @@ -! (C) Copyright 2017-2023 UCAR. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> Structure holding configuration variables for the 3d error -!! covariance matrices of the SOCA analysis. -module soca_covariance_mod - -use atlas_module, only: atlas_fieldset, atlas_field, atlas_real, atlas_integer, atlas_functionspace -use fckit_configuration_module, only: fckit_configuration -use logger_mod -use kinds, only: kind_real -use oops_variables_mod, only: oops_variables -use random_mod, only: normal_distribution -use type_bump, only: bump_type -use type_fieldset, only: fieldset_type - -! soca modules -use soca_fields_mod, only: soca_field -use soca_geom_mod, only : soca_geom -use soca_increment_mod, only: soca_increment -use soca_state_mod, only: soca_state - -implicit none -private - -!> SOCA background/model covariance -type, public :: soca_cov - type(bump_type), pointer :: conv(:) !< convolution op from bump - type(soca_state), pointer :: bkg !< Background field (or first guess) - type(oops_variables) :: vars !< Apply B to vars - - real(kind=kind_real), allocatable :: pert_scale(:) !< index matches "vars" - type(oops_variables), allocatable :: conv_vars(:) !< index mathces "conv" - - type(soca_geom), pointer :: geom -contains - !> \copybrief soca_cov_setup \see soca_cov_setup - procedure :: setup => soca_cov_setup - - !> \copybrief soca_cov_delete \see soca_cov_delete - procedure :: delete => soca_cov_delete - - !> \copybrief soca_cov_c_mult \see soca_cov_c_mult - procedure :: mult => soca_cov_C_mult - - !> \copybrief soca_cov_sqrt_c_mult \see soca_cov_sqrt_c_mult - procedure :: sqrt_C_mult => soca_cov_sqrt_C_mult - - !> \copybrief soca_cov_get_conv \see soca_cov_get_conv - procedure :: getConv => soca_cov_get_conv -end type soca_cov - - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ - - -! ------------------------------------------------------------------------------ -!> Setup for the SOCA model's 3d error covariance matrices (B and Q_i) -!! -!! This routine queries the configuration for the parameters that define the -!! covariance matrix, and stores the relevant values in the -!! error covariance structure. -!! \relates soca_covariance_mod::soca_cov -subroutine soca_cov_setup(self, f_conf, geom, bkg, vars) - class(soca_cov), intent(inout) :: self !< The covariance structure - type(fckit_configuration), intent(in) :: f_conf !< The configuration - type(soca_geom), pointer, intent(in) :: geom !< Geometry - type(soca_state), target, intent(in) :: bkg !< Background - type(oops_variables), intent(in) :: vars !< List of variables - - type(fckit_configuration) :: f_conf2 - type(fckit_configuration), allocatable :: f_conf_list(:) - character(len=:), allocatable :: domain_vars(:) - character(len=:), allocatable :: domain - integer :: i, isc, iec, jsc, jec, ivar - - ! save a copy of geometry for use later - self%geom => geom - - ! Setup list of variables to apply B on - self%vars = vars - - ! get perturbation scales (or set to 1.0) - allocate(self%pert_scale(self%vars%nvars())) - self%pert_scale = 1.0 - if (f_conf%get("perturbation scales", f_conf2)) then - do ivar=1,self%vars%nvars() - if ( .not. f_conf2%get(self%vars%variable(ivar), self%pert_scale(ivar))) then - call oops_log%info( & - "WARNING: no pertubation scale given for '" //trim(self%vars%variable(ivar)) & - // "' using default of 1.0") - end if - end do - end if - - ! Associate background - self%bkg => bkg - - ! Indices for compute domain (no halo) - isc = bkg%geom%isc ; iec = bkg%geom%iec - jsc = bkg%geom%jsc ; jec = bkg%geom%jec - - ! Initialize bump - call f_conf%get_or_die("bump", f_conf2) - call f_conf2%set('model.nl0', 1) - call f_conf2%set('model.variables', ['var']) - call f_conf%get_or_die("correlation", f_conf_list) - allocate(self%conv(size(f_conf_list))) - allocate(self%conv_vars(size(self%conv))) - do i=1,size(f_conf_list) - call f_conf_list(i)%get_or_die("name", domain) - call f_conf_list(i)%get_or_die("variables", domain_vars) - self%conv_vars(i) = oops_variables() - call self%conv_vars(i)%push_back(domain_vars) - call f_conf2%set('io.files prefix', domain) - - call soca_bump_correlation(self, self%conv(i), geom, f_conf2, f_conf_list(i), domain) - end do - -end subroutine soca_cov_setup - - -! ------------------------------------------------------------------------------ -!> Delete for the SOCA model's 3d error covariance matrices -!! -!! \relates soca_covariance_mod::soca_cov -subroutine soca_cov_delete(self) - class(soca_cov), intent(inout) :: self !< The covariance structure - - deallocate(self%conv) - deallocate(self%conv_vars) - deallocate(self%pert_scale) - nullify(self%bkg) - -end subroutine soca_cov_delete - - -! ------------------------------------------------------------------------------ -!> Get the convolution operator needed for a specific field -!! -!! \throws abor1_ftn aborts if trying to use a field not on the tracer grid -!! \relates soca_covariance_mod::soca_cov -subroutine soca_cov_get_conv(self, field, conv) - class(soca_cov), intent(inout) :: self - type(soca_field), pointer, intent(in) :: field !< The field that will be convolved - type(bump_type), pointer, intent(out) :: conv !< pointer to resulting convolution - - integer :: j,k - - ! safety check to make sure field is on h grid - ! TODO we really should have separate variable names for staggered/destaggered variables. - ! The "abort" has been turned into a "warning" until we get u/v names straightened out. - if (field%metadata%grid /= "h") then - call oops_log%info("WARNING: Attempting to use a field (" // & - trim(field%name) // ") which is on the u/v grid. PROCEED WITH CAUTION") - end if - - ! determine which horizontal convolution to use - nullify(conv) - outer: do j=1,size(self%conv_vars) - do k=1,self%conv_vars(j)%nvars() - if (self%conv_vars(j)%variable(k) == field%name) then - conv => self%conv(j) - exit outer - end if - end do - end do outer - if ( .not. associated(conv)) then - call abor1_ftn("ERROR: No valid bump operator found for field '"//field%name//"'") - end if -end subroutine - - -! ------------------------------------------------------------------------------ -!> Apply convolution to an increment -!! -!! \relates soca_covariance_mod::soca_cov -subroutine soca_cov_C_mult(self, dx) - class(soca_cov), intent(inout) :: self !< The covariance structure - type(soca_increment), intent(inout) :: dx !< Input: Increment, Output: C dx - integer :: i, z - type(soca_field), pointer :: field - type(bump_type), pointer :: conv - real(kind=kind_real), allocatable :: fld_2d(:,:) - - allocate(fld_2d(self%geom%isd:self%geom%ied, self%geom%jsd:self%geom%jed)) - - do i = 1, self%vars%nvars() - ! why is this sometimes getting an "empty" list with "none" in it? - if (.not. dx%has(self%vars%variable(i))) cycle - - call dx%get(trim(self%vars%variable(i)), field) - - ! a **TEMPORARY** special exception for hocn - if ( field%name == "hocn" ) cycle - - ! determine which horizontal convolution to use - call self%getConv(field, conv) - - ! apply convolution on each level - do z = 1, field%nz - fld_2d = field%val(:,:,z) - call soca_2d_convol(fld_2d, conv, dx%geom) - field%val(:,:,z) = fld_2d - end do - end do -end subroutine soca_cov_C_mult - - -! ------------------------------------------------------------------------------ -!> Apply the square root of C to an increment -!! -!! \throws abor1_ftn aborts if no pertubation scales are given -!! \relates soca_covariance_mod::soca_cov -subroutine soca_cov_sqrt_C_mult(self, dx) - class(soca_cov), intent(inout) :: self !< The covariance structure - type(soca_increment), intent(inout) :: dx !< Input: Increment, Output: C^1/2 dx - integer :: i, z, j - type(soca_field), pointer :: field - real(kind=kind_real) :: scale - type(bump_type), pointer :: conv - real(kind=kind_real), allocatable :: fld_2d(:,:) - - allocate(fld_2d(self%geom%isd:self%geom%ied, self%geom%jsd:self%geom%jed)) - - do i = 1, self%vars%nvars() - conv => null() - call dx%get(trim(self%vars%variable(i)), field) - - ! a **TEMPORARY** special exception for hocn - if ( field%name == "hocn" ) cycle - - ! find matching index in self%vars and get the perturbation scale - if (.not. allocated(self%pert_scale)) then - call abor1_ftn("ERROR: cannot use sqrt_C_mult if no perturbation scales given") - endif - do j=1,self%vars%nvars() - if (self%vars%variable(j) == field%name) exit - end do - scale = self%pert_scale(j) - - ! determine which horizontal convolution to use - call self%getConv(field, conv) - - ! apply convolution - do z = 1,field%nz - fld_2d = field%val(:,:,z) - call soca_2d_sqrt_convol(fld_2d, conv, dx%geom, scale) - field%val(:,:,z) = fld_2d - end do - - end do -end subroutine soca_cov_sqrt_C_mult - - -! ------------------------------------------------------------------------------ -!> Setup bump for horizontal convolution, Using rossby radiusbased correlation lengths -!! -!! Used by soca_cov::setup() -!! -!! Correlation lengths are calculated as follows : -!! 1) rh = "base value" + rossby_radius * "rossby mult" -!! 2) minimum value of "min grid mult" * grid_size is imposed -!! 3) min/max are imposed based on "min value" and "max value" -!! 4) converted from a gaussian sigma to Gaspari-Cohn cutoff distance -!! \relates soca_covariance_mod::soca_cov -subroutine soca_bump_correlation(self, horiz_convol, geom, f_conf_bump, f_conf_domain, domain) - class(soca_cov), intent(inout) :: self !< The covariance structure - type(bump_type), intent(inout) :: horiz_convol - type(soca_geom), intent(in) :: geom - type(fckit_configuration), intent(in) :: f_conf_bump, f_conf_domain - character(len=3), intent(in) :: domain - - integer :: i - integer, allocatable :: hmask(:,:) - integer, pointer :: int_ptr(:,:) - real(kind=kind_real), pointer :: real_ptr(:,:), vArea(:,:), vRossby(:,:) - type(atlas_functionspace) :: afunctionspace - type(fieldset_type) :: afieldset, rh, rv - - type(atlas_field) :: afield, fArea, fRossby - real(kind=kind_real) :: r_base, r_mult, r_min, r_max, r_min_grid - - ! wrap the functionspace - afunctionspace = atlas_functionspace(geom%functionspace%c_ptr()) - - ! Geometry fieldset setup - afieldset = atlas_fieldset() - - ! add existing fields that were created by geometry - call afieldset%add(geom%fieldset%field('area')) - call afieldset%add(geom%fieldset%field('vert_coord')) - call afieldset%add(geom%fieldset%field('gmask')) - call afieldset%add(geom%fieldset%field('owned')) - - - ! Set verbosity - horiz_convol%mpl%verbose = (geom%f_comm%rank()==0) - - ! Create BUMP object - call horiz_convol%create(geom%f_comm,afunctionspace,afieldset,f_conf_bump) - - if (horiz_convol%nam%new_nicas) then - ! get some fields from the geom fieldset - fArea = geom%fieldset%field('area') - call fArea%data(vArea) - fRossby = geom%fieldset%field('rossby_radius') - call fRossby%data(vRossby) - - ! get parameters for correlation lengths - if (.not. f_conf_domain%get('base value', r_base)) r_base = 0.0 - if (.not. f_conf_domain%get('rossby mult', r_mult)) r_mult = 0.0 - if (.not. f_conf_domain%get('min grid mult', r_min_grid)) r_min_grid = 1.0 - if (.not. f_conf_domain%get('min value', r_min)) r_min = 0.0 - if (.not. f_conf_domain%get('max value', r_max)) r_max = huge(r_max) - - ! rh is calculated as follows : - ! 1) rh = "base value" + rossby_radius * "rossby mult" - ! 2) minimum value of "min grid mult" * grid_size is imposed - ! 3) min/max are imposed based on "min value" and "max value" - ! 4) converted from a gaussian sigma to Gaspari-Cohn cutoff distance - rh = atlas_fieldset() - afield = geom%functionspace%create_field('var',kind=atlas_real(kind_real),levels=1) - call rh%add(afield) - call afield%data(real_ptr) - real_ptr(1,:) = r_base + r_mult*vRossby(1,:) - ! min based on grid size - if (r_min_grid .gt. 0.0) then - real_ptr(1,:) = max(real_ptr(1,:), sqrt(vArea(1,:))*r_min_grid ) - end if - real_ptr(1,:) = min(r_max, real_ptr(1,:)) - real_ptr(1,:) = max(r_min, real_ptr(1,:)) - real_ptr(1,:) = real_ptr(1,:) * 3.57_kind_real ! convert from gaussian sigma to - ! Gaspari-Cohn half width - call afield%final() - - ! rv - rv = atlas_fieldset() - afield = geom%functionspace%create_field('var',kind=atlas_real(kind_real),levels=1) - call rv%add(afield) - call afield%data(real_ptr) - real_ptr = 1.0 - call afield%final() - - ! Copy length-scales into BUMP - call horiz_convol%set_parameter('rh', 1, rh) - call horiz_convol%set_parameter('rv', 1, rv) - - ! Clean up - call rh%final() - call rv%final() - call fRossby%final() - call fArea%final() - end if - - ! Run BUMP drivers - call horiz_convol%run_drivers() - -end subroutine soca_bump_correlation - - -! ------------------------------------------------------------------------------ -!> Apply bump 2D convolution -!! -!! Used by soca_cov::mult() -!! \relates soca_covariance_mod::soca_cov -subroutine soca_2d_convol(dx, horiz_convol, geom) - real(kind=kind_real), allocatable, intent(inout) :: dx(:,:) - type(bump_type), intent(inout) :: horiz_convol - type(soca_geom), intent(in) :: geom - - type(fieldset_type) :: fieldset - type(atlas_field) :: field - real(kind_real), pointer :: real_ptr(:,:) - integer :: i, j, n - - ! array to atlas - ! (Yeah, this code is duplicated in a few places, but this whole - ! class is going away "soon" so I don't care) - fieldset = atlas_fieldset() - field = geom%functionspace%create_field('var', kind=atlas_real(kind_real), levels=1) - call fieldset%add(field) - call field%data(real_ptr) - do j=geom%jsc,geom%jec - do i=geom%isc,geom%iec - real_ptr(1,geom%atlas_ij2idx(i,j)) = dx(i,j) - end do - end do - - ! Apply 2D convolution - call horiz_convol%apply_nicas(fieldset) - - ! atlas to array - do j=geom%jsc,geom%jec - do i=geom%isc,geom%iec - dx(i,j) = real_ptr(1,geom%atlas_ij2idx(i,j)) - end do - end do - - ! Clean up - call field%final() - call fieldset%final() -end subroutine soca_2d_convol - - -! ------------------------------------------------------------------------------ -!> Apply bump square root of C -!! -!! used by soca_cov::sqrt_C_mult() -!! \relates soca_covariance_mod::soca_cov -subroutine soca_2d_sqrt_convol(dx, horiz_convol, geom, pert_scale) - real(kind=kind_real), allocatable, intent(inout) :: dx(:,:) - type(bump_type), intent(inout) :: horiz_convol - type(soca_geom), intent(in) :: geom - real(kind=kind_real), intent(in) :: pert_scale - - type(fieldset_type) :: fieldset - type(atlas_field) :: field - real(kind_real), pointer :: real_ptr(:,:) - integer :: i, j, n - - type(atlas_field) :: acv - integer, parameter :: rseed = 1 ! constant for reproducability of tests - ! TODO: pass seed through config - integer :: nn - real(kind=kind_real), pointer :: ptr(:) - - ! array to atlas fieldset - fieldset = atlas_fieldset() - field = geom%functionspace%create_field('var', kind=atlas_real(kind_real), levels=1) - call fieldset%add(field) - call field%data(real_ptr) - do j=geom%jsc,geom%jec - do i=geom%isc,geom%iec - real_ptr(1,geom%atlas_ij2idx(i,j)) = dx(i,j) - end do - end do - - ! Get control variable size - call horiz_convol%get_cv_size(nn) - acv = atlas_field("ctlVec", atlas_real(kind_real), (/nn/)) - call acv%data(ptr) - ptr = 0.0_kind_real - call normal_distribution(ptr, 0.0_kind_real, 1.0_kind_real, rseed) - ptr = pert_scale * ptr - - ! Apply C^1/2 - call horiz_convol%apply_nicas_sqrt(acv, fieldset, 0) - - ! atlas to array - do j=geom%jsc,geom%jec - do i=geom%isc,geom%iec - dx(i,j) = real_ptr(1,geom%atlas_ij2idx(i,j)) - end do - end do - - ! Clean up - call acv%final() - call field%final() - call fieldset%final() - -end subroutine soca_2d_sqrt_convol - -end module soca_covariance_mod diff --git a/test/executables/TestErrorCovariance.cc b/test/executables/TestErrorCovariance.cc deleted file mode 100644 index 35058d8ab..000000000 --- a/test/executables/TestErrorCovariance.cc +++ /dev/null @@ -1,17 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#include "soca/Traits.h" -#include "oops/runs/Run.h" -#include "test/interface/ErrorCovariance.h" - -int main(int argc, char ** argv) { - oops::Run run(argc, argv); - test::ErrorCovariance tests; - return run.execute(tests); -} - From 4ecd1bc1a6a99708ee97839147a4c5a721c0fd52 Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 15:27:21 -0700 Subject: [PATCH 05/11] remove horizfilt --- .../HorizFilt/CMakeLists.txt | 6 - .../HorizFilt/HorizFilt.cc | 96 ------ .../HorizFilt/HorizFilt.h | 59 ---- .../HorizFilt/HorizFiltFortran.h | 37 --- .../HorizFilt/soca_horizfilt.interface.F90 | 141 -------- .../HorizFilt/soca_horizfilt_mod.F90 | 311 ------------------ src/soca/Traits.h | 2 +- 7 files changed, 1 insertion(+), 651 deletions(-) delete mode 100644 src/soca/LinearVariableChange/HorizFilt/CMakeLists.txt delete mode 100644 src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc delete mode 100644 src/soca/LinearVariableChange/HorizFilt/HorizFilt.h delete mode 100644 src/soca/LinearVariableChange/HorizFilt/HorizFiltFortran.h delete mode 100644 src/soca/LinearVariableChange/HorizFilt/soca_horizfilt.interface.F90 delete mode 100644 src/soca/LinearVariableChange/HorizFilt/soca_horizfilt_mod.F90 diff --git a/src/soca/LinearVariableChange/HorizFilt/CMakeLists.txt b/src/soca/LinearVariableChange/HorizFilt/CMakeLists.txt deleted file mode 100644 index 6a796f6ca..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -soca_target_sources( - HorizFilt.cc - HorizFilt.h - soca_horizfilt_mod.F90 - soca_horizfilt.interface.F90 -) \ No newline at end of file diff --git a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc b/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc deleted file mode 100644 index 02fc85815..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.cc +++ /dev/null @@ -1,96 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#include -#include - -#include "eckit/config/Configuration.h" - -#include "oops/util/abor1_cpp.h" -#include "oops/util/Logger.h" - -#include "soca/Geometry/Geometry.h" -#include "soca/Increment/Increment.h" -#include "soca/State/State.h" -#include "soca/Traits.h" -#include "soca/LinearVariableChange/HorizFilt/HorizFilt.h" -#include "soca/LinearVariableChange/HorizFilt/HorizFiltFortran.h" - - -namespace soca { - - // ----------------------------------------------------------------------------- - - static LinearVariableChangeMaker - makerLinearVariableChangeHorizFilt_("DEPRECATED_HorizFiltSOCA"); - - // ----------------------------------------------------------------------------- - HorizFilt::HorizFilt(const State & bkg, - const State & traj, - const Geometry & geom, - const eckit::Configuration & conf): - geom_(geom), - vars_(conf, "filter variables") { - const eckit::Configuration * configc = &conf; - - // Interpolate trajectory to the geom resolution - State traj_at_geomres(geom, traj); - - // Compute averaging weights - soca_horizfilt_setup_f90(keyFtnConfig_, - &configc, - geom_.toFortran(), - traj_at_geomres.toFortran(), - vars_); - - // Get number of iterations - niter_ = configc->getInt("niter"); - } - // ----------------------------------------------------------------------------- - HorizFilt::~HorizFilt() { - soca_horizfilt_delete_f90(keyFtnConfig_); - } - // ----------------------------------------------------------------------------- - void HorizFilt::multiply(const Increment & dxin, Increment & dxout) const { - dxout = dxin; - Increment dx_tmp(dxin); - for (unsigned int iter = 0; iter < niter_; ++iter) { - dx_tmp = dxout; - soca_horizfilt_mult_f90(keyFtnConfig_, - dx_tmp.toFortran(), - dxout.toFortran(), - geom_.toFortran()); - } - } - // ----------------------------------------------------------------------------- - void HorizFilt::multiplyInverse(const Increment & dxin, Increment & dxout) - const { - dxout = dxin; - } - // ----------------------------------------------------------------------------- - void HorizFilt::multiplyAD(const Increment & dxin, Increment & dxout) const { - dxout = dxin; - Increment dx_tmp(dxin); - for (unsigned int iter = 0; iter < niter_; ++iter) { - dx_tmp = dxout; - soca_horizfilt_multad_f90(keyFtnConfig_, - dx_tmp.toFortran(), - dxout.toFortran(), - geom_.toFortran()); - } - } - // ----------------------------------------------------------------------------- - void HorizFilt::multiplyInverseAD(const Increment & dxin, Increment & dxout) - const { - dxout = dxin; - } - // ----------------------------------------------------------------------------- - void HorizFilt::print(std::ostream & os) const { - os << "SOCA linear change variable: HorizFilt"; - } - // ----------------------------------------------------------------------------- -} // namespace soca diff --git a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.h b/src/soca/LinearVariableChange/HorizFilt/HorizFilt.h deleted file mode 100644 index 881f9b5ff..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/HorizFilt.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#pragma once - -#include -#include -#include - -#include "oops/base/Variables.h" -#include "oops/util/DateTime.h" -#include "oops/util/Printable.h" - -#include "soca/LinearVariableChange/Base/LinearVariableChangeBase.h" - -// Forward declarations -namespace eckit { - class Configuration; -} -namespace soca { - class Fields; - class State; - class Increment; - class Geometry; -} - -// ----------------------------------------------------------------------------- - -namespace soca { - -/// SOCA linear change of variable -class HorizFilt: public LinearVariableChangeBase { - public: - static const std::string classname() {return "soca::HorizFilt";} - - explicit HorizFilt(const State &, const State &, const Geometry &, - const eckit::Configuration &); - ~HorizFilt(); - -/// Perform linear transforms - void multiply(const Increment &, Increment &) const; - void multiplyInverse(const Increment &, Increment &) const; - void multiplyAD(const Increment &, Increment &) const; - void multiplyInverseAD(const Increment &, Increment &) const; - - private: - void print(std::ostream &) const override; - int keyFtnConfig_; - const Geometry & geom_; - oops::Variables vars_; - unsigned int niter_; -}; -// ----------------------------------------------------------------------------- - -} // namespace soca diff --git a/src/soca/LinearVariableChange/HorizFilt/HorizFiltFortran.h b/src/soca/LinearVariableChange/HorizFilt/HorizFiltFortran.h deleted file mode 100644 index 2ad7797ae..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/HorizFiltFortran.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#pragma once - -#include "soca/Fortran.h" - -#include "oops/base/Variables.h" - -// Forward declarations -namespace eckit { - class Configuration; -} - -namespace soca { - - extern "C" { - void soca_horizfilt_setup_f90(F90balopmat &, - const eckit::Configuration * const *, - const F90geom &, - const F90flds &, - const oops::Variables &); - void soca_horizfilt_delete_f90(F90balopmat &); - void soca_horizfilt_mult_f90(const F90balopmat &, - const F90flds &, - F90flds &, - const F90geom &); - void soca_horizfilt_multad_f90(const F90balopmat &, - const F90flds &, - F90flds &, - const F90geom &); - } -} // namespace soca diff --git a/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt.interface.F90 b/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt.interface.F90 deleted file mode 100644 index b02e19440..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt.interface.F90 +++ /dev/null @@ -1,141 +0,0 @@ -! (C) Copyright 2017-2021 UCAR. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> C++ interface for soca_horizfilt_mod::soca_horizfilt -module soca_horizfilt_mod_c - -use fckit_configuration_module, only: fckit_configuration -use iso_c_binding -use oops_variables_mod, only: oops_variables - -! soca modules -use soca_geom_mod_c, only: soca_geom_registry -use soca_geom_mod, only : soca_geom -use soca_horizfilt_mod, only: soca_horizfilt -use soca_increment_mod, only: soca_increment -use soca_increment_reg, only: soca_increment_registry -use soca_state_mod, only: soca_state -use soca_state_reg, only: soca_state_registry - -implicit none -private - - -#define LISTED_TYPE soca_horizfilt - -!> Linked list interface - defines registry_t type -#include "oops/util/linkedList_i.f" - -!> Global registry for soca_horizfilt_mod::soca_horizfilt -type(registry_t), public :: soca_horizfilt_registry - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ - -!> Linked list implementation -#include "oops/util/linkedList_c.f" -! ------------------------------------------------------------------------------ - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_horizfilt_mod::soca_horizfilt::setup() -!! -!! Setup for the filtering operator -subroutine soca_horizfilt_setup_c(c_key_self, & - c_conf, & - c_key_geom, & - c_key_traj, & - c_vars) & - & bind (c,name='soca_horizfilt_setup_f90') - integer(c_int), intent(inout) :: c_key_self !< The filtering structure - type(c_ptr), intent(in) :: c_conf !< The configuration - integer(c_int), intent(in) :: c_key_geom !< Geometry - integer(c_int), intent(in) :: c_key_traj !< Trajectory - type(c_ptr),value, intent(in) :: c_vars !< List of variables - - type(soca_horizfilt), pointer :: self - type(soca_geom), pointer :: geom - type(soca_state), pointer :: traj - type(oops_variables) :: vars - - call soca_geom_registry%get(c_key_geom, geom) - call soca_state_registry%get(c_key_traj, traj) - call soca_horizfilt_registry%init() - call soca_horizfilt_registry%add(c_key_self) - call soca_horizfilt_registry%get(c_key_self, self) - vars = oops_variables(c_vars) - call self%setup(fckit_configuration(c_conf), geom, traj, vars) - -end subroutine soca_horizfilt_setup_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_horizfilt_mod::soca_horizfilt::delete() -!! -!! Delete filtering operator -subroutine soca_horizfilt_delete_c(c_key_self) bind (c,name='soca_horizfilt_delete_f90') - integer(c_int), intent(inout) :: c_key_self !< The filtering structure - - type(soca_horizfilt), pointer :: self - - call soca_horizfilt_registry%get(c_key_self,self) - call self%delete() - call soca_horizfilt_registry%remove(c_key_self) - -end subroutine soca_horizfilt_delete_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_horizfilt_mod::soca_horizfilt::mult() -!! -!! Multiply -subroutine soca_horizfilt_mult_c(c_key_self, c_key_in, c_key_out, c_key_geom) bind(c,name='soca_horizfilt_mult_f90') - integer(c_int), intent(inout) :: c_key_self !< The filtering structure - integer(c_int), intent(in) :: c_key_in !< " to Increment in - integer(c_int), intent(in) :: c_key_out !< " to Increment out - integer(c_int), intent(in) :: c_key_geom !< Geometry - - type(soca_horizfilt), pointer :: self - type(soca_increment), pointer :: xin - type(soca_increment), pointer :: xout - type(soca_geom), pointer :: geom - - call soca_geom_registry%get(c_key_geom, geom) - call soca_horizfilt_registry%get(c_key_self, self) - call soca_increment_registry%get(c_key_in, xin) - call soca_increment_registry%get(c_key_out, xout) - - call self%mult(xin, xout, geom) !< xout = C.xout - -end subroutine soca_horizfilt_mult_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_horizfilt_mod::soca_horizfilt::multad() -!! -!! Multiply adjoint -subroutine soca_horizfilt_mult_ad_c(c_key_self, c_key_in, c_key_out, c_key_geom) & - bind(c,name='soca_horizfilt_multad_f90') - integer(c_int), intent(inout) :: c_key_self !< The filtering structure - integer(c_int), intent(in) :: c_key_in !< " to Increment in - integer(c_int), intent(in) :: c_key_out !< " to Increment out - integer(c_int), intent(in) :: c_key_geom !< Geometry - - type(soca_horizfilt), pointer :: self - type(soca_increment), pointer :: xin - type(soca_increment), pointer :: xout - type(soca_geom), pointer :: geom - - call soca_geom_registry%get(c_key_geom, geom) - call soca_horizfilt_registry%get(c_key_self, self) - call soca_increment_registry%get(c_key_in, xin) - call soca_increment_registry%get(c_key_out, xout) - - call self%multad(xin, xout, geom) !< xout = C^T.xout - -end subroutine soca_horizfilt_mult_ad_c - -end module soca_horizfilt_mod_c diff --git a/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt_mod.F90 b/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt_mod.F90 deleted file mode 100644 index b8c176799..000000000 --- a/src/soca/LinearVariableChange/HorizFilt/soca_horizfilt_mod.F90 +++ /dev/null @@ -1,311 +0,0 @@ -! (C) Copyright 2017-2023 UCAR. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> horizontal filtering -module soca_horizfilt_mod - -use atlas_module, only: atlas_geometry -use fckit_configuration_module, only: fckit_configuration -use iso_c_binding -use kinds -use mpp_domains_mod, only : mpp_update_domains, mpp_update_domains_ad -use oops_variables_mod, only: oops_variables - -! soca modules -use soca_fields_mod, only: soca_field -use soca_geom_mod, only : soca_geom -use soca_increment_mod, only: soca_increment -use soca_state_mod, only: soca_state - -implicit none -private - -!> Variable transform: horizontal filtering -type, public :: soca_horizfilt - type(oops_variables) :: vars !< Apply filtering to vars - real(kind=kind_real), allocatable :: wgh(:,:,:,:) !< Filtering weight - real(kind=kind_real) :: scale_flow !< Used with "flow" filter, sea surface height decorrelation scale - real(kind=kind_real) :: scale_dist - real(kind=kind_real) :: niter !< number of iterations of filter to perform - !> \name indices of compute domain - !! \{ - integer :: isc, iec, jsc, jec - !> \} - - !> \name indices of data domain - !! \{ - integer :: isd, ied, jsd, jed - !> \} - -contains - - !> \copybrief soca_horizfilt_setup \see soca_horizfilt_setup - procedure :: setup => soca_horizfilt_setup - - !> \copybrief soca_horizfilt_delete \see soca_horizfilt_delete - procedure :: delete => soca_horizfilt_delete - - !> \copybrief soca_horizfilt_mult \see soca_horizfilt_mult - procedure :: mult => soca_horizfilt_mult - - !> \copybrief soca_horizfilt_multad \see soca_horizfilt_multad - procedure :: multad => soca_horizfilt_multad -end type soca_horizfilt - - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ - - -! ------------------------------------------------------------------------------ -!> Setup for the horizfilt operator -!! -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_horizfilt_setup(self, f_conf, geom, traj, vars) - class(soca_horizfilt), intent(inout) :: self !< The horizfilt structure - type(fckit_configuration), intent(in) :: f_conf !< The configuration - type(soca_geom), intent(in) :: geom !< Geometry - type(soca_state), intent(in) :: traj !< Trajectory - type(oops_variables), intent(in) :: vars !< List of variables - - type(soca_field), pointer :: ssh - - integer :: i, j, ii, jj - real(kind=kind_real) :: dist(-1:1,-1:1), sum_w, r_dist, r_flow - type(atlas_geometry) :: ageometry - - ! Setup list of variables to apply filtering on - self%vars = vars - - ! Get filter length scales from configuration - if (.not. f_conf%get("scale_dist", self%scale_dist)) self%scale_dist = -1 - if (.not. f_conf%get("scale_flow", self%scale_flow)) self%scale_flow = -1 - call f_conf%get_or_die("niter", self%niter) - - ! scale the gaussian length scales depending on the number of iterations - ! NOTE: numerical instability creeps in once niter is large and scale_dist - ! is much smaller than the size of a grid box - self%scale_dist = self%scale_dist / sqrt(self%niter) - self%scale_flow = self%scale_flow / sqrt(self%niter) - - ! Indices for compute/data domain - self%isd = geom%isd ; self%ied = geom%ied ; self%jsd = geom%jsd; self%jed = geom%jed - self%isc = geom%isc ; self%iec = geom%iec ; self%jsc = geom%jsc; self%jec = geom%jec - - ! Allocate and compute filtering weights - allocate(self%wgh(self%isd:self%ied,self%jsd:self%jed,-1:1,-1:1)) - - ! Create UnitSphere geometry - ageometry = atlas_geometry("Earth") - - ! Compute distance based weights - self%wgh = 0.0_kind_real - r_dist = 1.0 - r_flow = 1.0 - do j = self%jsc, self%jec - do i = self%isc, self%iec - do ii = -1,1 - do jj = -1,1 - - ! Great circle distance - if(self%scale_dist > 0) then - r_dist = ageometry%distance(geom%lon(i,j), geom%lat(i,j), geom%lon(i+ii,j+jj), geom%lat(i+ii,j+jj) ) - r_dist = exp(-0.5 * (r_dist/self%scale_dist) ** 2) - end if - - ! flow based distance (ssh difference) - if(self%scale_flow > 0) then - call traj%get("ssh", ssh) - r_flow = abs(ssh%val(i,j,1) - ssh%val(i+ii,j+jj,1)) - r_flow = exp(-0.5 * ((r_flow / self%scale_flow) ** 2)) - end if - - ! multiply together and apply the land mask - dist(ii,jj) = geom%mask2d(i+ii,j+jj) * r_dist * r_flow - end do - end do - - ! Normalize - sum_w = sum(dist) - if (sum_w>0.0_kind_real) then - self%wgh(i,j,:,:) = dist / sum_w - endif - - end do - end do - -end subroutine soca_horizfilt_setup - - -! ------------------------------------------------------------------------------ -!> Delete horizfilt -!! -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_horizfilt_delete(self) - class(soca_horizfilt), intent(inout) :: self !< The horizfilt structure - - deallocate(self%wgh) - -end subroutine soca_horizfilt_delete - - -! ------------------------------------------------------------------------------ -!> Forward filtering -!! -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_horizfilt_mult(self, dxin, dxout, geom) - class(soca_horizfilt), intent(inout) :: self !< The horizfilt structure - type(soca_increment), intent(in) :: dxin !< Input: Increment - type(soca_increment), intent(inout) :: dxout !< Output: filtered Increment - type(soca_geom), intent(in) :: geom - - type(soca_field), pointer :: field_i, field_o - - integer :: k, ivar - real(kind=kind_real), allocatable, dimension(:,:) :: dxi, dxo - - allocate(dxi(self%isd:self%ied,self%jsd:self%jed)) - allocate(dxo(self%isd:self%ied,self%jsd:self%jed)) - - do ivar = 1, self%vars%nvars() - call dxin%get(trim(self%vars%variable(ivar)), field_i) - call dxout%get(trim(self%vars%variable(ivar)), field_o) - do k = 1, field_i%nz - dxi = field_i%val(:,:,k) - call soca_filt2d(self, dxi, dxo, geom) - field_o%val(:,:,k) = dxo - end do - end do - deallocate(dxi, dxo) - -end subroutine soca_horizfilt_mult - - -! ------------------------------------------------------------------------------ -!> Backward filtering -!! -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_horizfilt_multad(self, dxin, dxout, geom) - class(soca_horizfilt), intent(inout) :: self !< The horizfilt structure - type(soca_increment), intent(in) :: dxin !< Input: - type(soca_increment), intent(inout) :: dxout !< Output: - type(soca_geom), intent(in) :: geom - - type(soca_field), pointer :: field_i, field_o - integer :: k, ivar - real(kind=kind_real), allocatable, dimension(:,:) :: dxi, dxo - - allocate(dxi(self%isd:self%ied,self%jsd:self%jed)) - allocate(dxo(self%isd:self%ied,self%jsd:self%jed)) - - do ivar = 1, self%vars%nvars() - call dxin%get(trim(self%vars%variable(ivar)), field_i) - call dxout%get(trim(self%vars%variable(ivar)), field_o) - do k = 1, field_i%nz - dxi = field_i%val(:,:,k) - call soca_filt2d_ad(self, dxi, dxo, geom) - field_o%val(:,:,k) = dxo - end do - end do - deallocate(dxi, dxo) - -end subroutine soca_horizfilt_multad - - -! ------------------------------------------------------------------------------ -!> Forward filtering for 2D array -!! -!! used by soca_horizfilt_mod::soca_horizfilt::mult() -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_filt2d(self, dxin, dxout, geom) - class(soca_horizfilt), intent(in) :: self - real(kind=kind_real), allocatable, intent(in) :: dxin(:,:) - real(kind=kind_real), allocatable, intent(inout) :: dxout(:,:) - type(soca_geom), intent(in) :: geom - - integer :: i, j - real(kind=kind_real), allocatable :: dxtmp(:,:) - - ! Make a temporary copy of dxin - allocate(dxtmp(self%isd:self%ied,self%jsd:self%jed)) - dxtmp = 0.0_kind_real - dxtmp(self%isc:self%iec,self%jsc:self%jec) = dxin(self%isc:self%iec,self%jsc:self%jec) - - ! Update halo points of input array - call mpp_update_domains(dxtmp, geom%Domain%mpp_domain, complete=.true.) - - ! 9-point distance weighted average - dxout = 0.0_kind_real - do j = self%jsc, self%jec - do i = self%isc, self%iec - if (geom%mask2d(i,j)==1) then - dxout(i,j) = & - self%wgh(i,j,-1,1)*dxtmp(i-1,j+1) + & - self%wgh(i,j,0,1)*dxtmp(i,j+1) + & - self%wgh(i,j,1,1)*dxtmp(i+1,j+1) + & - self%wgh(i,j,-1,0)*dxtmp(i-1,j) + & - self%wgh(i,j,0,0)*dxtmp(i,j) + & - self%wgh(i,j,1,0)*dxtmp(i+1,j) + & - self%wgh(i,j,-1,-1)*dxtmp(i-1,j-1) + & - self%wgh(i,j,0,-1)*dxtmp(i,j-1) + & - self%wgh(i,j,1,-1)*dxtmp(i+1,j-1) - end if - end do - end do - - ! Update halo - call mpp_update_domains(dxout, geom%Domain%mpp_domain, complete=.true.) - - deallocate(dxtmp) - -end subroutine soca_filt2d - - -! ------------------------------------------------------------------------------ -!> Backward filtering for 2D array -!! -!! used by soca_horizfilt_mod::soca_horizfilt::multad() -!! \relates soca_horizfilt_mod::soca_horizfilt -subroutine soca_filt2d_ad(self, dxin, dxout, geom) - class(soca_horizfilt), intent(in) :: self - real(kind=kind_real), allocatable, intent(in) :: dxin(:,:) - real(kind=kind_real), allocatable, intent(inout) :: dxout(:,:) - type(soca_geom), intent(in) :: geom - - integer :: i, j - real(kind=kind_real), allocatable :: dxtmp(:,:) - - ! Make a temporary copy of dxin - allocate(dxtmp(self%isd:self%ied,self%jsd:self%jed)) - dxtmp = 0.0_kind_real - dxtmp(self%isc:self%iec,self%jsc:self%jec) = dxin(self%isc:self%iec,self%jsc:self%jec) - - dxout = 0.0_kind_real - ! Adjoint of 9-point weighted average - do j = self%jec, self%jsc, -1 - do i = self%iec, self%isc, -1 - if (geom%mask2d(i,j)==1) then - dxout(i-1,j+1) = dxout(i-1,j+1) + self%wgh(i,j,-1, 1)*dxtmp(i,j) - dxout(i,j+1) = dxout(i,j+1) + self%wgh(i,j, 0, 1)*dxtmp(i,j) - dxout(i+1,j+1) = dxout(i+1,j+1) + self%wgh(i,j, 1, 1)*dxtmp(i,j) - dxout(i-1,j) = dxout(i-1,j) + self%wgh(i,j,-1, 0)*dxtmp(i,j) - dxout(i,j) = dxout(i,j) + self%wgh(i,j, 0, 0)*dxtmp(i,j) - dxout(i+1,j) = dxout(i+1,j) + self%wgh(i,j, 1, 0)*dxtmp(i,j) - dxout(i-1,j-1) = dxout(i-1,j-1) + self%wgh(i,j,-1,-1)*dxtmp(i,j) - dxout(i,j-1) = dxout(i,j-1) + self%wgh(i,j, 0,-1)*dxtmp(i,j) - dxout(i+1,j-1) = dxout(i+1,j-1) + self%wgh(i,j, 1,-1)*dxtmp(i,j) - end if - end do - end do - - ! Adjoint of halo update - call mpp_update_domains_ad(dxout, geom%Domain%mpp_domain, complete=.true.) - - deallocate(dxtmp) - -end subroutine soca_filt2d_ad - -end module soca_horizfilt_mod diff --git a/src/soca/Traits.h b/src/soca/Traits.h index 32d0f4463..0b1af9df1 100644 --- a/src/soca/Traits.h +++ b/src/soca/Traits.h @@ -38,7 +38,7 @@ struct Traits { typedef soca::GeometryIterator GeometryIterator; typedef soca::State State; typedef soca::Increment Increment; - typedef soca::ErrorCovariance Covariance; + typedef soca::ErrorCovariance Covariance; // Not actually used, just empty stubs typedef soca::ModelBias ModelAuxControl; typedef soca::ModelBiasIncrement ModelAuxIncrement; From c81b55710326b1b8afa87db6daf05e7e5c9c0b90 Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 15:27:35 -0700 Subject: [PATCH 06/11] remove vertconv --- src/soca/LinearVariableChange/CMakeLists.txt | 2 - .../VertConv/CMakeLists.txt | 7 - .../LinearVariableChange/VertConv/VertConv.cc | 80 ------- .../LinearVariableChange/VertConv/VertConv.h | 56 ----- .../VertConv/VertConvFortran.h | 30 --- .../VertConv/soca_vertconv.interface.F90 | 149 ------------ .../VertConv/soca_vertconv_mod.F90 | 224 ------------------ 7 files changed, 548 deletions(-) delete mode 100644 src/soca/LinearVariableChange/VertConv/CMakeLists.txt delete mode 100644 src/soca/LinearVariableChange/VertConv/VertConv.cc delete mode 100644 src/soca/LinearVariableChange/VertConv/VertConv.h delete mode 100644 src/soca/LinearVariableChange/VertConv/VertConvFortran.h delete mode 100644 src/soca/LinearVariableChange/VertConv/soca_vertconv.interface.F90 delete mode 100644 src/soca/LinearVariableChange/VertConv/soca_vertconv_mod.F90 diff --git a/src/soca/LinearVariableChange/CMakeLists.txt b/src/soca/LinearVariableChange/CMakeLists.txt index f1db13fc8..7a70a600d 100644 --- a/src/soca/LinearVariableChange/CMakeLists.txt +++ b/src/soca/LinearVariableChange/CMakeLists.txt @@ -3,10 +3,8 @@ add_subdirectory(Base) add_subdirectory(BkgErr) add_subdirectory(BkgErrFilt) add_subdirectory(BkgErrGodas) -add_subdirectory(HorizFilt) add_subdirectory(LinearModel2GeoVaLs) add_subdirectory(util) -add_subdirectory(VertConv) soca_target_sources( LinearVariableChange.cc diff --git a/src/soca/LinearVariableChange/VertConv/CMakeLists.txt b/src/soca/LinearVariableChange/VertConv/CMakeLists.txt deleted file mode 100644 index 08b4bc483..000000000 --- a/src/soca/LinearVariableChange/VertConv/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -soca_target_sources( - soca_vertconv_mod.F90 - soca_vertconv.interface.F90 - VertConv.cc - VertConv.h - VertConvFortran.h -) \ No newline at end of file diff --git a/src/soca/LinearVariableChange/VertConv/VertConv.cc b/src/soca/LinearVariableChange/VertConv/VertConv.cc deleted file mode 100644 index 41466a309..000000000 --- a/src/soca/LinearVariableChange/VertConv/VertConv.cc +++ /dev/null @@ -1,80 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#include -#include - -#include "eckit/config/Configuration.h" - -#include "oops/util/Logger.h" - -#include "soca/Geometry/Geometry.h" -#include "soca/Increment/Increment.h" -#include "soca/State/State.h" -#include "soca/Traits.h" -#include "soca/LinearVariableChange/VertConv/VertConv.h" -#include "soca/LinearVariableChange/VertConv/VertConvFortran.h" - - -using oops::Log; - -namespace soca { - - // --------------------------------------------------------------------------- - - static LinearVariableChangeMaker - makerLinearVariableCHangeVertConv_("DEPRECATED_VertConvSOCA"); - - // --------------------------------------------------------------------------- - VertConv::VertConv(const State & bkg, - const State & traj, - const Geometry & geom, - const eckit::Configuration & conf) : - bkg_lr_(geom, bkg), geom_(geom) { - oops::Log::trace() << "soca::VertConv::setup " << std::endl; - const eckit::Configuration * configc = &conf; - - // Compute convolution weights - soca_vertconv_setup_f90(keyFtnConfig_, - &configc, - bkg_lr_.toFortran(), - geom.toFortran()); - } - // --------------------------------------------------------------------------- - VertConv::~VertConv() { - oops::Log::trace() << "soca::VertConv::delete " << std::endl; - soca_vertconv_delete_f90(keyFtnConfig_); - } - // --------------------------------------------------------------------------- - void VertConv::multiply(const Increment & dxa, Increment & dxm) const { - // dxm = K dxa - oops::Log::trace() << "soca::VertConv::multiply " << std::endl; - soca_vertconv_mult_f90(dxa.toFortran(), dxm.toFortran(), keyFtnConfig_); - } - // --------------------------------------------------------------------------- - void VertConv::multiplyInverse(const Increment & dxm, Increment & dxa) const { - oops::Log::trace() << "soca::VertConv::multiplyInverse " << std::endl; - dxa = dxm; - } - // --------------------------------------------------------------------------- - void VertConv::multiplyAD(const Increment & dxm, Increment & dxa) const { - // dxa = K^T dxm - oops::Log::trace() << "soca::VertConv::multiplyAD " << std::endl; - soca_vertconv_multad_f90(dxm.toFortran(), dxa.toFortran(), keyFtnConfig_); - } - // --------------------------------------------------------------------------- - void VertConv::multiplyInverseAD(const Increment & dxa, - Increment & dxm) const { - oops::Log::trace() << "soca::VertConv::multiplyInverseAD " << std::endl; - dxm = dxa; - } - // --------------------------------------------------------------------------- - void VertConv::print(std::ostream & os) const { - os << "SOCA linear change variable: VertConv"; - } - // --------------------------------------------------------------------------- -} // namespace soca diff --git a/src/soca/LinearVariableChange/VertConv/VertConv.h b/src/soca/LinearVariableChange/VertConv/VertConv.h deleted file mode 100644 index 43dcbb105..000000000 --- a/src/soca/LinearVariableChange/VertConv/VertConv.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#pragma once - -#include -#include - -#include "soca/State/State.h" - -#include "oops/util/DateTime.h" -#include "oops/util/Printable.h" - -#include "soca/LinearVariableChange/Base/LinearVariableChangeBase.h" - -// Forward declarations -namespace eckit { - class Configuration; -} -namespace soca { - class Geometry; - class Increment; -} - -// ----------------------------------------------------------------------------- - -namespace soca { - -/// SOCA linear change of variable -class VertConv: public LinearVariableChangeBase { - public: - static const std::string classname() {return "soca::VertConv";} - - explicit VertConv(const State &, const State &, const Geometry &, - const eckit::Configuration &); - ~VertConv(); - -/// Perform linear transforms - void multiply(const Increment &, Increment &) const; - void multiplyInverse(const Increment &, Increment &) const; - void multiplyAD(const Increment &, Increment &) const; - void multiplyInverseAD(const Increment &, Increment &) const; - - private: - void print(std::ostream &) const override; - int keyFtnConfig_; - const State bkg_lr_; - const Geometry geom_; -}; -// ----------------------------------------------------------------------------- - -} // namespace soca diff --git a/src/soca/LinearVariableChange/VertConv/VertConvFortran.h b/src/soca/LinearVariableChange/VertConv/VertConvFortran.h deleted file mode 100644 index 27006e9d5..000000000 --- a/src/soca/LinearVariableChange/VertConv/VertConvFortran.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * (C) Copyright 2019-2021 UCAR - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - */ - -#pragma once - -#include "soca/Fortran.h" - -// Forward declarations -namespace eckit { - class Configuration; -} - -namespace soca { - - extern "C" { - void soca_vertconv_setup_f90(F90balopmat &, - const eckit::Configuration * const *, - const F90flds &, - const F90geom &); - void soca_vertconv_delete_f90(F90balopmat &); - void soca_vertconv_mult_f90(const F90balopmat &, F90balopmat &, - const F90balopmat &); - void soca_vertconv_multad_f90(const F90balopmat &, F90balopmat &, - const F90balopmat &); - } -} // namespace soca diff --git a/src/soca/LinearVariableChange/VertConv/soca_vertconv.interface.F90 b/src/soca/LinearVariableChange/VertConv/soca_vertconv.interface.F90 deleted file mode 100644 index 60c99172f..000000000 --- a/src/soca/LinearVariableChange/VertConv/soca_vertconv.interface.F90 +++ /dev/null @@ -1,149 +0,0 @@ -! (C) Copyright 2017-2021 UCAR -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> C++ interfaces for soca_vertconv_mod::soca_vertconv -module soca_vertconv_mod_c - -use fckit_configuration_module, only: fckit_configuration -use iso_c_binding -use kinds, only: kind_real - -! soca modules -use soca_geom_mod_c, only: soca_geom_registry -use soca_geom_mod, only: soca_geom -use soca_increment_mod, only: soca_increment -use soca_increment_reg, only: soca_increment_registry -use soca_state_mod, only: soca_state -use soca_state_reg, only: soca_state_registry -use soca_vertconv_mod, only: soca_vertconv - -implicit none -private - -#define LISTED_TYPE soca_vertconv - -!> Linked list interface - defines registry_t type -#include "oops/util/linkedList_i.f" - -!> Global registry for soca_vertconv -type(registry_t), public :: soca_vertconv_registry - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ - -!> Linked list implementation -#include "oops/util/linkedList_c.f" - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_vertconv_mod::soca_vertconv::setup() -!! -!! Constructor for Vertconv -subroutine soca_vertconv_setup_c(c_key_self, c_conf, c_key_bkg, c_key_geom) & - bind(c,name='soca_vertconv_setup_f90') - - integer(c_int), intent(inout) :: c_key_self !< The Vertconv structure - type(c_ptr), intent(in) :: c_conf !< The configuration - integer(c_int), intent(in) :: c_key_bkg !< background - integer(c_int), intent(in) :: c_key_geom !< geometry - - type(soca_vertconv), pointer :: self - type(soca_state), pointer :: bkg - type(soca_geom), pointer :: geom - - call soca_vertconv_registry%init() - call soca_vertconv_registry%add(c_key_self) - call soca_vertconv_registry%get(c_key_self, self) - call soca_state_registry%get(c_key_bkg, bkg) - call soca_geom_registry%get(c_key_geom, geom) - - call self%setup(bkg, geom, fckit_configuration(c_conf)) - -end subroutine soca_vertconv_setup_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_vertconv_mod::soca_vertconv destructor -!! -!! Destructor for Vertconv -subroutine soca_vertconv_delete_c(c_key_self) bind(c,name='soca_vertconv_delete_f90') - - integer(c_int), intent(inout) :: c_key_self !< The background covariance structure - - type(soca_vertconv), pointer :: self - - ! Deallocate background - ! TODO - ! Deallocate ocean depth array - ! TODO - - call soca_vertconv_registry%get(c_key_self, self) - - if (associated(self%bkg)) nullify(self%bkg) - - call soca_vertconv_registry%remove(c_key_self) - -end subroutine soca_vertconv_delete_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_vertconv_mod::soca_vertconv::mult() -!! -!! Multiplication -subroutine soca_vertconv_mult_c(c_key_a, c_key_m, c_key_self)& - bind(c,name='soca_vertconv_mult_f90') - - integer(c_int), intent(in) :: c_key_a !< Increment in - integer(c_int), intent(in) :: c_key_m !< Increment out - integer(c_int), intent(in) :: c_key_self !< config - - type(soca_increment), pointer :: dxa ! in - type(soca_increment), pointer :: dxm ! out - type(soca_vertconv), pointer :: self - - call soca_increment_registry%get(c_key_a, dxa) - call soca_increment_registry%get(c_key_m, dxm) - call soca_vertconv_registry%get(c_key_self, self) - - !< Computes dxm = Vertconv dxa - - ! dxm = dxa - call dxm%copy( dxa) - - ! Apply forward convolution operator to T & S - call self%mult(dxm, dxa) - -end subroutine soca_vertconv_mult_c - - -! ------------------------------------------------------------------------------ -!> C++ interface for soca_vertconv_mod::soca_vertconv::mult_ad() -!! -!! Multiplication adjoint -subroutine soca_vertconv_multad_c(c_key_m, c_key_a, c_key_self)& - bind(c,name='soca_vertconv_multad_f90') - - integer(c_int), intent(in) :: c_key_a !< Increment out - integer(c_int), intent(in) :: c_key_m !< Increment in - integer(c_int), intent(in) :: c_key_self !< config - - type(soca_increment), pointer :: dxa - type(soca_increment), pointer :: dxm - type(soca_vertconv), pointer :: self - - call soca_increment_registry%get(c_key_a,dxa) - call soca_increment_registry%get(c_key_m,dxm) - call soca_vertconv_registry%get(c_key_self, self) - - ! dxa = dxm - call dxa%copy(dxm) - - ! Apply adjoint of convolution operator - call self%mult_ad(dxm, dxa) - -end subroutine soca_vertconv_multad_c - -end module soca_vertconv_mod_c diff --git a/src/soca/LinearVariableChange/VertConv/soca_vertconv_mod.F90 b/src/soca/LinearVariableChange/VertConv/soca_vertconv_mod.F90 deleted file mode 100644 index 5af01a99a..000000000 --- a/src/soca/LinearVariableChange/VertConv/soca_vertconv_mod.F90 +++ /dev/null @@ -1,224 +0,0 @@ -! (C) Copyright 2017-2021 UCAR -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -!> variable transform: vertical convolution -module soca_vertconv_mod - -use fckit_configuration_module, only: fckit_configuration -use kinds, only: kind_real -use gc99_mod, only: gc99 -use type_mpl, only: mpl_type - -! soca modules -use soca_fields_mod, only: soca_field -use soca_geom_mod, only: soca_geom -use soca_increment_mod, only:soca_increment -use soca_state_mod, only: soca_state - -implicit none -private - -!> Variable transform for vertical convolution -!! -!! \note this only operates on tocn and socn -type, public :: soca_vertconv - real(kind=kind_real) :: lz_min !> Vertical decorrelation minimum [m] - real(kind=kind_real) :: lz_mld !> if /= 0, Use MLD to calculate Lz - real(kind=kind_real) :: lz_mld_max !> if calculating Lz from MLD, max value to use - real(kind=kind_real) :: scale_layer_thick !> Set the minimum decorrelation scale - !> as a multiple of the layer thickness - type(soca_state), pointer :: bkg !> Background - type(soca_geom), pointer :: geom !> Geometry - integer :: isc, iec, jsc, jec !> Compute domain - -contains - !> \copybrief soca_conv_setup \see soca_conv_setup - procedure :: setup => soca_conv_setup - - !> \copybrief soca_conv_mult \see soca_conv_mult - procedure :: mult => soca_conv_mult - - !> \copybrief soca_conv_mult_ad \see soca_conv_mult_ad - procedure :: mult_ad => soca_conv_mult_ad - -end type soca_vertconv - - -! ------------------------------------------------------------------------------ -contains -! ------------------------------------------------------------------------------ - -! ------------------------------------------------------------------------------ -!> Setup for the vertical convolution -!! -!! \todo: Investigate computing and storing weights in vertconc data structure -!! \relates soca_vertconv_mod::soca_vertconv -subroutine soca_conv_setup (self, bkg, geom, f_conf) - class(soca_vertconv), intent(inout) :: self - type(soca_state), target, intent(in) :: bkg !< T/S background - type(fckit_configuration), intent(in) :: f_conf !< yaml configuration - type(soca_geom), target, intent(in) :: geom !< input geometry - - ! Get configuration for vertical convolution - call f_conf%get_or_die("Lz_min", self%lz_min ) - call f_conf%get_or_die("Lz_mld", self%lz_mld ) - if ( self%lz_mld /= 0) & - call f_conf%get_or_die("Lz_mld_max", self%lz_mld_max ) - call f_conf%get_or_die("scale_layer_thick", self%scale_layer_thick ) - - ! Associate background and geometry - self%bkg => bkg - self%geom => geom - - ! Indices for compute domain (no halo) - self%isc=geom%isc; self%iec=geom%iec - self%jsc=geom%jsc; self%jec=geom%jec - -end subroutine soca_conv_setup - - -! ------------------------------------------------------------------------------ -!> Calculate vertical correlation lengths for a given column -!! -!! \relates soca_vertconv_mod::soca_vertconv -subroutine soca_calc_lz(self, i, j, lz) - class(soca_vertconv), intent(in) :: self - integer, intent(in) :: i !< i index of grid point - integer, intent(in) :: j !< j index of grid point - real(kind=kind_real), intent(inout) :: lz(:) !< output correlation legnths - - real(kind=kind_real) :: mld, z - integer :: k - type(soca_field), pointer :: hocn, mld_fld, layer_depth - - ! minium scale is based on layer thickness - call self%bkg%get("hocn", hocn) - call self%bkg%get("mld", mld_fld) - call self%bkg%get("layer_depth", layer_depth) - lz = self%lz_min - lz = max(lz, self%scale_layer_thick*abs(hocn%val(i,j,:))) - - ! if the upper Lz should be calculated from the MLD - ! interpolate values from top to bottom of ML - if ( self%lz_mld /= 0 ) then - mld = mld_fld%val(i,j, 1) - mld = min( mld, self%lz_mld_max) - mld = max( mld, self%lz_min) - do k=1, size(lz) - z = layer_depth%val(i,j, k) - if (z >= mld) exit ! end of ML, exit loop - lz(k) = max(lz(k), lz(k) + (mld - lz(k)) * (1.0 - z/mld)) - end do - end if - -end subroutine soca_calc_lz - - -! ------------------------------------------------------------------------------ -!> Apply forward convolution -!! -!! \relates soca_vertconv_mod::soca_vertconv -subroutine soca_conv_mult (self, convdx, dx) - class(soca_vertconv), intent(inout) :: self - type(soca_increment), intent(in) :: dx !< input increment to convolve - type(soca_increment),intent(inout) :: convdx !< output increment - - real(kind=kind_real), allocatable :: z(:), lz(:) - real(kind=kind_real) :: dist2, coef - integer :: nl, j, k, id, jd, n - type(mpl_type) :: mpl - - type(soca_field), pointer :: field_dx, field_convdx, layer_depth - - call self%bkg%get("layer_depth", layer_depth) - nl = layer_depth%nz - - allocate(z(nl), lz(nl)) - - do n=1,size(dx%fields) - ! TODO remove these hardcoded values, use the yaml file - select case(dx%fields(n)%name) - case ("tocn", "socn") - call dx%get(dx%fields(n)%name, field_dx) - call convdx%get(dx%fields(n)%name, field_convdx) - do id = self%isc, self%iec - do jd = self%jsc, self%jec - ! skip land - if (self%geom%mask2d(id,jd) /= 1) cycle - - ! get correlation lengths - call soca_calc_lz(self, id, jd, lz) - - ! perform convolution - z(:) = layer_depth%val(id,jd,:) - do j = 1, nl - field_convdx%val(id,jd,j) = 0.0d0 - do k = 1,nl - dist2 = abs(z(j)-z(k)) - coef = gc99(dist2/lz(k)) - field_convdx%val(id,jd,j) = field_convdx%val(id,jd,j) & - &+ field_dx%val(id,jd,k)*coef - end do - end do - end do - end do - end select - end do - deallocate(z, lz) -end subroutine soca_conv_mult - - -! ------------------------------------------------------------------------------ -!> Apply backward convolution -!! -!! \relates soca_vertconv_mod::soca_vertconv -subroutine soca_conv_mult_ad (self, convdx, dx) - class(soca_vertconv), intent(inout) :: self - type(soca_increment),intent(inout) :: dx !< output increment - type(soca_increment), intent(in) :: convdx !< input increment - - real(kind=kind_real), allocatable :: z(:), lz(:) - real(kind=kind_real) :: dist2, coef - integer :: nl, j, k, id, jd, n - type(mpl_type) :: mpl - type(soca_field), pointer :: field_dx, field_convdx, layer_depth - - call self%bkg%get("layer_depth", layer_depth) - nl = layer_depth%nz - allocate(z(nl), lz(nl)) - - do n=1,size(dx%fields) - select case(dx%fields(n)%name) - ! TODO remove these hardcoded values, use the yaml file - case ("tocn", "socn") - call dx%get(dx%fields(n)%name, field_dx) - call convdx%get(dx%fields(n)%name, field_convdx) - do id = self%isc, self%iec - do jd = self%jsc, self%jec - ! skip land - if (self%geom%mask2d(id,jd) /= 1) cycle - - ! get correlation lengths - call soca_calc_lz(self, id, jd, lz) - - ! perform convolution - z(:) = layer_depth%val(id,jd,:) - field_dx%val(id,jd,:) = 0.0d0 - do j = nl, 1, -1 - do k = nl, 1, -1 - dist2 = abs(z(j)-z(k)) - coef = gc99(dist2/lz(k)) - field_dx%val(id,jd,k) = field_dx%val(id,jd,k) + coef*field_convdx%val(id,jd,j) - end do - end do - end do - end do - end select - end do - deallocate(z, lz) - -end subroutine soca_conv_mult_ad - -end module soca_vertconv_mod From 15a0c11c55d518510320c82676e37852a6ae2e8c Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Mon, 26 Feb 2024 16:11:01 -0700 Subject: [PATCH 07/11] WIP --- test/CMakeLists.txt | 1 - test/executables/TestLinearModel.cc | 21 -- test/testinput/3dhybfgat.yml | 44 ++-- test/testinput/3dvar_soca.yml | 359 ---------------------------- test/testinput/3dvarfgat.yml | 43 ++-- test/testinput/3dvarfgat_pseudo.yml | 40 ++-- test/testinput/4dhybenvar.yml | 27 ++- test/testinput/linearmodel.yml | 51 ---- test/testref/3dhybfgat.test | 31 +-- test/testref/3dvar_soca.test | 52 ---- test/testref/3dvarfgat.test | 48 ++-- test/testref/3dvarfgat_pseudo.test | 34 +-- test/testref/4dhybenvar.test | 14 +- 13 files changed, 126 insertions(+), 639 deletions(-) delete mode 100644 test/executables/TestLinearModel.cc delete mode 100644 test/testinput/3dvar_soca.yml delete mode 100644 test/testinput/linearmodel.yml delete mode 100644 test/testref/3dvar_soca.test diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9921b770e..d5cba08fb 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -4,7 +4,6 @@ set( soca_test_input testinput/3dhybfgat.yml testinput/3dvar_diffusion.yml testinput/3dvar_single_ob.yml - testinput/3dvar_soca.yml testinput/3dvar_zero_ob.yml testinput/3dvarbump.yml testinput/3dvarfgat_pseudo.yml diff --git a/test/executables/TestLinearModel.cc b/test/executables/TestLinearModel.cc deleted file mode 100644 index ca6924d5d..000000000 --- a/test/executables/TestLinearModel.cc +++ /dev/null @@ -1,21 +0,0 @@ -/* - * (C) Copyright 2009-2016 ECMWF. - * (C) Copyright 2017-2021 UCAR. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * In applying this licence, ECMWF does not waive the privileges and immunities - * granted to it by virtue of its status as an intergovernmental organisation nor - * does it submit to any jurisdiction. - */ - -#include "soca/Traits.h" -#include "oops/runs/Run.h" -#include "test/interface/LinearModel.h" - -int main(int argc, char ** argv) { - oops::Run run(argc, argv); - test::LinearModel tests; - return run.execute(tests); -} - diff --git a/test/testinput/3dhybfgat.yml b/test/testinput/3dhybfgat.yml index b91f6fe18..41876b49d 100644 --- a/test/testinput/3dhybfgat.yml +++ b/test/testinput/3dhybfgat.yml @@ -1,6 +1,6 @@ _date_begin: &date_begin 2018-04-15T00:00:00Z cost function: - cost type: 4D-Var + cost type: 3D-FGAT time window: begin: *date_begin length: PT6H @@ -15,7 +15,7 @@ cost function: name: MOM6solo tstep: PT1H advance_mom6: 1 - model variables: &model_vars [cicen, hicen, socn, uocn, vocn, tocn, ssh, hocn, sw, lhf, shf, lw, us, mld, layer_depth] + model variables: &model_vars [cicen, hicen, socn, uocn, vocn, tocn, ssh, hocn, mld, layer_depth] variable change: variable change name: Model2Ana @@ -37,20 +37,21 @@ cost function: covariance model: hybrid components: - covariance: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, uocn, vocn, ssh, sw, lhf, shf, lw, us] - date: *date_begin - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh, sw, lhf, shf, lw, us] - - name: ice - variables: [cicen, hicen] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [tocn, socn, ssh, cicen, hicen] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, ssh, cicen, hicen] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -78,12 +79,6 @@ cost function: hicen_min: 10.0 hicen_max: 100.0 - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - - linear variable change name: BalanceSOCA dsdtmax: 0.1 dsdzmin: 3.0e-6 @@ -154,11 +149,6 @@ variational: algorithm: RPCG iterations: - geometry: *geom - linear model: - name: Identity - increment variables: *soca_vars - variable change: Identity - tstep: PT1H ninner: 5 gradient norm reduction: 1e-15 test: on diff --git a/test/testinput/3dvar_soca.yml b/test/testinput/3dvar_soca.yml deleted file mode 100644 index 2c90d5374..000000000 --- a/test/testinput/3dvar_soca.yml +++ /dev/null @@ -1,359 +0,0 @@ -# common filters used later on -_: &land_mask - filter: Domain Check - where: - - variable: {name: GeoVaLs/sea_area_fraction} - minvalue: 0.5 - -cost function: - cost type: 3D-Var - time window: - begin: &date_begin 2018-04-14T00:00:00Z - length: P2D - analysis variables: &a_vars [cicen, hicen, socn, tocn, ssh, sw, lhf, shf, lw, us, chl, biop, swh] - geometry: &geom - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - - background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - sfc_filename: sfc.res.nc - wav_filename: wav.res.nc - date: &bkg_date 2018-04-15T00:00:00Z - state variables: &b_vars [cicen, hicen, socn, tocn, ssh, hocn, sw, lhf, shf, lw, us, chl, biop, swh, mld, layer_depth] - - background error: - covariance model: SocaError - analysis variables: *a_vars - date: 2018-04-15T00:00:00Z - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, ssh, sw, lhf, shf, lw, us, chl, biop] - - name: ice - variables: [cicen, hicen] - - name: wav - variables: [swh] - - linear variable change: - input variables: *a_vars - output variables: *a_vars - linear variable changes: - - - linear variable change name: BkgErrFILT - ocean_depth_min: 1000 # [m] - rescale_bkgerr: 1.0 - efold_z: 2500.0 # [m] - - - linear variable change name: BkgErrSOCA - read_from_file: 3 - basename: data_static/72x35x25/ - ocn_filename: ocn.bkgerror.nc - ice_filename: ice.bkgerror.nc - wav_filename: wav.bkgerror.nc - date: *bkg_date - t_min: 0.0 - t_max: 2.5 - s_min: 0.0 - s_max: 0.2 - ssh_min: 0.0 # std ssh=0 => ssh balance applied as - ssh_max: 0.0 # strong constraint - cicen_min: 0.1 - cicen_max: 0.5 - hicen_min: 10.0 - hicen_max: 100.0 - chl_min: 0.003 - chl_max: 10.0 - biop_min: 0.0 - biop_max: 1.0e-6 - swh_min: 0.1 - swh_max: 1.0 - #fixed_std_sst: 0.005 # OK to create pretty increments - #fixed_std_sss: 0.001 # but that option should not exist! - - - linear variable change name: VertConvSOCA - Lz_min: 10.0 - Lz_mld: 1 - Lz_mld_max: 500 - scale_layer_thick: 1.5 - - - linear variable change name: BalanceSOCA - dsdtmax: 0.1 - dsdzmin: 3.0e-6 - dtdzmin: 1.0e-6 - nlayers: 10 - dcdt: - filename: data_static/72x35x25/dcdt.nc - name: dcdt - - observations: - observers: - - obs space: - name: CoolSkin - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/sst_coolskin.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sst.nc - simulated variables: [seaSurfaceTemperature] - obs operator: - name: CoolSkin - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Thinning - amount: 0.1 - random seed: 0 - - - obs space: - name: SeaSurfaceTemp - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/sst.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sst.nc - simulated variables: [seaSurfaceTemperature] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Bounds Check - minvalue: 5.0 - maxvalue: 30.0 - - filter: Background Check - threshold: 8 - - filter: Thinning - amount: 0.1 - random seed: 0 - - - obs space: - name: SeaSurfaceSalinity - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/sss.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/sss.nc - simulated variables: [seaSurfaceSalinity] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - filter: Domain Check - where: - - variable: {name: GeoVaLs/distance_from_coast} - minvalue: 1500e3 - - filter: Domain Check - where: - - variable: {name: GeoVaLs/sea_surface_temperature} - minvalue: 15 - - - obs space: - name: ADT - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/adt.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/adt.nc - simulated variables: [absoluteDynamicTopography] - obs operator: - name: ADT - obs error: - covariance model: diagonal - obs filters: - - filter: Domain Check - where: - - variable: {name: GeoVaLs/sea_floor_depth_below_sea_surface} - minvalue: 2000 - - - obs space: - name: InsituTS - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/prof.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/prof.nc - simulated variables: [waterTemperature, salinity] - obs operator: - name: Composite - components: - - name: InsituTemperature - variables: - - name: waterTemperature - - name: VertInterp - observation alias file: testinput/obsop_name_map.yml - variables: - - name: salinity - vertical coordinate: sea_water_depth - observation vertical coordinate: depth - interpolation method: linear - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Background Check - threshold: 5 - filter variables: - - name: waterTemperature - - - obs space: - name: SeaIceFraction - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/icec.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/icec.nc - simulated variables: [seaIceFraction] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - - obs space: - name: SeaSurfaceChlorophyll - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/chl.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/chl.nc - simulated variables: [seaSurfaceChlorophyllMassConcentration] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - filter: Gaussian_Thinning - horizontal_mesh: 111 - use_reduced_horizontal_grid: false - - filter: BlackList - filter variables: - - name: seaSurfaceChlorophyllMassConcentration - where: - - variable: - name: ObsValue/seaSurfaceChlorophyllMassConcentration - minvalue: 0.001 - maxvalue: 10.0 - - variable: - name: MetaData/latitude - minvalue: -60.0 - maxvalue: 60.0 - action: - name: reject - where: - - variable: - name: PreQC/seaSurfaceChlorophyllMassConcentration - any_bit_set_of: 0,1,3,4,5,8,9,10,12,14,15,16,19,21,22,25 - action: - name: inflate error - inflation factor: 2.0 - - - obs space: - name: SeaSurfaceBiomassP - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/biomass_p.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/biomass_p.nc - simulated variables: [oceanSurfaceBiomassContent] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - - - obs space: - name: SeaSurfaceHS - obsdataout: - engine: - type: H5File - obsfile: data_generated/3dvar_soca/swh.3dvar_soca.nc - obsdatain: - engine: - type: H5File - obsfile: data_static/obs/swh.nc - simulated variables: [waveHeightSignificant] - obs operator: - name: Identity - observation alias file: testinput/obsop_name_map.yml - obs error: - covariance model: diagonal - obs filters: - - *land_mask - -variational: - minimizer: - algorithm: RPCG - iterations: - - geometry: *geom - ninner: 5 - gradient norm reduction: 1e-15 - test: on - diagnostics: - departures: ombg - online diagnostics: - write increment: true - increment: - state component: - datadir: data_generated/3dvar_soca - date: *bkg_date - exp: 3dvar_soca.iter1 - type: incr - -output: - datadir: data_generated/3dvar_soca - exp: 3dvar_soca - type: an - -final: - diagnostics: - departures: oman - -test: - reference filename: testref/3dvar_soca.test - test output filename: testoutput/3dvar_soca.test - float relative tolerance: 1e-4 diff --git a/test/testinput/3dvarfgat.yml b/test/testinput/3dvarfgat.yml index 2fa686d98..8248a7560 100644 --- a/test/testinput/3dvarfgat.yml +++ b/test/testinput/3dvarfgat.yml @@ -6,7 +6,7 @@ _: &land_mask minvalue: 0.5 cost function: - cost type: 4D-Var + cost type: 3D-FGAT time window: begin: &date_begin 2018-04-15T00:00:00Z length: PT6H @@ -39,20 +39,21 @@ cost function: state variables: *model_vars background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, uocn, vocn, ssh, sw, lhf, shf, lw, us] - date: 2018-04-15T00:00:00Z - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh, sw, lhf, shf, lw, us] - - name: ice - variables: [cicen, hicen] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [tocn, socn, ssh, uocn, vocn, cicen, hicen, sw, lhf, shf, lw, us] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, ssh, uocn, vocn, cicen, hicen, sw, lhf, shf, lw, us] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -79,12 +80,6 @@ cost function: hicen_min: 10.0 hicen_max: 100.0 - - linear variable change name: VertConvSOCA - Lz_min: 10.0 - Lz_mld: 1 - Lz_mld_max: 500 - scale_layer_thick: 1.5 - - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 @@ -259,11 +254,7 @@ variational: algorithm: RPCG iterations: - geometry: *geom - linear model: - name: Identity - increment variables: *soca_vars - tstep: PT1H - ninner: 1 + ninner: 5 gradient norm reduction: 1e-15 test: on diagnostics: diff --git a/test/testinput/3dvarfgat_pseudo.yml b/test/testinput/3dvarfgat_pseudo.yml index 8e343bb8f..69cfc8011 100644 --- a/test/testinput/3dvarfgat_pseudo.yml +++ b/test/testinput/3dvarfgat_pseudo.yml @@ -6,7 +6,7 @@ _: &land_mask minvalue: 0.5 cost function: - cost type: 4D-Var + cost type: 3D-FGAT time window: begin: &date_begin 2018-04-15T00:00:00Z length: PT6H @@ -58,18 +58,21 @@ cost function: state variables: [socn, tocn, ssh, hocn, uocn, vocn, mld, layer_depth] background error: - covariance model: SocaError - analysis variables: *soca_vars - date: 2018-04-15T00:00:00Z - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [tocn, socn, ssh] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, ssh] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -81,12 +84,6 @@ cost function: rescale_bkgerr: 1.0 efold_z: 2500.0 # [m] - - linear variable change name: VertConvSOCA - Lz_min: 10.0 - Lz_mld: 1 - Lz_mld_max: 500 - scale_layer_thick: 1.5 - - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 @@ -212,11 +209,6 @@ variational: algorithm: RPCG iterations: - geometry: *geom - linear model: - name: Identity - increment variables: *soca_vars - variable change: Identity - tstep: PT1H ninner: 5 gradient norm reduction: 1e-15 test: on diff --git a/test/testinput/4dhybenvar.yml b/test/testinput/4dhybenvar.yml index 407f6e944..965d4bddd 100644 --- a/test/testinput/4dhybenvar.yml +++ b/test/testinput/4dhybenvar.yml @@ -34,18 +34,21 @@ cost function: - weight: value: 0.5 covariance: - covariance model: SocaError - analysis variables: [socn, tocn, uocn, vocn, ssh] - date: 2018-04-15T00:00:00Z - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [tocn, socn, ssh] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, ssh] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc - weight: value: 0.5 diff --git a/test/testinput/linearmodel.yml b/test/testinput/linearmodel.yml deleted file mode 100644 index aab4eef8f..000000000 --- a/test/testinput/linearmodel.yml +++ /dev/null @@ -1,51 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -analysis variables: &soca_vars [cicen, hicen, socn, tocn, uocn, vocn, ssh, hocn, sw, lhf, shf, lw, us] - -model: - name: MOM6solo - tstep: PT1H - advance_mom6: 0 - model variables: *soca_vars - -model aux control: - -initial condition: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - ocn_sfc_filename: MOM.res.nc - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - date: &date 2018-04-15T00:00:00Z - state variables: *soca_vars - -linear model: - name: Identity - increment variables: *soca_vars - tstep: PT1H - -linear model test: - forecast length: PT2H - first multiplier TL: 0.01 - iterations TL: 1 - tolerance TL: 999.9e1 # Not testing tlm - tolerance AD: 1.0e-12 - -background error: - covariance model: SocaError - analysis variables: *soca_vars - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, ssh, uocn, vocn, sw, lhf, shf, lw, us] - - name: ice - variables: [cicen, hicen] diff --git a/test/testref/3dhybfgat.test b/test/testref/3dhybfgat.test index cbd8b51a5..ece9f6b27 100644 --- a/test/testref/3dhybfgat.test +++ b/test/testref/3dhybfgat.test @@ -1,27 +1,22 @@ CostJb : Nonlinear Jb = 0.0000000000000000e+00 CostJo : Nonlinear Jo(ADT) = 8.9263199495715384e+01, nobs = 31, Jo/n = 2.8794580482488832e+00, err = 1.0000000149011612e-01 CostFunction: Nonlinear J = 8.9263199495715384e+01 -RPCGMinimizer: reduction in residual norm = 2.2974579865453482e-03 +RPCGMinimizer: reduction in residual norm = 1.4980217769370795e-02 CostFunction::addIncrement: Analysis: - Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0055835768576505 max=1.0000000247374747 mean=0.1174843286065790 - hicen min=-0.0904135934870815 max=4.0326673084246947 mean=0.4695664192299835 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5591969472174938 - uocn min=-0.8581694072579173 max=0.7001571489147213 mean=-0.0002536877886094 - vocn min=-0.7661101226337028 max=1.4377766409421606 mean=0.0021980788786207 - tocn min=-1.8883899367430028 max=31.7004645720658580 mean=6.0146342801152750 - ssh min=-1.9233114908733457 max=0.8929429832935600 mean=-0.2876667952783921 - hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 - sw min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - lhf min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - shf min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - lw min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - us min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T03:00:00Z + cicen min=-0.0033030536158987 max=1.0000000158694204 mean=0.1175029873670623 + hicen min=-0.0545728056070210 max=4.0326673084246947 mean=0.4703279114085800 + socn min=10.7210460395083924 max=40.4416591681037119 mean=34.5499340634548631 + uocn min=-0.8496117828509079 max=0.6891013339628880 mean=0.0000348497562169 + vocn min=-0.9319463183228819 max=0.9467331746277857 mean=0.0016148089045849 + tocn min=-1.8879950754088255 max=31.6932489128285653 mean=6.0153354551597769 + ssh min=-1.9094019232348816 max=0.8552645878360341 mean=-0.2945184642421328 + hocn min=0.0009178261947465 max=1346.5803472041777695 mean=128.6280879778919370 mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 -CostJb : Nonlinear Jb = 2.3393789469964523 -CostJo : Nonlinear Jo(ADT) = 72.5294885813376595, nobs = 31, Jo/n = 2.3396609219786342, err = 0.1000000014901161 -CostFunction: Nonlinear J = 74.8688675283341070 +CostJb : Nonlinear Jb = 0.5896333178646905 +CostJo : Nonlinear Jo(ADT) = 20.0755581679565189, nobs = 31, Jo/n = 0.6475986505792426, err = 0.1000000014901161 +CostFunction: Nonlinear J = 20.6651914858212109 diff --git a/test/testref/3dvar_soca.test b/test/testref/3dvar_soca.test deleted file mode 100644 index cddb2b136..000000000 --- a/test/testref/3dvar_soca.test +++ /dev/null @@ -1,52 +0,0 @@ -CostJb : Nonlinear Jb = 0.0000000000000000e+00 -CostJo : Nonlinear Jo(CoolSkin) = 1.4157601528361320e+04, nobs = 174, Jo/n = 8.1365526025065051e+01, err = 3.6280357515271239e-01 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 7.5931295131110767e+02, nobs = 147, Jo/n = 5.1653942266061748e+00, err = 3.6246510156485134e-01 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 5.5606890102213500e+00, nobs = 29, Jo/n = 1.9174789690418448e-01, err = 1.0000000000000000e+00 -CostJo : Nonlinear Jo(ADT) = 1.4372757157930062e+02, nobs = 91, Jo/n = 1.5794238635087980e+00, err = 1.0000000149011612e-01 -CostJo : Nonlinear Jo(InsituTS) = 6.9930838712709647e+02, nobs = 424, Jo/n = 1.6493122337903219e+00, err = 7.6352859169821519e-01 -CostJo : Nonlinear Jo(SeaIceFraction) = 5.9780675099388782e+02, nobs = 89, Jo/n = 6.7169297864481781e+00, err = 1.0000000149011612e-01 -CostJo : Nonlinear Jo(SeaSurfaceChlorophyll) = 1.4458385226088194e+03, nobs = 129, Jo/n = 1.1208050562859064e+01, err = 6.1865027747001339e-02 -CostJo : Nonlinear Jo(SeaSurfaceBiomassP) = 4.1314922104098389e+02, nobs = 112, Jo/n = 3.6888323307230704e+00, err = 1.1692603016453901e-08 -CostJo : Nonlinear Jo(SeaSurfaceHS) = 1.0896018677668044e+03, nobs = 6, Jo/n = 1.8160031129446739e+02, err = 1.0000000149011612e-01 -CostFunction: Nonlinear J = 1.9311907489799538e+04 -RPCGMinimizer: reduction in residual norm = 1.3402618654497631e-01 -CostFunction::addIncrement: Analysis: - Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0002282886867696 max=1.0005179719830262 mean=0.1175678671098138 - hicen min=0.0000000000000000 max=4.0326673084246947 mean=0.4712515705773916 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5444211660595002 - tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0196030008517063 - ssh min=-1.9246382205580554 max=0.9272962729193626 mean=-0.2767130691769688 - hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 - sw min=-225.0945891510099557 max=0.0000000000000000 mean=-71.7381140163989670 - lhf min=-38.1375737514043962 max=256.5946551277779122 mean=42.0096224129795885 - shf min=-58.9492919527147166 max=201.3742279803042834 mean=6.0753258412895699 - lw min=0.0000000000000000 max=88.0360975609150671 mean=31.3955360810577524 - us min=0.0044068623480315 max=0.0196746441302030 mean=0.0086958479050523 - chl min=-0.0000167125599378 max=4.6719899196170607 mean=0.1184781301658333 - biop min=0.0000000000000000 max=0.0000001868533390 mean=0.0000000065395176 - swh min=0.0000996535891318 max=6.7491955757141104 mean=1.0621548838297779 - mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 -layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 - - - - - - - - - - - -CostJb : Nonlinear Jb = 5.0766926207036915 -CostJo : Nonlinear Jo(CoolSkin) = 13614.4025134652438283, nobs = 174, Jo/n = 78.2436926061220959, err = 0.3628035751527124 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 754.5052266934287672, nobs = 147, Jo/n = 5.1326886169621009, err = 0.3624651015648513 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 5.5601406509535618, nobs = 29, Jo/n = 0.1917289879639159, err = 1.0000000000000000 -CostJo : Nonlinear Jo(ADT) = 143.6910481205183032, nobs = 91, Jo/n = 1.5790225068188823, err = 0.1000000014901161 -CostJo : Nonlinear Jo(InsituTS) = 697.7958429828694307, nobs = 424, Jo/n = 1.6457449126954469, err = 0.7635285916982152 -CostJo : Nonlinear Jo(SeaIceFraction) = 596.5019199614746412, nobs = 89, Jo/n = 6.7022687636120750, err = 0.1000000014901161 -CostJo : Nonlinear Jo(SeaSurfaceChlorophyll) = 1426.1607951953308202, nobs = 129, Jo/n = 11.0555100402738820, err = 0.0618650277470013 -CostJo : Nonlinear Jo(SeaSurfaceBiomassP) = 408.8405781144248294, nobs = 112, Jo/n = 3.6503623045930786, err = 0.0000000116926030 -CostJo : Nonlinear Jo(SeaSurfaceHS) = 1086.4561029445733311, nobs = 6, Jo/n = 181.0760171574288790, err = 0.1000000014901161 -CostFunction: Nonlinear J = 18738.9908607495199249 diff --git a/test/testref/3dvarfgat.test b/test/testref/3dvarfgat.test index f3e6f1503..d24aca68e 100644 --- a/test/testref/3dvarfgat.test +++ b/test/testref/3dvarfgat.test @@ -8,22 +8,22 @@ CostJo : Nonlinear Jo(InsituSalinity) = 1.6508706355428757e+01, nobs = 33, Jo/ CostJo : Nonlinear Jo(SeaIceFraction) = 2.1321063827480032e+02, nobs = 24, Jo/n = 8.8837765947833471e+00, err = 1.0000000149011612e-01 CostJo : Nonlinear Jo(SurfaceU) = 4.3460942444785389e-01, nobs = 47, Jo/n = 9.2470090308054021e-03, err = 3.8763169345842458e-01 CostFunction: Nonlinear J = 5.6461327645193933e+03 -RPCGMinimizer: reduction in residual norm = 5.6178702552446091e-01 +RPCGMinimizer: reduction in residual norm = 4.6112676030006933e-02 CostFunction::addIncrement: Analysis: - Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0022725342326849 max=1.0071714999055685 mean=0.1183105445866739 + Valid time: 2018-04-15T03:00:00Z + cicen min=-0.0000005760778840 max=1.0000409982510869 mean=0.1175184988134157 hicen min=0.0000000000000000 max=4.0326673084246947 mean=0.4712515705773916 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5447117137308908 - tocn min=-1.8883899372702533 max=35.0173379463343792 mean=6.0317923556482098 - uocn min=-0.8581727353768411 max=0.7001168259257196 mean=-0.0002591032215534 - vocn min=-0.7661101215480253 max=1.4377766409421606 mean=0.0021972630399530 - ssh min=-1.9231541458800032 max=0.9261896006978204 mean=-0.2765593352101705 - hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 - sw min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - lhf min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - shf min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - lw min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - us min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + socn min=10.7210460395083924 max=40.4416591681037119 mean=34.5459714907122546 + tocn min=-1.8879950757380115 max=31.6932489128285653 mean=6.0156782559892310 + uocn min=-0.8496117760638658 max=0.6890666989074180 mean=0.0000321918195046 + vocn min=-0.9321576238931384 max=0.9467331169326910 mean=0.0016143192702768 + ssh min=-1.9092721861416226 max=0.9091625673630059 mean=-0.2765778738380595 + hocn min=0.0009178261947465 max=1346.5803472041777695 mean=128.6280879778919370 + sw min=-225.0977630615234375 max=0.0000000000000000 mean=-71.7392389260509162 + lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100143121205249 + shf min=-58.9492949566478615 max=201.3742981964446983 mean=6.0753342975462568 + lw min=0.0000000000000000 max=88.0360870534941711 mean=31.3955294750297895 + us min=0.0000000000000000 max=0.0191600705253541 mean=0.0072078703473840 mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 @@ -36,13 +36,13 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 -CostJb : Nonlinear Jb = 296.6626681147955082 -CostJo : Nonlinear Jo(CoolSkin) = 3464.8709900691237635, nobs = 47, Jo/n = 73.7206593631728424, err = 0.3876316934584246 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 1007.5664244251975106, nobs = 43, Jo/n = 23.4317773122138959, err = 0.3858153492966185 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 1.8650987567220949, nobs = 16, Jo/n = 0.1165686722951309, err = 1.0000000000000000 -CostJo : Nonlinear Jo(ADT) = 33.7366124865940051, nobs = 28, Jo/n = 1.2048790173783572, err = 0.1000000014901161 -CostJo : Nonlinear Jo(InsituTemperature) = 35.6268586770523115, nobs = 31, Jo/n = 1.1492535057113649, err = 0.9089399165824681 -CostJo : Nonlinear Jo(InsituSalinity) = 16.2643999881490444, nobs = 33, Jo/n = 0.4928606057014862, err = 0.6104299683323671 -CostJo : Nonlinear Jo(SeaIceFraction) = 204.0624792604356514, nobs = 24, Jo/n = 8.5026033025181516, err = 0.1000000014901161 -CostJo : Nonlinear Jo(SurfaceU) = 0.4387891603871751, nobs = 47, Jo/n = 0.0093359395827059, err = 0.3876316934584246 -CostFunction: Nonlinear J = 5061.0943209384577131 +CostJb : Nonlinear Jb = 0.0000029576648265 +CostJo : Nonlinear Jo(CoolSkin) = 4963.8330973286119843, nobs = 47, Jo/n = 105.6134701559279137, err = 0.3876316934584246 +CostJo : Nonlinear Jo(SeaSurfaceTemp) = 316.5603460257121355, nobs = 43, Jo/n = 7.3618685122258638, err = 0.3858153492966185 +CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 1.8675903348020022, nobs = 16, Jo/n = 0.1167243959251251, err = 1.0000000000000000 +CostJo : Nonlinear Jo(ADT) = 33.6558868043491515, nobs = 28, Jo/n = 1.2019959572981840, err = 0.1000000014901161 +CostJo : Nonlinear Jo(InsituTemperature) = 36.8007218825831899, nobs = 31, Jo/n = 1.1871200607284900, err = 0.9089399165824681 +CostJo : Nonlinear Jo(InsituSalinity) = 16.5054035799724659, nobs = 33, Jo/n = 0.5001637448476505, err = 0.6104299683323671 +CostJo : Nonlinear Jo(SeaIceFraction) = 213.1614466523695057, nobs = 24, Jo/n = 8.8817269438487294, err = 0.1000000014901161 +CostJo : Nonlinear Jo(SurfaceU) = 0.5287339777547750, nobs = 47, Jo/n = 0.0112496591011654, err = 0.3876316934584246 +CostFunction: Nonlinear J = 5582.9132295438212168 diff --git a/test/testref/3dvarfgat_pseudo.test b/test/testref/3dvarfgat_pseudo.test index f8258c2fb..51a0e9c86 100644 --- a/test/testref/3dvarfgat_pseudo.test +++ b/test/testref/3dvarfgat_pseudo.test @@ -5,17 +5,17 @@ CostJo : Nonlinear Jo(ADT) = 3.3642363906175710e+01, nobs = 28, Jo/n = 1.20151 CostJo : Nonlinear Jo(InsituTemperature) = 3.6796005403262150e+01, nobs = 31, Jo/n = 1.1869679162342630e+00, err = 9.0893991658246809e-01 CostJo : Nonlinear Jo(InsituSalinity) = 1.6508706355428757e+01, nobs = 33, Jo/n = 5.0026382895238652e-01, err = 6.1042996833236707e-01 CostFunction: Nonlinear J = 4.0537754836284546e+02 -RPCGMinimizer: reduction in residual norm = 1.8182689565095317e-01 +RPCGMinimizer: reduction in residual norm = 4.7495290319153927e-01 CostFunction::addIncrement: Analysis: - Valid time: 2018-04-15T00:00:00Z - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5452665776760668 - tocn min=-1.8883899372702533 max=31.7004645720658580 mean=6.0092886251965192 - ssh min=-1.9234536812972050 max=0.8630006309218333 mean=-0.2808622146415468 - hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 - uocn min=-0.8581693992488438 max=0.7000954286848975 mean=-0.0002591771954069 - vocn min=-0.7661101215480253 max=1.4377766409421606 mean=0.0021972630399530 - mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 -layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 + Valid time: 2018-04-15T03:00:00Z + socn min=10.7210460395083924 max=40.4416591681037119 mean=34.5478694054705926 + tocn min=-1.8879950757380115 max=31.6932489128285653 mean=6.0059916691693926 + ssh min=-1.9139500304546440 max=0.8583109965626627 mean=-0.2851516224770917 + hocn min=0.0009178261947465 max=1346.5803472041777695 mean=128.6280879778919370 + uocn min=-0.8496117748396494 max=0.6890666856088563 mean=0.0000321916028576 + vocn min=-0.9321576238931384 max=0.9467331169326910 mean=0.0016143192702768 + mld min=2.2774359470406269 max=4593.1214862189353880 mean=192.6371623604598540 +layer_depth min=2.2774359470406269 max=5658.2958090376268956 mean=1200.5228825300762310 @@ -23,10 +23,10 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 -CostJb : Nonlinear Jb = 894.2119641389274420 -CostJo : Nonlinear Jo(SeaSurfaceTemp) = 310.7629122178200305, nobs = 43, Jo/n = 7.2270444701818608, err = 0.3858153492966185 -CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 1.8677352690905340, nobs = 16, Jo/n = 0.1167334543181584, err = 1.0000000000000000 -CostJo : Nonlinear Jo(ADT) = 33.3927331518513029, nobs = 28, Jo/n = 1.1925976125661180, err = 0.1000000014901161 -CostJo : Nonlinear Jo(InsituTemperature) = 36.7960054032621500, nobs = 31, Jo/n = 1.1869679162342630, err = 0.9089399165824681 -CostJo : Nonlinear Jo(InsituSalinity) = 16.5087063554287568, nobs = 33, Jo/n = 0.5002638289523865, err = 0.6104299683323671 -CostFunction: Nonlinear J = 1293.5400565363802343 +CostJb : Nonlinear Jb = 7.2594347961551886 +CostJo : Nonlinear Jo(SeaSurfaceTemp) = 69.8552661381236391, nobs = 43, Jo/n = 1.6245410729796195, err = 0.3858153492966185 +CostJo : Nonlinear Jo(SeaSurfaceSalinity) = 1.8040081107455399, nobs = 16, Jo/n = 0.1127505069215962, err = 1.0000000000000000 +CostJo : Nonlinear Jo(ADT) = 20.6794236513937193, nobs = 28, Jo/n = 0.7385508446926329, err = 0.1000000014901161 +CostJo : Nonlinear Jo(InsituTemperature) = 31.7213229681504849, nobs = 31, Jo/n = 1.0232684828435641, err = 0.9089399165824681 +CostJo : Nonlinear Jo(InsituSalinity) = 10.4361719430766851, nobs = 33, Jo/n = 0.3162476346386874, err = 0.6104299683323671 +CostFunction: Nonlinear J = 141.7556276076452377 diff --git a/test/testref/4dhybenvar.test b/test/testref/4dhybenvar.test index e7b45325a..cc20e418e 100644 --- a/test/testref/4dhybenvar.test +++ b/test/testref/4dhybenvar.test @@ -1,11 +1,11 @@ CostJb : Nonlinear Jb = 0.0000000000000000e+00 CostJo : Nonlinear Jo(SeaSufaceTemp) = 3.4432086113911851e+02, nobs = 47, Jo/n = 7.3259757689174148e+00, err = 3.8763169345842458e-01 CostFunction: Nonlinear J = 3.4432086113911851e+02 -RPCGMinimizer: reduction in residual norm = 1.7912022886176753e-02 +RPCGMinimizer: reduction in residual norm = 1.6672442760066197e-02 CostFunction::addIncrement: Analysis: Valid time: 2018-04-15T00:00:00Z socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5443897261524953 - tocn min=-1.8884036663191468 max=31.7004645720338800 mean=6.0161022045356045 + tocn min=-1.8882105135350051 max=31.7004833980417260 mean=6.0073633688812693 uocn min=-0.8581693992488438 max=0.7000954286848975 mean=-0.0002591771954069 vocn min=-0.7661101215480253 max=1.4377766409421606 mean=0.0021972630399530 ssh min=-1.9244847628277935 max=0.9272826517867588 mean=-0.2767903423591662 @@ -13,7 +13,7 @@ CostFunction::addIncrement: Analysis: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Valid time: 2018-04-15T03:00:00Z socn min=10.7210460395083924 max=40.4416591681037119 mean=34.5459713920834233 - tocn min=-1.8880088047869050 max=31.6932489127965873 mean=6.0142100184646248 + tocn min=-1.8878156520027634 max=31.6932677388044333 mean=6.0054711779263448 uocn min=-0.8496117748396494 max=0.6890666856088563 mean=0.0000321916028576 vocn min=-0.9321576238931384 max=0.9467331169326910 mean=0.0016143192702768 ssh min=-1.9092725357352314 max=0.9091665415750726 mean=-0.2765781634769230 @@ -21,7 +21,7 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 layer_depth min=2.2774359470406269 max=5658.2958090376268956 mean=1200.5228825300762310 Valid time: 2018-04-15T06:00:00Z socn min=10.7210460395083924 max=40.4416591598428923 mean=34.5467399790273930 - tocn min=-1.8875058356652230 max=31.6858695414262215 mean=6.0137196534919584 + tocn min=-1.8873126828810813 max=31.6858883674340674 mean=6.0049808072031103 uocn min=-0.8416820355059554 max=0.6786386084306094 mean=0.0002717176669510 vocn min=-1.1593584500375382 max=0.9487438635750088 mean=0.0003618099374769 ssh min=-1.9078432544437094 max=0.9075559090823697 mean=-0.2765830659083295 @@ -30,6 +30,6 @@ layer_depth min=2.2683307266867532 max=5658.3141547773811908 mean=1200.522 -CostJb : Nonlinear Jb = 25.3689383254706229 -CostJo : Nonlinear Jo(SeaSufaceTemp) = 14.1177176994760902, nobs = 47, Jo/n = 0.3003769723292785, err = 0.3876316934584246 -CostFunction: Nonlinear J = 39.4866560249467113 +CostJb : Nonlinear Jb = 23.6993180524819245 +CostJo : Nonlinear Jo(SeaSufaceTemp) = 12.1259583754454567, nobs = 47, Jo/n = 0.2579991143711799, err = 0.3876316934584246 +CostFunction: Nonlinear J = 35.8252764279273777 From c4dce3d826bd8835b883f6970054d65182198597 Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Tue, 27 Feb 2024 08:58:12 -0700 Subject: [PATCH 08/11] add explicit_diffusion sqrt multiply --- .../ExplicitDiffusion/ExplicitDiffusion.F90 | 7 +++- .../ExplicitDiffusion/ExplicitDiffusion.cc | 15 +++++++- .../ExplicitDiffusionFortran.h | 3 +- src/soca/ExplicitDiffusion/soca_diffusion.F90 | 37 ++++++++++++------- 4 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/soca/ExplicitDiffusion/ExplicitDiffusion.F90 b/src/soca/ExplicitDiffusion/ExplicitDiffusion.F90 index c702d2294..578b7a81c 100644 --- a/src/soca/ExplicitDiffusion/ExplicitDiffusion.F90 +++ b/src/soca/ExplicitDiffusion/ExplicitDiffusion.F90 @@ -63,17 +63,20 @@ subroutine soca_explicitdiffusion_calibrate_c(c_key_self, c_conf) bind(c, name=' ! ------------------------------------------------------------------------------ -subroutine soca_explicitdiffusion_multiply_c(c_key_self, c_key_dx) bind(c, name='soca_explicitdiffusion_multiply_f90') +subroutine soca_explicitdiffusion_multiply_c(c_key_self, c_key_dx, c_sqrt) bind(c, name='soca_explicitdiffusion_multiply_f90') integer(c_int), intent(inout) :: c_key_self integer(c_int), intent(in) :: c_key_dx + logical(c_bool), intent(in) :: c_sqrt type(soca_diffusion), pointer :: self type(soca_increment), pointer :: dx + logical :: sqrt + sqrt = c_sqrt call soca_diffusion_registry%get(c_key_self, self) call soca_increment_registry%get(c_key_dx, dx) - call self%multiply(dx) + call self%multiply(dx, sqrt) end subroutine ! ------------------------------------------------------------------------------ diff --git a/src/soca/ExplicitDiffusion/ExplicitDiffusion.cc b/src/soca/ExplicitDiffusion/ExplicitDiffusion.cc index e94ca266a..3a710140d 100644 --- a/src/soca/ExplicitDiffusion/ExplicitDiffusion.cc +++ b/src/soca/ExplicitDiffusion/ExplicitDiffusion.cc @@ -5,6 +5,8 @@ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. */ +#include "oops/util/FieldSetHelpers.h" + #include "soca/ExplicitDiffusion/ExplicitDiffusion.h" #include "soca/ExplicitDiffusion/ExplicitDiffusionFortran.h" #include "soca/Geometry/Geometry.h" @@ -40,8 +42,17 @@ ExplicitDiffusion::ExplicitDiffusion( // -------------------------------------------------------------------------------------- -void ExplicitDiffusion::randomize(oops::FieldSet3D &) const { - throw eckit::NotImplemented("read not implemented yet for ExplictDiffusion"); +void ExplicitDiffusion::randomize(oops::FieldSet3D & fset) const { + // Create random increments + fset.randomInit(geom_->functionSpace(), fset.variables()); + Increment dx(*geom_, vars_, util::DateTime()); + dx.fromFieldSet(fset.fieldSet()); + + // apply square root of diffusion + soca_explicitdiffusion_multiply_f90(keyFortran_, dx.toFortran(), true); + + // copy back to fieldset + dx.toFieldSet(fset.fieldSet()); } // -------------------------------------------------------------------------------------- diff --git a/src/soca/ExplicitDiffusion/ExplicitDiffusionFortran.h b/src/soca/ExplicitDiffusion/ExplicitDiffusionFortran.h index 890819866..fa7ff1007 100644 --- a/src/soca/ExplicitDiffusion/ExplicitDiffusionFortran.h +++ b/src/soca/ExplicitDiffusion/ExplicitDiffusionFortran.h @@ -23,7 +23,8 @@ extern "C" { void soca_explicitdiffusion_calibrate_f90(const F90explicitdiffusion &, const eckit::Configuration * const &); void soca_explicitdiffusion_multiply_f90(const F90explicitdiffusion &, - const F90flds &); + const F90flds &, + const bool & sqrt = false); void soca_explicitdiffusion_writeparams_f90(const F90explicitdiffusion &, const eckit::Configuration * const &); void soca_explicitdiffusion_readparams_f90(const F90explicitdiffusion &, diff --git a/src/soca/ExplicitDiffusion/soca_diffusion.F90 b/src/soca/ExplicitDiffusion/soca_diffusion.F90 index bbd3f76c5..dcf2aab78 100644 --- a/src/soca/ExplicitDiffusion/soca_diffusion.F90 +++ b/src/soca/ExplicitDiffusion/soca_diffusion.F90 @@ -526,9 +526,10 @@ subroutine soca_diffusion_calibrate_hz(self, params, hz_conf, norm_conf) ! ------------------------------------------------------------------------------ ! Perform horizontal diffusion on each level -subroutine soca_diffusion_multiply(self, dx) +subroutine soca_diffusion_multiply(self, dx, sqrt) class(soca_diffusion), intent(inout) :: self type(soca_increment), intent(inout) :: dx + logical, intent(in) :: sqrt real(kind=kind_real), allocatable :: tmp3d(:,:,:) character(len=1024) :: str @@ -575,7 +576,7 @@ subroutine soca_diffusion_multiply(self, dx) end do ! multipy - call self%multiply_field(tmp3d, self%group(g)) + call self%multiply_field(tmp3d, self%group(g), sqrt) ! copy back into source vars do f=1, size(dx%fields) @@ -589,7 +590,7 @@ subroutine soca_diffusion_multiply(self, dx) ! apply multiply separately to each variable in the group do f=1, size(dx%fields) if ( self%get_group(dx%fields(f)%name) /= g) cycle - call self%multiply_field(dx%fields(f)%val, self%group(g)) + call self%multiply_field(dx%fields(f)%val, self%group(g), sqrt) end do end if end do @@ -598,10 +599,13 @@ subroutine soca_diffusion_multiply(self, dx) end subroutine ! ------------------------------------------------------------------------------ -subroutine soca_diffusion_multiply_field(self, field, params) +! Performs a full multiplcation by diffusion if sqrt == .false. +! Otherwise, the input is multiplied by the square root of the diffusion operator +subroutine soca_diffusion_multiply_field(self, field, params, sqrt) class(soca_diffusion), intent(inout) :: self real(kind=kind_real), allocatable, intent(inout) :: field(:,:,:) type(soca_diffusion_group_params), intent(in) :: params + logical, intent(in) :: sqrt integer :: z real(kind=kind_real), allocatable :: tmp2d(:,:) @@ -609,17 +613,19 @@ subroutine soca_diffusion_multiply_field(self, field, params) allocate(tmp2d(DOMAIN_WITH_HALO)) ! normalization (horizontal + vertical) - if (params%niter_hz > 0) then - do z = 1, size(field, dim=3) - field(DOMAIN,z) = field(DOMAIN,z) * params%normalization_hz(DOMAIN) - end do + if (.not. sqrt) then + if (params%niter_hz > 0) then + do z = 1, size(field, dim=3) + field(DOMAIN,z) = field(DOMAIN,z) * params%normalization_hz(DOMAIN) + end do + end if + if (params%niter_vt > 0) then + field(DOMAIN,:) = field(DOMAIN,:) * params%normalization_vt(DOMAIN,:) + end if end if - if (params%niter_vt > 0) then - field(DOMAIN,:) = field(DOMAIN,:) * params%normalization_vt(DOMAIN,:) - end if ! vertical diffusion AD - if (params%niter_vt > 0) then + if (.not. sqrt .and. params%niter_vt > 0) then call self%diffusion_vt_ad(field, params) end if @@ -630,7 +636,7 @@ subroutine soca_diffusion_multiply_field(self, field, params) tmp2d = field(:,:,z) ! horizontal diffusion AD - if (params%niter_hz > 0) then + if (.not. sqrt .and. params%niter_hz > 0) then call self%diffusion_hz_ad(tmp2d, params) end if @@ -651,7 +657,10 @@ subroutine soca_diffusion_multiply_field(self, field, params) tmp2d = sum(field, dim=3) ! apply diffusion - call self%diffusion_hz_ad(tmp2d, params) + if (.not. sqrt ) then + call self%diffusion_hz_ad(tmp2d, params) + end if + ! TODO grid metric ! tmp2d = tmp2d * self%inv_sqrt_area call self%diffusion_hz_tl(tmp2d, params) From 005b39594cfd835f3337d90d54033b35b879e02d Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Tue, 27 Feb 2024 09:23:48 -0700 Subject: [PATCH 09/11] fix more tests --- src/mains/SqrtOfVertLoc.cc | 2 + test/testinput/enspert.yml | 73 ++++++++---------------- test/testinput/sqrtvertloc.yml | 53 ++++++----------- test/testref/enspert.test | 100 ++++++++++++++++----------------- test/testref/sqrtvertloc.test | 94 +++++++++++++++---------------- 5 files changed, 139 insertions(+), 183 deletions(-) diff --git a/src/mains/SqrtOfVertLoc.cc b/src/mains/SqrtOfVertLoc.cc index 2a97bad1d..d49e14075 100644 --- a/src/mains/SqrtOfVertLoc.cc +++ b/src/mains/SqrtOfVertLoc.cc @@ -5,6 +5,7 @@ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. */ +#include "saber/oops/instantiateCovarFactory.h" #include "oops/generic/instantiateModelFactory.h" #include "oops/runs/Run.h" @@ -14,6 +15,7 @@ int main(int argc, char ** argv) { oops::Run run(argc, argv); oops::instantiateModelFactory(); + saber::instantiateCovarFactory(); oops::SqrtOfVertLoc sqrtgen; return run.execute(sqrtgen); } diff --git a/test/testinput/enspert.yml b/test/testinput/enspert.yml index d385c6688..b2ec67829 100644 --- a/test/testinput/enspert.yml +++ b/test/testinput/enspert.yml @@ -1,4 +1,4 @@ -geometry: +geometry: &geom geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc mom6_input_nml: data_static/72x35x25/input.nml fields metadata: data_static/fields_metadata.yml @@ -18,44 +18,25 @@ initial condition: state variables: *model_vars background error: - covariance model: SocaError - date: *date - analysis variables: &soca_vars [ssh, cicen, hicen, tocn, socn, uocn, vocn, chl, biop] - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - perturbation scales: - tocn: 1.0 - socn: 1.0 - ssh: 0.0 - cicen: 0.1 - hicen: 0.05 - chl: 0.1 - biop: 0.1 - uocn: 0.1 - vocn: 0.1 - correlation: - - name: ocn - variables: [tocn, ssh, socn, chl, biop, uocn, vocn] - - name: ice - variables: [cicen, hicen] - + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: &soca_vars [tocn, socn, ssh, uocn, vocn, cicen, hicen, chl, biop] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, ssh, uocn, vocn, cicen, hicen,chl, biop] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc linear variable change: - linear variable changes: - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - input variables: *soca_vars - output variables: *soca_vars - - linear variable change name: BkgErrFILT ocean_depth_min: 1000 # [m] rescale_bkgerr: 1.0 @@ -72,22 +53,16 @@ background error: s_min: 0.0 s_max: 0.25 ssh_min: 0.0 # value at EQ - ssh_max: 0.1 # value in Extratropics + ssh_max: 0.0 # value in Extratropics ssh_phi_ex: 20 # lat of transition from extratropics - cicen_min: 0.1 - cicen_max: 0.5 - hicen_min: 10.0 - hicen_max: 100.0 - chl_min: 0.001 - chl_max: 30.0 + cicen_min: 0.01 + cicen_max: 0.05 + hicen_min: 0.5 + hicen_max: 5.0 + chl_min: 0.0001 + chl_max: 3.0 biop_min: 0.0 - biop_max: 1.0e-6 - input variables: *soca_vars - output variables: *soca_vars - - - linear variable change name: HorizFiltSOCA - niter: 1 - filter variables: *soca_vars + biop_max: 1.0e-7 input variables: *soca_vars output variables: *soca_vars diff --git a/test/testinput/sqrtvertloc.yml b/test/testinput/sqrtvertloc.yml index 90dd2ca04..c59794eed 100644 --- a/test/testinput/sqrtvertloc.yml +++ b/test/testinput/sqrtvertloc.yml @@ -1,4 +1,4 @@ -geometry: +geometry: &geom geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc mom6_input_nml: data_static/72x35x25/input.nml fields metadata: data_static/fields_metadata.yml @@ -14,29 +14,21 @@ background: state variables: *model_vars background error: - covariance model: SocaError - date: *date - analysis variables: &soca_vars [ssh, tocn, socn, uocn, vocn] - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - perturbation scales: - tocn: 1.0 - socn: 1.0 - ssh: 0.0 - cicen: 0.1 - hicen: 0.05 - chl: 0.1 - biop: 0.1 - uocn: 0.1 - vocn: 0.1 - correlation: - - name: ocn - variables: [tocn, ssh, socn, uocn, vocn] - + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: &soca_vars [ssh, tocn, socn, uocn, vocn] + geometry: *geom + group mapping: + - name: group1 + variables: [ssh, tocn, socn, uocn, vocn] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc linear variable change: @@ -44,13 +36,6 @@ background error: output variables: *soca_vars linear variable changes: - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - input variables: *soca_vars - output variables: *soca_vars - linear variable change name: BkgErrFILT ocean_depth_min: 1000 # [m] @@ -81,12 +66,6 @@ background error: input variables: *soca_vars output variables: *soca_vars - - linear variable change name: HorizFiltSOCA - niter: 1 - filter variables: *soca_vars - input variables: *soca_vars - output variables: *soca_vars - - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 diff --git a/test/testref/enspert.test b/test/testref/enspert.test index bf32b6988..107f4bdbc 100644 --- a/test/testref/enspert.test +++ b/test/testref/enspert.test @@ -20,17 +20,17 @@ Initial state: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Member 0 final state: Valid time: 2018-04-15T06:00:00Z - cicen min=-0.0179477307495673 max=1.0153169498091159 mean=0.1165466656301739 - hicen min=-1.2273773517586548 max=4.4384636058585212 mean=0.4836261711443992 + cicen min=-0.0652330460776296 max=1.0484683398308130 mean=0.1144223556808335 + hicen min=-4.3728381330792514 max=6.9607644810528271 mean=0.3688905177496374 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591783000712 mean=34.5473300596784441 - tocn min=-2.9515690032983817 max=31.6987106993547698 mean=6.0915201611419727 - uocn min=-0.8620325384384893 max=0.6951486388404980 mean=-0.0003028019202650 - vocn min=-0.8096150692197427 max=1.1786796751629223 mean=0.0020621981887290 - ssh min=-1.8879012293466213 max=0.9170828155466502 mean=-0.2767795213473463 - hocn min=0.0009718981829507 max=1345.9655010853768999 mean=128.6280651987137560 - chl min=-0.0347096422502860 max=4.6656789459435739 mean=0.1184735932868957 - biop min=-0.0000000010670083 max=0.0000001882111536 mean=0.0000000065412874 + socn min=10.7210460395083924 max=40.4416591815566449 mean=34.5512695946635162 + tocn min=-3.5745711370152957 max=32.8590225629484465 mean=6.0043332715416247 + uocn min=-0.9631534230291001 max=0.7705505008837619 mean=-0.0007074397788418 + vocn min=-0.9081393636883180 max=1.8298872025405089 mean=0.0027429317917932 + ssh min=-1.9480289667870965 max=0.8842153346068957 mean=-0.2770696716820670 + hocn min=0.0009573960297328 max=1345.7763645071554492 mean=128.6280429387163053 + chl min=-0.0002602629226586 max=5.3802288348470304 mean=0.1191065538287583 + biop min=0.0000000000000000 max=0.0000002958568571 mean=0.0000000064663277 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 shf min=-58.9492950439453125 max=201.3742980957031250 mean=6.0753344854805622 @@ -40,17 +40,17 @@ Member 0 final state: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Member 1 final state: Valid time: 2018-04-15T06:00:00Z - cicen min=-0.0232472901189155 max=1.0122847550416991 mean=0.1167257873201370 - hicen min=-1.0660578510882317 max=4.6241796010597822 mean=0.5312867971814633 + cicen min=-0.0820225639115724 max=1.0273272687350581 mean=0.1177847469404785 + hicen min=-4.1202535181073179 max=6.6725622937426268 mean=0.5143216170034320 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591799142537 mean=34.5053688155191409 - tocn min=-4.3506301350009116 max=32.2042125513730468 mean=5.9988769154588981 - uocn min=-0.8614391377078680 max=0.6956445378249836 mean=-0.0001691264533084 - vocn min=-0.8098303351350450 max=1.1404127828961510 mean=0.0019618738177159 - ssh min=-1.8653863905924200 max=0.9116542010344340 mean=-0.2767100679432496 - hocn min=0.0009445692826222 max=1346.2515603948361331 mean=128.6280818753485846 - chl min=-0.0295705225910349 max=4.6513062465585113 mean=0.1185495590525884 - biop min=-0.0000000014227649 max=0.0000001886103201 mean=0.0000000065389500 + socn min=10.7210460395083924 max=40.4416591812376893 mean=34.5488545751350102 + tocn min=-2.3721757035508819 max=31.6968001574361438 mean=6.0189185668138565 + uocn min=-0.8394533438605681 max=0.5752407915434371 mean=-0.0002744145890155 + vocn min=-1.0500096308970495 max=0.6571974283372647 mean=0.0024392599409237 + ssh min=-1.9441036954209583 max=0.9131049036933895 mean=-0.2769787403193089 + hocn min=0.0009432313031085 max=1346.0396142468771359 mean=128.6280855234545868 + chl min=-0.0003307875492064 max=4.4905129657337302 mean=0.1165528549108761 + biop min=0.0000000000000000 max=0.0000002686868064 mean=0.0000000066271094 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 shf min=-58.9492950439453125 max=201.3742980957031250 mean=6.0753344854805622 @@ -60,17 +60,17 @@ Member 1 final state: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Member 2 final state: Valid time: 2018-04-15T06:00:00Z - cicen min=-0.0240114302715288 max=1.0134258249588350 mean=0.1171379101209238 - hicen min=-1.0731683257961575 max=4.2637166258387866 mean=0.5242428246457037 + cicen min=-0.0706739653178427 max=1.0268252155702335 mean=0.1188664323217232 + hicen min=-3.8738462584484705 max=5.9535906480102518 mean=0.4299712008697106 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591813473900 mean=34.5180354479406262 - tocn min=-3.6550415350812973 max=31.7303623333074931 mean=6.1038745493177933 - uocn min=-0.8527354111047408 max=0.6899570004276523 mean=-0.0002331691871794 - vocn min=-0.8082836103758393 max=1.2213721318293778 mean=0.0019622232505525 - ssh min=-1.8542140529770612 max=0.9099969529067288 mean=-0.2765945891721018 - hocn min=0.0009179199629318 max=1346.5391996900173126 mean=128.6280815294041133 - chl min=-0.0242344918332649 max=4.6854539925550318 mean=0.1184658525731263 - biop min=-0.0000000008753226 max=0.0000001878964701 mean=0.0000000065377026 + socn min=10.7210460395083924 max=40.4416591739573761 mean=34.5377351780651907 + tocn min=-2.5489557660481399 max=32.3257549097358350 mean=6.0097180200637768 + uocn min=-0.9800501340377999 max=0.8006128954883849 mean=-0.0008855621639701 + vocn min=-0.7787090359666698 max=0.9335359468197624 mean=0.0032329452367215 + ssh min=-1.9023948561930997 max=0.9389154216912911 mean=-0.2768966627256989 + hocn min=0.0009200122217266 max=1346.2297443613554151 mean=128.6280490593360639 + chl min=-0.0003539854117379 max=5.0611493466285946 mean=0.1175715776996488 + biop min=0.0000000000000000 max=0.0000002241638191 mean=0.0000000067022354 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 shf min=-58.9492950439453125 max=201.3742980957031250 mean=6.0753344854805622 @@ -80,17 +80,17 @@ Member 2 final state: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Member 3 final state: Valid time: 2018-04-15T06:00:00Z - cicen min=-0.0217194858086926 max=1.0147606235466318 mean=0.1173610124689396 - hicen min=-1.2568327839592690 max=4.4544028614335236 mean=0.5230276029529948 + cicen min=-0.0615883643173291 max=1.0492751040192974 mean=0.1220794905037402 + hicen min=-4.2442562080498716 max=6.7680861503658729 mean=0.6409495104501891 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591824269531 mean=34.5335504385732079 - tocn min=-2.9603827293771343 max=31.7375756291442492 mean=6.0348515736570718 - uocn min=-0.8568785328366367 max=0.6985426223296826 mean=-0.0001952346659818 - vocn min=-0.8030924790206806 max=1.1962722596214554 mean=0.0020544229255305 - ssh min=-1.8474816349167924 max=0.9121588912797869 mean=-0.2765272001340992 - hocn min=0.0008919956143453 max=1346.8077367450123347 mean=128.6280866039721218 - chl min=-0.0338003707368620 max=4.6945596057779229 mean=0.1184960634942794 - biop min=-0.0000000007022308 max=0.0000001877512722 mean=0.0000000065404235 + socn min=10.7210460395083924 max=40.4416591897031239 mean=34.5384910346501854 + tocn min=-3.2957173084736082 max=31.6978104736174906 mean=6.0122653325162911 + uocn min=-0.7845024154037150 max=0.6924739575589713 mean=0.0002752215169624 + vocn min=-0.9761494134174579 max=1.0944957768031982 mean=0.0020434344705764 + ssh min=-1.8962379760060080 max=0.9205482111449286 mean=-0.2768218698684791 + hocn min=0.0008930637959389 max=1346.5456938754741714 mean=128.6281064307361817 + chl min=-0.0003038129490014 max=4.8635125453032968 mean=0.1166389396738258 + biop min=0.0000000000000000 max=0.0000002261743928 mean=0.0000000066350231 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 shf min=-58.9492950439453125 max=201.3742980957031250 mean=6.0753344854805622 @@ -100,17 +100,17 @@ Member 3 final state: layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 Member 4 final state: Valid time: 2018-04-15T06:00:00Z - cicen min=-0.0197718401128528 max=1.0091688136045813 mean=0.1172909033586223 - hicen min=-1.1155308717945622 max=4.7092122161910979 mean=0.4994453858606065 + cicen min=-0.0774429788312054 max=1.0687702375156638 mean=0.1206738681345331 + hicen min=-4.4391137027088172 max=6.8077003218405903 mean=0.3445202812018121 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591834597057 mean=34.5385488607189828 - tocn min=-4.8171336223355574 max=31.7744438625563212 mean=5.9939229008064574 - uocn min=-0.8554285548104850 max=0.6981012703078521 mean=-0.0002457408300107 - vocn min=-0.8097634889891272 max=1.1477557612142797 mean=0.0019882065569462 - ssh min=-1.8491618668484704 max=0.9121236566706767 mean=-0.2764747660188870 - hocn min=0.0008668009166667 max=1347.1244907586342379 mean=128.6280850949892169 - chl min=-0.0339841299535465 max=4.6753649218027249 mean=0.1185674716150973 - biop min=-0.0000000008837080 max=0.0000001882608358 mean=0.0000000065373823 + socn min=10.7210460395083924 max=40.4416591897031239 mean=34.5268184245201084 + tocn min=-3.6566864494229296 max=31.8556677315050614 mean=6.0253576073756614 + uocn min=-1.2013717728532998 max=0.6527593647591228 mean=-0.0001828978128614 + vocn min=-0.7457317143992984 max=1.2051977361397159 mean=0.0023412362425249 + ssh min=-1.8691732330635278 max=0.9042908152480489 mean=-0.2765432653003158 + hocn min=0.0008723772340869 max=1346.8996334599542024 mean=128.6281309495731762 + chl min=-0.0002749974437174 max=5.2832145039966942 mean=0.1196846813645184 + biop min=0.0000000000000000 max=0.0000002268139028 mean=0.0000000063732421 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 shf min=-58.9492950439453125 max=201.3742980957031250 mean=6.0753344854805622 diff --git a/test/testref/sqrtvertloc.test b/test/testref/sqrtvertloc.test index 8a813614a..7083795ad 100644 --- a/test/testref/sqrtvertloc.test +++ b/test/testref/sqrtvertloc.test @@ -18,52 +18,52 @@ Background: us min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 mld min=2.2854716757984130 max=4593.1533423819937525 mean=192.4109073940401515 layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.5229536158392420 -Variance Explained=0.1096171922047231 -0.1986045034050992 -0.2573630058393613 -0.3107532581005915 -0.3600780060478236 -0.4059975614845806 -0.4490255138467362 -0.4894032540103357 -0.5273444827790712 -0.5630156249719891 -0.5965844561275099 -0.6281574792731044 -0.6579214811897764 -0.6859300928663781 -0.7122863664054074 -0.7370566011117995 -0.7602902451356316 -0.7821106494633983 -0.8025341459758836 -0.8216709226214103 -0.8395648493506132 -0.8562730805264062 -0.8718656586524712 -0.8863760896935975 -0.8998514179821113 -0.9123239263040823 -0.9238245469735469 -0.9343962082766479 -0.9440956359493268 -0.9529448218556020 -0.9610054068704874 -0.9682971797452863 -0.9748623012308331 -0.9807032802887200 -0.9858742155762905 -0.9903946222754951 -0.9942664231712092 -0.9974860947539266 -1.0000000000000002 -1.0000000000000002 -Number of retained columns=10 -Retained fraction of the variance=0.5630156249719890 +Variance Explained=0.2170869103304957 +0.3853995126962893 +0.5191300748802294 +0.6245507062285205 +0.7082508814077046 +0.7754086859688079 +0.8287130620291833 +0.8708460155426395 +0.9036239285948264 +0.9293521452468891 +0.9486860899709457 +0.9630830846619034 +0.9737798858225107 +0.9816872981021527 +0.9873593508667808 +0.9914672746369781 +0.9944202157540855 +0.9964802976628258 +0.9978836408049583 +0.9987616440322967 +0.9993010464004334 +0.9995975249256837 +0.9997817320040719 +0.9998855024147656 +0.9999445244879241 +0.9999707357042824 +0.9999860045930331 +0.9999937183889517 +0.9999975747695140 +0.9999988583414732 +0.9999995272073808 +0.9999998167006787 +0.9999999427422764 +0.9999999778592330 +0.9999999925750825 +0.9999999979104610 +0.9999999995966463 +0.9999999999256394 +0.9999999999999997 +0.9999999999999997 +Number of retained columns=5 +Retained fraction of the variance=0.7082508814077048 Variance for truncated correlation matrix Valid time: 2018-04-15T00:00:00Z - ssh min=0.0000000000000000 max=0.9956679957030570 mean=0.7856432972140444 - tocn min=0.0000000000000000 max=0.9966481594658692 mean=0.5420609030408824 - socn min=0.0000000000000000 max=0.9967239058640776 mean=0.5488927040853910 - uocn min=0.0471870359614622 max=0.8507511804330994 mean=0.4712163828151314 - vocn min=0.0000000000000000 max=0.8504443347852177 mean=0.4718981764054079 + ssh min=0.0000000000000000 max=0.9993211547911076 mean=0.2877327906827201 + tocn min=0.0000000000000000 max=0.9989199905177697 mean=0.4976051689320881 + socn min=0.0000000000000000 max=0.9995056599361946 mean=0.4710793148216433 + uocn min=0.0565178922073773 max=0.9999770593557000 mean=0.7043214835347630 + vocn min=0.0000000000000000 max=0.9999829756820410 mean=0.6706269624420356 From 25e57e0da09b3bff42950ffdcbe353f2c7249ded Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Tue, 27 Feb 2024 13:36:50 -0700 Subject: [PATCH 10/11] update tests --- test/CMakeLists.txt | 187 +++++++----------- test/testinput/{3dhyb_nicas.yml => 3dhyb.yml} | 52 +++-- test/testinput/3dhyb_diffusion.yml | 14 +- test/testinput/3dhybfgat.yml | 10 +- .../{3dvar_diffusion.yml => 3dvar.yml} | 28 +-- .../{3dvarbump.yml => 3dvar_nicas.yml} | 18 +- test/testinput/3dvarfgat.yml | 24 +-- test/testinput/3dvarfgat_pseudo.yml | 16 +- test/testinput/4denvar.yml | 4 +- test/testinput/4dhybenvar.yml | 8 +- test/testinput/addincrement.yml | 4 +- test/testinput/checkpointmodel.yml | 2 +- test/testinput/convertincrement.yml | 4 +- test/testinput/convertstate.yml | 2 +- test/testinput/convertstate_changevar.yml | 4 +- test/testinput/convertstate_soca2cice.yml | 6 +- test/testinput/diffstates.yml | 2 +- test/testinput/dirac_diffusion.yml | 8 +- test/testinput/dirac_mlbalance.yml | 2 +- .../testinput/dirac_soca_cor_nicas_scales.yml | 2 +- test/testinput/dirac_soca_cov.yml | 42 ++-- test/testinput/dirac_soca_mask.yml | 54 ----- test/testinput/dirac_soca_nomask.yml | 54 ----- test/testinput/dirac_socahyb_cov.yml | 43 ++-- test/testinput/ensmeanandvariance.yml | 6 +- test/testinput/enspert.yml | 6 +- test/testinput/ensrecenter.yml | 2 +- test/testinput/errorcovariance.yml | 34 ---- test/testinput/forecast_identity.yml | 2 +- test/testinput/forecast_mom6.yml | 2 +- test/testinput/forecast_mom6_bgc.yml | 2 +- test/testinput/forecast_mom6_ens1.yml | 2 +- test/testinput/forecast_mom6_ens2.yml | 2 +- test/testinput/forecast_mom6_ens3.yml | 2 +- test/testinput/forecast_pseudo.yml | 2 +- test/testinput/gridgen.yml | 4 +- test/testinput/hofx_3d.yml | 24 +-- test/testinput/hofx_4d.yml | 18 +- test/testinput/hofx_4d_pseudo.yml | 10 +- test/testinput/hofx_oasim_3d.yml | 2 +- test/testinput/hybridgain.yml | 2 +- test/testinput/letkf.yml | 14 +- test/testinput/letkf_split_observer.yml | 6 +- test/testinput/letkf_split_solver.yml | 18 +- test/testinput/makeobs.yml | 2 +- test/testinput/parameters_bump_cor_nicas.yml | 6 +- .../parameters_bump_cor_nicas_scales.yml | 2 +- test/testinput/parameters_bump_cov.yml | 8 +- test/testinput/parameters_bump_loc.yml | 2 +- ...fusion_hz.yml => parameters_diffusion.yml} | 10 +- test/testinput/parameters_diffusion_vt.yml | 31 --- test/testinput/parametric_stddev.yml | 2 +- test/testinput/setcorscales.yml | 4 +- test/testinput/sqrtvertloc.yml | 6 +- test/testinput/static_socaerror_init.yml | 46 ----- .../testinput/static_socaerrorlowres_init.yml | 40 ---- test/testref/{3dhyb_nicas.test => 3dhyb.test} | 22 +-- .../{3dvar_diffusion.test => 3dvar.test} | 0 .../{3dvarbump.test => 3dvar_nicas.test} | 0 test/testref/dirac_soca_cov.test | 14 +- test/testref/dirac_soca_mask.test | 20 -- test/testref/dirac_soca_nomask.test | 20 -- test/testref/dirac_socahyb_cov.test | 26 +-- test/testref/static_socaerror_init.test | 0 test/testref/static_socaerrorlowres_init.test | 0 65 files changed, 333 insertions(+), 678 deletions(-) rename test/testinput/{3dhyb_nicas.yml => 3dhyb.yml} (81%) rename test/testinput/{3dvar_diffusion.yml => 3dvar.yml} (88%) rename test/testinput/{3dvarbump.yml => 3dvar_nicas.yml} (91%) delete mode 100644 test/testinput/dirac_soca_mask.yml delete mode 100644 test/testinput/dirac_soca_nomask.yml delete mode 100644 test/testinput/errorcovariance.yml rename test/testinput/{parameters_diffusion_hz.yml => parameters_diffusion.yml} (82%) delete mode 100644 test/testinput/parameters_diffusion_vt.yml delete mode 100644 test/testinput/static_socaerror_init.yml delete mode 100644 test/testinput/static_socaerrorlowres_init.yml rename test/testref/{3dhyb_nicas.test => 3dhyb.test} (58%) rename test/testref/{3dvar_diffusion.test => 3dvar.test} (100%) rename test/testref/{3dvarbump.test => 3dvar_nicas.test} (100%) delete mode 100644 test/testref/dirac_soca_mask.test delete mode 100644 test/testref/dirac_soca_nomask.test delete mode 100644 test/testref/static_socaerror_init.test delete mode 100644 test/testref/static_socaerrorlowres_init.test diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d5cba08fb..1be84dbef 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,18 +1,32 @@ +# This file sets up the ctests for SOCA +# +# Each ctest will be run in its own working directory (to keep tests from +# breaking when run in parallel), this working directory is available at +# "./soca/test/test_workdir/". Each test working directy has a link +# to the following directories: +# +# - data_static - input data that does NOT come from any other ctest +# - data_generated - contains the output from each ctest, and can be used as +# input for another ctest +# - data_output - a convenience link to "./data_generated/", this is +# created to easily differentiate between input and output data +# for a given ctest yaml + + set( soca_test_input - testinput/3dhyb_nicas.yml testinput/3dhyb_diffusion.yml + testinput/3dhyb.yml testinput/3dhybfgat.yml - testinput/3dvar_diffusion.yml + testinput/3dvar_nicas.yml testinput/3dvar_single_ob.yml testinput/3dvar_zero_ob.yml - testinput/3dvarbump.yml + testinput/3dvar.yml testinput/3dvarfgat_pseudo.yml testinput/3dvarfgat.yml testinput/3dvarlowres_soca.yml testinput/4denvar.yml testinput/4dhybenvar.yml testinput/addincrement.yml - testinput/balance_mask.yml testinput/checkpointmodel.yml testinput/convertincrement.yml testinput/convertstate_changevar.yml @@ -23,23 +37,20 @@ set( soca_test_input testinput/dirac_mlbalance.yml testinput/dirac_soca_cor_nicas_scales.yml testinput/dirac_soca_cov.yml - testinput/dirac_soca_mask.yml - testinput/dirac_soca_nomask.yml testinput/dirac_socahyb_cov.yml testinput/enshofx_1.yml testinput/enshofx_2.yml testinput/enshofx_3.yml testinput/enshofx.yml - testinput/enspert.yml testinput/ensmeanandvariance.yml + testinput/enspert.yml testinput/ensrecenter.yml - testinput/errorcovariance.yml testinput/forecast_identity.yml testinput/forecast_mom6_bgc.yml - testinput/forecast_mom6.yml testinput/forecast_mom6_ens1.yml testinput/forecast_mom6_ens2.yml testinput/forecast_mom6_ens3.yml + testinput/forecast_mom6.yml testinput/forecast_pseudo.yml testinput/geometry_iterator_2d.yml testinput/geometry_iterator_3d.yml @@ -47,15 +58,14 @@ set( soca_test_input testinput/getvalues.yml testinput/gridgen.yml testinput/hofx_3d.yml - testinput/hofx_oasim_3d.yml testinput/hofx_4d_pseudo.yml testinput/hofx_4d.yml + testinput/hofx_oasim_3d.yml testinput/hybridgain.yml testinput/increment.yml testinput/letkf_split_observer.yml testinput/letkf_split_solver.yml testinput/letkf.yml - testinput/linearmodel.yml testinput/makeobs.yml testinput/model_ufsm6c6.yml testinput/model.yml @@ -67,40 +77,34 @@ set( soca_test_input testinput/parameters_bump_cor_nicas.yml testinput/parameters_bump_cov.yml testinput/parameters_bump_loc.yml - testinput/parameters_diffusion_hz.yml - testinput/parameters_diffusion_vt.yml + testinput/parameters_diffusion.yml testinput/parametric_stddev.yml testinput/setcorscales.yml testinput/sqrtvertloc.yml testinput/state.yml - testinput/static_socaerror_init.yml - testinput/static_socaerror_test.yml - testinput/static_socaerrorlowres_init.yml testinput/varchange_ana2model.yml testinput/varchange_balance_TSSSH.yml testinput/varchange_balance.yml testinput/varchange_bkgerrfilt.yml testinput/varchange_bkgerrgodas.yml - testinput/varchange_bkgerrsoca.yml testinput/varchange_bkgerrsoca_stddev.yml + testinput/varchange_bkgerrsoca.yml ) set( soca_test_ref - testref/3dhyb_nicas.test testref/3dhyb_diffusion.test + testref/3dhyb.test testref/3dhybfgat.test - testref/3dvar_diffusion.test + testref/3dvar_nicas.test testref/3dvar_single_ob.test - testref/3dvar_soca.test testref/3dvar_zero_ob.test - testref/3dvarbump.test + testref/3dvar.test testref/3dvarfgat_pseudo.test testref/3dvarfgat.test testref/3dvarlowres_soca.test testref/4denvar.test testref/4dhybenvar.test testref/addincrement.test - testref/balance_mask.test testref/checkpointmodel.test testref/convertincrement.test testref/convertstate_changevar.test @@ -110,12 +114,10 @@ set( soca_test_ref testref/dirac_diffusion.test testref/dirac_soca_cor_nicas_scales.test testref/dirac_soca_cov.test - testref/dirac_soca_mask.test - testref/dirac_soca_nomask.test testref/dirac_socahyb_cov.test testref/enshofx.test - testref/enspert.test testref/ensmeanandvariance.test + testref/enspert.test testref/ensrecenter.test testref/forecast_identity.test testref/forecast_mom6_bgc.test @@ -123,23 +125,21 @@ set( soca_test_ref testref/forecast_pseudo.test testref/gridgen.test testref/hofx_3d.test - testref/hofx_oasim_3d.test testref/hofx_4d_pseudo.test testref/hofx_4d.test + testref/hofx_oasim_3d.test testref/hybridgain.test testref/letkf_split_observer.test testref/letkf_split_solver.test testref/letkf.test testref/makeobs.test - testref/parameters_bump_loc.test testref/parameters_bump_cor_nicas_scales.test testref/parameters_bump_cor_nicas.test testref/parameters_bump_cov.test + testref/parameters_bump_loc.test testref/parametric_stddev.test testref/setcorscales.test testref/sqrtvertloc.test - testref/static_socaerror_init.test - testref/static_socaerrorlowres_init.test ) # Create directory for test input/output/reference and symlink all files @@ -270,9 +270,13 @@ function(soca_add_test) ${WORKDIR}/data_static/workdir/${FILENAME} ${WORKDIR}/${FILENAME} ) endforeach() + # setup output directory file( MAKE_DIRECTORY ${WORKDIR}/data_generated/${ARG_NAME}) - + execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink + ${WORKDIR}/data_generated/${ARG_NAME} + ${WORKDIR}/data_output + ) # Are we building a unit test / or running a soca executable? if ( ARG_SRC ) @@ -366,17 +370,6 @@ soca_add_test( NAME getvalues SRC TestGetValues.cc TEST_DEPENDS test_soca_gridgen ) -soca_add_test( NAME errorcovariance - SRC TestErrorCovariance.cc - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) - -soca_add_test( NAME linearmodel - SRC TestLinearModel.cc - # NOTRAPFPE - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) - # Variable changes #--------------------------------------------------------------------------------------------------- @@ -475,16 +468,6 @@ soca_add_test( NAME forecast_mom6_ens3 # background error #--------------------------------------------------------------------------------------------------- -soca_add_test( NAME static_socaerror_init - EXE soca_error_covariance_toolbox.x - # NOTRAPFPE - TEST_DEPENDS test_soca_gridgen ) - -soca_add_test( NAME static_socaerrorlowres_init - EXE soca_error_covariance_toolbox.x - # NOTRAPFPE - TEST_DEPENDS test_soca_gridgen ) - soca_add_test( NAME setcorscales EXE soca_setcorscales.x # NOTRAPFPE @@ -509,15 +492,13 @@ soca_add_test( NAME parameters_bump_cov EXE soca_error_covariance_toolbox.x NOTRAPFPE ) -soca_add_test( NAME parameters_diffusion_hz +soca_add_test( NAME parameters_diffusion EXE soca_error_covariance_toolbox.x TEST_DEPENDS test_soca_gridgen test_soca_setcorscales) -soca_add_test( NAME parameters_diffusion_vt - EXE soca_error_covariance_toolbox.x - TEST_DEPENDS test_soca_gridgen - test_soca_setcorscales) +# TODO(travis) low res diffusion init + # Misc applications #--------------------------------------------------------------------------------------------------- @@ -527,7 +508,7 @@ soca_add_test( NAME enspert EXE soca_enspert.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) + test_soca_parameters_diffusion ) # Remapping MOM6 (horiz+vertical intterpolation) soca_add_test( NAME convertstate @@ -563,7 +544,7 @@ soca_add_test( NAME sqrtvertloc EXE soca_sqrtvertloc.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) + test_soca_parameters_diffusion ) soca_add_test( NAME diffstates EXE soca_diffstates.x @@ -576,39 +557,28 @@ soca_add_test( NAME diffstates soca_add_test( NAME dirac_soca_cor_nicas_scales EXE soca_error_covariance_toolbox.x TEST_DEPENDS test_soca_gridgen - parameters_bump_cor_nicas_scales) + test_soca_parameters_bump_cor_nicas_scales) soca_add_test( NAME dirac_soca_cov EXE soca_error_covariance_toolbox.x TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init) + test_soca_parameters_diffusion ) soca_add_test( NAME dirac_socahyb_cov EXE soca_error_covariance_toolbox.x TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init - test_soca_parameters_bump_loc) - -soca_add_test( NAME dirac_soca_mask - EXE soca_error_covariance_toolbox.x - NOTRAPFPE - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init) - -soca_add_test( NAME dirac_soca_nomask - EXE soca_error_covariance_toolbox.x - NOTRAPFPE - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init) + test_soca_parameters_bump_loc + test_soca_parameters_diffusion ) # NOTE the following tests throws a FPE only on clang soca_add_test( NAME dirac_diffusion EXE soca_error_covariance_toolbox.x - TEST_DEPENDS test_soca_parameters_diffusion_hz - test_soca_parameters_diffusion_vt) + TEST_DEPENDS test_soca_gridgen + test_soca_parameters_diffusion ) soca_add_test( NAME dirac_mlbalance - EXE soca_error_covariance_toolbox.x) + EXE soca_error_covariance_toolbox.x + TEST_DEPENDS test_soca_gridgen ) # h(x) executables #--------------------------------------------------------------------------------------------------- @@ -653,6 +623,8 @@ soca_add_test( NAME hofx_4d_pseudo # variational methods +# (unless specifically specified, it is assumed that correlation uses +# EXPLICIT_DIFFUSION, and localization uses BUMP_NICAS ) #--------------------------------------------------------------------------------------------------- # # Following test does not work yet. IODA crashes @@ -665,67 +637,55 @@ soca_add_test( NAME hofx_4d_pseudo # soca_add_test( NAME 3dvar_single_ob # EXE soca_var.x # NOTRAPFPE -# TEST_DEPENDS test_soca_gridgen -# test_soca_static_socaerror_init ) +# TEST_DEPENDS test_soca_gridgen ) -soca_add_test( NAME 3dvar_soca +soca_add_test( NAME 3dvar EXE soca_var.x - NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) + test_soca_parameters_diffusion ) -soca_add_test( NAME 3dvarbump +soca_add_test( NAME 3dvar_nicas EXE soca_var.x # NOTRAPFPE - TEST_DEPENDS test_soca_gridgen - test_soca_parameters_bump_cor_nicas ) - -soca_add_test( NAME 3dvar_diffusion - EXE soca_var.x - TEST_DEPENDS test_soca_gridgen - test_soca_parameters_diffusion_hz - test_soca_parameters_diffusion_vt) + TEST_DEPENDS test_soca_parameters_bump_cor_nicas ) -soca_add_test( NAME 3dvar_godas - EXE soca_var.x - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) -soca_add_test( NAME 3dvarlowres_soca - EXE soca_var.x - NOTRAPFPE - TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerrorlowres_init ) +## TODO(travis) fix the lowres grid dx,dy so that I can init the +## low res diffusion, and then run this test +# soca_add_test( NAME 3dvarlowres_soca +# EXE soca_var.x +# NOTRAPFPE +# TEST_DEPENDS test_soca_gridgen ) soca_add_test( NAME 3dvarfgat EXE soca_var.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init ) + test_socs_parameters_diffusion ) soca_add_test( NAME 3dvarfgat_pseudo EXE soca_var.x TEST_DEPENDS test_soca_gridgen test_soca_forecast_mom6 - test_soca_static_socaerror_init ) + test_socs_parameters_diffusion ) -soca_add_test( NAME 3dhyb_nicas +soca_add_test( NAME 3dhyb EXE soca_var.x TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init - test_soca_parameters_bump_loc ) + test_soca_parameters_bump_loc + test_socs_parameters_diffusion ) soca_add_test( NAME 3dhyb_diffusion EXE soca_var.x TEST_DEPENDS test_soca_gridgen - test_soca_parameters_diffusion_hz) + test_soca_parameters_diffusion) soca_add_test( NAME 3dhybfgat EXE soca_var.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init - test_soca_parameters_bump_loc ) + test_soca_parameters_bump_loc + test_socs_parameters_diffusion ) soca_add_test( NAME 4denvar EXE soca_var.x @@ -737,7 +697,8 @@ soca_add_test( NAME 4denvar soca_add_test( NAME 4dhybenvar EXE soca_var.x TEST_DEPENDS test_soca_gridgen - test_soca_static_socaerror_init + test_socs_parameters_diffusion + test_soca_forecast_mom6 test_soca_forecast_mom6_ens1 test_soca_forecast_mom6_ens2 test_soca_forecast_mom6_ens3 ) @@ -768,21 +729,21 @@ soca_add_test( NAME letkf_split_solver soca_add_test( NAME addincrement EXE soca_addincrement.x TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_diffusion ) + test_soca_3dvar ) # Remapping MOM6 (horiz+vertical interpolation) soca_add_test( NAME convertincrement EXE soca_convertincrement.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_diffusion ) + test_soca_3dvar) # restart checkpointing soca_add_test( NAME checkpointmodel EXE soca_checkpoint_model.x NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_diffusion) + test_soca_3dvar ) if( ${icepack_FOUND} ) # Apply the Soca2Cice nonlinear change of variable @@ -794,5 +755,5 @@ if( ${icepack_FOUND} ) MPI 2 NOTRAPFPE TEST_DEPENDS test_soca_gridgen - test_soca_3dvar_diffusion) + test_soca_3dvar ) endif() diff --git a/test/testinput/3dhyb_nicas.yml b/test/testinput/3dhyb.yml similarity index 81% rename from test/testinput/3dhyb_nicas.yml rename to test/testinput/3dhyb.yml index 083274464..9ffaa3598 100644 --- a/test/testinput/3dhyb_nicas.yml +++ b/test/testinput/3dhyb.yml @@ -23,20 +23,24 @@ cost function: covariance model: hybrid components: - covariance: - covariance model: SocaError - analysis variables: [cicen, hicen, hsnon, socn, tocn, uocn, vocn, ssh] - date: *bkg_date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [hsnon, socn, tocn, uocn, vocn, ssh] - - name: ice - variables: [cicen, hicen] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [cicen, hicen, hsnon, tocn, socn, ssh, uocn, vocn] + geometry: *geom + group mapping: + - name: group1 + variables: [tocn, socn, cicen, hicen, hsnon, uocn, vocn, ssh] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion/vt_5lvls.nc + - name: group2 + horizontal: + filename: data_generated/parameters_diffusion/hz_smaller.nc linear variable change: input variables: *soca_vars @@ -64,12 +68,6 @@ cost function: hicen_min: 10.0 hicen_max: 100.0 - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 @@ -127,7 +125,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dhyb_nicas/adt.3dhyb_nicas.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -152,14 +150,14 @@ variational: write increment: true increment: state component: - datadir: data_generated/3dhyb_nicas + datadir: data_output/ date: *bkg_date - exp: 3dhyb_nicas.iter1 + exp: 3dhyb.iter1 type: incr output: - datadir: data_generated/3dhyb_nicas - exp: 3dhyb_nicas + datadir: data_output/ + exp: 3dhyb type: an final: @@ -167,6 +165,6 @@ final: departures: oman test: - reference filename: testref/3dhyb_nicas.test - test output filename: testoutput/3dhyb_nicas.test + reference filename: testref/3dhyb.test + test output filename: testoutput/3dhyb.test float relative tolerance: 1e-5 diff --git a/test/testinput/3dhyb_diffusion.yml b/test/testinput/3dhyb_diffusion.yml index 396a82610..387f23d6e 100644 --- a/test/testinput/3dhyb_diffusion.yml +++ b/test/testinput/3dhyb_diffusion.yml @@ -37,12 +37,12 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc - name: group2 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc date: *bkg_date linear variable change: input variables: *soca_vars @@ -120,7 +120,7 @@ cost function: - name: group1 multivariate strategy: duplicated horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: strategy: duplicated @@ -134,7 +134,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dhyb_diffusion/adt.3dhyb_diffusion.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -159,13 +159,13 @@ variational: write increment: true increment: state component: - datadir: data_generated/3dhyb_diffusion + datadir: data_output/ date: *bkg_date exp: 3dhyb_diffusion.iter1 type: incr output: - datadir: data_generated/3dhyb_diffusion + datadir: data_output/ exp: 3dhyb_diffusion type: an diff --git a/test/testinput/3dhybfgat.yml b/test/testinput/3dhybfgat.yml index 41876b49d..b92505d64 100644 --- a/test/testinput/3dhybfgat.yml +++ b/test/testinput/3dhybfgat.yml @@ -49,9 +49,9 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -133,7 +133,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dhybfgat/adt.3dhybfgat.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -158,13 +158,13 @@ variational: write increment: true increment: state component: - datadir: data_generated/3dhybfgat + datadir: data_output/ date: *date_begin exp: 3dhybfgat.iter1 type: incr output: - datadir: data_generated/3dhybfgat + datadir: data_output/ exp: 3dhybfgat type: an diff --git a/test/testinput/3dvar_diffusion.yml b/test/testinput/3dvar.yml similarity index 88% rename from test/testinput/3dvar_diffusion.yml rename to test/testinput/3dvar.yml index b3d9708c3..5a2ede56e 100644 --- a/test/testinput/3dvar_diffusion.yml +++ b/test/testinput/3dvar.yml @@ -40,12 +40,12 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc - name: group2 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc date: *bkg_date @@ -95,7 +95,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sst_coolskin.3dvar.nc + obsfile: data_output/sst_coolskin.nc obsdatain: engine: type: H5File @@ -111,7 +111,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sst.3dvar.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -133,7 +133,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/sss.3dvar.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -159,7 +159,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/adt.3dvar.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -190,7 +190,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/prof_T.3dvar.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -210,7 +210,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/prof_S.3dvar.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -232,7 +232,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvar_diffusion/icec.3dvar.nc + obsfile: data_output/icec.nc obsdatain: engine: type: H5File @@ -260,13 +260,13 @@ variational: write increment: true increment: state component: - datadir: data_generated/3dvar_diffusion + datadir: data_output date: *bkg_date exp: 3dvar.iter1 type: incr output: - datadir: data_generated/3dvar_diffusion + datadir: data_output exp: 3dvar type: an @@ -275,6 +275,6 @@ final: departures: oman test: - reference filename: testref/3dvar_diffusion.test - test output filename: testoutput/3dvar_diffusion.test + reference filename: testref/3dvar.test + test output filename: testoutput/3dvar.test float relative tolerance: 1e-5 \ No newline at end of file diff --git a/test/testinput/3dvarbump.yml b/test/testinput/3dvar_nicas.yml similarity index 91% rename from test/testinput/3dvarbump.yml rename to test/testinput/3dvar_nicas.yml index c54ef83af..7666ea0bd 100644 --- a/test/testinput/3dvarbump.yml +++ b/test/testinput/3dvar_nicas.yml @@ -87,7 +87,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarbump/sst.3dvarbump.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -114,7 +114,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarbump/sss.3dvarbump.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -137,7 +137,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarbump/adt.3dvarbump.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -158,7 +158,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarbump/prof_T.3dvarbump.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -178,7 +178,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarbump/prof_S.3dvarbump.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -208,8 +208,8 @@ variational: departures: ombg output: - datadir: data_generated/3dvarbump - exp: 3dvarbump + datadir: data_output/ + exp: 3dvar_nicas type: an final: @@ -217,6 +217,6 @@ final: departures: oman test: - reference filename: testref/3dvarbump.test - test output filename: testoutput/3dvarbump.test + reference filename: testref/3dvar_nicas.test + test output filename: testoutput/3dvar_nicas.test float relative tolerance: 1e-4 diff --git a/test/testinput/3dvarfgat.yml b/test/testinput/3dvarfgat.yml index 8248a7560..bd4608bc2 100644 --- a/test/testinput/3dvarfgat.yml +++ b/test/testinput/3dvarfgat.yml @@ -51,9 +51,9 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -99,7 +99,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/sst_coolskin.3dvarfgat.nc + obsfile: data_output/sst_coolskin.nc obsdatain: engine: type: H5File @@ -115,7 +115,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/sst.3dvarfgat.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -137,7 +137,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/sss.3dvarfgat.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -160,7 +160,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/adt.3dvarfgat.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -178,7 +178,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/prof_T.3dvarfgat.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -198,7 +198,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/prof_S.3dvarfgat.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -220,7 +220,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/icec.3dvarfgat.nc + obsfile: data_output/icec.nc obsdatain: engine: type: H5File @@ -239,7 +239,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat/uocn_surface.3dvarfgat.nc + obsfile: data_output/uocn_surface.nc obsdatain: engine: type: H5File @@ -263,13 +263,13 @@ variational: write increment: true increment: state component: - datadir: data_generated/3dvarfgat + datadir: data_output/ date: *bkg_date exp: 3dvarfgat.iter1 type: incr output: - datadir: data_generated/3dvarfgat + datadir: data_output/ exp: 3dvarfgat type: an diff --git a/test/testinput/3dvarfgat_pseudo.yml b/test/testinput/3dvarfgat_pseudo.yml index 69cfc8011..68d1718ac 100644 --- a/test/testinput/3dvarfgat_pseudo.yml +++ b/test/testinput/3dvarfgat_pseudo.yml @@ -70,9 +70,9 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -103,7 +103,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat_pseudo/sst.3dvarfgat_pseudo.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -125,7 +125,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat_pseudo/sss.3dvarfgat_pseudo.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -148,7 +148,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat_pseudo/adt.3dvarfgat_pseudo.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -166,7 +166,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat_pseudo/prof_T.3dvarfgat_pseudo.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -186,7 +186,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/3dvarfgat_pseudo/prof_S.3dvarfgat_pseudo.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -219,7 +219,7 @@ minimizer: algorithm: RPCG output: - datadir: data_generated/3dvarfgat_pseudo + datadir: data_output/ exp: 3dvarfgat_pseudo type: an diff --git a/test/testinput/4denvar.yml b/test/testinput/4denvar.yml index 34f27166c..163f98713 100644 --- a/test/testinput/4denvar.yml +++ b/test/testinput/4denvar.yml @@ -61,7 +61,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/4denvar/sst.4denvar.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -85,7 +85,7 @@ variational: departures: ombg output: - datadir: data_generated/4denvar + datadir: data_output/ exp: 4denvar type: an diff --git a/test/testinput/4dhybenvar.yml b/test/testinput/4dhybenvar.yml index 965d4bddd..08febd6aa 100644 --- a/test/testinput/4dhybenvar.yml +++ b/test/testinput/4dhybenvar.yml @@ -46,9 +46,9 @@ cost function: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc - weight: value: 0.5 @@ -85,7 +85,7 @@ cost function: obsdataout: engine: type: H5File - obsfile: data_generated/4dhybenvar/sst.4dhybenvar.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -109,7 +109,7 @@ variational: departures: ombg output: - datadir: data_generated/4dhybenvar + datadir: data_output/ exp: 4dhybenvar type: an diff --git a/test/testinput/addincrement.yml b/test/testinput/addincrement.yml index 0aa2b2fbc..14bd05aa6 100644 --- a/test/testinput/addincrement.yml +++ b/test/testinput/addincrement.yml @@ -16,14 +16,14 @@ state: increment: read_from_file: 1 - basename: data_generated/3dvar_diffusion/ + basename: data_generated/3dvar/ ocn_filename: ocn.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc ice_filename: ice.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc date: *bkg_date added variables: [hsnon, socn, tocn] output: - datadir: data_generated/addincrement + datadir: data_output/ exp: addincrement type: an diff --git a/test/testinput/checkpointmodel.yml b/test/testinput/checkpointmodel.yml index f34ffef77..515389adc 100644 --- a/test/testinput/checkpointmodel.yml +++ b/test/testinput/checkpointmodel.yml @@ -21,7 +21,7 @@ background: analysis: read_from_file: 1 date: *date - basename: data_generated/3dvar_diffusion/ + basename: data_generated/3dvar/ ocn_filename: ocn.3dvar.an.2018-04-15T00:00:00Z.nc state variables: [socn, tocn, hocn] diff --git a/test/testinput/convertincrement.yml b/test/testinput/convertincrement.yml index 2dfd73731..b1cf1d3b8 100644 --- a/test/testinput/convertincrement.yml +++ b/test/testinput/convertincrement.yml @@ -23,7 +23,7 @@ increments: input variables: [tocn, socn, ssh, hocn] input: read_from_file: 1 - basename: data_generated/3dvar_diffusion/ + basename: data_generated/3dvar/ ocn_filename: ocn.3dvar.iter1.incr.2018-04-15T00:00:00Z.nc date: 2018-04-15T00:00:00Z state variables: [ssh, tocn, socn, hocn] @@ -34,7 +34,7 @@ increments: date: 2018-04-15T00:00:00Z state variables: [ssh, tocn, socn, hocn, layer_depth, mld] output: - datadir: data_generated/convertincrement + datadir: data_output/ exp: convertincrement type: incr date: 2018-04-15T00:00:00Z diff --git a/test/testinput/convertstate.yml b/test/testinput/convertstate.yml index 6406260ca..cc236f9b1 100644 --- a/test/testinput/convertstate.yml +++ b/test/testinput/convertstate.yml @@ -18,7 +18,7 @@ states: date: &bkg_date 2018-04-15T00:00:00Z state variables: [ssh, tocn, socn, uocn, vocn, hocn, cicen, layer_depth] output: - datadir: data_generated/convertstate + datadir: data_output/ exp: convertstate type: fc date: *bkg_date diff --git a/test/testinput/convertstate_changevar.yml b/test/testinput/convertstate_changevar.yml index 70b2c2a75..70d950058 100644 --- a/test/testinput/convertstate_changevar.yml +++ b/test/testinput/convertstate_changevar.yml @@ -30,7 +30,7 @@ states: date: &bkg_date 2018-04-15T00:00:00Z state variables: *soca_vars output: - datadir: data_generated/convertstate_changevar + datadir: data_output/ exp: convertstate_changevar type: fc date: *bkg_date @@ -43,7 +43,7 @@ states: date: *bkg_date state variables: *soca_vars output: - datadir: data_generated/convertstate_changevar + datadir: data_output/ exp: convertstate_changevar.dummy_member type: fc date: *bkg_date diff --git a/test/testinput/convertstate_soca2cice.yml b/test/testinput/convertstate_soca2cice.yml index cd3881ddd..5e2b09f64 100644 --- a/test/testinput/convertstate_soca2cice.yml +++ b/test/testinput/convertstate_soca2cice.yml @@ -21,19 +21,19 @@ variable change: sno_lev: 1 tstep: PT1H cice output: - restart: data_generated/convertstate_soca2cice/iced.2018-04-15-00000.nc + restart: data_output/iced.2018-04-15-00000.nc output variables: [tocn, socn, hocn, cicen, hicen, hsnon] states: - input: read_from_file: 1 - basename: data_generated/3dvar_diffusion/ + basename: data_generated/3dvar/ ocn_filename: ocn.3dvar.an.2018-04-15T00:00:00Z.nc ice_filename: ice.3dvar.an.2018-04-15T00:00:00Z.nc date: &bkg_date 2018-04-15T00:00:00Z state variables: [tocn, socn, hocn, cicen, hicen, hsnon] output: - datadir: data_generated/convertstate_soca2cice/ + datadir: data_output/ exp: soca2cice type: fc date: *bkg_date diff --git a/test/testinput/diffstates.yml b/test/testinput/diffstates.yml index 8d5373b04..e0ef52c0b 100644 --- a/test/testinput/diffstates.yml +++ b/test/testinput/diffstates.yml @@ -24,7 +24,7 @@ state2: state variables: [cicen, hicen, hsnon, socn, tocn, ssh, hocn, uocn, vocn] output: # state1 - state2 - datadir: data_generated/diffstates + datadir: data_output/ exp: diffstates type: an diff --git a/test/testinput/dirac_diffusion.yml b/test/testinput/dirac_diffusion.yml index ea425a58b..682b07e45 100644 --- a/test/testinput/dirac_diffusion.yml +++ b/test/testinput/dirac_diffusion.yml @@ -31,13 +31,13 @@ background error: multivariate strategy: univariate # or duplicated, if dealing with localization instead # the default is "univariate" horizontal: - filename: data_generated/parameters_diffusion_hz/hz_large.nc + filename: data_generated/parameters_diffusion/hz_large.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc - name: group2 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc dirac: ixdir: [1, 17, 51, 31, 51, 63, 81, 14, 16, 43] @@ -46,7 +46,7 @@ dirac: ifdir: [1, 1, 3, 2, 1, 1, 1, 4, 5, 5] output dirac: - datadir: data_generated/dirac_diffusion + datadir: data_output/ date: *date exp: dirac_diffusion_%id% type: an diff --git a/test/testinput/dirac_mlbalance.yml b/test/testinput/dirac_mlbalance.yml index d5d1321e6..ad0e2a99d 100644 --- a/test/testinput/dirac_mlbalance.yml +++ b/test/testinput/dirac_mlbalance.yml @@ -29,7 +29,7 @@ dirac: ifdir: [1, 1, 3, 2, 1, 1, 1, 4, 5, 5] output dirac: - datadir: data_generated/dirac_mlbalance + datadir: data_output/ date: *date exp: dirac_mlbalance_%id% type: an diff --git a/test/testinput/dirac_soca_cor_nicas_scales.yml b/test/testinput/dirac_soca_cor_nicas_scales.yml index 49e78c75f..3779d5ffd 100644 --- a/test/testinput/dirac_soca_cor_nicas_scales.yml +++ b/test/testinput/dirac_soca_cor_nicas_scales.yml @@ -40,7 +40,7 @@ dirac: ifdir: [1, 1, 3, 2, 1, 1, 1, 4, 5, 5] output dirac: - datadir: data_generated/dirac_soca_cor_nicas_scales + datadir: data_output/ date: *date exp: dirac_soca_cor_nicas_scales%id% type: an diff --git a/test/testinput/dirac_soca_cov.yml b/test/testinput/dirac_soca_cov.yml index bdc849be8..cf936501b 100644 --- a/test/testinput/dirac_soca_cov.yml +++ b/test/testinput/dirac_soca_cov.yml @@ -1,4 +1,4 @@ -geometry: +geometry: &geom geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc mom6_input_nml: data_static/72x35x25/input.nml fields metadata: data_static/fields_metadata.yml @@ -12,23 +12,23 @@ background: state variables: &soca_vars [cicen, hicen, socn, tocn, uocn, vocn, ssh, hocn, mld, layer_depth] background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, uocn, vocn, ssh] - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh] - - name: ice - variables: [cicen, hicen] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [cicen, hicen, uocn, vocn, tocn, socn, ssh] + geometry: *geom + group mapping: + - name: group1 + variables: [cicen, hicen, uocn, vocn, tocn, socn, ssh] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: - input variables: *soca_vars output variables: *soca_vars @@ -58,14 +58,6 @@ background error: input variables: *soca_vars output variables: *soca_vars - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - input variables: *soca_vars - output variables: *soca_vars - - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 @@ -87,7 +79,7 @@ dirac: ifdir: [1, 1, 3, 2, 1, 1, 1, 4, 5, 5, 8] output dirac: - datadir: data_generated/dirac_soca_cov + datadir: data_output/ date: *date exp: dirac_soca_cov.%id% type: an diff --git a/test/testinput/dirac_soca_mask.yml b/test/testinput/dirac_soca_mask.yml deleted file mode 100644 index fbcc126f3..000000000 --- a/test/testinput/dirac_soca_mask.yml +++ /dev/null @@ -1,54 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - date: &date 2018-04-15T00:00:00Z - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &soca_vars [cicen, hicen, socn, tocn, ssh, hocn, mld, layer_depth] - -background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, ssh] - date: *date - bump: - drivers: - multivariate strategy: univariate - compute nicas: true - model: - do not cross mask boundaries: true - nicas: - resolution: 6.0 - correlation: - - name: ocn - base value: 1500.0e3 - rossby mult: 0.3 - variables: [tocn, socn, ssh] # I don't think variable names actually matter - # here, it just needs something - - name: ice - base value: 560224.089635854 - variables: [cicen, hicen] - - - name: wav - base value: 600.0e3 - variables: [swh] - -dirac: - ixdir: [37, 12, 64, 23, 61, 59] - iydir: [20, 15, 22, 29, 30, 11] - izdir: [1, 1, 1, 1, 1, 1] - ifdir: [1, 1, 1, 1, 1, 1] - -output dirac: - datadir: data_generated/dirac_soca_mask - date: *date - exp: dirac_soca_mask_%id% - type: an - -test: - reference filename: testref/dirac_soca_mask.test - test output filename: testoutput/dirac_soca_mask.test diff --git a/test/testinput/dirac_soca_nomask.yml b/test/testinput/dirac_soca_nomask.yml deleted file mode 100644 index 35b6d1ddc..000000000 --- a/test/testinput/dirac_soca_nomask.yml +++ /dev/null @@ -1,54 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - date: &date 2018-04-15T00:00:00Z - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &soca_vars [cicen, hicen, socn, tocn, ssh, hocn, mld, layer_depth] - -background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, ssh] - date: *date - bump: - drivers: - multivariate strategy: univariate - compute nicas: true - model: - do not cross mask boundaries: 0 - nicas: - resolution: 6.0 - correlation: - - name: ocn - base value: 1500.0e3 - rossby mult: 0.3 - variables: [tocn, socn, ssh] # I don't think variable names actually matter - # here, it just needs something - - name: ice - base value: 560224.089635854 - variables: [cicen, hicen] - - - name: wav - base value: 600.0e3 - variables: [swh] - -dirac: - ixdir: [37, 12, 64, 23, 61, 59] - iydir: [20, 15, 22, 29, 30, 11] - izdir: [1, 1, 1, 1, 1, 1] - ifdir: [1, 1, 1, 1, 1, 1] - -output dirac: - datadir: data_generated/dirac_soca_nomask - date: *date - exp: dirac_soca_nomask_%id% - type: an - -test: - reference filename: testref/dirac_soca_nomask.test - test output filename: testoutput/dirac_soca_nomask.test diff --git a/test/testinput/dirac_socahyb_cov.yml b/test/testinput/dirac_socahyb_cov.yml index 2aa5ff49c..403f2984d 100644 --- a/test/testinput/dirac_socahyb_cov.yml +++ b/test/testinput/dirac_socahyb_cov.yml @@ -1,4 +1,4 @@ -geometry: +geometry: &geom geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc mom6_input_nml: data_static/72x35x25/input.nml fields metadata: data_static/fields_metadata.yml @@ -22,20 +22,21 @@ background error: covariance model: hybrid components: - covariance: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, uocn, vocn, ssh] - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh] - - name: ice - variables: [cicen, hicen] + covariance model: SABER + saber central block: + saber block name: EXPLICIT_DIFFUSION + active variables: [cicen, hicen, uocn, vocn, tocn, socn, ssh] + geometry: *geom + group mapping: + - name: group1 + variables: [cicen, hicen, uocn, vocn, tocn, socn, ssh] + read: + groups: + - name: group1 + horizontal: + filename: data_generated/parameters_diffusion/hz_smaller.nc + vertical: + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: input variables: *soca_vars @@ -47,6 +48,7 @@ background error: efold_z: 2500.0 # [m] input variables: *soca_vars output variables: *soca_vars + - linear variable change name: BkgErrGODAS sst_bgerr_file: data_static/godas_sst_bgerr.nc t_min: 0.1 @@ -64,13 +66,7 @@ background error: hicen_max: 100.0 input variables: *soca_vars output variables: *soca_vars - - linear variable change name: VertConvSOCA - Lz_min: 2.0 - Lz_mld: 1 - Lz_mld_max: 500.0 - scale_layer_thick: 1.5 - input variables: *soca_vars - output variables: *soca_vars + - linear variable change name: BalanceSOCA kst: dsdtmax: 0.1 @@ -86,6 +82,7 @@ background error: output variables: *soca_vars weight: value: 0.5 + - covariance: covariance model: ensemble members: @@ -122,7 +119,7 @@ dirac: ifdir: [1, 1, 3, 2, 1, 1, 1, 5, 5, 8] output dirac: - datadir: data_generated/dirac_socahyb_cov + datadir: data_output/ date: *date exp: dirac_socahyb_cov_%id% type: an diff --git a/test/testinput/ensmeanandvariance.yml b/test/testinput/ensmeanandvariance.yml index 05e481971..7a26a617d 100644 --- a/test/testinput/ensmeanandvariance.yml +++ b/test/testinput/ensmeanandvariance.yml @@ -26,19 +26,19 @@ ensemble: ice_filename: restarts_ens/ice.enspert.ens.4.2018-04-15T00:00:00Z.PT0S.nc variance output: - datadir: data_generated/ensmeanandvariance + datadir: data_output/ exp: variance type: fc date: *date_bkg standard deviation output: - datadir: data_generated/ensmeanandvariance + datadir: data_output/ exp: stddev type: fc date: *date_bkg mean output: - datadir: data_generated/ensmeanandvariance + datadir: data_output/ exp: mean type: fc date: *date_bkg diff --git a/test/testinput/enspert.yml b/test/testinput/enspert.yml index b2ec67829..578da455f 100644 --- a/test/testinput/enspert.yml +++ b/test/testinput/enspert.yml @@ -30,9 +30,9 @@ background error: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: linear variable changes: @@ -86,7 +86,7 @@ forecast length: PT6H output: frequency: PT6H - datadir: data_generated/enspert + datadir: data_output/ exp: enspert type: ens date: *date diff --git a/test/testinput/ensrecenter.yml b/test/testinput/ensrecenter.yml index a65d247f5..33526f9e3 100644 --- a/test/testinput/ensrecenter.yml +++ b/test/testinput/ensrecenter.yml @@ -27,7 +27,7 @@ ensemble: nmembers: 4 recentered output: - datadir: data_generated/ensrecenter + datadir: data_output/ exp: ensrecenter type: ens date: *date_bkg diff --git a/test/testinput/errorcovariance.yml b/test/testinput/errorcovariance.yml deleted file mode 100644 index 9bf0d4836..000000000 --- a/test/testinput/errorcovariance.yml +++ /dev/null @@ -1,34 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -analysis variables: &soca_vars [cicen, hicen, socn, tocn, uocn, vocn, ssh] - -background: - read_from_file: 1 - date: &date 2018-04-15T00:00:00Z - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: [cicen, hicen, socn, tocn, uocn, vocn, ssh, hocn] - -background error: - covariance model: SocaError - analysis variables: *soca_vars - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - read local nicas: true - correlation: - - name: ocn - variables: [socn, tocn, uocn, vocn, ssh] - - name: ice - variables: [cicen, hicen] - -covariance test: - tolerance: 1e-10 - testinverse: false diff --git a/test/testinput/forecast_identity.yml b/test/testinput/forecast_identity.yml index 9894b197f..d16632d9a 100644 --- a/test/testinput/forecast_identity.yml +++ b/test/testinput/forecast_identity.yml @@ -22,7 +22,7 @@ forecast length: PT6H output: frequency: PT6H - datadir: data_generated/forecast_identity + datadir: data_output/ exp: forecast_identity date: 2018-04-15T00:00:00Z type: fc diff --git a/test/testinput/forecast_mom6.yml b/test/testinput/forecast_mom6.yml index 984c55abb..4de345d0f 100644 --- a/test/testinput/forecast_mom6.yml +++ b/test/testinput/forecast_mom6.yml @@ -21,7 +21,7 @@ forecast length: PT6H output: frequency: PT1H - datadir: data_generated/forecast_mom6 + datadir: data_output/ exp: forecast_mom6 date: *date type: fc diff --git a/test/testinput/forecast_mom6_bgc.yml b/test/testinput/forecast_mom6_bgc.yml index d000b9c99..fe7a33970 100644 --- a/test/testinput/forecast_mom6_bgc.yml +++ b/test/testinput/forecast_mom6_bgc.yml @@ -21,7 +21,7 @@ forecast length: PT6H output: frequency: PT6H - datadir: data_generated/forecast_mom6_bgc + datadir: data_output/ exp: forecast_mom6_bgc date: *date type: fc diff --git a/test/testinput/forecast_mom6_ens1.yml b/test/testinput/forecast_mom6_ens1.yml index 93b6942c3..d087819ec 100644 --- a/test/testinput/forecast_mom6_ens1.yml +++ b/test/testinput/forecast_mom6_ens1.yml @@ -21,7 +21,7 @@ forecast length: PT6H output: frequency: PT1H - datadir: data_generated/forecast_mom6_ens1 + datadir: data_output/ exp: fcst_ens1 date: *date type: fc \ No newline at end of file diff --git a/test/testinput/forecast_mom6_ens2.yml b/test/testinput/forecast_mom6_ens2.yml index 6ebc4eaaf..e80f5f43c 100644 --- a/test/testinput/forecast_mom6_ens2.yml +++ b/test/testinput/forecast_mom6_ens2.yml @@ -21,7 +21,7 @@ forecast length: PT6H output: frequency: PT1H - datadir: data_generated/forecast_mom6_ens2 + datadir: data_output/ exp: fcst_ens2 date: *date type: fc \ No newline at end of file diff --git a/test/testinput/forecast_mom6_ens3.yml b/test/testinput/forecast_mom6_ens3.yml index bd6bde079..4a72cf4b3 100644 --- a/test/testinput/forecast_mom6_ens3.yml +++ b/test/testinput/forecast_mom6_ens3.yml @@ -21,7 +21,7 @@ forecast length: PT6H output: frequency: PT1H - datadir: data_generated/forecast_mom6_ens3 + datadir: data_output/ exp: fcst_ens3 date: *date type: fc \ No newline at end of file diff --git a/test/testinput/forecast_pseudo.yml b/test/testinput/forecast_pseudo.yml index dc9606b1d..b5de54d8d 100644 --- a/test/testinput/forecast_pseudo.yml +++ b/test/testinput/forecast_pseudo.yml @@ -43,7 +43,7 @@ forecast length: PT6H output: frequency: PT6H - datadir: data_generated/forecast_pseudo + datadir: data_output/ exp: forecast_pseudo date: *date type: fc diff --git a/test/testinput/gridgen.yml b/test/testinput/gridgen.yml index 80fc88575..f4aec0e09 100644 --- a/test/testinput/gridgen.yml +++ b/test/testinput/gridgen.yml @@ -1,5 +1,5 @@ geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc + geom_grid_file: data_output/soca_gridspec.72x35x25.nc save_local_domain: true full_init: true mom6_input_nml: data_static/72x35x25/input.nml @@ -8,7 +8,7 @@ geometry: # save the atlas mesh for viewing in gmsh gmsh save: true - gmsh filename: data_generated/gridgen/gmsh.msh + gmsh filename: data_output/gmsh.msh test: reference filename: testref/gridgen.test diff --git a/test/testinput/hofx_3d.yml b/test/testinput/hofx_3d.yml index a61537d8a..2a48fa705 100644 --- a/test/testinput/hofx_3d.yml +++ b/test/testinput/hofx_3d.yml @@ -23,7 +23,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/sst_coolskin.hofx_3d.nc + obsfile: data_output/sst_coolskin.nc obsdatain: engine: type: H5File @@ -37,7 +37,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/sst.hofx_3d.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -52,7 +52,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/sss.hofx_3d.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -67,7 +67,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/adt.hofx_3d.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -82,7 +82,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/prof.hofx_3d.nc + obsfile: data_output/prof.nc obsdatain: engine: type: H5File @@ -104,7 +104,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/prof_T.hofx_3d.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -120,7 +120,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/prof_S.hofx_3d.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -137,7 +137,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/icec.hofx_3d.nc + obsfile: data_output/icec.nc obsdatain: engine: type: H5File @@ -151,7 +151,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/icefb.hofx_3d.nc + obsfile: data_output/icefb.nc obsdatain: engine: type: H5File @@ -165,7 +165,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/chl.hofx_3d.nc + obsfile: data_output/chl.nc obsdatain: engine: type: H5File @@ -204,7 +204,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/uocn_surface.hofx_3d.nc + obsfile: data_output/uocn_surface.nc obsdatain: engine: type: H5File @@ -219,7 +219,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_3d/vocn_surface.hofx_3d.nc + obsfile: data_output/vocn_surface.nc obsdatain: engine: type: H5File diff --git a/test/testinput/hofx_4d.yml b/test/testinput/hofx_4d.yml index b35e640a2..074513cff 100644 --- a/test/testinput/hofx_4d.yml +++ b/test/testinput/hofx_4d.yml @@ -30,7 +30,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/sst_coolskin.hofx_4d.nc + obsfile: data_output/sst_coolskin.nc obsdatain: engine: type: H5File @@ -44,7 +44,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/sst.hofx_4d.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -59,7 +59,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/sss.hofx_4d.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -74,7 +74,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/adt.hofx_4d.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -88,7 +88,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/prof_T.hofx_4d.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -102,7 +102,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/prof_S.hofx_4d.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File @@ -120,7 +120,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/icec.hofx_4d.nc + obsfile: data_output/icec.nc obsdatain: engine: type: H5File @@ -134,7 +134,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/uocn_surface.hofx_4d.nc + obsfile: data_output/uocn_surface.nc obsdatain: engine: type: H5File @@ -149,7 +149,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d/vocn_surface.hofx_4d.nc + obsfile: data_output/vocn_surface.nc obsdatain: engine: type: H5File diff --git a/test/testinput/hofx_4d_pseudo.yml b/test/testinput/hofx_4d_pseudo.yml index 6c87df3a4..bf020ca62 100644 --- a/test/testinput/hofx_4d_pseudo.yml +++ b/test/testinput/hofx_4d_pseudo.yml @@ -39,7 +39,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d_pseudo/sst.hofx_4d_pseudo.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -54,7 +54,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d_pseudo/sss.hofx_4d_pseudo.nc + obsfile: data_output/sss.nc obsdatain: engine: type: H5File @@ -69,7 +69,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d_pseudo/adt.hofx_4d_pseudo.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -83,7 +83,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d_pseudo/prof_T.hofx_4d_pseudo.nc + obsfile: data_output/prof_T.nc obsdatain: engine: type: H5File @@ -97,7 +97,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_4d_pseudo/prof_S.hofx_4d_pseudo.nc + obsfile: data_output/prof_S.nc obsdatain: engine: type: H5File diff --git a/test/testinput/hofx_oasim_3d.yml b/test/testinput/hofx_oasim_3d.yml index ba8c70d21..2cf5c0ddc 100644 --- a/test/testinput/hofx_oasim_3d.yml +++ b/test/testinput/hofx_oasim_3d.yml @@ -25,7 +25,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/hofx_oasim_3d/pace_oasim.hofx_oasim_3d.nc + obsfile: data_output/pace_oasim.nc obsdatain: engine: type: H5File diff --git a/test/testinput/hybridgain.yml b/test/testinput/hybridgain.yml index 890c8eddc..d14e6ebf1 100644 --- a/test/testinput/hybridgain.yml +++ b/test/testinput/hybridgain.yml @@ -41,7 +41,7 @@ ensemble: ice_filename: restarts_ens/ice.enspert.ens.4.2018-04-15T00:00:00Z.PT0S.nc recentered output: - datadir: data_generated/hybridgain + datadir: data_output/ exp: hybridgain type: ens date: *date_bkg diff --git a/test/testinput/letkf.yml b/test/testinput/letkf.yml index 23e76f305..a159fbff3 100644 --- a/test/testinput/letkf.yml +++ b/test/testinput/letkf.yml @@ -28,7 +28,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf/sst.letkf.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -60,7 +60,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf/adt.letkf.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -99,31 +99,31 @@ local ensemble DA: mult: 1.1 output: - datadir: data_generated/letkf + datadir: data_output/ date: *date exp: letkf type: ens output mean prior: - datadir: data_generated/letkf + datadir: data_output/ date: *date exp: letkf type: fc output variance prior: - datadir: data_generated/letkf + datadir: data_output/ date: *date exp: letkf type: fc output variance posterior: - datadir: data_generated/letkf + datadir: data_output/ date: *date exp: letkf type: an output increment: - datadir: data_generated/letkf + datadir: data_output/ date: *date exp: letkf.inc type: an diff --git a/test/testinput/letkf_split_observer.yml b/test/testinput/letkf_split_observer.yml index 2d7107649..fd02fd283 100644 --- a/test/testinput/letkf_split_observer.yml +++ b/test/testinput/letkf_split_observer.yml @@ -35,7 +35,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf_split_observer/sst.letkf_split_observer.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File @@ -64,7 +64,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf_split_observer/adt.letkf_split_observer.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File @@ -89,7 +89,7 @@ local ensemble DA: solver: LETKF output: - datadir: data_generated/letkf_split_observer + datadir: data_output/ date: *date exp: letkf_split_observer type: ens diff --git a/test/testinput/letkf_split_solver.yml b/test/testinput/letkf_split_solver.yml index 6928ef796..7bc81248c 100644 --- a/test/testinput/letkf_split_solver.yml +++ b/test/testinput/letkf_split_solver.yml @@ -36,11 +36,11 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf_split_solver/sst.letkf_split_solver.nc + obsfile: data_output/sst.nc obsdatain: engine: type: H5File - obsfile: data_generated/letkf_split_observer/sst.letkf_split_observer.nc + obsfile: data_generated/letkf_split_observer/sst.nc simulated variables: [seaSurfaceTemperature] obs operator: name: Identity @@ -63,11 +63,11 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/letkf_split_solver/adt.letkf_split_solver.nc + obsfile: data_output/adt.nc obsdatain: engine: type: H5File - obsfile: data_generated/letkf_split_observer/adt.letkf_split_observer.nc + obsfile: data_generated/letkf_split_observer/adt.nc simulated variables: [absoluteDynamicTopography] obs operator: name: ADT @@ -98,31 +98,31 @@ local ensemble DA: mult: 1.1 output: - datadir: data_generated/letkf_split_solver + datadir: data_output/ date: *date exp: letkf_split_solver type: ens output mean prior: - datadir: data_generated/letkf_split_solver + datadir: data_output/ date: *date exp: letkf_split_solver type: fc output variance prior: - datadir: data_generated/letkf_split_solver + datadir: data_output/ date: *date exp: letkf_split_solver.var type: fc output variance posterior: - datadir: data_generated/letkf_split_solver + datadir: data_output/ date: *date exp: letkf_split_solver.var type: an output increment: - datadir: data_generated/letkf_split_solver + datadir: data_output/ date: *date exp: letkf_split_solver.inc type: an diff --git a/test/testinput/makeobs.yml b/test/testinput/makeobs.yml index 8e43c2c59..9a3f52dc4 100644 --- a/test/testinput/makeobs.yml +++ b/test/testinput/makeobs.yml @@ -30,7 +30,7 @@ observations: obsdataout: engine: type: H5File - obsfile: data_generated/makeobs/prof.nc + obsfile: data_output/prof.nc obsdatain: engine: type: H5File diff --git a/test/testinput/parameters_bump_cor_nicas.yml b/test/testinput/parameters_bump_cor_nicas.yml index cd7ab8bf2..f22b25ad8 100644 --- a/test/testinput/parameters_bump_cor_nicas.yml +++ b/test/testinput/parameters_bump_cor_nicas.yml @@ -18,7 +18,7 @@ background error: saber block name: BUMP_NICAS calibration: io: - data directory: data_generated/parameters_bump_cor_nicas + data directory: data_output/ files prefix: bump drivers: multivariate strategy: univariate @@ -58,13 +58,13 @@ background error: output model files: - parameter: cor_rh file: - datadir: data_generated/parameters_bump_cor_nicas + datadir: data_output/ date: *date exp: parameters_bump_cor_nicas.cor_rh type: an - parameter: cor_rv file: - datadir: data_generated/parameters_bump_cor_nicas + datadir: data_output/ date: *date exp: parameters_bump_cor_nicas.cor_rv type: an diff --git a/test/testinput/parameters_bump_cor_nicas_scales.yml b/test/testinput/parameters_bump_cor_nicas_scales.yml index 47ffd5bb1..b5199aab3 100644 --- a/test/testinput/parameters_bump_cor_nicas_scales.yml +++ b/test/testinput/parameters_bump_cor_nicas_scales.yml @@ -17,7 +17,7 @@ background error: saber block name: BUMP_NICAS calibration: io: - data directory: data_generated/parameters_bump_cor_nicas_scales + data directory: data_output/ files prefix: bump drivers: multivariate strategy: univariate diff --git a/test/testinput/parameters_bump_cov.yml b/test/testinput/parameters_bump_cov.yml index f7781d1b5..264b92181 100644 --- a/test/testinput/parameters_bump_cov.yml +++ b/test/testinput/parameters_bump_cov.yml @@ -26,7 +26,7 @@ background error: saber block name: BUMP_NICAS calibration: io: - data directory: data_generated/parameters_bump_cov + data directory: data_output/ drivers: compute covariance: true compute correlation: true @@ -55,19 +55,19 @@ background error: output model files: - parameter: cor_rh file: - datadir: data_generated/parameters_bump_cov + datadir: data_output/ date: *date exp: parameters_bump_cov.cor_rh type: an - parameter: cor_rv file: - datadir: data_generated/parameters_bump_cov + datadir: data_output/ date: *date exp: parameters_bump_cov.cor_rv type: an - parameter: stddev file: - datadir: data_generated/parameters_bump_cov + datadir: data_output/ date: *date exp: parameters_bump_cov.stddev type: an diff --git a/test/testinput/parameters_bump_loc.yml b/test/testinput/parameters_bump_loc.yml index 0f92d2a98..dafab8cf7 100644 --- a/test/testinput/parameters_bump_loc.yml +++ b/test/testinput/parameters_bump_loc.yml @@ -17,7 +17,7 @@ background error: saber block name: BUMP_NICAS calibration: io: - data directory: data_generated/parameters_bump_loc + data directory: data_output/ files prefix: soca_bump_loc drivers: multivariate strategy: duplicated diff --git a/test/testinput/parameters_diffusion_hz.yml b/test/testinput/parameters_diffusion.yml similarity index 82% rename from test/testinput/parameters_diffusion_hz.yml rename to test/testinput/parameters_diffusion.yml index 41e4f9034..f24ba013a 100644 --- a/test/testinput/parameters_diffusion_hz.yml +++ b/test/testinput/parameters_diffusion.yml @@ -28,7 +28,7 @@ background error: filename: data_generated/setcorscales/ocn.cor_rh.incr.2018-04-15T00:00:00Z.nc variable name: ave_ssh write: - filename: data_generated/parameters_diffusion_hz/hz_large.nc + filename: data_output/hz_large.nc - name: hz_smaller horizontal: @@ -36,5 +36,11 @@ background error: as gaussian: true fixed value: 840336.134453782 write: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_output/hz_smaller.nc + - name: vt_5lvls + vertical: + as gaussian: true + fixed value: 5.0 + write: + filename: data_output/vt_5lvls.nc diff --git a/test/testinput/parameters_diffusion_vt.yml b/test/testinput/parameters_diffusion_vt.yml deleted file mode 100644 index 0895fad2f..000000000 --- a/test/testinput/parameters_diffusion_vt.yml +++ /dev/null @@ -1,31 +0,0 @@ -geometry: &geom - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - basename: data_static/72x35x25/restarts/ - date: &date 2018-04-15T06:00:00Z - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: &stateVariables [cicen, hicen, hsnon, socn, tocn, uocn, vocn, ssh] - -background error: - covariance model: SABER - saber central block: - saber block name: EXPLICIT_DIFFUSION - geometry: *geom - calibration: - normalization: - # NOTE, not actually used here, since the normalization spec is only used for hz - method: randomization #< other option is "brute force" - iterations: 1000 #< in the real world you'll want to use 1e4 or so - - groups: - - name: vt_5lvls - vertical: - as gaussian: true - fixed value: 5.0 - write: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc \ No newline at end of file diff --git a/test/testinput/parametric_stddev.yml b/test/testinput/parametric_stddev.yml index 21140545c..004778d47 100644 --- a/test/testinput/parametric_stddev.yml +++ b/test/testinput/parametric_stddev.yml @@ -44,7 +44,7 @@ increments: date: 2018-04-15T00:00:00Z state variables: [ssh, tocn, socn, hocn, layer_depth, mld] output: - datadir: data_generated/parametric_stddev + datadir: data_output/ exp: parametric_stddev type: incr date: 2018-04-15T00:00:00Z diff --git a/test/testinput/setcorscales.yml b/test/testinput/setcorscales.yml index 183695769..0b9487cae 100644 --- a/test/testinput/setcorscales.yml +++ b/test/testinput/setcorscales.yml @@ -34,12 +34,12 @@ scales: min value: 5000000 rh output: - datadir: data_generated/setcorscales + datadir: data_output/ exp: cor_rh type: incr rv output: - datadir: data_generated/setcorscales + datadir: data_output/ exp: cor_rv type: incr diff --git a/test/testinput/sqrtvertloc.yml b/test/testinput/sqrtvertloc.yml index c59794eed..dd8d4a2ef 100644 --- a/test/testinput/sqrtvertloc.yml +++ b/test/testinput/sqrtvertloc.yml @@ -26,9 +26,9 @@ background error: groups: - name: group1 horizontal: - filename: data_generated/parameters_diffusion_hz/hz_smaller.nc + filename: data_generated/parameters_diffusion/hz_smaller.nc vertical: - filename: data_generated/parameters_diffusion_vt/vt_5lvls.nc + filename: data_generated/parameters_diffusion/vt_5lvls.nc linear variable change: @@ -91,7 +91,7 @@ print test for each member: false output: frequency: PT6H - datadir: data_generated/sqrtvertloc + datadir: data_output/ exp: sqrtvertloc type: ens date: *date diff --git a/test/testinput/static_socaerror_init.yml b/test/testinput/static_socaerror_init.yml deleted file mode 100644 index dade97fb5..000000000 --- a/test/testinput/static_socaerror_init.yml +++ /dev/null @@ -1,46 +0,0 @@ -geometry: - geom_grid_file: data_generated/gridgen/soca_gridspec.72x35x25.nc - mom6_input_nml: data_static/72x35x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - date: &date 2018-04-15T00:00:00Z - basename: data_static/72x35x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - wav_filename: wav.res.nc - state variables: [cicen, hicen, hocn, socn, tocn, ssh, swh] - -background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, ssh, swh] - date: *date - bump: - io: - data directory: data_generated/static_socaerror_init - drivers: - multivariate strategy: univariate - compute nicas: true - write local nicas: true - model: - do not cross mask boundaries: true - nicas: - resolution: 6.0 - correlation: - - name: ocn - base value: 840336.134453782 - rossby mult: 0.280112045 - variables: [tocn, socn, ssh] # I don't think variable names actually matter - # here, it just needs something - - name: ice - base value: 560224.089635854 - variables: [cicen, hicen] - - - name: wav - base value: 600.0e3 - variables: [swh] - -test: - reference filename: testref/static_socaerror_init.test - test output filename: testoutput/static_socaerror_init.test \ No newline at end of file diff --git a/test/testinput/static_socaerrorlowres_init.yml b/test/testinput/static_socaerrorlowres_init.yml deleted file mode 100644 index 9d0352bfa..000000000 --- a/test/testinput/static_socaerrorlowres_init.yml +++ /dev/null @@ -1,40 +0,0 @@ -geometry: - geom_grid_file: data_static/36x17x25/soca_gridspec.nc - mom6_input_nml: data_static/36x17x25/input.nml - fields metadata: data_static/fields_metadata.yml - -background: - read_from_file: 1 - date: &date 2018-04-15T00:00:00Z - basename: data_static/36x17x25/restarts/ - ocn_filename: MOM.res.nc - ice_filename: cice.res.nc - state variables: [cicen, hicen, hocn, socn, tocn, ssh] - -background error: - covariance model: SocaError - analysis variables: [cicen, hicen, socn, tocn, ssh] - date: *date - bump: - io: - data directory: data_generated/static_socaerrorlowres_init - drivers: - multivariate strategy: univariate - compute nicas: true - write local nicas: true - model: - do not cross mask boundaries: true - nicas: - resolution: 6.0 - correlation: - - name: ocn - base value: 840336.134453782 - rossby mult: 0.280112045 - variables: [tocn, socn, ssh] - - name: ice - base value: 560224.089635854 - variables: [cicen, hicen] - -test: - reference filename: testref/static_socaerrorlowres_init.test - test output filename: testoutput/static_socaerrorlowres_init.test diff --git a/test/testref/3dhyb_nicas.test b/test/testref/3dhyb.test similarity index 58% rename from test/testref/3dhyb_nicas.test rename to test/testref/3dhyb.test index 925ec6251..170e76e13 100644 --- a/test/testref/3dhyb_nicas.test +++ b/test/testref/3dhyb.test @@ -1,17 +1,17 @@ CostJb : Nonlinear Jb = 0.0000000000000000e+00 CostJo : Nonlinear Jo(ADT) = 2.1585990691658122e+02, nobs = 99, Jo/n = 2.1804031001674873e+00, err = 1.0000000149011613e-01 CostFunction: Nonlinear J = 2.1585990691658122e+02 -RPCGMinimizer: reduction in residual norm = 2.0278542668483262e-02 +RPCGMinimizer: reduction in residual norm = 3.9870354978736110e-02 CostFunction::addIncrement: Analysis: Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0056146432667122 max=1.0000434480583600 mean=0.1175242246348486 - hicen min=-0.1413856419177771 max=4.0326724340398767 mean=0.4667511916819216 + cicen min=-0.0034668556769321 max=1.0000172065042263 mean=0.1175139005298868 + hicen min=-0.1005327245329497 max=4.0326699282661229 mean=0.4688863516710726 hsnon min=0.0000000000000000 max=1.2712833951042413 mean=0.0886865877527975 - socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5752411330748970 - tocn min=-1.9023144155652594 max=31.7004647316036170 mean=6.0126723323091653 - uocn min=-0.8581829479207662 max=0.7001475429325790 mean=-0.0002551931980354 - vocn min=-0.7656538171046787 max=1.4377766492228294 mean=0.0021998376036591 - ssh min=-2.1694176164601044 max=0.9000136183949327 mean=-0.2940548329132784 + socn min=10.7210460395083924 max=40.4416591897031168 mean=34.5500251890043870 + tocn min=-1.8829302786029214 max=31.7004646502589829 mean=6.0179841849602651 + uocn min=-0.8581754644046036 max=0.7001236525130016 mean=-0.0002574730692498 + vocn min=-0.7659202452377645 max=1.4377766540441910 mean=0.0021986265657238 + ssh min=-2.2047887174883636 max=0.8761143680955212 mean=-0.2999838219694667 hocn min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065023017 sw min=-225.0977630615234375 max=-0.0000000000000000 mean=-71.7393205198725354 lhf min=-38.1373977661132812 max=256.5976562500000000 mean=42.0100402226406899 @@ -23,6 +23,6 @@ layer_depth min=2.2854716757984130 max=5658.3057467114012979 mean=1200.522 -CostJb : Nonlinear Jb = 6.5547828627305975 -CostJo : Nonlinear Jo(ADT) = 114.6707726257995716, nobs = 99, Jo/n = 1.1582906325838340, err = 0.1000000014901161 -CostFunction: Nonlinear J = 121.2255554885301763 +CostJb : Nonlinear Jb = 1.2080455649053341 +CostJo : Nonlinear Jo(ADT) = 50.2704673354596707, nobs = 99, Jo/n = 0.5077824983379765, err = 0.1000000014901161 +CostFunction: Nonlinear J = 51.4785129003650042 diff --git a/test/testref/3dvar_diffusion.test b/test/testref/3dvar.test similarity index 100% rename from test/testref/3dvar_diffusion.test rename to test/testref/3dvar.test diff --git a/test/testref/3dvarbump.test b/test/testref/3dvar_nicas.test similarity index 100% rename from test/testref/3dvarbump.test rename to test/testref/3dvar_nicas.test diff --git a/test/testref/dirac_soca_cov.test b/test/testref/dirac_soca_cov.test index 4f254ef52..430546902 100644 --- a/test/testref/dirac_soca_cov.test +++ b/test/testref/dirac_soca_cov.test @@ -10,15 +10,15 @@ Input Dirac increment: hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -Covariance(SocaError) * Increment: +Covariance(SABER) * Increment: Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0036089461537001 max=0.0000000000000000 mean=-0.0000275624556497 - hicen min=0.0000000000000000 max=100.0000000000000142 mean=0.9283225798949805 - socn min=-0.0335232487284927 max=0.1085429089450220 mean=0.0003666358672174 - tocn min=0.0000000000000000 max=5.2687160390820855 mean=0.0249020307148332 - uocn min=0.0000000000000000 max=0.0023306838654550 mean=0.0000004409841843 + cicen min=-0.0005949909856056 max=0.0000000000000000 mean=-0.0000036006102555 + hicen min=0.0000000000000000 max=615.1546749956272606 mean=9.5785791047564803 + socn min=-0.0413116584393935 max=0.0674942186631986 mean=0.0002792512559901 + tocn min=0.0000000000000000 max=0.8482253405484985 mean=0.0040160007526648 + uocn min=0.0000000000000000 max=0.0022172566619542 mean=0.0000013295339758 vocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - ssh min=-0.0014883931115266 max=0.0505217197847120 mean=0.0009123179536632 + ssh min=-0.0022671420987840 max=0.0749977063334916 mean=0.0006005922076009 hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 diff --git a/test/testref/dirac_soca_mask.test b/test/testref/dirac_soca_mask.test deleted file mode 100644 index 47d081f5a..000000000 --- a/test/testref/dirac_soca_mask.test +++ /dev/null @@ -1,20 +0,0 @@ -Input Dirac increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - tocn min=0.0000000000000000 max=1.0000000000000000 mean=0.0001460742544127 - ssh min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -Covariance(SocaError) * Increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - tocn min=0.0000000000000000 max=1.0000000000000007 mean=0.0047334082530769 - ssh min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 diff --git a/test/testref/dirac_soca_nomask.test b/test/testref/dirac_soca_nomask.test deleted file mode 100644 index ef16ef75e..000000000 --- a/test/testref/dirac_soca_nomask.test +++ /dev/null @@ -1,20 +0,0 @@ -Input Dirac increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - tocn min=0.0000000000000000 max=1.0000000000000000 mean=0.0001460742544127 - ssh min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -Covariance(SocaError) * Increment: - Valid time: 2018-04-15T00:00:00Z - cicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hicen min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - socn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - tocn min=0.0000000000000000 max=1.0086683962751792 mean=0.0067775864035004 - ssh min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 diff --git a/test/testref/dirac_socahyb_cov.test b/test/testref/dirac_socahyb_cov.test index 2470ec560..e14110a64 100644 --- a/test/testref/dirac_socahyb_cov.test +++ b/test/testref/dirac_socahyb_cov.test @@ -12,25 +12,25 @@ Input Dirac increment: layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Covariance(hybrid) * Increment: Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0037817675761708 max=0.0033988463061122 mean=-0.0000256316823098 - hicen min=-0.0741129795689144 max=50.1073013980972135 mean=0.4660442760971388 - socn min=-0.2824804962843228 max=0.4340045998546954 mean=0.0012619628223484 - tocn min=-0.1762875582777306 max=3.5877887758283329 mean=0.0173674161728604 - uocn min=-0.0019323054461836 max=0.0022913098573106 mean=-0.0000004686539247 + cicen min=-0.0025626988243994 max=0.0037581892186641 mean=-0.0000159969520637 + hicen min=-0.0741129795689144 max=307.6846388959108367 mean=4.7911725385278894 + socn min=-0.2824804962843228 max=0.4340045998546954 mean=0.0012720994669400 + tocn min=-0.1762874548360663 max=1.3823514073856429 mean=0.0082524533718289 + uocn min=-0.0019323054461836 max=0.0022913098573106 mean=-0.0000000243790289 vocn min=-0.0009570793926929 max=0.0011305048458118 mean=0.0000002771043880 - ssh min=-0.0905081118371923 max=0.0589716992294776 mean=-0.0001573659445746 + ssh min=-0.0981613610996295 max=0.0483202855620447 mean=-0.0002598270731813 hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 mld min=-68.9457053290824149 max=531.2265534461570269 mean=1.3585694060809876 layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 -Covariance(hybrid1_SocaError) * Increment: +Covariance(hybrid1_SABER) * Increment: Valid time: 2018-04-15T00:00:00Z - cicen min=-0.0036091083138408 max=0.0000000000000000 mean=-0.0000222570776912 - hicen min=0.0000000000000000 max=100.0000000000000142 mean=0.9283225798949803 - socn min=-0.0236417547391914 max=0.0472145291855424 mean=0.0000026262434480 - tocn min=0.0000000000000000 max=5.2687160390820855 mean=0.0220591322073391 - uocn min=0.0000000000000000 max=0.0023306838654550 mean=0.0000004409841843 + cicen min=-0.0005949909856056 max=0.0000000000000000 mean=-0.0000029876171989 + hicen min=0.0000000000000000 max=615.1546749956272606 mean=9.5785791047564803 + socn min=-0.0413116584393936 max=0.0460589239077206 mean=0.0000228995326311 + tocn min=0.0000000000000000 max=0.8482253405484985 mean=0.0038292066052762 + uocn min=0.0000000000000000 max=0.0022172566619542 mean=0.0000013295339758 vocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 - ssh min=0.0000000000000000 max=0.0505217197847120 mean=0.0008077940159867 + ssh min=0.0000000000000000 max=0.0749977063334916 mean=0.0006028717587734 hocn min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 mld min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 layer_depth min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 diff --git a/test/testref/static_socaerror_init.test b/test/testref/static_socaerror_init.test deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/testref/static_socaerrorlowres_init.test b/test/testref/static_socaerrorlowres_init.test deleted file mode 100644 index e69de29bb..000000000 From 5d9464bbd06492b7e3d98d2f4066e582d1167cfd Mon Sep 17 00:00:00 2001 From: Travis Sluka Date: Tue, 27 Feb 2024 20:14:00 -0700 Subject: [PATCH 11/11] increase tolerances --- test/testinput/3dvarfgat_pseudo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testinput/3dvarfgat_pseudo.yml b/test/testinput/3dvarfgat_pseudo.yml index 68d1718ac..e3e63495b 100644 --- a/test/testinput/3dvarfgat_pseudo.yml +++ b/test/testinput/3dvarfgat_pseudo.yml @@ -230,4 +230,4 @@ final: test: reference filename: testref/3dvarfgat_pseudo.test test output filename: testoutput/3dvarfgat_pseudo.test - float relative tolerance: 1e-5 + float relative tolerance: 1e-3