Python Interface to MAPL
This document presents a very high level description of a python interface to MAPL.
GEOS-5 Use Cases
The examples below are based on the actual GEOS-5 GCM Application, and a few components at the very top of the hierarchy. Here we assumed that MAPL Grid Components can be implemented entirely in C/Fortran or in Python.
GEOS-5 Application with Fortran Root Component
In this example, the very top root component is implemented entirely in a shared library.
"""" The GEOSgcm application written in python, starting from a Root Component implemented in Fortran. """
import MAPL
if __name == "__main__":
# Instantiate the root component # ------------------------------ gcs = MAPL.GridComp(lib='/some/path/libGEOSana.so')
# Instantiate MAPL # ---------------- mapl = MAPL(root=gcs)
# Run the cap # ----------- mapl.go()
GEOS-5 Application with Python Root Component
In this example, the very top root component is implemented in Python.
"""" The GEOSgcm application written in python, starting from a Root Component implemented in Fortran. """
import MAPL import GEOSgcs # the GEOSgcs component is implemented here
if __name == "__main__":
# Instantiate the Python root component # ------------------------------------- gcs = GEOSgcs(rc='gcs.rc')
# Instantiate MAPL # ---------------- mapl = MAPL(root=gcs)
# Run the cap # ----------- mapl.go()
A python component with Children in Fortran
In this example, the GEOSgcs component is implemented in Python, with its children, components ANA and GCM, implemented in Fortran.
import MAPL class GridComp(MAPL.GridComp): """Implements the GEOSgcs component by subclassing MAPL.GridComp""" def SetServices(self): """SerServices for a composite component""" # Instantiate Children component # ------------------------------ ana = MAPL.GridComp(lib='/some/path/libGEOSana.so') gcm = MAPL.GridComp(lib='/some/path/libGEOSgcm.so') # Adopt children # -------------- self.AddChild(ana) self.AddChild(gcm) # Set connectivity among children # ------------------------------- vars = ('Tinc', 'Sinc', 'Uinc', 'Vinc', 'SSHinc' ) self.AddConnectivity(src=[ana,vars], dst=[gcm,vars]) self.AddConnectivity(src=[gcm,'LWI'], dst=[ana,'ORO']) # Run the base class SetServices # ------------------------------ MAPL.GridComp.__SetServices__(self)