diff --git a/src/mains/AnalysisPostproc.h b/src/mains/AnalysisPostproc.h index 20aedd2c..8636f789 100644 --- a/src/mains/AnalysisPostproc.h +++ b/src/mains/AnalysisPostproc.h @@ -18,6 +18,8 @@ #include "oops/base/Increment4D.h" #include "oops/base/IncrementSet.h" #include "oops/base/Increment.h" +#include "oops/base/InflationBase.h" +#include "oops/base/instantiateInflationFactory.h" #include "oops/base/StateSet.h" #include "oops/base/State.h" #include "oops/interface/VariableChange.h" @@ -53,6 +55,8 @@ class AnalysisPostproc : public oops::Application { typedef oops::Increment Increment_; typedef oops::Increment4D Increment4D_; typedef oops::IncrementSet IncrementSet_; + typedef oops::InflationBase InflationBase_; + typedef oops::InflationFactory InflationFactory_; typedef oops::StateSet StateSet_; typedef oops::VariableChange VariableChange_; @@ -60,7 +64,9 @@ class AnalysisPostproc : public oops::Application { // ----------------------------------------------------------------------------- explicit AnalysisPostproc(const eckit::mpi::Comm & comm = oops::mpi::world()) - : Application(comm) {} + : Application(comm) { + oops::instantiateInflationFactory(); + } static const std::string classname() {return "soca::AnalysisPostproc";} // ----------------------------------------------------------------------------- @@ -114,22 +120,25 @@ class AnalysisPostproc : public oops::Application { // Setup the geometry of the ensemble members const Geometry_ geometry(geomConfig, commState); - // Read all states in parallel + // Read all background states in parallel const eckit::LocalConfiguration statesConfig(fullConfig, "backgrounds"); StateSet_ ens(geometry, statesConfig, oops::mpi::myself(), commEns); - // Compute ensemble mean as a StateSet (for computing the recentering increment as a difference - // between two States) + // Compute background ensemble mean as a StateSet (for computing the recentering increment + // as a difference between two States) StateSet_ ensMean = ens.ens_mean(); - oops::Log::test() << "Ensemble mean: " << ensMean << std::endl; - // Copy the ensemble into an ensemble of increments (it's still states) + oops::Log::info() << "Background ensemble mean: " << ensMean << std::endl; + oops::Log::test() << "Background ensemble mean: " << ensMean << std::endl; + + // Copy the ensemble into an ensemble of increments (it's still states), + // used for computing ensemble statistics and background perturbations oops::Variables socaIncrVars(fullConfig, "increment variables"); IncrementSet_ incs(geometry, socaIncrVars, ens); - oops::Log::info() << "Input states: " << incs << std::endl; - // Compute ensemble stats, print, save if needed. - // ensMeanInc is an IncrementSet (for computing the ensemble increments as difference between - // two Increments) - auto[ensMeanInc, ensVar] = incs.ens_stats(); - oops::Log::info() << " Ensemble mean: " << ensMean << std::endl; + oops::Log::info() << "Input background states: " << incs << std::endl; + + // Compute background ensemble stats, print, save if needed. + // bgEnsMeanInc is an IncrementSet (for computing the ensemble increments as difference + // between two Increments) + auto[bgEnsMeanInc, bgEnsVar] = incs.ens_stats(); if ( fullConfig.has("ensemble mean output") && (commEns.rank() == 0) ) { const eckit::LocalConfiguration ensMeanOutputConfig(fullConfig, "ensemble mean output"); ensMean.write(ensMeanOutputConfig); @@ -137,24 +146,71 @@ class AnalysisPostproc : public oops::Application { if ( fullConfig.has("ensemble variance output") && (commEns.rank() == 0) ) { const eckit::LocalConfiguration ensVarianceOutputConfig(fullConfig, "ensemble variance output"); - ensVar.write(ensVarianceOutputConfig); + bgEnsVar.write(ensVarianceOutputConfig); } // Compute the standard deviation from the variance in place - for (size_t jt = 0; jt < ensVar.local_time_size(); ++jt) { - ensVar[jt].sqrt(); + for (size_t jt = 0; jt < bgEnsVar.local_time_size(); ++jt) { + bgEnsVar[jt].sqrt(); } - oops::Log::info() << " Ensemble standard deviation: " << ensVar << std::endl; - // Compute ensemble perturbations - incs -= ensMeanInc; - oops::Log::info() << " Ensemble perturbations: " << incs << std::endl; - oops::Log::test() << " Ensemble perturbations: " << incs << std::endl; + oops::Log::info() << " Background ensemble standard deviation: " << bgEnsVar << std::endl; + oops::Log::test() << " Background ensemble standard deviation: " << bgEnsVar << std::endl; + // Compute background ensemble perturbations + incs -= bgEnsMeanInc; + oops::Log::info() << " Background ensemble perturbations: " << incs << std::endl; + oops::Log::test() << " Background ensemble perturbations: " << incs << std::endl; - // TODO(AS): add support for analysis increments. At the same time oops::Inflation classes - // may be used for analysis inflation. - - // Inflate ensemble perturbations if needed - if (fullConfig.has("ensemble inflation")) { + // Use ensemble DA increments if available + if (fullConfig.has("analysis increments")) { + // Read analysis increments + const eckit::LocalConfiguration analysisIncrConfig(fullConfig, "analysis increments"); + IncrementSet_ analysisIncrs(geometry, socaIncrVars, incs.times(), analysisIncrConfig, + oops::mpi::myself(), commEns); + oops::Log::info() << "Analysis increments: " << analysisIncrs << std::endl; + oops::Log::test() << "Analysis increments: " << analysisIncrs << std::endl; + // Inflate analysis ensemble if needed + if (fullConfig.has("ensemble inflation")) { + const eckit::LocalConfiguration inflConfig(fullConfig, "ensemble inflation"); + std::unique_ptr inflation(InflationFactory_::create(inflConfig, + geometry, ens, socaIncrVars)); + inflation->doInflation(analysisIncrs); + oops::Log::info() << "Analysis increments after inflation: " + << analysisIncrs << std::endl; + oops::Log::test() << "Analysis increments after inflation: " + << analysisIncrs << std::endl; + } + // Update ensemble mean + ensMean += analysisIncrs.ens_mean(); + oops::Log::test() << "Analysis ensemble mean: " << ensMean << std::endl; + oops::Log::info() << "Analysis ensemble mean: " << ensMean << std::endl; + // For statistics, add increments to background perturbations + incs += analysisIncrs; + // Compute analysis ensemble stats, print, save if needed. + IncrementSet_ anEnsVar = incs.ens_var(); + if ( fullConfig.has("analysis ensemble mean output") && (commEns.rank() == 0) ) { + const eckit::LocalConfiguration ensMeanOutputConfig(fullConfig, + "analysis ensemble mean output"); + ensMean.write(ensMeanOutputConfig); + } + if ( fullConfig.has("analysis ensemble variance output") && (commEns.rank() == 0) ) { + const eckit::LocalConfiguration ensVarianceOutputConfig(fullConfig, + "analysis ensemble variance output"); + anEnsVar.write(ensVarianceOutputConfig); + } + // Compute the standard deviation from the variance in place + for (size_t jt = 0; jt < anEnsVar.local_time_size(); ++jt) { + anEnsVar[jt].sqrt(); + } + oops::Log::info() << "Analysis ensemble standard deviation: " << anEnsVar << std::endl; + oops::Log::test() << "Analysis ensemble standard deviation: " << anEnsVar << std::endl; + // Set increments to be analysis increments for the postprocessing below + incs = analysisIncrs; + // No analysis ensemble increments provided: apply inflation to background + // ensemble perturbations directly (Inflation classes operate on analysis + // increments, which are not available in this branch) + } else if (fullConfig.has("ensemble inflation")) { + // Save the original increments for differencing later IncrementSet_ origincs(incs); + // Multiplicative inflation of the ensemble perturbations const eckit::LocalConfiguration inflConfig(fullConfig, "ensemble inflation"); if (inflConfig.has("value")) { const double inflation = inflConfig.getDouble("value"); @@ -174,29 +230,30 @@ class AnalysisPostproc : public oops::Application { } // Increments that need to be added to the ensemble backgrounds incs -= origincs; - oops::Log::info() << " Increments after inflation: " << incs << std::endl; + oops::Log::info() << "Increments after inflation: " << incs << std::endl; + oops::Log::test() << "Increments after inflation: " << incs << std::endl; } else { // if there's no inflation and no analysis increments, all the increments to // ensemble backgrounds are zero - // TODO(AS): change when there's support for analysis increments incs.zero(); } - // Read the state to recenter around - const eckit::LocalConfiguration centerConfig(fullConfig, "recentering state"); - StateSet_ centerState(geometry, centerConfig); - - // Compute the recentering increment as the difference between - // the ensemble mean and the deterministic - Increment4D_ recenteringIncr(geometry, socaIncrVars, - centerState.times(), centerState.commTime()); - recenteringIncr.diff(centerState, ensMean); - oops::Log::info() << "Recentering increment: " << recenteringIncr << std::endl; - oops::Log::test() << "Recentering increment: " << recenteringIncr << std::endl; - incs += recenteringIncr; - oops::Log::info() << "Increments after inflation and recentering: " << incs << std::endl; - oops::Log::test() << "Increments after inflation and recentering: " << incs << std::endl; + // Read the state to recenter around if needed + if (fullConfig.has("recentering state")) { + const eckit::LocalConfiguration centerConfig(fullConfig, "recentering state"); + StateSet_ centerState(geometry, centerConfig); + // Compute the recentering increment as the difference between + // the ensemble mean and the deterministic + Increment4D_ recenteringIncr(geometry, socaIncrVars, + centerState.times(), centerState.commTime()); + recenteringIncr.diff(centerState, ensMean); + oops::Log::info() << "Recentering increment: " << recenteringIncr << std::endl; + oops::Log::test() << "Recentering increment: " << recenteringIncr << std::endl; + incs += recenteringIncr; + oops::Log::info() << "Increments after inflation and recentering: " << incs << std::endl; + oops::Log::test() << "Increments after inflation and recentering: " << incs << std::endl; + } if (fullConfig.has("increment postprocessing")) { const eckit::LocalConfiguration incPostprocConfig(fullConfig, "increment postprocessing"); postprocessIncrements(incs, incPostprocConfig); @@ -214,11 +271,11 @@ class AnalysisPostproc : public oops::Application { if (fullConfig.has("analysis postprocessing")) { for (size_t iens = 0; iens < incs.local_ens_size(); ++iens) { const size_t ensMember = incs.local_ens()[iens]; - oops::Log::info() << "recentering ice state " << ensMember << ":" << ens[iens] << std::endl; + oops::Log::info() << "updating ice state " << ensMember << ":" << ens[iens] << std::endl; for (size_t itime = 0; itime < ens.local_time_size(); ++itime) { ens(itime, iens) += incs[itime, iens]; } - oops::Log::info() << "recentered ice state " << ensMember << ":" << ens[iens] << std::endl; + oops::Log::info() << "updated ice state " << ensMember << ":" << ens[iens] << std::endl; // set up variable change eckit::LocalConfiguration varchangeConfig(fullConfig, "analysis postprocessing.sea ice variable change"); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 55f353da..869cf365 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -46,6 +46,7 @@ set( soca_test_input testinput/dirac_soca_cov.yml testinput/dirac_socahyb_cov.yml testinput/ensanpproc.yml + testinput/ensanpproc_ensda.yml testinput/enshofx_1.yml testinput/enshofx_2.yml testinput/enshofx_3.yml @@ -131,6 +132,7 @@ set( soca_test_ref testref/dirac_soca_cov.test testref/dirac_socahyb_cov.test testref/ensanpproc.test + testref/ensanpproc_ensda.test testref/enshofx.test testref/ensmeanandvariance.test testref/enspert.test @@ -569,6 +571,10 @@ soca_add_test( NAME ensanpproc EXE soca_anpproc.x TEST_DEPENDS test_soca_gridgen ) +soca_add_test( NAME ensanpproc_ensda + EXE soca_anpproc.x + TEST_DEPENDS test_soca_gridgen test_soca_letkf ) + soca_add_test( NAME hybridgain EXE soca_hybridgain.x TEST_DEPENDS test_soca_gridgen ) diff --git a/test/testinput/ensanpproc_ensda.yml b/test/testinput/ensanpproc_ensda.yml new file mode 100644 index 00000000..aed932bf --- /dev/null +++ b/test/testinput/ensanpproc_ensda.yml @@ -0,0 +1,83 @@ +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 + +nens: 4 +nens per MPI task: 2 + +increment variables: &vars +- sea_water_potential_temperature +- sea_water_salinity +- eastward_sea_water_velocity +- northward_sea_water_velocity +- sea_water_cell_thickness + +backgrounds: + members from template: + template: + read_from_file: 1 + date: &date_bkg 2018-04-15T00:00:00Z + basename: data_static/72x35x25/ + remap_filename: data_static/72x35x25/restarts/MOM.res.nc + ocn_filename: restarts_ens/MOM.res.ens.%mem%.nc + state variables: *vars + pattern: %mem% + nmembers: 4 + +analysis increments: + members from template: + template: + read_from_file: 1 + date: *date_bkg + basename: data_generated/letkf/ + ocn_filename: ocn.letkf.inc.ens.%mem%.2018-04-14T00:00:00Z.P1D.nc + state variables: *vars + pattern: %mem% + nmembers: 4 + +ensemble mean output: + datadir: data_output/ + exp: ensmean + type: an + date: *date_bkg + +ensemble inflation: + method: Multiplicative + factor: 1.05 + +recentering state: + read_from_file: 1 + date: *date_bkg + basename: data_static/72x35x25/ + ocn_filename: restarts/MOM.res.nc + ice_filename: restarts/cice.res.nc + state variables: *vars + +output increments: + datadir: data_output/ + exp: recentered_incr + type: ens + date: *date_bkg + +increment postprocessing: + set increment variables to zero: + - eastward_sea_water_velocity + - northward_sea_water_velocity + change precision: + variables: + - sea_water_potential_temperature + - sea_water_salinity + precision: 1.e-5 # precision is set pretty low for test reference comparison purpose only + append vertical geometry: + layers variable: sea_water_cell_thickness + vertical geometry: + date: *date_bkg + basename: data_static/72x35x25/ + ocn_filename: restarts/MOM.res.nc + read_from_file: 3 + +test: + reference filename: testref/ensanpproc_ensda.test + test output filename: testoutput/ensanpproc_ensda.test + float absolute tolerance: 1e-4 diff --git a/test/testinput/letkf.yml b/test/testinput/letkf.yml index 3c8c3892..50240e5b 100644 --- a/test/testinput/letkf.yml +++ b/test/testinput/letkf.yml @@ -94,6 +94,7 @@ observations: driver: do posterior observer: true save posterior mean increment: true + save posterior ensemble increments: true save posterior mean: true save posterior variance: true save prior mean: true @@ -112,6 +113,12 @@ output: exp: letkf type: ens +output ensemble increments: + datadir: data_output/ + date: *date + exp: letkf.inc + type: ens + output mean prior: datadir: data_output/ date: *date diff --git a/test/testref/ensanpproc.test b/test/testref/ensanpproc.test index 4a2cba69..69b1f7d1 100644 --- a/test/testref/ensanpproc.test +++ b/test/testref/ensanpproc.test @@ -1,4 +1,4 @@ -Ensemble mean: +Background ensemble mean: Valid time: 2018-04-15T00:00:00Z sea_water_potential_temperature min=-1.8000000000000000 max=31.7266785987746971 mean=6.0631953325566377 sea_water_salinity min=10.7210460395083924 max=38.0000000000000000 mean=34.5212190251308328 @@ -8,14 +8,24 @@ sea_water_potential_temperature min=-1.8000000000000000 max=31.7266785987746 sea_ice_thickness min=-0.4945079752930821 max=4.2383578169684073 mean=0.4194380401580169 sea_ice_snow_thickness min=0.0000000000000000 max=1.2712833951042413 mean=0.0734733582119349 sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 - Ensemble perturbations: + Background ensemble standard deviation: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=0.0000000000000000 max=2.9744174236509098 mean=0.3029834476083366 + sea_water_salinity min=0.0000000000000000 max=1.3505286498877809 mean=0.1074690758953311 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0108861055020160 mean=0.0007106851503927 + northward_sea_water_velocity min=0.0000000000000000 max=0.0099017027109353 mean=0.0004747325510539 + sea_ice_area_fraction min=0.0007513172795469 max=0.0172481249736482 mean=0.0067083304987286 + sea_ice_thickness min=0.0000000000000000 max=1.9501662252139709 mean=0.2581126306283945 + sea_ice_snow_thickness min=0.0000000000000000 max=0.6197996590654210 mean=0.0105493216875704 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Background ensemble perturbations: Valid time: 2018-04-15T00:00:00Z sea_water_potential_temperature min=-1.9672961375786215 max=4.4338589944899249 mean=0.0298818579330344 sea_water_salinity min=-1.3823141207873846 max=1.0585495306811552 mean=0.0207435664257011 eastward_sea_water_velocity min=-0.0092275044750261 max=0.0108712789440456 mean=-0.0000095580848872 northward_sea_water_velocity min=-0.0094110101542083 max=0.0111248052463291 mean=0.0000004516323990 sea_ice_area_fraction min=-0.0189143937311176 max=0.0205955341564218 mean=-0.0000987540431257 - sea_ice_thickness min=-1.7520556507092333 max=1.8237833313991176 mean=0.0200824149003331 + sea_ice_thickness min=-1.7520556507092335 max=1.8237833313991176 mean=0.0200824149003331 sea_ice_snow_thickness min=-0.3968488361071074 max=0.6905346568349053 mean=0.0047276797156756 sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Valid time: 2018-04-15T00:00:00Z @@ -42,8 +52,45 @@ sea_water_potential_temperature min=-2.9183907399444533 max=3.27631782389318 eastward_sea_water_velocity min=-0.0106353397568411 max=0.0137958079111262 mean=0.0000309965073559 northward_sea_water_velocity min=-0.0123879748356349 max=0.0125846387484655 mean=0.0000011365341636 sea_ice_area_fraction min=-0.0240524488928229 max=0.0176975544503365 mean=0.0000475584854581 - sea_ice_thickness min=-2.6330220660525230 max=2.0891026310278118 mean=0.0274612994439183 - sea_ice_snow_thickness min=-0.8037630906408594 max=0.7378492609363690 mean=0.0042651798017032 + sea_ice_thickness min=-2.6330220660525234 max=2.0891026310278118 mean=0.0274612994439183 + sea_ice_snow_thickness min=-0.8037630906408594 max=0.7378492609363689 mean=0.0042651798017032 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Increments after inflation: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-0.9836480687893108 max=2.2169294972449629 mean=0.0149409289665172 + sea_water_salinity min=-0.6911570603936923 max=0.5292747653405776 mean=0.0103717832128505 + eastward_sea_water_velocity min=-0.0046137522375130 max=0.0054356394720228 mean=-0.0000047790424436 + northward_sea_water_velocity min=-0.0047055050771042 max=0.0055624026231646 mean=0.0000002258161995 + sea_ice_area_fraction min=-0.0094571968655588 max=0.0102977670782109 mean=-0.0000493770215629 + sea_ice_thickness min=-0.8760278253546168 max=0.9118916656995588 mean=0.0100412074501665 + sea_ice_snow_thickness min=-0.1984244180535537 max=0.3452673284174528 mean=0.0023638398578378 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.2419044411189772 max=1.5614276850335855 mean=-0.0240681162054433 + sea_water_salinity min=-0.7058882998897786 max=0.5366356798164027 mean=-0.0102067487320353 + eastward_sea_water_velocity min=-0.0055005837770613 max=0.0055548639129842 mean=-0.0000023882213950 + northward_sea_water_velocity min=-0.0026451713150677 max=0.0060001901189371 mean=0.0000133410595114 + sea_ice_area_fraction min=-0.0113606360261935 max=0.0096111965407122 mean=-0.0006702355071705 + sea_ice_thickness min=-0.9264716284395873 max=0.6945161840174729 mean=-0.0110397662924335 + sea_ice_snow_thickness min=-0.4158141728145408 max=0.1339605151068099 mean=-0.0026482262673761 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.0697439183135748 max=1.6902051745785043 mean=0.0205029680806465 + sea_water_salinity min=-0.5293569258293189 max=0.5361514345980858 mean=-0.0037489879990111 + eastward_sea_water_velocity min=-0.0064920119012585 max=0.0060295520811215 mean=-0.0000083309898394 + northward_sea_water_velocity min=-0.0044511151159543 max=0.0027210264221943 mean=-0.0000141351427927 + sea_ice_area_fraction min=-0.0100301295672326 max=0.0089132401405157 mean=0.0006958332860043 + sea_ice_thickness min=-0.7014696855982701 max=0.9268397352313460 mean=-0.0127320908796922 + sea_ice_snow_thickness min=-0.2683811250037943 max=0.2616644026403535 mean=-0.0018482034913132 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.4591953699722269 max=1.6381589119465909 mean=-0.0113757808417200 + sea_water_salinity min=-0.4890597123845026 max=0.9118935730924278 mean=0.0035839535181958 + eastward_sea_water_velocity min=-0.0053176698784205 max=0.0068979039555631 mean=0.0000154982536780 + northward_sea_water_velocity min=-0.0061939874178175 max=0.0062923193742327 mean=0.0000005682670818 + sea_ice_area_fraction min=-0.0120262244464115 max=0.0088487772251683 mean=0.0000237792427291 + sea_ice_thickness min=-1.3165110330262615 max=1.0445513155139059 mean=0.0137306497219591 + sea_ice_snow_thickness min=-0.4018815453204297 max=0.3689246304681844 mean=0.0021325899008516 sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Recentering increment: Valid time: 2018-04-15T00:00:00Z @@ -53,7 +100,7 @@ sea_water_potential_temperature min=-1.7995800890423692 max=1.50763934106552 northward_sea_water_velocity min=-0.0070607706097978 max=0.0057314175829543 mean=-0.0000083522450611 sea_ice_area_fraction min=-0.0078020367586440 max=0.0112418992909670 mean=0.0007579006312480 sea_ice_thickness min=-0.5172244875776413 max=2.6580501851758127 mean=0.0518135304193748 - sea_ice_snow_thickness min=0.0000000000000000 max=1.0068370866024217 mean=0.0152132295408627 + sea_ice_snow_thickness min=-0.0000000000000001 max=1.0068370866024217 mean=0.0152132295408627 sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Increments after inflation and recentering: Valid time: 2018-04-15T00:00:00Z @@ -62,7 +109,7 @@ sea_water_potential_temperature min=-1.8854360563271637 max=3.39073704138744 eastward_sea_water_velocity min=-0.0111124450051346 max=0.0069581412319031 mean=0.0000103468499671 northward_sea_water_velocity min=-0.0117662756869019 max=0.0081005210228262 mean=-0.0000081264288616 sea_ice_area_fraction min=-0.0154863986601735 max=0.0149896940835902 mean=0.0007085236096852 - sea_ice_thickness min=-0.7765059570648166 max=2.7355566668424305 mean=0.0618547378695413 + sea_ice_thickness min=-0.7765059570648166 max=2.7355566668424300 mean=0.0618547378695413 sea_ice_snow_thickness min=-0.0661414726845179 max=1.0358019852523581 mean=0.0175770693987005 sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Valid time: 2018-04-15T00:00:00Z @@ -89,8 +136,8 @@ sea_water_potential_temperature min=-2.6577186495806382 max=1.63682702618663 eastward_sea_water_velocity min=-0.0088737931997287 max=0.0148617732104438 mean=0.0000306241460887 northward_sea_water_velocity min=-0.0066407195960183 max=0.0097482507315229 mean=-0.0000077839779793 sea_ice_area_fraction min=-0.0142123508347196 max=0.0168120937024575 mean=0.0007816798739771 - sea_ice_thickness min=-0.7813947868500319 max=2.9249410340098358 mean=0.0655441801413340 - sea_ice_snow_thickness min=-0.1339605151068100 max=1.1067738914045535 mean=0.0173458194417143 + sea_ice_thickness min=-0.7813947868500324 max=2.9249410340098354 mean=0.0655441801413340 + sea_ice_snow_thickness min=-0.1339605151068100 max=1.1067738914045533 mean=0.0173458194417143 sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 Increments after inflation and recentering and postprocessing: Valid time: 2018-04-15T00:00:00Z diff --git a/test/testref/ensanpproc_ensda.test b/test/testref/ensanpproc_ensda.test new file mode 100644 index 00000000..843ccaf7 --- /dev/null +++ b/test/testref/ensanpproc_ensda.test @@ -0,0 +1,181 @@ +Background ensemble mean: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8000000000000000 max=31.7266785987746971 mean=6.0631953325566377 + sea_water_salinity min=10.7210460395083924 max=38.0000000000000000 mean=34.5212190251308328 + eastward_sea_water_velocity min=-0.8609011929693486 max=0.7010172866364175 mean=-0.0002563200079172 + northward_sea_water_velocity min=-0.7677450905884780 max=1.4343611949404274 mean=0.0020277479786758 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 + Background ensemble standard deviation: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=0.0000000000000000 max=2.9744174236509098 mean=0.3029834476083366 + sea_water_salinity min=0.0000000000000000 max=1.3505286498877809 mean=0.1074690758953311 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0108861055020160 mean=0.0007106851503927 + northward_sea_water_velocity min=0.0000000000000000 max=0.0099017027109353 mean=0.0004747325510539 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Background ensemble perturbations: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.9672961375786215 max=4.4338589944899249 mean=0.0298818579330344 + sea_water_salinity min=-1.3823141207873846 max=1.0585495306811552 mean=0.0207435664257011 + eastward_sea_water_velocity min=-0.0092275044750261 max=0.0108712789440456 mean=-0.0000095580848872 + northward_sea_water_velocity min=-0.0094110101542083 max=0.0111248052463291 mean=0.0000004516323990 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-2.4838088822379545 max=3.1228553700671711 mean=-0.0481362324108867 + sea_water_salinity min=-1.4117765997795573 max=1.0732713596328054 mean=-0.0204134974640705 + eastward_sea_water_velocity min=-0.0110011675541226 max=0.0111097278259683 mean=-0.0000047764427900 + northward_sea_water_velocity min=-0.0052903426301354 max=0.0120003802378741 mean=0.0000266821190229 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-2.1394878366271493 max=3.3804103491570094 mean=0.0410059361612929 + sea_water_salinity min=-1.0587138516586379 max=1.0723028691961716 mean=-0.0074979759980221 + eastward_sea_water_velocity min=-0.0129840238025171 max=0.0120591041622430 mean=-0.0000166619796788 + northward_sea_water_velocity min=-0.0089022302319086 max=0.0054420528443885 mean=-0.0000282702855855 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-2.9183907399444533 max=3.2763178238931818 mean=-0.0227515616834400 + sea_water_salinity min=-0.9781194247690053 max=1.8237871461848556 mean=0.0071679070363917 + eastward_sea_water_velocity min=-0.0106353397568411 max=0.0137958079111262 mean=0.0000309965073559 + northward_sea_water_velocity min=-0.0123879748356349 max=0.0125846387484655 mean=0.0000011365341636 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Analysis increments: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.6687340172332270 max=10.7911722242134509 mean=-0.0100544939535702 + sea_water_salinity min=-2.4464843379531298 max=1.9584042685021688 mean=0.0177750208698229 + eastward_sea_water_velocity min=-0.0226333865508450 max=0.0354577214431557 mean=0.0000143611986106 + northward_sea_water_velocity min=-0.0141725941683523 max=0.0553251017170820 mean=0.0000492749831091 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.5365142835521501 max=10.9806123636152044 mean=-0.0005101080852913 + sea_water_salinity min=-2.5133215140076799 max=2.0491166486281607 mean=0.0196851772528496 + eastward_sea_water_velocity min=-0.0218978096439954 max=0.0349754708428661 mean=0.0000159803355432 + northward_sea_water_velocity min=-0.0149923682805271 max=0.0569977108193188 mean=0.0000482780939592 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.8421969292051825 max=11.0806587491458455 mean=-0.0020777070564122 + sea_water_salinity min=-2.4799253981659510 max=2.0409260010744088 mean=0.0215902110156208 + eastward_sea_water_velocity min=-0.0234253541733563 max=0.0333582858012615 mean=0.0000139495310588 + northward_sea_water_velocity min=-0.0147793657929184 max=0.0582391963109435 mean=0.0000517633700505 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.5152729018527076 max=11.2103621256090324 mean=-0.0006610587637860 + sea_water_salinity min=-2.5473278542319799 max=2.0510624364844352 mean=0.0213658628696781 + eastward_sea_water_velocity min=-0.0220586624726171 max=0.0330489645723260 mean=0.0000137216868121 + northward_sea_water_velocity min=-0.0145460864432350 max=0.0585653794675243 mean=0.0000509327601501 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Multiplicative Background member 1: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8000000000000000 max=31.6933380143948185 mean=6.0930771904896845 + sea_water_salinity min=10.7210460395083924 max=38.0000000000000000 mean=34.5419625915567536 + eastward_sea_water_velocity min=-0.8641522861445371 max=0.7036119745230547 mean=-0.0002658780928043 + northward_sea_water_velocity min=-0.7634486847749620 max=1.4361818799661243 mean=0.0020281996110748 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 +Multiplicative Analysis Increment member 1: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.6687340172332270 max=10.7911722242134509 mean=-0.0100544939535702 + sea_water_salinity min=-2.4464843379531298 max=1.9584042685021688 mean=0.0177750208698229 + eastward_sea_water_velocity min=-0.0226333865508450 max=0.0354577214431557 mean=0.0000143611986106 + northward_sea_water_velocity min=-0.0141725941683523 max=0.0553251017170820 mean=0.0000492749831091 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Multiplicative Updated Analysis Increment member 1: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.6926985714753862 max=10.8502157128149737 mean=-0.0088968336563587 + sea_water_salinity min=-2.4755230144340246 max=1.9708413377577381 mean=0.0186957468344993 + eastward_sea_water_velocity min=-0.0225504229230685 max=0.0352321032190996 mean=0.0000138761948964 + northward_sea_water_velocity min=-0.0143924157641986 max=0.0557835047113167 mean=0.0000492581987937 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Analysis increments after inflation: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.6926985714753862 max=10.8502157128149737 mean=-0.0088968336563587 + sea_water_salinity min=-2.4755230144340246 max=1.9708413377577381 mean=0.0186957468344993 + eastward_sea_water_velocity min=-0.0225504229230685 max=0.0352321032190996 mean=0.0000138761948964 + northward_sea_water_velocity min=-0.0143924157641986 max=0.0557835047113167 mean=0.0000492581987937 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.5474147704233134 max=10.9318988016272005 mean=-0.0027761330118619 + sea_water_salinity min=-2.4985666183560387 max=2.0026137089877096 mean=0.0186435578421886 + eastward_sea_water_velocity min=-0.0218980725973020 max=0.0347636750565378 mean=0.0000158153707806 + northward_sea_water_velocity min=-0.0146795568391074 max=0.0568731759756349 mean=0.0000495229895174 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.7674690727519193 max=11.1275164246685119 mean=0.0000349964970701 + sea_water_salinity min=-2.5020456570988920 max=2.0467779242973307 mean=0.0212896193664011 + eastward_sea_water_velocity min=-0.0231510522528584 max=0.0339183879205960 mean=0.0000130887492275 + northward_sea_water_velocity min=-0.0148218432810450 max=0.0584605502827340 mean=0.0000504349091829 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-6.5551357171926492 max=11.1531745234728472 mean=-0.0016653976879095 + sea_water_salinity min=-2.5109238144697845 max=2.0357986339978620 mean=0.0217873479648818 + eastward_sea_water_velocity min=-0.0221889324874378 max=0.0329262764633760 mean=0.0000152324371202 + northward_sea_water_velocity min=-0.0145965988006817 max=0.0580101573451830 mean=0.0000510331097749 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Analysis ensemble mean: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-4.0934672195972786 max=39.0513527792136088 mean=6.0598694905918640 + sea_water_salinity min=10.7210460395083924 max=39.0134411183835681 mean=34.5413230931331086 + eastward_sea_water_velocity min=-0.8572272512653948 max=0.6996116115736933 mean=-0.0002418168199110 + northward_sea_water_velocity min=-0.7669957317009206 max=1.4343630397286529 mean=0.0020778102804930 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 +Analysis ensemble standard deviation: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=0.0000000000000000 max=2.9448048637976041 mean=0.2993169635530916 + sea_water_salinity min=0.0000000000000000 max=1.3732250959646797 mean=0.1068303642534093 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0113465330955630 mean=0.0007102281987496 + northward_sea_water_velocity min=0.0000000000000000 max=0.0105626040379716 mean=0.0004761605217668 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Recentering increment: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-11.6182675419887715 max=6.4986191255151340 mean=-0.0423045322385412 + sea_water_salinity min=-1.9494045455336746 max=2.4416591897031168 mean=0.0030666330191716 + eastward_sea_water_velocity min=-0.0311063743188810 max=0.0242675919568888 mean=0.0000006227044045 + northward_sea_water_velocity min=-0.0570064138696695 max=0.0144751069909961 mean=-0.0000584145468783 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Increments after inflation and recentering: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.7188556846474787 max=1.5116632884614389 mean=-0.0512013658949001 + sea_water_salinity min=-0.5985030577974506 max=2.4416591897031168 mean=0.0217623798536710 + eastward_sea_water_velocity min=-0.0077641596663507 max=0.0082243408488201 mean=0.0000144988993009 + northward_sea_water_velocity min=-0.0077242382607982 max=0.0052863617402798 mean=-0.0000091563480846 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8236433562028527 max=1.5078195337231866 mean=-0.0450806652504036 + sea_water_salinity min=-0.6248585807330436 max=2.4416591897031168 mean=0.0217101908613599 + eastward_sea_water_velocity min=-0.0070302368459335 max=0.0081912583118718 mean=0.0000164380751851 + northward_sea_water_velocity min=-0.0072252267542679 max=0.0055893264531889 mean=-0.0000088915573609 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8545089662105105 max=1.4929941487153473 mean=-0.0422695357414711 + sea_water_salinity min=-0.6355642251122470 max=2.4416591897031168 mean=0.0243562523855727 + eastward_sea_water_velocity min=-0.0073337560679118 max=0.0071171413167404 mean=0.0000137114536320 + northward_sea_water_velocity min=-0.0068847033941528 max=0.0057522065774011 mean=-0.0000079796376954 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8475854849919122 max=1.5180803933621243 mean=-0.0439699299264505 + sea_water_salinity min=-0.5997730250609737 max=2.4416591897031168 mean=0.0248539809840534 + eastward_sea_water_velocity min=-0.0075502415980550 max=0.0083996771841590 mean=0.0000158551415247 + northward_sea_water_velocity min=-0.0064089140299722 max=0.0062977755609472 mean=-0.0000073814371034 + sea_water_cell_thickness min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 +Increments after inflation and recentering and postprocessing: + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.7188600000000001 max=1.5116600000000002 mean=-0.0512013643335365 + sea_water_salinity min=-0.5985000000000000 max=2.4416600000000002 mean=0.0217623812538039 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + northward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8236400000000001 max=1.5078200000000002 mean=-0.0450806609860010 + sea_water_salinity min=-0.6248600000000001 max=2.4416600000000002 mean=0.0217102054777843 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + northward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8545100000000001 max=1.4929900000000000 mean=-0.0422695337796710 + sea_water_salinity min=-0.6355600000000000 max=2.4416600000000002 mean=0.0243562746195983 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + northward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004 + Valid time: 2018-04-15T00:00:00Z +sea_water_potential_temperature min=-1.8475900000000001 max=1.5180800000000001 mean=-0.0439699179549612 + sea_water_salinity min=-0.5997700000000000 max=2.4416600000000002 mean=0.0248539987827147 + eastward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + northward_sea_water_velocity min=0.0000000000000000 max=0.0000000000000000 mean=0.0000000000000000 + sea_water_cell_thickness min=0.0009999999999977 max=1345.6400000000003274 mean=128.6280642065405004