def test_EM1DTDfwd_CirLoop_ComplexCond(self): if self.prob.ispaired: self.prob.unpair() if self.survey.ispaired: self.survey.unpair() self.prob = EM1D.EM1D(self.mesh1D, self.modelComplex, **self.options) self.prob.chi = np.zeros(self.survey.nlay) self.prob.pair(self.survey) self.prob.CondType = 'Complex' self.prob.survey.srcType = 'CircularLoop' self.prob.survey.offset = 10. sig_half = 0.01 I = 1e0 a = 1e1 self.prob.survey.I = I self.prob.survey.a = a m_1D = np.log(np.ones(self.prob.survey.nlay)*sig_half) Hz = self.prob.fields(m_1D) BzTD = self.prob.survey.projectFields(u=Hz) sigCole = EM1DAnal.ColeCole(self.survey.frequency, sig_half, self.eta, self.tau, self.c) Bzanal = EM1DAnal.BzAnalCircTCole(a, self.survey.time, sigCole) if self.showIt == True: plt.loglog(self.survey.time, abs(BzTD), 'b') plt.loglog(self.survey.time, abs(Bzanal), 'b*') plt.show() err = np.linalg.norm(BzTD-Bzanal)/np.linalg.norm(Bzanal) print 'Bz error = ', err self.assertTrue(err < 1e-2) self.survey.rxType = 'dBzdt' dBzdtTD = self.prob.survey.projectFields(u=Hz) dBzdtanal = EM1DAnal.dBzdtAnalCircTCole(a, self.survey.time, sigCole) if self.showIt == True: plt.loglog(self.survey.time, abs(dBzdtTD), 'b') plt.loglog(self.survey.time, abs(dBzdtanal), 'b*') plt.show() err = np.linalg.norm(dBzdtTD-dBzdtanal)/np.linalg.norm(dBzdtanal) print 'dBzdt error = ', err self.assertTrue(err < 1e-2) print "EM1DTD-CirculurLoop for Complex conductivity works"
def test_EM1DFDJvec_Half(self): self.prob.CondType = 'Real' self.prob.survey.srcType = 'CircularLoop' I = 1e0 a = 1e1 self.prob.survey.I = I self.prob.survey.a = a sig_half = np.r_[0.01] m_1D = np.log(np.ones(self.prob.survey.nlay)*sig_half) self.prob.jacSwitch = True Hz, dHzdsig = self.prob.fields(m_1D) dHzdsig = Utils.mkvc(dHzdsig) dHzdsiganal = EM1DAnal.dHzdsiganalCirc(sig_half, self.prob.survey.frequency, I, a, 'secondary') def fwdfun(m): self.prob.jacSwitch = False Hz = self.prob.fields(m) resp = self.prob.survey.projectFields(u=Hz) return resp # return Hz def jacfun(m, dm): self.prob.jacSwitch = True u = self.prob.fields(m) drespdmv = self.prob.Jvec(m, dm, u = u) return drespdmv if self.showIt == True: plt.loglog(self.prob.survey.frequency, abs(dHzdsig.imag), 'r') plt.loglog(self.prob.survey.frequency, abs(dHzdsig.real), 'b') plt.loglog(self.prob.survey.frequency, abs(dHzdsiganal.imag), 'r*') plt.loglog(self.prob.survey.frequency, abs(dHzdsiganal.real), 'b*') plt.show() dm = m_1D*0.1 derChk = lambda m: [fwdfun(m), lambda mx: jacfun(m, mx)] passed = Tests.checkDerivative(derChk, m_1D, num=4, dx = dm, plotIt=False, eps = 1e-15) if passed: print "EM1DFD-half Jvec works"
def test_EM1DTDfwd_CirLoop_RealCond(self): self.prob.CondType = 'Real' self.prob.survey.srcType = 'CircularLoop' self.prob.survey.offset = 10. sig_half = 0.01 I = 1e0 a = 1e1 self.prob.survey.I = I self.prob.survey.a = a m_1D = np.log(np.ones(self.prob.survey.nlay) * sig_half) Hz = self.prob.fields(m_1D) BzTD = self.prob.survey.projectFields(u=Hz) Bzanal = EM1DAnal.BzAnalCircT(a, self.survey.time, sig_half) if self.showIt == True: plt.loglog(self.survey.time, (BzTD), 'b') plt.loglog(self.survey.time, (Bzanal), 'b*') plt.show() err = np.linalg.norm(BzTD - Bzanal) / np.linalg.norm(Bzanal) print 'Bz error = ', err self.assertTrue(err < 1e-2) self.survey.rxType = 'dBzdt' dBzdtTD = self.prob.survey.projectFields(u=Hz) dBzdtanal = EM1DAnal.dBzdtAnalCircT(a, self.survey.time, sig_half) if self.showIt == True: plt.loglog(self.survey.time, abs(dBzdtTD), 'b') plt.loglog(self.survey.time, abs(dBzdtanal), 'b*') plt.show() err = np.linalg.norm(dBzdtTD - dBzdtanal) / np.linalg.norm(dBzdtanal) print 'dBzdt error = ', err self.assertTrue(err < 1e-2) print "EM1DTD-CirculurLoop for real conductivity works"