mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-28 05:43:26 +08:00
44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
# from scipy.sparse import linalg
|
|
from numpy import *
|
|
#from numpy.linalg import *
|
|
from numpy.random import randn
|
|
from utils import *
|
|
from getDiffOps import getCurlMatrix, getNodalGradient
|
|
from sputils import *
|
|
from meshUtils import *
|
|
from getFaceInnerProduct import getFaceInnerProduct
|
|
from getEdgeInnerProduct import getEdgeInnerProduct
|
|
#from scipy.sparse.linalg import spsolve
|
|
from scipy.sparse.linalg import *
|
|
from pylab import *
|
|
|
|
n1 = 14
|
|
n2 = 14
|
|
n3 = 15
|
|
|
|
X, Y, Z = ndgrid(linspace(0, 1, n1), linspace(0, 1, n2), linspace(0, 1, n3))
|
|
sigma = 1e-2*ones([n1-1, n2-1, n3-1])
|
|
sigma[:, :, (n3-1)/2:] = 1e-6
|
|
mu = 4*pi*1e-7*ones([n1-1, n2-1, n3-1])
|
|
w = 10
|
|
|
|
CURL = getCurlMatrix(X, Y, Z)
|
|
GRAD = getNodalGradient(X, Y, Z)
|
|
Mf = getFaceInnerProduct(X, Y, Z, 1/mu)
|
|
Me = getEdgeInnerProduct(X, Y, Z, sigma)
|
|
|
|
A = CURL.T * Mf * CURL + 1j * w * Me
|
|
|
|
ne = shape(A)
|
|
b = matrix(randn(ne[0])).T
|
|
# clean b
|
|
DIVb = GRAD.T*b
|
|
p = dsolve.spsolve(GRAD.T*GRAD, DIVb, use_umfpack=True).T
|
|
b = b - GRAD*p
|
|
|
|
#x = spsolve(A, b)
|
|
x = dsolve.spsolve(A, b, use_umfpack=True).T
|
|
|
|
t = norm(A*x-b)/norm(b)
|
|
print t
|