OOPS_elementary

Download Report

Transcript OOPS_elementary

IFS code overhaul & Object Oriented Programming: a likely evolution of our codes ?

This talk has been prepared by C. Fischer, freely extracting material and summarizing the talks and discussions that have taken place with ECMWF

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

ECMWF’s view on the state of the IFS code

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Why to re-arrange the IFS code ?

• The IFS code has reached a very high level of complexity. • The maintenance cost has become very high.

• New cycles take longer and longer to create and debug.

• There is a long, steep learning curve for new scientists and visitors.

• It is becoming a barrier to new scientific developments such as long window weak constraints 4D-Var.

• Some algorithmic limitations: – Entities are not always independent => H^t R−1 H is one piece (jumble) of code.

– The nonlinear model M can only be integrated once per execution => algorithms that require several calls to M can only be written at script level.

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

IFS growth: unfortunately, it’s not an investment: It’s growth of costs, not of benefits.

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Modernizing the IFS

• Re-assess « modularity »: – Define self-sufficient entities that can be composed, that define the scope of their variables (avoid « bug propagation ») => requires a careful understanding and definition of their interface – Avoid as much as possible global variables – Will require to widen the IFS coding rules and

break the « setup/module/namelist » triplet paradigm

• Information hiding and abstraction The above leads to

object-oriented programming

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Principles of OO programming

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Basics about OO-programming

• One key idea of Object-Oriented programming is to organize the code around the data , not around the algorithms.

• The primary mechanism used by object-oriented languages to define and manipulate objects is the class • Classes define the properties of objects, including: – The structure of their contents, – The visibility of these contents from outside the object, – The interface between the object and the outside world, – What happens when objects are created and destroyed.

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

More basics about OO

• Encapsulation : content+scope of variables+interfaces (operators) put altogether • Inheritance : allows more specific classes to be derived from more general ones. It allows sharing of code that is common to the derived classes.

• Polymorphism/Abstraction: ../..

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Even more basics about OO

• Polymorphism : refers to the ability to re-use a piece of code with arguments of different types.

• Abstraction : refers to the ability to write code that is independent of the detailed implementation of the objects it manipulates. It allows algorithms to be coded in a manner that is close to their mathematical formulations.

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

ECMWF’s toy model

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Toy OOPS (OO Prediction System)

• ‘Toy’ data assimilation system to try out Object Oriented programming for IFS • Abstract Part – Code the algorithm in terms of base classes which serve to define interfaces to the data structures & functions • can be compiled separately • In C++ • Implementations – Code Lorenz95 and QG models in terms of derived classes from the base classes which define data structures and functions • without change of abstract part • Computational code remains in Fortran95 Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Toy OOPS implementations

LorenzMain QgMain incrementalAlgorithm Base Classes: Derived Classes: x State LorenzState QgState δx Increment LorenzIncrement QgIncrement y Observation LorenzObservation QgObservation y-H(x) Departure LorenzDeparture QgDeparture B BkgErrCov LorenzBkgErrCov QgBkgErrCov R ObsErrCov LorenzObsErrCov QgObsErrCov Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Next steps in the toy

• At ECMWF: – Further develop and test ideas: OO construction and architecture – ODB & Jo (observations) – Other algorithms ?

• At MF & partners (Aladin, Hirlam): – Learn about the toy – “play with the toy”: install limited area model(s) Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

And for the IFS ? (in short)

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

A proposal for the transition from IFS to OOPS

• The main idea is to

keep the computational parts of the existing code and reuse them in a re-designed structure

=> this can be achieved by a top-down and bottom-up approach.

• From the top : Develop a new modern, flexible structure =>

Expand the existing toy system

.

• From the bottom :

Move setup, namelists, data and code together

.

• C++/F95 breaking levels: STEPO and COBS/HOP ?

• Put the two together: Extract self-contained parts of the IFS and plug them into OOPS => this step should be quick enough for versions not to diverge.

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Feasibility study and towards IFS

• • At which level to split OO and standard F95 ? How far should OO go into the IFS ?: – Start with D.A. control; assess the interior of the forecast model(s) later =>

prototype with Jb and one obs operator

– Later: break STEPO, make GP buffers the natural vehicle for initializing and passing model data at OO-level (spectral transforms and data become an « optional » entity within the models) – Still later on, define grids and interpolators as Objects (both « base objects » and « instantiated objects »)

All these aspects will require further investigation & decision making

=> C++ & OO programming in the IFS/LAMs, depth of code cleaning and restructuring Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

Ancillary aspects

• If C++ is retained: training of NWP staff will be required • User interface: – Xml files:

no more namelists after OOPS

!!!

– Must preserve the facility to read in model parameters from a model input file (like with « FA » files; for LAM at least) – Change the S.C.R. tool at ECMWF ?: maybe move to Subversion or GIT • Documentation: needs to remain at a reasonable level (clean code is « auto-documentary ») Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop

The end

Toulouse, Sept 20-22, 2010 Aladin/LACE/Hirlam maintenance training workshop