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 | # 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) |