Example #1
0
    def setUp(self):
        mesh = Mesh.TensorMesh([np.ones(n) * 5 for n in [10, 11, 12]],
                               [0, 0, -30])
        x = np.linspace(5, 10, 3)
        XYZ = Utils.ndgrid(x, x, np.r_[0.])
        srcLoc = np.r_[0, 0, 0.]
        rxList0 = Survey.BaseRx(XYZ, 'exi')
        Src0 = Survey.BaseSrc([rxList0], loc=srcLoc)
        rxList1 = Survey.BaseRx(XYZ, 'bxi')
        Src1 = Survey.BaseSrc([rxList1], loc=srcLoc)
        rxList2 = Survey.BaseRx(XYZ, 'bxi')
        Src2 = Survey.BaseSrc([rxList2], loc=srcLoc)
        rxList3 = Survey.BaseRx(XYZ, 'bxi')
        Src3 = Survey.BaseSrc([rxList3], loc=srcLoc)
        Src4 = Survey.BaseSrc([rxList0, rxList1, rxList2, rxList3], loc=srcLoc)
        srcList = [Src0, Src1, Src2, Src3, Src4]
        survey = Survey.BaseSurvey(srcList=srcList)
        prob = Problem.BaseTimeProblem(mesh, timeSteps=[(10., 3), (20., 2)])
        survey.pair(prob)

        def alias(b, srcInd, timeInd):
            return self.F.mesh.edgeCurl.T * b + timeInd

        self.F = Problem.TimeFields(mesh,
                                    survey,
                                    knownFields={'b': 'F'},
                                    aliasFields={'e': ['b', 'E', alias]})
        self.Src0 = Src0
        self.Src1 = Src1
        self.mesh = mesh
        self.XYZ = XYZ
Example #2
0
    def test_aliasFunction(self):
        nT = self.F.survey.prob.nT + 1
        count = [0]

        def alias(e, srcInd, timeInd):
            count[0] += 1
            self.assertTrue(srcInd[0] is self.Src0)
            return self.F.mesh.edgeCurl * e

        F = Problem.TimeFields(self.F.mesh,
                               self.F.survey,
                               knownFields={'e': 'E'},
                               aliasFields={'b': ['e', 'F', alias]})
        e = np.random.rand(F.mesh.nE, 1, nT)
        F[self.Src0, 'e', :] = e
        F[self.Src0, 'b', :]
        # ensure that this is called for every time separately.
        self.assertTrue(count[0] == nT)
        e = np.random.rand(F.mesh.nE, 1, 1)
        F[self.Src0, 'e', 1] = e
        count[0] = 0
        F[self.Src0, 'b', 1]
        self.assertTrue(count[0] == 1)  # ensure that this is called only once.

        def alias(e, srcInd, timeInd):
            count[0] += 1
            self.assertTrue(type(srcInd) is list)
            self.assertTrue(srcInd[0] is self.Src0)
            self.assertTrue(srcInd[1] is self.Src1)
            return self.F.mesh.edgeCurl * e

        F = Problem.TimeFields(self.F.mesh,
                               self.F.survey,
                               knownFields={'e': 'E'},
                               aliasFields={'b': ['e', 'F', alias]})
        e = np.random.rand(F.mesh.nE, 2, nT)
        F[[self.Src0, self.Src1], 'e', :] = e
        count[0] = 0
        F[[self.Src0, self.Src1], 'b', :]

        # ensure that this is called for every time separately.
        self.assertTrue(count[0] == nT)
        e = np.random.rand(F.mesh.nE, 2, 1)
        F[[self.Src0, self.Src1], 'e', 1] = e
        count[0] = 0
        F[[self.Src0, self.Src1], 'b', 1]
        self.assertTrue(count[0] == 1)  # ensure that this is called only once.