Files
simpeg/code/MFDdriver.py
T

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