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) self.D = Survey.Data(survey) self.F = Problem.Fields(mesh, survey, knownFields={ 'phi': 'CC', 'e': 'E', 'b': 'F' }, dtype={ "phi": float, "e": complex, "b": complex }) self.Src0 = Src0 self.Src1 = Src1 self.mesh = mesh self.XYZ = XYZ
def evalDeriv(self, u, v=None, adjoint=False): assert v is not None, 'v to multiply must be provided.' if not adjoint: data = Survey.Data(self) for src in self.srcList: for rx in src.rxList: data[src, rx] = rx.evalDeriv(src, self.mesh, self.prob.timeMesh, u, v) return data else: f = FieldsTDEM(self.mesh, self) for src in self.srcList: for rx in src.rxList: Ptv = rx.evalDeriv(src, self.mesh, self.prob.timeMesh, u, v, adjoint=True) Ptv = Ptv.reshape((-1, self.prob.timeMesh.nN), order='F') if rx.projField not in f: # first time we are projecting f[src, rx.projField, :] = Ptv else: # there are already fields, so let's add to them! f[src, rx.projField, :] += Ptv return f
def eval(self, f): """Project fields to receiver locations :param Fields u: fields object :rtype: numpy.ndarray :return: data """ data = Survey.Data(self) for src in self.srcList: for rx in src.rxList: data[src, rx] = rx.eval(src, self.mesh, f) return data
def test_data(self): V = [] for src in self.D.survey.srcList: for rx in src.rxList: v = np.random.rand(rx.nD) V += [v] self.D[src, rx] = v self.assertTrue(np.all(v == self.D[src, rx])) V = np.concatenate(V) self.assertTrue(np.all(V == Utils.mkvc(self.D))) D2 = Survey.Data(self.D.survey, V) self.assertTrue(np.all(Utils.mkvc(D2) == Utils.mkvc(self.D)))
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) self.D = Survey.Data(survey)
def test_standard_dev(self): V = [] for src in self.D.survey.srcList: for rx in src.rxList: v = np.random.rand(rx.nD) V += [v] self.D.standard_deviation[src, rx] = v self.assertTrue(np.all(v == self.D.standard_deviation[src, rx])) V = np.concatenate(V) self.assertTrue(np.all(V == Utils.mkvc(self.D.standard_deviation))) D2 = Survey.Data(self.D.survey, standard_deviation=V) self.assertTrue( np.all( Utils.mkvc(D2.standard_deviation) == Utils.mkvc( self.D.standard_deviation)))
def test_projectAdjoint(self): prb = self.prb survey = prb.survey mesh = self.mesh # Generate random fields and data f = EM.TDEM.FieldsTDEM(prb.mesh, prb.survey) for i in range(prb.nT): f[:, 'b', i] = np.random.rand(mesh.nF, 1) f[:, 'e', i] = np.random.rand(mesh.nE, 1) d_vec = np.random.rand(survey.nD) d = Survey.Data(survey, v=d_vec) # Check that d.T*Q*f = f.T*Q.T*d V1 = d_vec.dot(survey.evalDeriv(None, v=f).tovec()) V2 = f.tovec().dot(survey.evalDeriv(None, v=d, adjoint=True).tovec()) self.assertTrue((V1 - V2) / np.abs(V1) < tol)
def eval(self, u): data = Survey.Data(self) for src in self.srcList: for rx in src.rxList: data[src, rx] = rx.eval(src, self.mesh, self.prob.timeMesh, u) return data