def __init__(self, name, facility): ContainingCoupler.__init__(self, name, facility) self.srcCommList2 = [] self.sinkComm2 = None self.remoteSize2 = 0 return
def createMesh(self): # Create BoundedMesh objects. from ExchangerLib import exchangeBoundedBox, createInterior, createEmptyBoundary ContainingCoupler.createMesh(self) # the bounding box of the mesh on remote solver2 self.remoteBBox2 = \ exchangeBoundedBox(self.globalBBox, self.communicator.handle(), self.srcCommList2[0].handle(), self.srcCommList2[0].size - 1) # the nodes within remoteBBox2 self.interior2, self.myBBox2 = createInterior(self.remoteBBox2, self.all_variables) # an empty boundary object,\ # which will be filled by a remote boundary obj. for i in range(self.remoteSize2): self.remoteBdryList2[i] = createEmptyBoundary() return
def postVSolverRun(self): ContainingCoupler.postVSolverRun(self) # send computed velocity to ECPLR2 for its BCs for outlet in self.outletList2: outlet.send() return
def createII(self): ContainingCoupler.createII(self) # interior temperature will be received by TInlet import Inlet self.inlet2 = Inlet.TInlet(self.interior2, self.sink2, self.all_variables) return
def newStep(self): ContainingCoupler.newStep(self) # update the temperature field in the overlapping region if self.inventory.two_way_communication: # receive temperture field from EmbeddedCoupler self.inlet2.recv() self.inlet2.impose() return
def createBC(self): ContainingCoupler.createBC(self) # boundary conditions will be sent by SVTOutlet, which sends # stress, velocity, and temperature import Outlet for i, src in zip(range(self.remoteSize2), self.sourceList2): self.outletList2[i] = Outlet.SVTOutlet(src, self.all_variables) return
def createSink(self): ContainingCoupler.createSink(self) # the sink obj. will receive interior # temperature from remote sources from ExchangerLib import Sink_create # the sink will communicate with the source in EmbeddedCoupler # during creation stage self.sink2 = Sink_create(self.sinkComm2.handle(), self.remoteSize2, self.interior2) return
def initialize(self, solver): ContainingCoupler.initialize(self, solver) self.srcCommList2 = solver.myPlus2 # number of processors in the remote solver2 self.remoteSize2 = len(self.srcCommList2) # only one of remotePlus2 is sinkComm2 self.sinkComm2 = solver.remotePlus2[self.communicator.rank] # allocate space self.remoteBdryList2 = range(self.remoteSize2) self.sourceList2 = range(self.remoteSize2) self.outletList2 = range(self.remoteSize2) return
def createSource(self): ContainingCoupler.createSource(self) # the source objects will send boundary conditions to remote sink2 from ExchangerLib import CitcomSource_create for i, comm, b in zip(range(self.remoteSize2), self.srcCommList2, self.remoteBdryList2): # sink is always in the last rank of a communicator sinkRank2 = comm.size - 1 # the sources will communicate with the sink in EmbeddedCoupler # during creation stage self.sourceList2[i] = CitcomSource_create(comm.handle(), sinkRank2, b, self.myBBox2, self.all_variables) return
def containingcoupler(name, facility): from ContainingCoupler import ContainingCoupler return ContainingCoupler(name, facility)