mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-28 08:24:06 +08:00
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
import unittest
|
|
from SimPEG import *
|
|
from SimPEG import EM
|
|
import sys
|
|
from scipy.constants import mu_0
|
|
|
|
def getFDEMProblem(fdemType, comp, SrcList, freq, verbose=False):
|
|
cs = 5.
|
|
ncx, ncy, ncz = 6, 6, 6
|
|
npad = 3
|
|
hx = [(cs,npad,-1.3), (cs,ncx), (cs,npad,1.3)]
|
|
hy = [(cs,npad,-1.3), (cs,ncy), (cs,npad,1.3)]
|
|
hz = [(cs,npad,-1.3), (cs,ncz), (cs,npad,1.3)]
|
|
mesh = Mesh.TensorMesh([hx,hy,hz],['C','C','C'])
|
|
|
|
mapping = Maps.ExpMap(mesh)
|
|
|
|
x = np.array([np.linspace(-30,-15,3),np.linspace(15,30,3)]) #don't sample right by the source
|
|
XYZ = Utils.ndgrid(x,x,np.r_[0.])
|
|
Rx0 = EM.FDEM.Rx(XYZ, comp)
|
|
|
|
Src = []
|
|
|
|
for SrcType in SrcList:
|
|
if SrcType is 'MagDipole':
|
|
Src.append(EM.FDEM.Src.MagDipole([Rx0], freq=freq, loc=np.r_[0.,0.,0.]))
|
|
elif SrcType is 'MagDipole_Bfield':
|
|
Src.append(EM.FDEM.Src.MagDipole_Bfield([Rx0], freq=freq, loc=np.r_[0.,0.,0.]))
|
|
elif SrcType is 'CircularLoop':
|
|
Src.append(EM.FDEM.Src.CircularLoop([Rx0], freq=freq, loc=np.r_[0.,0.,0.]))
|
|
elif SrcType is 'RawVec':
|
|
if fdemType is 'e' or fdemType is 'b':
|
|
S_m = np.zeros(mesh.nF)
|
|
S_e = np.zeros(mesh.nE)
|
|
S_m[Utils.closestPoints(mesh,[0.,0.,0.],'Fz') + np.sum(mesh.vnF[:1])] = 1.
|
|
S_e[Utils.closestPoints(mesh,[0.,0.,0.],'Ez') + np.sum(mesh.vnE[:1])] = 1.
|
|
Src.append(EM.FDEM.Src.RawVec([Rx0], freq, S_m, S_e))
|
|
|
|
elif fdemType is 'h' or fdemType is 'j':
|
|
S_m = np.zeros(mesh.nE)
|
|
S_e = np.zeros(mesh.nF)
|
|
S_m[Utils.closestPoints(mesh,[0.,0.,0.],'Ez') + np.sum(mesh.vnE[:1])] = 1.
|
|
S_e[Utils.closestPoints(mesh,[0.,0.,0.],'Fz') + np.sum(mesh.vnF[:1])] = 1.
|
|
Src.append(EM.FDEM.Src.RawVec([Rx0], freq, S_m, S_e))
|
|
|
|
if verbose:
|
|
print ' Fetching %s problem' % (fdemType)
|
|
|
|
if fdemType == 'e':
|
|
survey = EM.FDEM.Survey(Src)
|
|
prb = EM.FDEM.Problem_e(mesh, mapping=mapping)
|
|
|
|
elif fdemType == 'b':
|
|
survey = EM.FDEM.Survey(Src)
|
|
prb = EM.FDEM.Problem_b(mesh, mapping=mapping)
|
|
|
|
elif fdemType == 'j':
|
|
survey = EM.FDEM.Survey(Src)
|
|
prb = EM.FDEM.Problem_j(mesh, mapping=mapping)
|
|
|
|
elif fdemType == 'h':
|
|
survey = EM.FDEM.Survey(Src)
|
|
prb = EM.FDEM.Problem_h(mesh, mapping=mapping)
|
|
|
|
else:
|
|
raise NotImplementedError()
|
|
prb.pair(survey)
|
|
|
|
try:
|
|
from pymatsolver import MumpsSolver
|
|
prb.Solver = MumpsSolver
|
|
except ImportError, e:
|
|
pass
|
|
|
|
return prb |