예제 #1
0
    def __init__(self, name, facility):
        ContainingCoupler.__init__(self, name, facility)

        self.srcCommList2 = []
        self.sinkComm2 = None
        self.remoteSize2 = 0
        return
예제 #2
0
    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
예제 #3
0
    def __init__(self, name, facility):
        ContainingCoupler.__init__(self, name, facility)

        self.srcCommList2 = []
        self.sinkComm2 = None
        self.remoteSize2 = 0
        return
예제 #4
0
    def postVSolverRun(self):

        ContainingCoupler.postVSolverRun(self)

        # send computed velocity to ECPLR2 for its BCs
        for outlet in self.outletList2:
            outlet.send()
        return
예제 #5
0
    def postVSolverRun(self):

        ContainingCoupler.postVSolverRun(self)

        # send computed velocity to ECPLR2 for its BCs
        for outlet in self.outletList2:
            outlet.send()
        return
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
    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
예제 #10
0
    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
예제 #11
0
    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
예제 #12
0
    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
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
    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
예제 #16
0
    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
예제 #17
0
    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
예제 #18
0
    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
예제 #19
0
def containingcoupler(name, facility):
    from ContainingCoupler import ContainingCoupler
    return ContainingCoupler(name, facility)