mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-18 12:40:30 +08:00
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
import unittest
|
|
from SimPEG import Mesh, np, PF
|
|
from scipy.constants import mu_0
|
|
|
|
|
|
plotIt = False
|
|
|
|
|
|
class TestBoundaryConditionAnalytics(unittest.TestCase):
|
|
|
|
def test_ana_boundary_computation(self):
|
|
|
|
hxind = [(0, 25, 1.3), (21, 12.5), (0, 25, 1.3)]
|
|
hyind = [(0, 25, 1.3), (21, 12.5), (0, 25, 1.3)]
|
|
hzind = [(0, 25, 1.3), (20, 12.5), (0, 25, 1.3)]
|
|
# hx, hy, hz = Utils.meshTensors(hxind, hyind, hzind)
|
|
M3 = Mesh.TensorMesh([hxind, hyind, hzind], "CCC")
|
|
indxd, indxu, indyd, indyu, indzd, indzu = M3.faceBoundaryInd
|
|
mu0 = 4*np.pi*1e-7
|
|
chibkg = 0.
|
|
chiblk = 0.01
|
|
chi = np.ones(M3.nC)*chibkg
|
|
sph_ind = PF.MagAnalytics.spheremodel(M3, 0, 0, 0, 100)
|
|
chi[sph_ind] = chiblk
|
|
mu = (1.+chi)*mu0
|
|
Bbc, const = PF.MagAnalytics.CongruousMagBC(M3, np.array([1., 0., 0.]), chi)
|
|
|
|
flag = 'secondary'
|
|
Box = 1.
|
|
H0 = Box/mu_0
|
|
Bbcxx, Bbcxy, Bbcxz = PF.MagAnalytics.MagSphereAnaFun(M3.gridFx[(indxd|indxu),0], M3.gridFx[(indxd|indxu),1], M3.gridFx[(indxd|indxu),2], 100, 0., 0., 0., mu_0, mu_0*(1+chiblk), H0, flag)
|
|
Bbcyx, Bbcyy, Bbcyz = PF.MagAnalytics.MagSphereAnaFun(M3.gridFy[(indyd|indyu),0], M3.gridFy[(indyd|indyu),1], M3.gridFy[(indyd|indyu),2], 100, 0., 0., 0., mu_0, mu_0*(1+chiblk), H0, flag)
|
|
Bbczx, Bbczy, Bbczz = PF.MagAnalytics.MagSphereAnaFun(M3.gridFz[(indzd|indzu),0], M3.gridFz[(indzd|indzu),1], M3.gridFz[(indzd|indzu),2], 100, 0., 0., 0., mu_0, mu_0*(1+chiblk), H0, flag)
|
|
Bbc_ana = np.r_[Bbcxx, Bbcyy, Bbczz]
|
|
|
|
if plotIt:
|
|
import matplotlib.pyplot as plt
|
|
fig, ax = plt.subplots(1,1, figsize = (10, 10))
|
|
ax.plot(Bbc_ana)
|
|
ax.plot(Bbc)
|
|
plt.show()
|
|
err = np.linalg.norm(Bbc-Bbc_ana) / np.linalg.norm(Bbc_ana)
|
|
|
|
assert err < 0.1, 'Mag Boundary computation is wrong!!, err = {}'.format(err)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|