In [1]:
%pylab inline
In [2]:
import SimPEG as simpeg
import simpegMT as simpegmt
from scipy.constants import mu_0
def omega(freq):
"""Change frequency to angular frequency, omega"""
return 2.*np.pi*freq
In [115]:
#Define the mesh
z = 100.
hz = [(z,5,-1.5),(z,10),(z,5,1.5)]
M = simpeg.Mesh.TensorMesh([hz],'C')
# sig = np.zeros(M.nC) + 1e-8
conds = [1,1e-2]
elev = 300
sig = np.zeros(M.nC) + conds[1]
sig[np.logical_and(M.gridCC>-200,M.gridCC<0)] = conds[0]
sig[M.gridCC>elev] = 1e-8
sig[M.gridCC<-500] = 1e-1
sig[M.gridCC<-900] = conds[1]
In [116]:
M.vectorNx
Out[116]:
In [141]:
# Calculate the analytic fields
freqs = np.logspace(4,-4,33)
Zana = []
for freq in freqs:
Ed, Eu, Hd, Hu = simpegmt.Utils.getEHfields(M,sig,freq,np.array([elev]))
Zana.append((Ed + Eu)/(Hd + Hu))
ZanaArr = np.concatenate(Zana)
In [169]:
# Calculate the synthetic solution
Zsyn = []
Qex = M.getInterpolationMat(np.array([elev]),'Ex')
Qfx = M.getInterpolationMat(np.array([elev]),'Fx')
for freq in freqs:
e = simpegmt.Utils.get1DEfields(M,sig,freq,sourceAmp=None)
h = -(M.nodalGrad*e)/(1j*omega(freq)*mu_0)
Zsyn.append((Qfx*e).conj()/(Qex*h).conj())
ZsynArr = np.concatenate(Zsyn)
In [170]:
np.where(freqs==10)
Out[170]:
In [183]:
print ZsynArr[-1]
print (Qfx*e).conj(), (Qex*h).conj()
In [171]:
def appResPhs(freq,z):
app_res = ((1./(8e-7*np.pi**2))/freq)*np.abs(z)**2
app_phs = np.arctan2(z.imag,z.real)*(180/np.pi)
return app_res, app_phs
appAna_r, appAna_p = appResPhs(freqs,ZanaArr)
In [172]:
print appAna_r
print appAna_p
In [173]:
appSyn_r, appSyn_p = appResPhs(freqs,ZsynArr)
In [174]:
print appSyn_r
print appSyn_p
In [175]:
loglog(freqs,np.abs(ZanaArr),freqs,np.abs(ZsynArr))
gca().invert_xaxis()
In [176]:
loglog(freqs,appAna_r,'bo--',freqs,appSyn_r,'gx:')
gca().invert_xaxis()
In [177]:
semilogx(freqs,appAna_p,'bo--',freqs,appSyn_p,'gx:')
gca().invert_xaxis()
In [ ]:
In [ ]:
In [ ]: