Python Interface to MAPL: Difference between revisions

Line 5: Line 5:
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.  
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 ===
== GEOS-5 Application with Fortran Root Component ==


In this example, the very top root component is implemented entirely in a shared library.
In this example, the very top root component is implemented entirely in a shared library.
Line 22: Line 22:
     gcs = MAPL.GridComp(lib='/some/path/libGEOSana.so')
     gcs = MAPL.GridComp(lib='/some/path/libGEOSana.so')


  #  Instantiate MAPL, using a "Fortran" as a root component
  #  Instantiate MAPL
  #  -------------------------------------------------------
  #  ----------------
     mapl = MAPL(root=gcs)
     mapl = MAPL(root=gcs)


Line 29: Line 29:
  #  -----------
  #  -----------
     mapl.go()
     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 just 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)