ESMF (Earth System Modeling Framework) is a program for building high-performance, flexible software infrastructure to increase ease of use, performance portability, interoperability, and reuse in climate, numerical weather prediction, data assimilation, The ESMF defines an architecture for composing complex, coupled modeling systems and includes data structures and utilities for developing individual models.The basic idea behind ESMF is that complicated applications should be broken up into smaller pieces, or components. A component is a unit of software composition that has a coherent function, and a standard calling interface and behavior. Components can be assembled to create multiple applications, and different implementations of a component may be available. In ESMF, a component may be a physical domain, or a function such as a coupler or I/O system.ESMF also includes toolkits for building components and applications, such as regridding software, calendar management, logging and error handling, and parallel communications.The figure below shows ESMF components in practice. It is a diagram of the structure of the NASA GEOS-5 Atmospheric General Circulation Model, built from the ground up using ESMF. Each of the boxes is an ESMF component, including the couplers. The hierarchical tree of components can be "snipped" at different levels so that the whole physics package could be replaced, or a single parameterization. Each component is potentially "swappable." Here are some key features of "Earth System Modeling Framework":
· Full Fortran 90 interface, partial C/C++ interface
· Fortran 90 Reference Manual and User's Guide
· Runs on most high performance parallel computing platforms, including IBM, many Linux variants, Cray, Compaq, more (see here for the full list)
· Supports MPI, OpenMP and hybrid user codes
· 2500+ tests bundled with source distribution
· Free user support
· Active user community
Superstructure for coupling Earth system components:
· Component, State and Coupler software that wraps user code with minimal overhead
· Simple drivers that users can modify
· Sequential or concurrent execution of components
· Single executable capability
· Limited multiple executable capability
Infrastructure for building Earth system components:
· Time Manager that includes Gregorian, 360 day, no-leap, Julian, and other calendars, as well as a broad range of time functions
· Data structures for storage and manipulation of Arrays, Fields, and Bundles of Fields on the same grid.
· Parallel data communications and regridding software
· Message logging tools
· Resource file manager
What's New in This Release:
· Added support for replicated dimensions in Field. A "0" entry in the gridToFieldMap argument in ESMF_FieldCreate() and ESMF_FieldSetCommit() indicates that a Grid dimension is not part of the Field. Instead the Field is replicated across all DEs along the corresponding Grid dimension.
· Overloaded ESMF_FieldCreate() to accept a Fortran array pointer and preserve its properties (such as bounds and ability to deallocate).
· Overloaded ESMF_FieldSetCommit() to accept a Fortran array pointer and preserve its properties (such as bounds and ability to deallocate).
· The Grid now supports an ESMF_INDEX_USER option for the indexflag. This allows the user to explicitly set the lower bound of their local index space. This is necessary when creating a Field from a Fortran array pointer with non-standard indexing.
· Overloaded ESMF_ArrayCreate() to accept a Fortran array pointer and preserve its properties (such as bounds and ability to deallocate).
· Optimized ESMF_ArraySMM() and ESMF_ArrayBundleSMM() runtime performance, scalability and memory usage.
· Added support for optimized communications for Arrays with different distributions, dimensions and sizes in the same ArrayBundle.
· Added support for DEs with zero elements in DistGrid, Array and Field.
· Made localDe argument optional in ESMF_ArrayGet() and ESMF_FieldGet() methods where not prohibited by overloading restrictions.
· Alarms set to ring at timeStep 0, upon ESMF_ClockCreate(), now ring properly.
· Alarms now ring properly for a Clock in ESMF_MODE_REVERSE.
· Alarms now ring properly for a Clock using a negative timeStep.
· Added default pointer size override feature to build system utilizing new environment variables ESMF_F90_PTR_BASE_SIZE and ESMF_F90_PTR_PLUS_RANK.