Python Interface to MAPL: Difference between revisions
(12 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
== 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 of a GEOS-5 application written in Python, the very top root component is implemented entirely in a shared library. | ||
import MAPL | import MAPL | ||
if __name == "__main__": | if __name == "__main__": | ||
# Instantiate the root component | # Instantiate the root component | ||
# ------------------------------ | # ------------------------------ | ||
gcs = MAPL.GridComp(lib='/some/path/ | gcs = MAPL.GridComp(lib='/some/path/libGEOSgcs.so') | ||
# Instantiate MAPL | # Instantiate MAPL | ||
# ---------------- | # ---------------- | ||
mapl = MAPL(root=gcs) | mapl = MAPL(root=gcs) | ||
# Run the cap | # Run the cap | ||
# ----------- | # ----------- | ||
Line 32: | Line 27: | ||
== GEOS-5 Application with Python Root Component == | == GEOS-5 Application with Python Root Component == | ||
In this example, the very top root component is implemented in Python. | In this example, the very top root component is now implemented in Python. | ||
import MAPL | import MAPL | ||
Line 43: | Line 33: | ||
if __name == "__main__": | if __name == "__main__": | ||
# Instantiate the Python root component | # Instantiate the Python root component | ||
# ------------------------------------- | # ------------------------------------- | ||
gcs = GEOSgcs(rc='gcs.rc') | gcs = GEOSgcs(rc='gcs.rc') | ||
# Instantiate MAPL | # Instantiate MAPL | ||
# ---------------- | # ---------------- | ||
mapl = MAPL(root=gcs) | mapl = MAPL(root=gcs) | ||
# Run the cap | # Run the cap | ||
# ----------- | # ----------- | ||
mapl.go() | mapl.go() | ||
== A python component with Children in Fortran == | == A python component with Children implemented in Fortran == | ||
In this example, the '''GEOSgcs''' component is implemented in Python, with its | In this example, the '''GEOSgcs''' component is implemented in Python, with its children, components '''ANA''' and '''GCM''', implemented in Fortran. | ||
Notice that every component should be subclass of '''MAPL_GridComp'''. | |||
import MAPL | import MAPL | ||
class GridComp(MAPL.GridComp): | class GridComp(MAPL.GridComp): | ||
"""Implements the GEOSgcs component by subclassing MAPL.GridComp""" | """ | ||
Implements the GEOSgcs component by subclassing MAPL.GridComp. | |||
""" | |||
def SetServices(self): | def SetServices(self): | ||
""" | """ | ||
SetServices for a composite component. | |||
""" | |||
# Instantiate Children component | # Instantiate Children component | ||
# ------------------------------ | # ------------------------------ | ||
ana = MAPL.GridComp(lib='/some/path/libGEOSana.so') | ana = MAPL.GridComp(lib='/some/path/libGEOSana.so') | ||
gcm = MAPL.GridComp(lib='/some/path/libGEOSgcm.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) | |||
Notice that the standard '''Initialize()''', '''Run()''' and '''Finalize()''' methods are inherited from the base class '''MAPL.GridComp'''. | |||
== A python component with Children implemented in Python == | |||
In this example, the '''GEOSgcs''' component is implemented in Python, with its children, components '''ANA''' and '''GCM''', also implemented in Python. | |||
import MAPL | |||
import GEOSana | |||
import GEOSgcm | |||
class GridComp(MAPL.GridComp): | |||
""" | |||
Implements the GEOSgcs component by subclassing MAPL.GridComp. | |||
""" | |||
def SetServices(self): | |||
""" | |||
SetServices for a composite component. | |||
""" | |||
# Instantiate Children component | |||
# ------------------------------ | |||
ana = GEOSana() | |||
gcm = GEOSgcm() | |||
# Adopt children | # Adopt children | ||
# -------------- | # -------------- | ||
self.AddChild(ana) | self.AddChild(ana) | ||
self.AddChild(gcm) | self.AddChild(gcm) | ||
# Set connectivity among children | # Set connectivity among children | ||
# ------------------------------- | # ------------------------------- | ||
Line 83: | Line 118: | ||
self.AddConnectivity(src=[ana,vars], dst=[gcm,vars]) | self.AddConnectivity(src=[ana,vars], dst=[gcm,vars]) | ||
self.AddConnectivity(src=[gcm,'LWI'], dst=[ana,'ORO']) | self.AddConnectivity(src=[gcm,'LWI'], dst=[ana,'ORO']) | ||
# Run the base class SetServices | # Run the base class SetServices | ||
# ------------------------------ | # ------------------------------ | ||
MAPL.GridComp.__SetServices__(self) | MAPL.GridComp.__SetServices__(self) | ||
In this case we implement the standard '''Run()''' method, but inherit '''Initialize()''' and '''Finalize()''' from the base class '''MAPL.GridComp''' | |||
def Run(self,clock): | |||
""" | |||
Implementation of a simple run method. | |||
""" | |||
# Run the base class method | |||
# ------------------------- | |||
MAPL.GridComp.__Run__(self,clock) | |||
# Retrieve some data from a state | |||
# ------------------------------- | |||
uwnd, vwnd, = self.Export.GetPointer(['UWND', 'VWND']) | |||
# Print states | |||
# ------------ | |||
self.Internal.print() | |||
self.Import.print() | |||
sllf.Export.print() | |||
# Just print it | |||
# ------------- | |||
print "u-wind = ", uwnd.min(), uwnd.max() | |||
print "v-wind = ", vwnd.min(), vwnd.max() |