The Joint Effort for Data assimilation Integration (JEDI) From - - PowerPoint PPT Presentation

the joint effort for data assimilation integration jedi
SMART_READER_LITE
LIVE PREVIEW

The Joint Effort for Data assimilation Integration (JEDI) From - - PowerPoint PPT Presentation

The Joint Effort for Data assimilation Integration (JEDI) From Objectives to Code Design Joint Center for Satellite Data Assimilation (JCSDA) JEDI Academy 24-27 February 2020 Continued: From Abstract/Generic to Concrete Abstract Layer


slide-1
SLIDE 1

From Objectives to Code Design

Joint Center for Satellite Data Assimilation (JCSDA)

JEDI Academy – 24-27 February 2020

The Joint Effort for Data assimilation Integration (JEDI)

slide-2
SLIDE 2

Continued: From Abstract/Generic to Concrete

slide-3
SLIDE 3

Generic applications Interface layer Specific implementations Forecast 3DVar EDA State Model Covariance Obs Operator … MPAS FV3 MOM6 Uses 4DVar

Abstract Layer (OOPS)

Implements Obs Space EnKF IODA UFO … … SABER

slide-4
SLIDE 4

Generic applications Interface layer Specific implementations Forecast 3DVar EDA State Model Covariance Obs Operator … MPAS FV3 MOM6 Uses 4DVar

Abstract Layer (OOPS)

Implements Obs Space EnKF IODA UFO … … SABER

slide-5
SLIDE 5
  • ops/src/oops/

assimilation DA classes (minimizer, cost functions, etc) base base classes and classes build up on interface classes (state ensemble, observer, etc) generic implementations that can be shared by different models/obs (diagonal obs errors, BUMP background error covariances) interface interface classes (building blocks from previous slides, need to be implemented) parallel files relevant to mpi communications

runs applications (Variational, HofX, EDA, etc)

util utilities (datetime, timers, etc)

  • ops directory structure
slide-6
SLIDE 6

Variational application (oops/src/oops/runs/Variational.h):

  • creates cost function
  • runs IncrementalAssimilation (computes cost function, runs

minimizer)

  • type of minimizer and type of cost function (3D-Var, 4D-Var, 4D-

Weak, 4D-Ens-Var) are controlled through yaml

Variational application

slide-7
SLIDE 7

EDA application

EDA (ensemble of data assimilations):

  • runs several *Var analyses in parallel, with perturbed observations
  • the application (oops/src/oops/runs/EDA.h) splits MPI

communicator and runs application Variational with relevant communicator for this task.

slide-8
SLIDE 8

JEDI: Main Programs

int main(int argc, char ** argv) {

  • ops::Run run(argc, argv);
  • ops::Variational<lorenz95::L95Traits> var;

run.execute(var); return 0; } Standard C++ main Run object for technical setup: read yaml configuration, start MPI, start loggers… Create Application object: This is where the model is determined Execute Application All JEDI/OOPS applications have one (sometimes two) arguments: a yaml configuration file

slide-9
SLIDE 9

template <typename MODEL> class Variational : public Application { public: Variational() { instantiateCostFactory<MODEL>(); // and other factories (min, obserr, filter, etc) } int execute(const eckit::Configuration & fullConfig) const { // Setup cost function const eckit::LocalConfiguration cfConf(fullConfig, "cost_function"); std::unique_ptr< CostFunction<MODEL> > J(CostFactory<MODEL>::create(...); // Initialize first guess from background ControlVariable<MODEL> xx(J->jb().getBackground()); // Perform Incremental Variational Assimilation IncrementalAssimilation<MODEL>(xx, *J, fullConfig); return 0; } };

Variational application (abridged)

slide-10
SLIDE 10

Applications using different traits

int main(int argc, char ** argv) {

  • ops::Run run(argc, argv);
  • ops::Variational<fv3jedi::Traits

fv3jedi::Traits> var;

run.execute(var); return 0; } fv3-jedi/src/mains/fv3jediVar.cc struct lorenz95::L95Traits

lorenz95::L95Traits {

... typedef lorenz95::StateL95 State; typedef lorenz95::IncrementL95 Increment; typedef lorenz95::ObservationL95 ObsOperator; ... }

  • ops/l95/src/lorenz95/L95Traits.h

struct fv3jedi::Traits

fv3jedi::Traits {

... typedef fv3jedi::State State; typedef fv3jedi::Increment Increment; typedef ufo::ObsOperator ObsOperator; ... } fv3-jedi/src/fv3jedi/Utilities/Traits.h int main(int argc, char ** argv) {

  • ops::Run run(argc, argv);
  • ops::Variational<lorenz95::L95Traits

lorenz95::L95Traits> var;

run.execute(var); return 0; }

  • ops/l95/src/executables/Main4Dvar.cc
slide-11
SLIDE 11

Some classes may be shared in Traits

int main(int argc, char ** argv) {

  • ops::Run run(argc, argv);
  • ops::Variational<fv3jedi::Traits

fv3jedi::Traits> var;

run.execute(var); return 0; } struct soca

soca::Traits ::Traits {

... typedef soca::State State; typedef soca::Increment Increment; typedef ufo

ufo:: ::ObsOperator ObsOperator ObsOperator ObsOperator;

... } struct fv3jedi::Traits

fv3jedi::Traits {

... typedef fv3jedi::State State; typedef fv3jedi::Increment Increment; typedef ufo

ufo:: ::ObsOperator ObsOperator ObsOperator ObsOperator;

... } int main(int argc, char ** argv) {

  • ops::Run run(argc, argv);
  • ops::Variational<soca

soca::Traits ::Traits> var;

run.execute(var); return 0; }

slide-12
SLIDE 12
slide-13
SLIDE 13

resolution: model: cost_function: # entries describing cost functions cost_type: # valid types: 3D-Var, 4D-Var, 4D-Ens-Var, 4D-Weak window_begin: window_length: Jb: # entries describing Jb term of cost function Background: Covariance: Jo: # entries describing Jo term of cost function ObsTypes:

yaml for Variational application

slide-14
SLIDE 14

variational: iteration: # size of array = number of outer loop iterations

  • ninner: 10. # number of inner loop iterations for 1st iteration

gradient_norm_reduction: 1e-10 resolution: linearmodel:

  • ninner: 10 # number of inner loop iterations for 2nd iteration

gradient_norm_reduction: 1e-10 resolution: linearmodel: minimizer: algorithm: DRIPCG # valid options: PCG, RPCG, DRPCG, IPCG, DRIPCG, Planczos, Rlanczos, DRPLanczos, MINRES, FGMRES, GMRESR, DRGMRESR, LBGMRESR, DRPFOM

yaml for Variational application