[cig-commits] r7608 - mc/3D/CitcomS/trunk/CitcomS
tan2 at geodynamics.org
tan2 at geodynamics.org
Fri Jul 6 13:46:11 PDT 2007
Author: tan2
Date: 2007-07-06 13:46:10 -0700 (Fri, 06 Jul 2007)
New Revision: 7608
Modified:
mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py
mc/3D/CitcomS/trunk/CitcomS/MultiLayout.py
Log:
Debugged MultiLayout.initialize() and MultiCoupledApp.findLayout(). Fixed some typos.
Modified: mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py 2007-07-06 18:00:49 UTC (rev 7607)
+++ mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py 2007-07-06 20:46:10 UTC (rev 7608)
@@ -10,35 +10,34 @@
#
#
-from BasApplication import Base Application
+from BaseApplication import BaseApplication
import journal
-class CoupledA(BaseApplication):
+class MultiCoupledApp(BaseApplication):
def __init__(self, name="MultiCoupledCitcomS"):
BaseApplication.__init__(self, name)
-
+
self.solver = None
- self.solverCommunicator = None
+ self.solverCommunicator = None
# list of communicators used to pass imformation between solvers
- self.myPlus = []
- self.remotePlus = []
+ self.myPlus = []
+ self.remotePlus = []
# containing solver need to do more communication
self.myPlus2 = []
self.remotePlus2 = []
-
- self.comm = None
+
+ self.comm = None
self.rank = 0
self.nodes = 0
-
-
return
+
def getNodes(self):
# csolver requires nproc1 CPUs to run
s1 = self.inventory.csolver.inventory.mesher.inventory
@@ -49,23 +48,24 @@
nproc2 = s2.nproc_surf * s2.nprocx * s2.nprocy * s2.nprocz
# esolver2 requires nproc3 CPUs to run
- s3 = self.inventory.esolver2.inventory.mecher.inventory
- nproc3 = s3.nproc_surf * s3.nprox * s3.nprocy * s3.nprocz
-
+ s3 = self.inventory.esolver2.inventory.mesher.inventory
+ nproc3 = s3.nproc_surf * s3.nprocx * s3.nprocy * s3.nprocz
+
return nproc1 + nproc2 + nproc3
+
def initialize(self):
-
+
layout = self.inventory.layout
layout.initialize(self)
self.findLayout(layout)
- self.comtroller.initialize(self)
-
+ self.controller.initialize(self)
return
+
def findLayout(self, layout):
if layout.ccomm:
@@ -78,8 +78,8 @@
self.remotePlus = layout.ecommPlus1
self.myPlus2 = layout.ccommPlus2
self.remotePlus2 = layout.ecommPlus2
-
-
+
+
elif layout.ecomm1:
# This process belongs to the embedded solver1
self.controller = self.inventory.econtroller1
@@ -88,8 +88,8 @@
self.solverCommunicator = layout.ecomm1
self.myPlus = layout.ecommPlus1
self.remotePlus = layout.ccommPlus1
-
+
elif layout.ecomm2:
# This process belongs to the embedded solver2
self.controller = self.inventory.econtroller2
@@ -98,7 +98,7 @@
self.solverCommunicator = layout.ecomm2
self.myPlus = layout.ecommPlus2
self.remotePlus = layout.ccommPlus2
-
+
else:
# This process doesn't belong to any solver
import journal
@@ -111,9 +111,9 @@
return
-
- def report Configuration(self):
+ def reportConfiguration(self):
+
rank = self.comm.rank
if rank != 0:
@@ -134,47 +134,48 @@
self._info.line(" ecoupler1: %r" % self.inventory.ecoupler1.name)
self._info.line(" ecoupler2: %r" % self.inventory.ecoupler2.name)
self._info.line(" layout: %r" % self.inventory.layout.name)
-
+
return
- class Invertory(BaseApplication.Inventory):
+ class Inventory(BaseApplication.Inventory):
+
import pyre.inventory
import Controller
import Solver
import Coupler
- import Layout
+ import MultiLayout
ccontroller = pyre.inventory.facility(name="ccontroller",
factory=Controller.controller,
args=("ccontroller","ccontroller"))
econtroller1 = pyre.inventory.facility(name="econtroller1",
- factory=Controller.controller,
- args=("econtroller","econtroller"))
+ factory=Controller.controller,
+ args=("econtroller","econtroller"))
econtroller2 = pyre.inventory.facility(name="econtroller2",
- factory=Controller.controller,
- args=("econtroller","econtroller"))
+ factory=Controller.controller,
+ args=("econtroller","econtroller"))
ccoupler = pyre.inventory.facility("ccoupler",
factory=Coupler.containingcoupler,
args=("ccoupler","ccoupler"))
ecoupler1 = pyre.inventory.facility("ecoupler1",
- factory=Coupler.embeddedcoupler,
- args=("ecoupler","ecoupler"))
+ factory=Coupler.embeddedcoupler,
+ args=("ecoupler","ecoupler"))
ecoupler2 = pyre.inventory.facility("ecoupler2",
- factory=Coupler.embeddedcoupler,
- args=("ecoupler","ecoupler"))
+ factory=Coupler.embeddedcoupler,
+ args=("ecoupler","ecoupler"))
csolver = pyre.inventory.facility("csolver",
factory=Solver.coupledFullSolver,
args=("csolver", "csolver"))
esolver1 = pyre.inventory.facility("esolver1",
- factory=Solver.coupledRegionalSolver,
- args=("esolver", "esolver"))
+ factory=Solver.coupledRegionalSolver,
+ args=("esolver", "esolver"))
esolver2 = pyre.inventory.facility("esolver2",
- factory=Solver.coupledRegionalSolver,
- args=("esolver", "esolver"))
+ factory=Solver.coupledRegionalSolver,
+ args=("esolver", "esolver"))
layout = pyre.inventory.facility("layout", factory=MultiLayout.MultiLayout,
args=("layout", "layout"))
@@ -182,6 +183,8 @@
steps = pyre.inventory.int("steps", default=1)
-
+# version
+__id__ = "$Id$"
+
# End of file
-
+
Modified: mc/3D/CitcomS/trunk/CitcomS/MultiLayout.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/MultiLayout.py 2007-07-06 18:00:49 UTC (rev 7607)
+++ mc/3D/CitcomS/trunk/CitcomS/MultiLayout.py 2007-07-06 20:46:10 UTC (rev 7608)
@@ -6,13 +6,13 @@
#
-from pyre.components.Compenent import Component
+from Layout import Layout
-class MultiLayout(Component):
+class MultiLayout(Layout):
- def __init(self, name, facility):
- Compoent.__init__(self, name, facility)
+ def __init__(self, name, facility):
+ Layout.__init__(self, name, facility)
# flag indicating that we are using
# containing communicator
@@ -24,12 +24,12 @@
# flag indicating that we are using
# embedded comminicator2
- self.ecomm2 = None
+ self.ecomm2 = None
# list of communicators created to pass imformation
# between different solvers
- self.ccomPlus1 = []
- self.ccomPlus2 = []
+ self.ccommPlus1 = []
+ self.ccommPlus2 = []
self.ecommPlus1 = []
self.ecommPlus2 = []
@@ -38,23 +38,10 @@
self.nodes = 0
return
- def initialize(self, application):
- self.discover()
- self.verify(application)
- self.createCommunicators()
- return
- def discover(self):
- #Find the size and rank of the whole application
- import mpi
- self.comm = mpi.world()
- self.rank = self.comm.rank
- self.nodes = self.comm.size
- return
-
def verify(self, application):
# check that we have at least 3 processor
- if self.nodes <3:
+ if self.nodes < 3:
import journal
firewall = journal.firewall("MultiLayout")
firewall.log("'%s' requires at least 3 processors" \
@@ -77,26 +64,8 @@
return
-
- def check_duplicated(self, group):
- s = set(group)
- if len(s) != len(group):
- import journal
- firewall = journal.firewall("layout")
- firewall.log('Duplicated element in group: %s' % group)
- return
-
-
- def check_disjoint(self, group0, group1):
- s0 = set(group0)
- s1 = set(group1)
- if s0.intersection(s1):
- import journal
- firewall = journal.firewall("layout")
- firewall.log('Groups are not disjoint: %s and %s' % (group0, group1))
- return
-
+
def createCommunicators(self):
# Create communicators for solvers and couplerd
@@ -115,7 +84,7 @@
# ecommPlus1 is a list of communicators, with each communicator
# contains a node in embedded_group1 and the whole containing_group
- # ecommPlus2 is similar
+ # ecommPlus2 is similar
for node in containing_group:
self.ecommPlus1.append(world.include(embedded_group1 + [node]))
self.ecommPlus2.append(world.include(embedded_group2 + [node]))
@@ -125,27 +94,31 @@
# commPlus2 is similar
for node in embedded_group1:
- self.ccommPlus.append(world.include(containing_group + [node]))
+ self.ccommPlus1.append(world.include(containing_group + [node]))
for node in embedded_group2:
- self.ccommPlus.append(world.include(containing_group + [node]))
+ self.ccommPlus2.append(world.include(containing_group + [node]))
return
-
- class Inventory(Component.Inventory):
+
+ class Inventory(Layout.Inventory):
+
import pyre.inventory
# The containing solver will run on these nodes
containing_group = pyre.inventory.slice("containing_group",
- default=range(11))
+ default=range(12))
# The embedded solver1 will run on these nodes
- embedded_group1 = pyre.inventory.slice("embedded_group",
- default=[11])
+ embedded_group1 = pyre.inventory.slice("embedded_group1",
+ default=[12])
# The embedded solver2 will run on these nodes
- embedded_group2 = pyre.inventory.slice("embedded_group",
- default=[12])
+ embedded_group2 = pyre.inventory.slice("embedded_group2",
+ default=[13])
+# version
+__id__ = "$Id$"
+
# End of file
More information about the cig-commits
mailing list