From 2554318427a0a4cdd0f65f735e7d434df2b10346 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 1 Jun 2013 14:18:31 -0700 Subject: [PATCH 001/359] Eldad's initial code for logically orthogonal mesh simulation. --- code/MFDdriver.py | 43 +++++++ code/getCellVolume.py | 58 ++++++++++ code/getDiffOps.py | 103 +++++++++++++++++ code/getEdgeInnerProduct.py | 214 ++++++++++++++++++++++++++++++++++ code/getEdgeTangent.py | 60 ++++++++++ code/getFaceInnerProduct.py | 86 ++++++++++++++ code/getFaceNormals.py | 73 ++++++++++++ code/getVolume.py | 34 ++++++ code/inv3X3BlockDiagonal.py | 37 ++++++ code/meshUtils.py | 101 ++++++++++++++++ code/ndgrid.py | 29 +++++ code/sputils.py | 67 +++++++++++ code/tools.py | 222 ++++++++++++++++++++++++++++++++++++ code/utils.py | 124 ++++++++++++++++++++ code/zevel.py | 119 +++++++++++++++++++ 15 files changed, 1370 insertions(+) create mode 100644 code/MFDdriver.py create mode 100644 code/getCellVolume.py create mode 100644 code/getDiffOps.py create mode 100644 code/getEdgeInnerProduct.py create mode 100644 code/getEdgeTangent.py create mode 100644 code/getFaceInnerProduct.py create mode 100644 code/getFaceNormals.py create mode 100644 code/getVolume.py create mode 100644 code/inv3X3BlockDiagonal.py create mode 100644 code/meshUtils.py create mode 100644 code/ndgrid.py create mode 100644 code/sputils.py create mode 100644 code/tools.py create mode 100644 code/utils.py create mode 100644 code/zevel.py diff --git a/code/MFDdriver.py b/code/MFDdriver.py new file mode 100644 index 00000000..c0b8edb4 --- /dev/null +++ b/code/MFDdriver.py @@ -0,0 +1,43 @@ +# 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 diff --git a/code/getCellVolume.py b/code/getCellVolume.py new file mode 100644 index 00000000..95d01427 --- /dev/null +++ b/code/getCellVolume.py @@ -0,0 +1,58 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from sputils import * +from numpy import * +from getEdgeTangent import * +from inv3X3BlockDiagonal import * + +def volTetra(y,m,I,A,B,C,D): + + a11 = array(y[A,0]-y[B,0]); a12 = array(y[A,0]-y[C,0]); a13 = array(y[A,0]-y[D,0]) + a21 = array(y[A,1]-y[B,1]); a22 = array(y[A,1]-y[C,1]); a23 = array(y[A,1]-y[D,1]) + a31 = array(y[A,2]-y[B,2]); a32 = array(y[A,2]-y[C,2]); a33 = array(y[A,2]-y[D,2]) + + return abs(a11*a22*a33 + a12*a23*a31 + a13*a21*a32 - a31*a22*a13 - a32*a23*a11 - a33*a21*a12) + + +def getCellVolume(X,Y,Z): + + m = array(shape(X))-1 + y = hstack3(mkvc(X),mkvc(Y),mkvc(Z)) + + i = int64(linspace(0,m[0]-1,m[0])) + j = int64(linspace(0,m[1]-1,m[1])) + k = int64(linspace(0,m[2]-1,m[2])) + + ii,jj,kk = ndgrid(i,j,k) + ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) + + + I = int64(sub2ind(m,hstack3(ii,jj,kk))) + A = int64(sub2ind(m+1,hstack3(ii,jj,kk))) + B = int64(sub2ind(m+1,hstack3(ii,jj+1,kk))) + C = int64(sub2ind(m+1,hstack3(ii+1,jj+1,kk))) + D = int64(sub2ind(m+1,hstack3(ii+1,jj,kk))) + E = int64(sub2ind(m+1,hstack3(ii,jj,kk+1))) + F = int64(sub2ind(m+1,hstack3(ii,jj+1,kk+1))) + G = int64(sub2ind(m+1,hstack3(ii+1,jj+1,kk+1))) + H = int64(sub2ind(m+1,hstack3(ii+1,jj,kk+1))) + + v1 = volTetra(y,m,I,A,B,D,E) + v2 = volTetra(y,m,I,B,E,F,G) + v3 = volTetra(y,m,I,B,D,E,G) + v4 = volTetra(y,m,I,B,C,D,G) + v5 = volTetra(y,m,I,D,E,G,H) + + v = 1.0/6.0 * ( v1 + v2 + v3 + v4 + v5 ) + return v.flatten() + + +if __name__ == '__main__': + + X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) + Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 + X[2,2,2] = 2.5; X[0,0,0] = -0.5 + + v = getCellVolume(X,Y,Z) \ No newline at end of file diff --git a/code/getDiffOps.py b/code/getDiffOps.py new file mode 100644 index 00000000..40f8239e --- /dev/null +++ b/code/getDiffOps.py @@ -0,0 +1,103 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from numpy import * +from getEdgeTangent import * +from getCellVolume import getCellVolume +from getFaceNormals import getFaceNormals + + +#============= Face DIV =========================== +def getDivMatrix(X,Y,Z): + + n = array(shape(X))-1 + n1 = n[0]; n2 = n[1]; n3 = n[2] + + n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) + + area = hstack((hstack((mkvc(area1),mkvc(area2))),mkvc(area3))) + S = sdiag(area) + V = getCellVolume(X,Y,Z) + + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3),speye(n2),d1) + D2 = kron3(speye(n3),d2,speye(n1)) + D3 = kron3(d3,speye(n2),speye(n1)) + + # divergence on faces + D = appendRight3(D1, D2, D3) + + return sdiag(1/V)*D*S + + #============= Edge CURL =========================== + +def getCurlMatrix(X,Y,Z): + + n = array(shape(X))-1 + n1 = n[0]; n2 = n[1]; n3 = n[2] + + d1 = ddx(n1); d2 = ddx(n2); d3 = ddx(n3) + # derivatives on x-edge variables + D32 = kron3(d3,speye(n2),speye(n1+1)) + D23 = kron3(speye(n3),d2,speye(n1+1)) + D31 = kron3(d3,speye(n2+1),speye(n1)) + D13 = kron3(speye(n3),speye(n2+1),d1) + D21 = kron3(speye(n3+1),d2,speye(n1)) + D12 = kron3(speye(n3+1),speye(n2),d1) + + O1 = spzeros(shape(D32)[0],shape(D31)[1]) + O2 = spzeros(shape(D31)[0],shape(D32)[1]) + O3 = spzeros(shape(D21)[0],shape(D13)[1]) + + CURL = appendBottom3( + appendRight3(O1, -D32, D23), + appendRight3(D31, O2, -D13), + appendRight3(-D21, D12, O3)) + + # scale for non-uniform mesh + e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) + n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) + + area = hstack((hstack((mkvc(area1),mkvc(area2))),mkvc(area3))) + S = sdiag(1/area) + lngth = hstack((hstack((mkvc(norme1),mkvc(norme2))),mkvc(norme3))) + L = sdiag(lngth) + + return S*(CURL*L) + +#============= Nodal Gradients =========================== +def getNodalGradient(X,Y,Z): + + n = array(shape(X))-1 + n1 = n[0]; n2 = n[1]; n3 = n[2] + + D1 = kron3(speye(n3+1),speye(n2+1),ddx(n1)) + D2 = kron3(speye(n3+1),ddx(n2),speye(n1+1)) + D3 = kron3(ddx(n3),speye(n2+1),speye(n1+1)) + + # topological gradient + GRAD = appendBottom3(D1,D2,D3) + + # scale for non-uniform mesh + e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) + lngth = hstack((hstack((mkvc(norme1),mkvc(norme2))),mkvc(norme3))) + L = sdiag(1/lngth) + + return L*GRAD + + +if __name__ == '__main__': + + X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) + Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 + X[2,2,2] = 2.5; X[0,0,0] = -0.5 + sig = ones([2,2,2]) + C = getCurlMatrix(X,Y,Z) + + G = getNodalGradient(X,Y,Z) + + tt = C*G + print(tt) \ No newline at end of file diff --git a/code/getEdgeInnerProduct.py b/code/getEdgeInnerProduct.py new file mode 100644 index 00000000..9391b425 --- /dev/null +++ b/code/getEdgeInnerProduct.py @@ -0,0 +1,214 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from sputils import * +from numpy import * +from getEdgeTangent import * +from inv3X3BlockDiagonal import * +from getCellVolume import getCellVolume + +# [A] = getEdgeInnerProduct(X,Y,Z,sigma) +# + +# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) +# / / +# / / | +# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) +# / / | +# / / | +# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) +# | | | +# | | node(i+1,j+1,k+1) +# | | / +# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) +# | | / +# | | / +# | |/ +# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + +# no | node | e1 | e2 | e3 +# 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k +# 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k +# 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k +# 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k +# 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k +# 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k +# 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k +# 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k + + +def subarray(T,i1,i2,i3): + return take(take(take(T,i1,0),i2,1),i3,2) + + +def getEdgeInnerProduct(X,Y,Z,sigma): + + m = array(shape(X))-1 + nc = prod(m) + + me1 = m + array([0, 1, 1]); ne1 = prod(me1) + me2 = m + array([1, 0, 1]); ne2 = prod(me2) + me3 = m + array([1, 1, 0]); ne3 = prod(me3) + + e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) + + i = int64(linspace(0,m[0]-1,m[0])) + j = int64(linspace(0,m[1]-1,m[1])) + k = int64(linspace(0,m[2]-1,m[2])) + + ii,jj,kk = ndgrid(i,j,k) + ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) + + ## -------- + # no | node | e1 | e2 | e3 + # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + ind1 = sub2ind(me1,hstack3(ii,jj,kk)) + ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 + ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT000 = inv3X3BlockDiagonal(subarray(e1x,i,j,k) , subarray(e1y,i,j,k), subarray(e1z,i,j,k), + subarray(e2x,i,j,k) , subarray(e2y,i,j,k), subarray(e2z,i,j,k) , + subarray(e3x,i,j,k) , subarray(e3y,i,j,k), subarray(e3z,i,j,k) ) + + ## -------- + # no | node | e1 | e2 | e3 + # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k + ind1 = sub2ind(me1,hstack3(ii,jj,kk)) + ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 + ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT100 = inv3X3BlockDiagonal(subarray(e1x,i,j,k), subarray(e1y,i,j,k), subarray(e1z,i,j,k), + subarray(e2x,i+1,j,k), subarray(e2y,i+1,j,k), subarray(e2z,i+1,j,k), + subarray(e3x,i+1,j,k) , subarray(e3y,i+1,j,k), subarray(e3z,i+1,j,k)) + + ## -------- + # no | node | e1 | e2 | e3 + # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) + ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 + ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT010 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) , subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , + subarray(e2x,i,j,k) , subarray(e2y,i,j,k) , subarray(e2z,i,j,k) , + subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) ,subarray( e3z,i,j+1,k) ) + + ## -------- + # no | node | e1 | e2 | e3 + # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) + ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 + ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT110 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) ,subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , + subarray(e2x,i+1,j,k) ,subarray(e2y,i+1,j,k) , subarray(e2z,i+1,j,k), + subarray(e3x,i+1,j+1,k) ,subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) + + ###### + + ## -------- + # no | node | e1 | e2 | e3 + # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k + ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) + ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 + ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT001 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1) ,subarray(e1y,i,j,k+1) , subarray(e1z,i,j,k+1) , + subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , + subarray(e3x,i,j,k) , subarray(e3y,i,j,k) , subarray(e3z,i,j,k) ) + + ## -------- + # no | node | e1 | e2 | e3 + # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 + ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) + ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 + ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT101 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1), subarray(e1y,i,j,k+1), subarray(e1z,i,j,k+1) , + subarray(e2x,i+1,j,k+1), subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , + subarray(e3x,i+1,j,k), subarray(e3y,i+1,j,k) , subarray(e3z,i+1,j,k) ) + + ## -------- + # no | node | e1 | e2 | e3 + # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) + ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 + ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT011 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , + subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , + subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) , subarray(e3z,i,j+1,k) ) + + ## -------- + # no | node | e1 | e2 | e3 + # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) + ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 + ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + invT111 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , + subarray(e2x,i+1,j,k+1) , subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , + subarray(e3x,i+1,j+1,k) , subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) + + # Cell volume + v = mkvc(getCellVolume(X,Y,Z)) #mkvc(getVolume(X,Y,Z)) + vsig = v*mkvc(sigma) + v3 = vstack((vstack((vsig,vsig)),vsig)) + v3 = v3.flatten() + + V = sdiag(v3) + + A = P000.T*invT000.T*V*invT000*P000 + P001.T*invT001.T*V*invT001*P001 + P010.T*invT010.T*V*invT010*P010 + P011.T*invT011.T*V*invT011*P011 + P100.T*invT100.T*V*invT100*P100 + P101.T*invT101.T*V*invT101*P101 + P110.T*invT110.T*V*invT110*P110 + P111.T*invT111.T*V*invT111*P111 + + A = 0.125*A + + return A + + +if __name__ == '__main__': + + X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) + Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 + X[2,2,2] = 2.5; X[0,0,0] = -0.5 + sig = ones([2,2,2]) + A = getEdgeInnerProduct(X,Y,Z,sig) \ No newline at end of file diff --git a/code/getEdgeTangent.py b/code/getEdgeTangent.py new file mode 100644 index 00000000..a8426df3 --- /dev/null +++ b/code/getEdgeTangent.py @@ -0,0 +1,60 @@ +from numpy import * +from utils import diff + +#function[t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,normt1,normt2,normt3] = getEdgeTangent(X,Y,Z) +#%[t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,normt1,normt2,normt3] = getEdgeTangent(X,Y,Z) +#% +#% node(i,j,k+1) ------ edgt2(i,j,k+1) ----- node(i,j+1,k+1) +#% / / +#% / / | +#% edgt3(i,j,k) fact1(i,j,k) edgt3(i,j+1,k) +#% / / | +#% / / | +#% node(i,j,k) ------ edgt2(i,j,k) ----- node(i,j+1,k) +#% | | | +#% | | node(i+1,j+1,k+1) +#% | | / +#% edgt1(i,j,k) fact3(i,j,k) edgt1(i,j+1.k) +#% | | / +#% | | / +#% | |/ +#% node(i+1,j,k) ------ edgt2(i+1,j,k) ----- node(i+1,j+1,k) + + +def getEdgeTangent(X, Y, Z): + + t1x = diff(X, 1) + t1y = diff(Y, 1) + t1z = diff(Z, 1) + + normt1 = sqrt(t1x**2+t1y**2+t1z**2) + t1x = t1x/normt1 + t1y = t1y/normt1 + t1z = t1z/normt1 + + t2x = diff(X, 2) + t2y = diff(Y, 2) + t2z = diff(Z, 2) + normt2 = sqrt(t2x**2 + t2y**2 + t2z**2) + t2x = t2x/normt2 + t2y = t2y/normt2 + t2z = t2z/normt2 + + t3x = diff(X, 3) + t3y = diff(Y, 3) + t3z = diff(Z, 3) + normt3 = sqrt(t3x**2+t3y**2+t3z**2) + t3x = t3x/normt3 + t3y = t3y/normt3 + t3z = t3z/normt3 + + # print t3x + + return (t1x, t1y, t1z, t2x, t2y, t2z, t3x, t3y, t3z, normt1, normt2, normt3) + + +if __name__ == '__main__': + + X, Y, Z = mgrid[0:4, 0:5, 0:6] + + t = getEdgeTangent(X, Y, Z) diff --git a/code/getFaceInnerProduct.py b/code/getFaceInnerProduct.py new file mode 100644 index 00000000..2870eb88 --- /dev/null +++ b/code/getFaceInnerProduct.py @@ -0,0 +1,86 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from numpy import * +from getEdgeTangent import * +from inv3X3BlockDiagonal import * +from getCellVolume import getCellVolume +from getFaceNormals import getFaceNormals + + +#----------------------- +def subarray(T,i1,i2,i3): + return take(take(take(T,i1,0),i2,1),i3,2) + +#----------------------- + +def getFaceInnerProduct(X,Y,Z,sigma): + + m = array(shape(X))-1 + nc = prod(m) + mf1 = m+[1, 0, 0] + mf2 = m+[0, 1, 0] + mf3 = m+[0, 0, 1] + + nf1 = prod(m+[1, 0, 0]) + nf2 = prod(m+[0, 1, 0]) + nf3 = prod(m+[0, 0, 1]) + + # compute the normals + n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) + + i = int64(linspace(0,m[0]-1,m[0])) + j = int64(linspace(0,m[1]-1,m[1])) + k = int64(linspace(0,m[2]-1,m[2])) + + ii,jj,kk = ndgrid(i,j,k) + ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) + + ind1 = sub2ind(mf1,hstack3(ii,jj,kk)) + ind2 = sub2ind(mf2,hstack3(ii,jj,kk)) + nf1 + ind3 = sub2ind(mf3,hstack3(ii,jj,kk)) + nf1 + nf2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P1 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,nf1+nf2+nf3)).tocsr() + + ind1 = sub2ind(mf1,hstack3(ii+1,jj,kk)) + ind2 = sub2ind(mf2,hstack3(ii,jj+1,kk)) + nf1 + ind3 = sub2ind(mf3,hstack3(ii,jj,kk+1)) + nf1 + nf2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P2 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,nf1+nf2+nf3)).tocsr() + + + invN1 = inv3X3BlockDiagonal(subarray(n1x,i,j,k) , subarray(n1y,i,j,k), subarray(n1z,i,j,k), + subarray(n2x,i,j,k) , subarray(n2y,i,j,k), subarray(n2z,i,j,k), + subarray(n3x,i,j,k) , subarray(n3y,i,j,k), subarray(n3z,i,j,k) ) + + + invN2 = inv3X3BlockDiagonal(subarray(n1x,i+1,j,k) , subarray(n1y,i+1,j,k), subarray(n1z,i+1,j,k), + subarray(n2x,i,j+1,k) , subarray(n2y,i,j+1,k), subarray(n2z,i,j+1,k), + subarray(n3x,i,j,k+1) , subarray(n3y,i,j,k+1), subarray(n3z,i,j,k+1) ) + + # Cell volume + v = mkvc(getCellVolume(X,Y,Z)) #mkvc(getVolume(X,Y,Z)) + vsig = v*mkvc(sigma) + v3 = vstack((vstack((vsig,vsig)),vsig)) + v3 = v3.flatten() + + V = sdiag(v3) + + return (P1.T*invN1.T*V*invN1*P1 + P2.T*invN2.T*V*invN2*P2)/2.0 + + +if __name__ == '__main__': + + X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) + Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 + X[2,2,2] = 2.5; X[0,0,0] = -0.5 + sigma = ones([2,2,2]) + A = getFaceInnerProduct(X,Y,Z,sigma) + print(A) \ No newline at end of file diff --git a/code/getFaceNormals.py b/code/getFaceNormals.py new file mode 100644 index 00000000..2038a301 --- /dev/null +++ b/code/getFaceNormals.py @@ -0,0 +1,73 @@ +from numpy import * +from utils import * + + +def getFaceNormals(X, Y, Z): +# compute the x normals + d1xp = diffp(X,2,3) + d1yp = diffp(Y,2,3) + d1zp = diffp(Z,2,3) + + d1xm = diffm(X,3,2) + d1ym = diffm(Y,3,2) + d1zm = diffm(Z,3,2) + + # normals + n1x = d1yp*d1zm - d1zp*d1ym + n1y = d1zp*d1xm - d1xp*d1zm + n1z = d1xp*d1ym - d1yp*d1xm + normn1 = sqrt(n1x**2 + n1y**2 + n1z**2) + n1x = n1x / normn1; + n1y = n1y / normn1; + n1z = n1z / normn1; + + area1 = normn1/2 + + + # compute the y normals + d2xp = diffp(X,1,3) + d2yp = diffp(Y,1,3) + d2zp = diffp(Z,1,3) + + d2xm = diffm(X,1,3) + d2ym = diffm(Y,1,3) + d2zm = diffm(Z,1,3) + + # normals + n2x = d2yp*d2zm - d2zp*d2ym + n2y = d2zp*d2xm - d2xp*d2zm + n2z = d2xp*d2ym - d2yp*d2xm + normn2 = sqrt(n2x**2 + n2y**2 + n2z**2) + n2x = n2x / normn2 + n2y = n2y / normn2 + n2z = n2z / normn2 + + area2 = normn2/2 + + # compute the z normals + d3xp = diffp(X,1,2) + d3yp = diffp(Y,1,2) + d3zp = diffp(Z,1,2) + + d3xm = diffm(X,2,1) + d3ym = diffm(Y,2,1) + d3zm = diffm(Z,2,1) + + # normals + n3x = d3yp*d3zm - d3zp*d3ym + n3y = d3zp*d3xm - d3xp*d3zm + n3z = d3xp*d3ym - d3yp*d3xm; + normn3 = sqrt(n3x**2 + n3y**2 + n3z**2); + n3x = n3x / normn3; + n3y = n3y / normn3; + n3z = n3z / normn3; + + area3 = normn3/2; + + return (n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3) + +if __name__ == '__main__': + + X, Y, Z = mgrid[0:4, 0:5, 0:6] + + t = getFaceNormals(X, Y, Z) diff --git a/code/getVolume.py b/code/getVolume.py new file mode 100644 index 00000000..3b4cd250 --- /dev/null +++ b/code/getVolume.py @@ -0,0 +1,34 @@ +from numpy import * +from utils import diff, ave + + +def getVolume(X,Y,Z): + + # compute edge vectors + t1x = ave(ave(diff(X, 1),2),3) + t1y = ave(ave(diff(Y, 1),2),3) + t1z = ave(ave(diff(Z, 1),2),3) + + t2x = ave(ave(diff(X, 2),1),3) + t2y = ave(ave(diff(Y, 2),1),3) + t2z = ave(ave(diff(Z, 2),1),3) + + t3x = ave(ave(diff(X, 3),1),2) + t3y = ave(ave(diff(Y, 3),1),2) + t3z = ave(ave(diff(Z, 3),1),2) + + # v = [t1x t1y t1z][i j k] + # [t2x t2y t2z] + # [t3x t3y t3z] + + v = t1x*(t2y*t3z - t2z*t3y) - t1y*(t2x*t3z - t2z*t3x) + t1z*(t2x*t3y-t2y*t3x) + + return v + + +if __name__ == '__main__': + + X, Y, Z = mgrid[0:4, 0:5, 0:6] + X = (1.0*X)/2 + v = getVolume(X, Y, Z) + print v \ No newline at end of file diff --git a/code/inv3X3BlockDiagonal.py b/code/inv3X3BlockDiagonal.py new file mode 100644 index 00000000..cf523ddd --- /dev/null +++ b/code/inv3X3BlockDiagonal.py @@ -0,0 +1,37 @@ +from scipy.sparse import linalg +from utils import * +from sputils import * + + +def inv3X3BlockDiagonal(a11,a12,a13,a21,a22,a23,a31,a32,a33): + + a11 = mkvc(a11) + a12 = mkvc(a12) + a13 = mkvc(a13) + a21 = mkvc(a21) + a22 = mkvc(a22) + a23 = mkvc(a23) + a31 = mkvc(a31) + a32 = mkvc(a32) + a33 = mkvc(a33) + + detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 + + b11 = (a22*a33 - a23*a32)/detA + b12 = -(a12*a33 - a13*a32)/detA + b13 = (a12*a23 - a13*a22)/detA + + b21 = (a31*a23 - a21*a33)/detA + b22 = -(a31*a13 - a11*a33)/detA + b23 = (a21*a13 - a11*a23)/detA + + b31 = -(a31*a22 - a21*a32)/detA + b32 = (a31*a12 - a11*a32)/detA + b33 = -(a21*a12 - a11*a22)/detA + + B = appendBottom3( + appendRight3(sdiag(b11), sdiag(b12), sdiag(b13)), + appendRight3(sdiag(b21), sdiag(b22), sdiag(b23)), + appendRight3(sdiag(b31), sdiag(b32), sdiag(b33))) + + return B \ No newline at end of file diff --git a/code/meshUtils.py b/code/meshUtils.py new file mode 100644 index 00000000..fbf5cc30 --- /dev/null +++ b/code/meshUtils.py @@ -0,0 +1,101 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from numpy import * + +#----- Cell Centers from Nodal locations ----- +def getCellCenterFromNodal(X,Y,Z): + + XC = 1.0/8.0 * (X[0:-1,0:-1,0:-1] + X[1:,0:-1,0:-1] + X[0:-1,1:,0:-1] + X[1:,1:,0:-1] + + X[0:-1,0:-1,1:] + X[1:,0:-1,1:] + X[0:-1,1:,1:] + X[1:,1:,1:]) + + YC = 1.0/8.0 * (Y[0:-1,0:-1,0:-1] + Y[1:,0:-1,0:-1] + Y[0:-1,1:,0:-1] + Y[1:,1:,0:-1] + + Y[0:-1,0:-1,1:] + Y[1:,0:-1,1:] + Y[0:-1,1:,1:] + Y[1:,1:,1:]) + + ZC = 1.0/8.0 * (Z[0:-1,0:-1,0:-1] + Z[1:,0:-1,0:-1] + Z[0:-1,1:,0:-1] + Z[1:,1:,0:-1] + + Z[0:-1,0:-1,1:] + Z[1:,0:-1,1:] + Z[0:-1,1:,1:] + Z[1:,1:,1:]) + + return (XC,YC,ZC) + +#----- Edges from Nodal locations ----- + +def getEdgesFromNodal(X,Y,Z): +# +# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) +# / / +# / / | +# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) +# / / | +# / / | +# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) +# | | | +# | | node(i+1,j+1,k+1) +# | | / +# edge1(i,j,k) face3(i,j,k) edge1(i,j+1.k) +# | | / +# | | / +# | |/ +# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + XE1 = (X[1:,:,:]+X[0:-1,:,:])/2.0 + YE1 = (Y[1:,:,:]+Y[0:-1,:,:])/2.0 + ZE1 = (Z[1:,:,:]+Z[0:-1,:,:])/2.0 + + XE2 = (X[:,1:,:]+X[:,0:-1,:])/2.0 + YE2 = (Y[:,1:,:]+Y[:,0:-1,:])/2.0 + ZE2 = (Z[:,1:,:]+Z[:,0:-1,:])/2.0 + + XE3 = (X[:,:,1:]+X[:,:,0:-1])/2.0 + YE3 = (Y[:,:,1:]+Y[:,:,0:-1])/2.0 + ZE3 = (Z[:,:,1:]+Z[:,:,0:-1])/2.0 + + return (XE1,YE1,ZE1,XE2,YE2,ZE2,XE3,YE3,ZE3) + + #-- Get faces from nodal -- + +def getFacesFromNodal(X,Y,Z): + + XF1 = 1.0/4.0*(X[:,0:-1,0:-1]+X[:,1:,0:-1]+X[:,0:-1,1:]+X[:,1:,1:]) + YF1 = 1.0/4.0*(Y[:,0:-1,0:-1]+Y[:,1:,0:-1]+Y[:,0:-1,1:]+Y[:,1:,1:]) + ZF1 = 1.0/4.0*(Z[:,0:-1,0:-1]+Z[:,1:,0:-1]+Z[:,0:-1,1:]+Z[:,1:,1:]) + + XF2 = 1.0/4.0*(X[0:-1,:,0:-1]+X[1:,:,0:-1]+X[0:-1,:,1:]+X[1:,:,1:]) + YF2 = 1.0/4.0*(Y[0:-1,:,0:-1]+Y[1:,:,0:-1]+Y[0:-1,:,1:]+Y[1:,:,1:]) + ZF2 = 1.0/4.0*(Z[0:-1,:,0:-1]+Z[1:,:,0:-1]+Z[0:-1,:,1:]+Z[1:,:,1:]) + + XF3 = 1.0/4.0*(X[0:-1,0:-1,:]+X[1:,0:-1,:]+X[0:-1,1:,:]+X[1:,1:,:]) + YF3 = 1.0/4.0*(Y[0:-1,0:-1,:]+Y[1:,0:-1,:]+Y[0:-1,1:,:]+Y[1:,1:,:]) + ZF3 = 1.0/4.0*(Z[0:-1,0:-1,:]+Z[1:,0:-1,:]+Z[0:-1,1:,:]+Z[1:,1:,:]) + + return (XF1,YF1,ZF1,XF2,YF2,ZF2,XF3,YF3,ZF3) + + #-- Project Edge vector field + +def projectEdgeVectorField(EV1,EV2,EV3,X,Y,Z): + + t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,nrm1,nrm2,nrm3 = getEdgeTangent(X,Y,Z) + + + E1 = EV1[:,0]*mkvc(t1x) + EV1[:,1]*mkvc(t1y) + EV1[:,2]*mkvc(t1z) + E2 = EV2[:,0]*mkvc(t2x) + EV2[:,1]*mkvc(t2y) + EV2[:,2]*mkvc(t2z) + E3 = EV3[:,0]*mkvc(t3x) + EV3[:,1]*mkvc(t3y) + EV3[:,2]*mkvc(t3z) + + return hstack((hstack((mkvc(E1),mkvc(E2))),mkvc(E3))) + + +#-- Prolect Face vector field + +def projectFaceVectorField(FV1,FV2,FV3,X,Y,Z): + + n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,ar1,ar2,ar3 = getFaceNormals(X,Y,Z) + + F1 = FV1[:,0]*mkvc(n1x) + FV1[:,1]*mkvc(n1y) + FV1[:,2]*mkvc(n1z) + F2 = FV2[:,0]*mkvc(n2x) + FV2[:,1]*mkvc(n2y) + FV2[:,2]*mkvc(n2z) + F3 = FV3[:,0]*mkvc(n3x) + FV3[:,1]*mkvc(n3y) + FV3[:,2]*mkvc(n3z) + + return hstack((hstack((mkvc(F1),mkvc(F2))),mkvc(F3))) + + + + \ No newline at end of file diff --git a/code/ndgrid.py b/code/ndgrid.py new file mode 100644 index 00000000..d051db8f --- /dev/null +++ b/code/ndgrid.py @@ -0,0 +1,29 @@ +from numpy import * + +def ndgrid(x,y,z): + + n1 = size(x) + n2 = size(y) + n3 = size(z) + X = zeros([n1,n2,n3]) + Y = zeros([n1,n2,n3]) + Z = zeros([n1,n2,n3]) + for i in range(0, n2): + for j in range(0,n3): + X[:,i,j] = x + + for i in range(0, n1): + for j in range(0,n3): + Y[i,:,j] = y + + for i in range(0, n1): + for j in range(0,n2): + Z[i,j,:] = z + + + return (X,Y,Z) + + +if __name__ == '__main__': + + X = ndgrid([1,2,3],[2,4,5,6],[4,6,7,8]) diff --git a/code/sputils.py b/code/sputils.py new file mode 100644 index 00000000..d5a83145 --- /dev/null +++ b/code/sputils.py @@ -0,0 +1,67 @@ +from scipy.sparse import linalg +from scipy import sparse +from numpy import * + + +#======== Define 1D derivatives ============= +def ddx(n): + return sparse.spdiags(-ones(n),0,n,n+1) + sparse.spdiags(ones(n+1),1,n,n+1) + +#======== Define 1D average ============= +def av(n): + return 0.5*(sparse.spdiags(ones(n+1),0,n,n+1) + sparse.spdiags(ones(n+1),1,n,n+1)) + +#======== Diagonal matrix ============= +def sdiag(h): + return sparse.spdiags(h,0,size(h),size(h)) + +#======== sparse identity ============= +def speye(n): + return sparse.spdiags(ones(n),0,n,n) + +#======== two kron prods ============= +def kron3(A,B,C): + return sparse.kron(sparse.kron(A,B),C) + +#======== append on bottom ============= +def appendBottom(A,B): + C = sparse.vstack((A,B)) + C = C.tocsr() + return C + +#======== append on bottom ============= +def appendBottom3(A,B,C): + C = appendBottom(appendBottom(A,B),C) + C = C.tocsr() + return C + +#======== append on right ============= +def appendRight(A,B): + C = sparse.hstack((A,B)) + C = C.tocsr() + return C + +#======== append on right ============= +def appendRight3(A,B,C): + C = appendRight(appendRight(A,B),C) + C = C.tocsr() + return C + +#======== blockdigonal ============= +def blkDiag(A,B): + O12 = sparse.coo_matrix((shape(A)[0],shape(B)[1])) + O21 = sparse.coo_matrix((shape(B)[0],shape(A)[1])) + C = sparse.vstack((sparse.hstack((A,O12)),sparse.hstack((O21,B)))) + C = C.tocsr() + return C + +#======== blockdigonal 3 ============= +def blkDiag3(A,B,C): + ABC = blkDiag(blkDiag(A,B),C) + ABC = ABC.tocsr() + return ABC + +#======== spzeros ============= +def spzeros(n1,n2): + return sparse.coo_matrix((n1,n2)) + diff --git a/code/tools.py b/code/tools.py new file mode 100644 index 00000000..132962a7 --- /dev/null +++ b/code/tools.py @@ -0,0 +1,222 @@ +import numpy; +import cmath; +import math; + +def prod(arg): + """ returns the product of elements in arg. + arg can be list, tuple, set, and array with numerical values. """ + ret = 1; + for i in range(0,len(arg)): + ret = ret * arg[i]; + return ret; + + +def allIndices(dim): + """ From the given shape of dimenions (e.g. (2,3,4)), + generate a numpy.array of all, sorted indices.""" + + length = len(dim); + + sub = numpy.arange(dim[length-1]).reshape(dim[length-1],1); + + for d in range(length-2, -1, -1): + for i in range(0, dim[d]): + temp = numpy.ndarray([len(sub), 1]); + temp.fill(i); + temp = numpy.concatenate((temp,sub), axis=1); + if(i == 0): + newsub = temp; + else: + newsub = numpy.concatenate((newsub, temp), axis = 0); + + sub = newsub; + + return sub; + +def find(nda, obj): + """returns the index of the obj in the given nda(ndarray, list, or tuple)""" + for i in range(0, len(nda)): + if(nda[i] == obj): + return i; + return -1; + + +def notin(n, vector): + """returns a numpy.array object that contains + elements in [0,1, ... n-1] but not in vector.""" + ret = numpy.arange(n).tolist(); + for i in vector: + if (0 <= i and i < n): + ret.remove(i); + return numpy.array(ret); + + + +def getelts(nda, indices): + """From the given nda(ndarray, list, or tuple), returns the list located at the given indices""" + ret = []; + for i in indices: + ret.extend([nda[i]]); + return numpy.array(ret); + +def sub2ind(shape, subs): + """ From the given shape, returns the index of the given subscript""" + revshp = list(shape); + revshp.reverse(); + mult = [1]; + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]); + mult.reverse(); + mult = numpy.array(mult).reshape(len(mult),1); + + idx = numpy.dot((subs) , (mult)); + return idx; + +def ind2sub(shape, ind): + """ From the given shape, returns the subscrips of the given index""" + revshp = []; + revshp.extend(shape); + revshp.reverse(); + mult = [1]; + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]); + mult.reverse(); + mult = numpy.array(mult).reshape(len(mult)); + + sub = []; + + for i in range(0,len(shape)): + sub.extend([math.floor(ind / mult[i])]); + ind = ind - (math.floor(ind/mult[i]) * mult[i]); + return sub; + +def tt_dimscehck(dims, N, M = None, exceptdims = False): + """Checks whether the specified dimensions are valid in a tensor of N-dimension. + If M is given, then it will also retuns an index for M multiplicands. + If exceptdims == True, then it will compute for the dimensions not specified.""" + + # if exceptdims is true + if(exceptdims): + dims = listdiff(range(0,N), dims); + + #check vals in between 0 and N-1 + for i in range(0, len(dims)): + if(dims[i] < 0 or dims[i] >= N): + raise ValueError("invalid dimensions specified"); + + # number of dimensions in dims + p = len(dims); + + sdims = []; + sdims.extend(dims); + sdims.sort(); + + #indices of the elements in the sorted array + sidx = []; + #table that denotes whether the index is used + table = numpy.ndarray([len(sdims)]); + table.fill(0); + + for i in range(0, len(sdims)): + for j in range(0, len(dims)): + if(sdims[i] == dims[j] and table[j] == 0): + sidx.extend([j]); + table[j] = 1; + break; + + if (M == None): + return sdims + + if(M > N): + raise ValueError("Cannot have more multiplicands than dimensions"); + + if(M != N and M != p): + raise ValueError("invalid number of multiplicands"); + + if(M == p): + vidx = sidx; + else: + vidx = sdims; + + return (sdims, vidx); + +def listtimes(list, c): + """multiplies the elements in the list by the given scalar value c""" + ret = [] + for i in range(0, len(list)): + ret.extend([list[i]]*c); + return ret; + +def listdiff(list1, list2): + """returns the list of elements that are in list 1 but not in list2""" + if(list1.__class__ == numpy.ndarray): + list1 = list1.tolist(); + if(list2.__class__ == numpy.ndarray): + list2 = list2.tolist(); + ret = [] + for i in range(0,len(list1)): + ok = true + for j in range(0, len(list2)): + if(list[i] == list[j]): + ok = false; + break; + if(ok): + ret.extend([list[i]]); + return ret; + + + +def tt_subscheck(subs): + """Check whether the given list of subscripts are valid. Used for sptensor""" + isOk = True; + if(subs.size == 0): + isOk = True; + + elif(subs.ndim != 2): + isOk = False; + + else: + for i in range(0, (subs.size / subs[0].size)): + for j in range(0, (subs[0].size)): + val = subs[i][j]; + if( cmath.isnan(val) or cmath.isinf(val) or val < 0 or val != round(val) ): + isOk = False; + + if(not isOk): + raise ValueError("Subscripts must be a matrix of non-negative integers"); + + return isOk; + + +def tt_valscheck(vals): + """Check whether the given list of values are valid. Used for sptensor""" + isOk = True; + + if(vals.size == 0): + isOk = True; + + elif(vals.ndim != 2 or vals[0].size != 1): + isOk = False; + + if(not isOk): + raise ValueError("values must be a column array"); + + return isOk; + +def tt_sizecheck(size): + """Check whether the given size is valid. Used for sptensor""" + size = numpy.array(size); + isOk = True; + + if(size.ndim != 1): + isOk = False; + else: + for i in range(0, len(size)): + val = size[i]; + if(cmath.isnan(val) or cmath.isinf(val) + or val <= 0 or val != round(val)): + isOk = False; + + if(not isOk): + raise ValueError("size must be a row vector of real positive integers"); + return isOk; diff --git a/code/utils.py b/code/utils.py new file mode 100644 index 00000000..ebd028e3 --- /dev/null +++ b/code/utils.py @@ -0,0 +1,124 @@ +from numpy import * + +def diff(A,d): + + end = -1 + if(d==1): + return A[1:,0:,0:] - A[0:end,0:,0:] + elif(d==2): + return A[0:,1:,0:] - A[0:,0:end,0:] + else: + return A[0:,0:,1:] - A[0:,0:,0:end] + #else: + # print('d must be 1,2 or 3') + + +def diffp(A, d1, d2): + end = -1 + if(d1 == 1 and d2 == 2 ): + return A[1:,1:, 0:] - A[0:end,0:end,0:] + elif(d1 == 1 and d2 == 3): + return A[1:,0:,1:] - A[0:end,0:,0:end] + else: + return A[0:,1:,1:] - A[0:,0:end,0:end] + + +def diffm(A, d1, d2): + end = -1 + if(d1 == 3 and d2 == 2 ): + return A[:,0:end,1:] - A[:,1:,0:end] + elif(d1 == 1 and d2 == 3): + return A[1:, :, 0:end] - A[0:end,:,1:] + elif(d1 == 2 and d2 == 1): + return A[0:end, 1:, :] - A[1:, 0:end, :] + else: + print('d must be 1,2 or 3') + +def ave(A,d): + + end = 0 + if(d==1): + return 0.5*(A[1:,:,:] + A[0:end-1,0:,:]) + elif(d==2): + return 0.5*(A[:,1:,:] + A[0:,0:end-1,:]) + elif(d==3): + return 0.5*(A[:,:,1:] + A[0:,0:,0:end-1]) + else: + print('d must be 1,2 or 3') + +def reshapeF(sp,d): + return reshape(sp,d,'F') + +def mkvc(A): + return reshape(A,[size(A),1],'F').flatten() + + +def ndgrid(x,y,z): + + n1 = size(x) + n2 = size(y) + n3 = size(z) + X = zeros([n1,n2,n3]) + Y = zeros([n1,n2,n3]) + Z = zeros([n1,n2,n3]) + for i in range(0, n2): + for j in range(0,n3): + X[:,i,j] = x + + for i in range(0, n1): + for j in range(0,n3): + Y[i,:,j] = y + + for i in range(0, n1): + for j in range(0,n2): + Z[i,j,:] = z + + + return (X,Y,Z) + + +def ind2sub(shape, ind): + # From the given shape, returns the subscrips of the given index + revshp = []; + revshp.extend(shape); + mult = [1]; + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]); + mult = array(mult).reshape(len(mult)); + + sub = []; + + for i in range(0,len(shape)): + sub.extend([math.floor(ind / mult[i])]); + ind = ind - (math.floor(ind/mult[i]) * mult[i]); + return sub; + +def sub2ind(shape, subs): + # From the given shape, returns the index of the given subscript + revshp = list(shape); + mult = [1]; + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]); + mult = array(mult).reshape(len(mult),1); + + idx = dot((subs) , (mult)); + return idx; + + +def mkmat(x): + return reshape(matrix(x),(size(x),1),'F') + +def hstack3(a,b,c): + a = mkvc(a); b = mkvc(b); c = mkvc(c) + a = mkmat(a); b = mkmat(b); c = mkmat(c) + return hstack((hstack((a,b)),c)) + + + + +if __name__ == '__main__': + + X, Y, Z = mgrid[0:4, 0:5, 0:6] + + t = ave(X, 1) + \ No newline at end of file diff --git a/code/zevel.py b/code/zevel.py new file mode 100644 index 00000000..c3e9ae2d --- /dev/null +++ b/code/zevel.py @@ -0,0 +1,119 @@ +#============= Nodal Gradients =========================== +def getNodalGradient(h1,h2,h3): + + n1 = size(h1) + n2 = size(h2) + n3 = size(h3) + D1 = kron3(speye(n3+1),speye(n2+1),ddx(n1)) + D2 = kron3(speye(n3+1),ddx(n2),speye(n1+1)) + D3 = kron3(ddx(n3),speye(n2+1),speye(n1+1)) + + # topological gradient + GRAD = appendBottom3(D1,D2,D3) + + # scale for non-uniform mesh + L = blkDiag3(kron3(speye(n3+1),speye(n2+1),sdiag(1/h1)), + kron3(speye(n3+1),sdiag(1/h2),speye(n1+1)), + kron3(sdiag(1/h3),speye(n2+1),speye(n1+1))) + + return L*GRAD + +#============= Edge CURL =========================== +def getCurlMatrix(h1,h2,h3): + + n1 = size(h1) + n2 = size(h2) + n3 = size(h3) + + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + # derivatives on x-edge variables + D32 = kron3(d3,speye(n2),speye(n1+1)) + D23 = kron3(speye(n3),d2,speye(n1+1)) + D31 = kron3(d3,speye(n2+1),speye(n1)) + D13 = kron3(speye(n3),speye(n2+1),d1) + D21 = kron3(speye(n3+1),d2,speye(n1)) + D12 = kron3(speye(n3+1),speye(n2),d1) + + O1 = spzeros(shape(D32)[0],shape(D31)[1]) + O2 = spzeros(shape(D31)[0],shape(D32)[1]) + O3 = spzeros(shape(D21)[0],shape(D13)[1]) + + CURL = appendBottom3( + appendRight3(O1, -D32, D23), + appendRight3(D31, O2, -D13), + appendRight3(-D21, D12, O3)) + + # scale for non-uniform mesh + F = blkDiag3(kron3(sdiag(1/h3),sdiag(1/h2),speye(n1+1)), + kron3(sdiag(1/h3),speye(n2+1),sdiag(1/h1)), + kron3(speye(n3+1),sdiag(1/h2),sdiag(1/h1))) + + L = blkDiag3(kron3(speye(n3+1),speye(n2+1),sdiag(h1)), + kron3(speye(n3+1),sdiag(h2),speye(n1+1)), + kron3(sdiag(h3),speye(n2+1),speye(n1+1))) + + + return F*(CURL*L) + +#============= Face DIV =========================== +def getDivMatrix(h1,h2,h3): + + n1 = size(h1) + n2 = size(h2) + n3 = size(h3) + + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3),speye(n2),d1) + D2 = kron3(speye(n3),d2,speye(n1)) + D3 = kron3(d3,speye(n2),speye(n1)) + + # divergence on faces + D = appendRight3(D1, D2, D3) + + # scale for non-uniform mesh + F = blkDiag3(kron3(sdiag(h3),sdiag(h2),speye(n1+1)), + kron3(sdiag(h3),speye(n2+1),sdiag(h1)), + kron3(speye(n3+1),sdiag(h2),sdiag(h1))) + + V = kron3(sdiag(1/h3),sdiag(1/h2),sdiag(1/h1)) + + return V*(D*F) + +#====== Face Averageing ================= +def getFaceAverage(n1,n2,n3): + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + Af = appendRight3(kron3(speye(n3),speye(n2),av1), + kron3(speye(n3),av2,speye(n1)), + kron3(av3,speye(n2),speye(n1))) + return Af + +#====== Edge Averageing ================= +def getEdgeAverage(n1,n2,n3): + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + Ae = appendRight3(kron3(av3,av2,speye(n1)), + kron3(av3,speye(n2),av1), + kron3(speye(n3),av2,av1)) + return Ae + +#====== Node Averageing ================= +def getNodeAverage(n1,n2,n3): + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + return kron3(av3,av2,av1) + + From 125144002120f41a9dcf5a2be088d65a0f2ee861 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 11 Jun 2013 16:18:15 +0200 Subject: [PATCH 002/359] Initial Cleanup of Code. No major changes. (duplicate code, and python conventions) --- code/MFDdriver.py | 29 +++--- code/getCellVolume.py | 78 ++++++++-------- code/getDiffOps.py | 137 +++++++++++++++-------------- code/getEdgeInnerProduct.py | 171 ++++++++++++++++++------------------ code/inv3X3BlockDiagonal.py | 19 ++-- code/meshUtils.py | 167 +++++++++++++++++------------------ code/ndgrid.py | 29 ------ code/sputils.py | 108 ++++++++++++----------- code/utils.py | 163 +++++++++++++++++----------------- 9 files changed, 436 insertions(+), 465 deletions(-) delete mode 100644 code/ndgrid.py diff --git a/code/MFDdriver.py b/code/MFDdriver.py index c0b8edb4..16d18fe3 100644 --- a/code/MFDdriver.py +++ b/code/MFDdriver.py @@ -1,25 +1,18 @@ -# from scipy.sparse import linalg -from numpy import * -#from numpy.linalg import * +import numpy as np from numpy.random import randn -from utils import * +from utils import ndgrid 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 * +from scipy.sparse.linalg import dsolve +from pylab import norm -n1 = 14 -n2 = 14 -n3 = 15 +n = np.array([14, 14, 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]) +X, Y, Z = ndgrid(*[np.linspace(0, 1, x) for x in n]) +sigma = 1e-2*np.ones(n-1) +sigma[:, :, (n[2]-1)/2:] = 1e-6 +mu = 4*np.pi*1e-7*np.ones(n-1) w = 10 CURL = getCurlMatrix(X, Y, Z) @@ -29,8 +22,8 @@ Me = getEdgeInnerProduct(X, Y, Z, sigma) A = CURL.T * Mf * CURL + 1j * w * Me -ne = shape(A) -b = matrix(randn(ne[0])).T +ne = np.shape(A) +b = np.matrix(randn(ne[0])).T # clean b DIVb = GRAD.T*b p = dsolve.spsolve(GRAD.T*GRAD, DIVb, use_umfpack=True).T diff --git a/code/getCellVolume.py b/code/getCellVolume.py index 95d01427..bb536842 100644 --- a/code/getCellVolume.py +++ b/code/getCellVolume.py @@ -1,58 +1,58 @@ -from scipy.sparse import linalg -from scipy import sparse from sputils import * from utils import * from sputils import * from numpy import * from getEdgeTangent import * -from inv3X3BlockDiagonal import * -def volTetra(y,m,I,A,B,C,D): - a11 = array(y[A,0]-y[B,0]); a12 = array(y[A,0]-y[C,0]); a13 = array(y[A,0]-y[D,0]) - a21 = array(y[A,1]-y[B,1]); a22 = array(y[A,1]-y[C,1]); a23 = array(y[A,1]-y[D,1]) - a31 = array(y[A,2]-y[B,2]); a32 = array(y[A,2]-y[C,2]); a33 = array(y[A,2]-y[D,2]) +def volTetra(y, m, I, A, B, C, D): + + a11 = array(y[A, 0]-y[B, 0]); a12 = array(y[A, 0]-y[C, 0]); a13 = array(y[A, 0]-y[D, 0]) + a21 = array(y[A, 1]-y[B, 1]); a22 = array(y[A, 1]-y[C, 1]); a23 = array(y[A, 1]-y[D, 1]) + a31 = array(y[A, 2]-y[B, 2]); a32 = array(y[A, 2]-y[C, 2]); a33 = array(y[A, 2]-y[D, 2]) return abs(a11*a22*a33 + a12*a23*a31 + a13*a21*a32 - a31*a22*a13 - a32*a23*a11 - a33*a21*a12) -def getCellVolume(X,Y,Z): +def getCellVolume(X, Y, Z): m = array(shape(X))-1 - y = hstack3(mkvc(X),mkvc(Y),mkvc(Z)) - - i = int64(linspace(0,m[0]-1,m[0])) - j = int64(linspace(0,m[1]-1,m[1])) - k = int64(linspace(0,m[2]-1,m[2])) - - ii,jj,kk = ndgrid(i,j,k) - ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) - - - I = int64(sub2ind(m,hstack3(ii,jj,kk))) - A = int64(sub2ind(m+1,hstack3(ii,jj,kk))) - B = int64(sub2ind(m+1,hstack3(ii,jj+1,kk))) - C = int64(sub2ind(m+1,hstack3(ii+1,jj+1,kk))) - D = int64(sub2ind(m+1,hstack3(ii+1,jj,kk))) - E = int64(sub2ind(m+1,hstack3(ii,jj,kk+1))) - F = int64(sub2ind(m+1,hstack3(ii,jj+1,kk+1))) - G = int64(sub2ind(m+1,hstack3(ii+1,jj+1,kk+1))) - H = int64(sub2ind(m+1,hstack3(ii+1,jj,kk+1))) - - v1 = volTetra(y,m,I,A,B,D,E) - v2 = volTetra(y,m,I,B,E,F,G) - v3 = volTetra(y,m,I,B,D,E,G) - v4 = volTetra(y,m,I,B,C,D,G) - v5 = volTetra(y,m,I,D,E,G,H) - - v = 1.0/6.0 * ( v1 + v2 + v3 + v4 + v5 ) + y = hstack3(mkvc(X), mkvc(Y), mkvc(Z)) + + i = int64(linspace(0, m[0]-1, m[0])) + j = int64(linspace(0, m[1]-1, m[1])) + k = int64(linspace(0, m[2]-1, m[2])) + + ii, jj, kk = ndgrid(i, j, k) + ii = mkvc(ii) + jj = mkvc(jj) + kk = mkvc(kk) + + I = int64(sub2ind(m, hstack3(ii, jj, kk))) + A = int64(sub2ind(m+1, hstack3(ii, jj, kk))) + B = int64(sub2ind(m+1, hstack3(ii, jj+1, kk))) + C = int64(sub2ind(m+1, hstack3(ii+1, jj+1, kk))) + D = int64(sub2ind(m+1, hstack3(ii+1, jj, kk))) + E = int64(sub2ind(m+1, hstack3(ii, jj, kk+1))) + F = int64(sub2ind(m+1, hstack3(ii, jj+1, kk+1))) + G = int64(sub2ind(m+1, hstack3(ii+1, jj+1, kk+1))) + H = int64(sub2ind(m+1, hstack3(ii+1, jj, kk+1))) + + v1 = volTetra(y, m, I, A, B, D, E) + v2 = volTetra(y, m, I, B, E, F, G) + v3 = volTetra(y, m, I, B, D, E, G) + v4 = volTetra(y, m, I, B, C, D, G) + v5 = volTetra(y, m, I, D, E, G, H) + + v = 1.0/6.0 * (v1 + v2 + v3 + v4 + v5) return v.flatten() if __name__ == '__main__': - X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) - Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 - X[2,2,2] = 2.5; X[0,0,0] = -0.5 + X, Y, Z = ndgrid(linspace(0, 2, 3), linspace(0, 2, 3), linspace(0, 2, 3)) + Z[2, 2, 2] = 2.5; Z[0, 0, 0] = -0.5 + X[2, 2, 2] = 2.5; X[0, 0, 0] = -0.5 - v = getCellVolume(X,Y,Z) \ No newline at end of file + v = getCellVolume(X, Y, Z) + print v diff --git a/code/getDiffOps.py b/code/getDiffOps.py index 40f8239e..dbb4e5b0 100644 --- a/code/getDiffOps.py +++ b/code/getDiffOps.py @@ -1,5 +1,3 @@ -from scipy.sparse import linalg -from scipy import sparse from sputils import * from utils import * from numpy import * @@ -8,96 +6,101 @@ from getCellVolume import getCellVolume from getFaceNormals import getFaceNormals -#============= Face DIV =========================== -def getDivMatrix(X,Y,Z): +def getDivMatrix(X, Y, Z): + """Face DIV""" n = array(shape(X))-1 - n1 = n[0]; n2 = n[1]; n3 = n[2] - - n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) - - area = hstack((hstack((mkvc(area1),mkvc(area2))),mkvc(area3))) - S = sdiag(area) - V = getCellVolume(X,Y,Z) - + n1 = n[0] + n2 = n[1] + n3 = n[2] + + n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, area1, area2, area3 = getFaceNormals(X, Y, Z) + + area = hstack((hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) + S = sdiag(area) + V = getCellVolume(X, Y, Z) + d1 = ddx(n1) d2 = ddx(n2) d3 = ddx(n3) - D1 = kron3(speye(n3),speye(n2),d1) - D2 = kron3(speye(n3),d2,speye(n1)) - D3 = kron3(d3,speye(n2),speye(n1)) - + D1 = kron3(speye(n3), speye(n2), d1) + D2 = kron3(speye(n3), d2, speye(n1)) + D3 = kron3(d3, speye(n2), speye(n1)) + # divergence on faces D = appendRight3(D1, D2, D3) - + return sdiag(1/V)*D*S - - #============= Edge CURL =========================== - -def getCurlMatrix(X,Y,Z): - + + +def getCurlMatrix(X, Y, Z): + """Edge CURL """ + n = array(shape(X))-1 n1 = n[0]; n2 = n[1]; n3 = n[2] d1 = ddx(n1); d2 = ddx(n2); d3 = ddx(n3) # derivatives on x-edge variables - D32 = kron3(d3,speye(n2),speye(n1+1)) - D23 = kron3(speye(n3),d2,speye(n1+1)) - D31 = kron3(d3,speye(n2+1),speye(n1)) - D13 = kron3(speye(n3),speye(n2+1),d1) - D21 = kron3(speye(n3+1),d2,speye(n1)) - D12 = kron3(speye(n3+1),speye(n2),d1) + D32 = kron3(d3, speye(n2), speye(n1+1)) + D23 = kron3(speye(n3), d2, speye(n1+1)) + D31 = kron3(d3, speye(n2+1), speye(n1)) + D13 = kron3(speye(n3), speye(n2+1), d1) + D21 = kron3(speye(n3+1), d2, speye(n1)) + D12 = kron3(speye(n3+1), speye(n2), d1) - O1 = spzeros(shape(D32)[0],shape(D31)[1]) - O2 = spzeros(shape(D31)[0],shape(D32)[1]) - O3 = spzeros(shape(D21)[0],shape(D13)[1]) + O1 = spzeros(shape(D32)[0], shape(D31)[1]) + O2 = spzeros(shape(D31)[0], shape(D32)[1]) + O3 = spzeros(shape(D21)[0], shape(D13)[1]) CURL = appendBottom3( appendRight3(O1, -D32, D23), appendRight3(D31, O2, -D13), appendRight3(-D21, D12, O3)) - - # scale for non-uniform mesh - e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) - n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) - - area = hstack((hstack((mkvc(area1),mkvc(area2))),mkvc(area3))) - S = sdiag(1/area) - lngth = hstack((hstack((mkvc(norme1),mkvc(norme2))),mkvc(norme3))) - L = sdiag(lngth) - - return S*(CURL*L) -#============= Nodal Gradients =========================== -def getNodalGradient(X,Y,Z): - + # scale for non-uniform mesh + e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, norme1, norme2, norme3 = getEdgeTangent(X, Y, Z) + n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, area1, area2, area3 = getFaceNormals(X, Y, Z) + + area = hstack((hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) + S = sdiag(1/area) + lngth = hstack((hstack((mkvc(norme1), mkvc(norme2))), mkvc(norme3))) + L = sdiag(lngth) + + return S*(CURL*L) + + +def getNodalGradient(X, Y, Z): + """Nodal Gradients""" + n = array(shape(X))-1 n1 = n[0]; n2 = n[1]; n3 = n[2] - D1 = kron3(speye(n3+1),speye(n2+1),ddx(n1)) - D2 = kron3(speye(n3+1),ddx(n2),speye(n1+1)) - D3 = kron3(ddx(n3),speye(n2+1),speye(n1+1)) - + D1 = kron3(speye(n3+1), speye(n2+1), ddx(n1)) + D2 = kron3(speye(n3+1), ddx(n2), speye(n1+1)) + D3 = kron3(ddx(n3), speye(n2+1), speye(n1+1)) + # topological gradient - GRAD = appendBottom3(D1,D2,D3) - + GRAD = appendBottom3(D1, D2, D3) + # scale for non-uniform mesh - e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) - lngth = hstack((hstack((mkvc(norme1),mkvc(norme2))),mkvc(norme3))) - L = sdiag(1/lngth) + e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, norme1, norme2, norme3 = getEdgeTangent(X, Y, Z) + lngth = hstack((hstack((mkvc(norme1), mkvc(norme2))), mkvc(norme3))) + L = sdiag(1/lngth) - return L*GRAD - - -if __name__ == '__main__': - - X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) - Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 - X[2,2,2] = 2.5; X[0,0,0] = -0.5 - sig = ones([2,2,2]) - C = getCurlMatrix(X,Y,Z) + return L*GRAD + + +if __name__ == '__main__': + + X, Y, Z = ndgrid(linspace(0, 2, 3), linspace(0, 2, 3), linspace(0, 2, 3)) + Z[2, 2, 2] = 2.5 + Z[0, 0, 0] = -0.5 + X[2, 2, 2] = 2.5 + X[0, 0, 0] = -0.5 + sig = ones([2, 2, 2]) + C = getCurlMatrix(X, Y, Z) + + G = getNodalGradient(X, Y, Z) - G = getNodalGradient(X,Y,Z) - tt = C*G - print(tt) \ No newline at end of file + print(tt) diff --git a/code/getEdgeInnerProduct.py b/code/getEdgeInnerProduct.py index 9391b425..776f31f7 100644 --- a/code/getEdgeInnerProduct.py +++ b/code/getEdgeInnerProduct.py @@ -8,203 +8,202 @@ from getEdgeTangent import * from inv3X3BlockDiagonal import * from getCellVolume import getCellVolume -# [A] = getEdgeInnerProduct(X,Y,Z,sigma) -# -# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) -# / / -# / / | -# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) -# / / | -# / / | -# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) -# | | | -# | | node(i+1,j+1,k+1) -# | | / -# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) -# | | / -# | | / -# | |/ -# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - -# no | node | e1 | e2 | e3 -# 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k -# 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k -# 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k -# 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k -# 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k -# 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k -# 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k -# 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k +def subarray(T, i1, i2, i3): + return take(take(take(T, i1, 0), i2, 1), i3, 2) -def subarray(T,i1,i2,i3): - return take(take(take(T,i1,0),i2,1),i3,2) - +def getEdgeInnerProduct(X, Y, Z, sigma): + """A = getEdgeInnerProduct(X, Y, Z, sigma) -def getEdgeInnerProduct(X,Y,Z,sigma): - m = array(shape(X))-1 + node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + / / + / / | + edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + / / | + / / | + node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + | | | + | | node(i+1,j+1,k+1) + | | / + edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) + | | / + | | / + | |/ + node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + no | node | e1 | e2 | e3 + 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k + 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k + 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k + 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k + 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k + 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k + 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k + """ + m = array(shape(X))-1 nc = prod(m) - + me1 = m + array([0, 1, 1]); ne1 = prod(me1) me2 = m + array([1, 0, 1]); ne2 = prod(me2) me3 = m + array([1, 1, 0]); ne3 = prod(me3) - + e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) - + i = int64(linspace(0,m[0]-1,m[0])) j = int64(linspace(0,m[1]-1,m[1])) k = int64(linspace(0,m[2]-1,m[2])) - - ii,jj,kk = ndgrid(i,j,k) + + ii,jj,kk = ndgrid(i,j,k) ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) - + ## -------- # no | node | e1 | e2 | e3 # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk)) + ind1 = sub2ind(me1,hstack3(ii,jj,kk)) ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT000 = inv3X3BlockDiagonal(subarray(e1x,i,j,k) , subarray(e1y,i,j,k), subarray(e1z,i,j,k), subarray(e2x,i,j,k) , subarray(e2y,i,j,k), subarray(e2z,i,j,k) , subarray(e3x,i,j,k) , subarray(e3y,i,j,k), subarray(e3z,i,j,k) ) - + ## -------- # no | node | e1 | e2 | e3 # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk)) + ind1 = sub2ind(me1,hstack3(ii,jj,kk)) ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT100 = inv3X3BlockDiagonal(subarray(e1x,i,j,k), subarray(e1y,i,j,k), subarray(e1z,i,j,k), subarray(e2x,i+1,j,k), subarray(e2y,i+1,j,k), subarray(e2z,i+1,j,k), subarray(e3x,i+1,j,k) , subarray(e3y,i+1,j,k), subarray(e3z,i+1,j,k)) - + ## -------- # no | node | e1 | e2 | e3 # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT010 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) , subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , subarray(e2x,i,j,k) , subarray(e2y,i,j,k) , subarray(e2z,i,j,k) , subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) ,subarray( e3z,i,j+1,k) ) - + ## -------- # no | node | e1 | e2 | e3 # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT110 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) ,subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , subarray(e2x,i+1,j,k) ,subarray(e2y,i+1,j,k) , subarray(e2z,i+1,j,k), subarray(e3x,i+1,j+1,k) ,subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) - + ###### - + ## -------- # no | node | e1 | e2 | e3 # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) + ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT001 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1) ,subarray(e1y,i,j,k+1) , subarray(e1z,i,j,k+1) , subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , subarray(e3x,i,j,k) , subarray(e3y,i,j,k) , subarray(e3z,i,j,k) ) - + ## -------- # no | node | e1 | e2 | e3 # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) + ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT101 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1), subarray(e1y,i,j,k+1), subarray(e1z,i,j,k+1) , subarray(e2x,i+1,j,k+1), subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , subarray(e3x,i+1,j,k), subarray(e3y,i+1,j,k) , subarray(e3z,i+1,j,k) ) - + ## -------- # no | node | e1 | e2 | e3 # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT011 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) , subarray(e3z,i,j+1,k) ) - + ## -------- # no | node | e1 | e2 | e3 # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) + ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + invT111 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , subarray(e2x,i+1,j,k+1) , subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , subarray(e3x,i+1,j+1,k) , subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) - + # Cell volume v = mkvc(getCellVolume(X,Y,Z)) #mkvc(getVolume(X,Y,Z)) vsig = v*mkvc(sigma) v3 = vstack((vstack((vsig,vsig)),vsig)) v3 = v3.flatten() - + V = sdiag(v3) - - A = P000.T*invT000.T*V*invT000*P000 + P001.T*invT001.T*V*invT001*P001 + P010.T*invT010.T*V*invT010*P010 + P011.T*invT011.T*V*invT011*P011 + P100.T*invT100.T*V*invT100*P100 + P101.T*invT101.T*V*invT101*P101 + P110.T*invT110.T*V*invT110*P110 + P111.T*invT111.T*V*invT111*P111 - + + A = P000.T*invT000.T*V*invT000*P000 + P001.T*invT001.T*V*invT001*P001 + P010.T*invT010.T*V*invT010*P010 + P011.T*invT011.T*V*invT011*P011 + P100.T*invT100.T*V*invT100*P100 + P101.T*invT101.T*V*invT101*P101 + P110.T*invT110.T*V*invT110*P110 + P111.T*invT111.T*V*invT111*P111 + A = 0.125*A - + return A - - + + if __name__ == '__main__': X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) diff --git a/code/inv3X3BlockDiagonal.py b/code/inv3X3BlockDiagonal.py index cf523ddd..2bfd86c4 100644 --- a/code/inv3X3BlockDiagonal.py +++ b/code/inv3X3BlockDiagonal.py @@ -1,12 +1,11 @@ -from scipy.sparse import linalg from utils import * from sputils import * -def inv3X3BlockDiagonal(a11,a12,a13,a21,a22,a23,a31,a32,a33): +def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): - a11 = mkvc(a11) - a12 = mkvc(a12) + a11 = mkvc(a11) + a12 = mkvc(a12) a13 = mkvc(a13) a21 = mkvc(a21) a22 = mkvc(a22) @@ -17,16 +16,16 @@ def inv3X3BlockDiagonal(a11,a12,a13,a21,a22,a23,a31,a32,a33): detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 - b11 = (a22*a33 - a23*a32)/detA + b11 = +(a22*a33 - a23*a32)/detA b12 = -(a12*a33 - a13*a32)/detA - b13 = (a12*a23 - a13*a22)/detA + b13 = +(a12*a23 - a13*a22)/detA - b21 = (a31*a23 - a21*a33)/detA + b21 = +(a31*a23 - a21*a33)/detA b22 = -(a31*a13 - a11*a33)/detA - b23 = (a21*a13 - a11*a23)/detA + b23 = +(a21*a13 - a11*a23)/detA b31 = -(a31*a22 - a21*a32)/detA - b32 = (a31*a12 - a11*a32)/detA + b32 = +(a31*a12 - a11*a32)/detA b33 = -(a21*a12 - a11*a22)/detA B = appendBottom3( @@ -34,4 +33,4 @@ def inv3X3BlockDiagonal(a11,a12,a13,a21,a22,a23,a31,a32,a33): appendRight3(sdiag(b21), sdiag(b22), sdiag(b23)), appendRight3(sdiag(b31), sdiag(b32), sdiag(b33))) - return B \ No newline at end of file + return B diff --git a/code/meshUtils.py b/code/meshUtils.py index fbf5cc30..5d3f071d 100644 --- a/code/meshUtils.py +++ b/code/meshUtils.py @@ -1,101 +1,94 @@ -from scipy.sparse import linalg -from scipy import sparse from sputils import * from utils import * from numpy import * -#----- Cell Centers from Nodal locations ----- -def getCellCenterFromNodal(X,Y,Z): - XC = 1.0/8.0 * (X[0:-1,0:-1,0:-1] + X[1:,0:-1,0:-1] + X[0:-1,1:,0:-1] + X[1:,1:,0:-1] + - X[0:-1,0:-1,1:] + X[1:,0:-1,1:] + X[0:-1,1:,1:] + X[1:,1:,1:]) +def getCellCenterFromNodal(X, Y, Z): + """Cell Centers from Nodal locations""" + XC = 1.0/8.0 * (X[:-1, :-1, :-1] + X[1:, :-1, :-1] + X[:-1, 1:, :-1] + X[1:, 1:, :-1] + + X[:-1, :-1, 1:] + X[1:, :-1, 1:] + X[:-1, 1:, 1:] + X[1:, 1:, 1:]) - YC = 1.0/8.0 * (Y[0:-1,0:-1,0:-1] + Y[1:,0:-1,0:-1] + Y[0:-1,1:,0:-1] + Y[1:,1:,0:-1] + - Y[0:-1,0:-1,1:] + Y[1:,0:-1,1:] + Y[0:-1,1:,1:] + Y[1:,1:,1:]) + YC = 1.0/8.0 * (Y[:-1, :-1, :-1] + Y[1:, :-1, :-1] + Y[:-1, 1:, :-1] + Y[1:, 1:, :-1] + + Y[:-1, :-1, 1:] + Y[1:, :-1, 1:] + Y[:-1, 1:, 1:] + Y[1:, 1:, 1:]) - ZC = 1.0/8.0 * (Z[0:-1,0:-1,0:-1] + Z[1:,0:-1,0:-1] + Z[0:-1,1:,0:-1] + Z[1:,1:,0:-1] + - Z[0:-1,0:-1,1:] + Z[1:,0:-1,1:] + Z[0:-1,1:,1:] + Z[1:,1:,1:]) - - return (XC,YC,ZC) + ZC = 1.0/8.0 * (Z[:-1, :-1, :-1] + Z[1:, :-1, :-1] + Z[:-1, 1:, :-1] + Z[1:, 1:, :-1] + + Z[:-1, :-1, 1:] + Z[1:, :-1, 1:] + Z[:-1, 1:, 1:] + Z[1:, 1:, 1:]) -#----- Edges from Nodal locations ----- - -def getEdgesFromNodal(X,Y,Z): -# -# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) -# / / -# / / | -# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) -# / / | -# / / | -# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) -# | | | -# | | node(i+1,j+1,k+1) -# | | / -# edge1(i,j,k) face3(i,j,k) edge1(i,j+1.k) -# | | / -# | | / -# | |/ -# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - - XE1 = (X[1:,:,:]+X[0:-1,:,:])/2.0 - YE1 = (Y[1:,:,:]+Y[0:-1,:,:])/2.0 - ZE1 = (Z[1:,:,:]+Z[0:-1,:,:])/2.0 - - XE2 = (X[:,1:,:]+X[:,0:-1,:])/2.0 - YE2 = (Y[:,1:,:]+Y[:,0:-1,:])/2.0 - ZE2 = (Z[:,1:,:]+Z[:,0:-1,:])/2.0 - - XE3 = (X[:,:,1:]+X[:,:,0:-1])/2.0 - YE3 = (Y[:,:,1:]+Y[:,:,0:-1])/2.0 - ZE3 = (Z[:,:,1:]+Z[:,:,0:-1])/2.0 - - return (XE1,YE1,ZE1,XE2,YE2,ZE2,XE3,YE3,ZE3) - - #-- Get faces from nodal -- - -def getFacesFromNodal(X,Y,Z): - - XF1 = 1.0/4.0*(X[:,0:-1,0:-1]+X[:,1:,0:-1]+X[:,0:-1,1:]+X[:,1:,1:]) - YF1 = 1.0/4.0*(Y[:,0:-1,0:-1]+Y[:,1:,0:-1]+Y[:,0:-1,1:]+Y[:,1:,1:]) - ZF1 = 1.0/4.0*(Z[:,0:-1,0:-1]+Z[:,1:,0:-1]+Z[:,0:-1,1:]+Z[:,1:,1:]) - - XF2 = 1.0/4.0*(X[0:-1,:,0:-1]+X[1:,:,0:-1]+X[0:-1,:,1:]+X[1:,:,1:]) - YF2 = 1.0/4.0*(Y[0:-1,:,0:-1]+Y[1:,:,0:-1]+Y[0:-1,:,1:]+Y[1:,:,1:]) - ZF2 = 1.0/4.0*(Z[0:-1,:,0:-1]+Z[1:,:,0:-1]+Z[0:-1,:,1:]+Z[1:,:,1:]) - - XF3 = 1.0/4.0*(X[0:-1,0:-1,:]+X[1:,0:-1,:]+X[0:-1,1:,:]+X[1:,1:,:]) - YF3 = 1.0/4.0*(Y[0:-1,0:-1,:]+Y[1:,0:-1,:]+Y[0:-1,1:,:]+Y[1:,1:,:]) - ZF3 = 1.0/4.0*(Z[0:-1,0:-1,:]+Z[1:,0:-1,:]+Z[0:-1,1:,:]+Z[1:,1:,:]) - - return (XF1,YF1,ZF1,XF2,YF2,ZF2,XF3,YF3,ZF3) - - #-- Project Edge vector field - -def projectEdgeVectorField(EV1,EV2,EV3,X,Y,Z): - - t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,nrm1,nrm2,nrm3 = getEdgeTangent(X,Y,Z) + return (XC, YC, ZC) - E1 = EV1[:,0]*mkvc(t1x) + EV1[:,1]*mkvc(t1y) + EV1[:,2]*mkvc(t1z) - E2 = EV2[:,0]*mkvc(t2x) + EV2[:,1]*mkvc(t2y) + EV2[:,2]*mkvc(t2z) - E3 = EV3[:,0]*mkvc(t3x) + EV3[:,1]*mkvc(t3y) + EV3[:,2]*mkvc(t3z) - - return hstack((hstack((mkvc(E1),mkvc(E2))),mkvc(E3))) - - -#-- Prolect Face vector field +def getEdgesFromNodal(X, Y, Z): + """Edges from Nodal locations -def projectFaceVectorField(FV1,FV2,FV3,X,Y,Z): + node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + / / + / / | + edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + / / | + / / | + node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + | | | + | | node(i+1,j+1,k+1) + | | / + edge1(i,j,k) face3(i,j,k) edge1(i,j+1.k) + | | / + | | / + | |/ + node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + """ - n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,ar1,ar2,ar3 = getFaceNormals(X,Y,Z) + XE1 = (X[1:, :, :]+X[:-1, :, :])/2.0 + YE1 = (Y[1:, :, :]+Y[:-1, :, :])/2.0 + ZE1 = (Z[1:, :, :]+Z[:-1, :, :])/2.0 - F1 = FV1[:,0]*mkvc(n1x) + FV1[:,1]*mkvc(n1y) + FV1[:,2]*mkvc(n1z) - F2 = FV2[:,0]*mkvc(n2x) + FV2[:,1]*mkvc(n2y) + FV2[:,2]*mkvc(n2z) - F3 = FV3[:,0]*mkvc(n3x) + FV3[:,1]*mkvc(n3y) + FV3[:,2]*mkvc(n3z) - - return hstack((hstack((mkvc(F1),mkvc(F2))),mkvc(F3))) - + XE2 = (X[:, 1:, :]+X[:, :-1, :])/2.0 + YE2 = (Y[:, 1:, :]+Y[:, :-1, :])/2.0 + ZE2 = (Z[:, 1:, :]+Z[:, :-1, :])/2.0 - - \ No newline at end of file + XE3 = (X[:, :, 1:]+X[:, :, :-1])/2.0 + YE3 = (Y[:, :, 1:]+Y[:, :, :-1])/2.0 + ZE3 = (Z[:, :, 1:]+Z[:, :, :-1])/2.0 + + return (XE1, YE1, ZE1, XE2, YE2, ZE2, XE3, YE3, ZE3) + + +def getFacesFromNodal(X, Y, Z): + """Get faces from nodal --""" + + XF1 = 1.0/4.0*(X[:, :-1, :-1]+X[:, 1:, :-1]+X[:, :-1, 1:]+X[:, 1:, 1:]) + YF1 = 1.0/4.0*(Y[:, :-1, :-1]+Y[:, 1:, :-1]+Y[:, :-1, 1:]+Y[:, 1:, 1:]) + ZF1 = 1.0/4.0*(Z[:, :-1, :-1]+Z[:, 1:, :-1]+Z[:, :-1, 1:]+Z[:, 1:, 1:]) + + XF2 = 1.0/4.0*(X[:-1, :, :-1]+X[1:, :, :-1]+X[:-1, :, 1:]+X[1:, :, 1:]) + YF2 = 1.0/4.0*(Y[:-1, :, :-1]+Y[1:, :, :-1]+Y[:-1, :, 1:]+Y[1:, :, 1:]) + ZF2 = 1.0/4.0*(Z[:-1, :, :-1]+Z[1:, :, :-1]+Z[:-1, :, 1:]+Z[1:, :, 1:]) + + XF3 = 1.0/4.0*(X[:-1, :-1, :]+X[1:, :-1, :]+X[:-1, 1:, :]+X[1:, 1:, :]) + YF3 = 1.0/4.0*(Y[:-1, :-1, :]+Y[1:, :-1, :]+Y[:-1, 1:, :]+Y[1:, 1:, :]) + ZF3 = 1.0/4.0*(Z[:-1, :-1, :]+Z[1:, :-1, :]+Z[:-1, 1:, :]+Z[1:, 1:, :]) + + return (XF1, YF1, ZF1, XF2, YF2, ZF2, XF3, YF3, ZF3) + + +def projectEdgeVectorField(EV1, EV2, EV3, X, Y, Z): + """Project Edge vector field""" + + t1x, t1y, t1z, t2x, t2y, t2z, t3x, t3y, t3z, nrm1, nrm2, nrm3 = getEdgeTangent(X, Y, Z) + + E1 = EV1[:, 0]*mkvc(t1x) + EV1[:, 1]*mkvc(t1y) + EV1[:, 2]*mkvc(t1z) + E2 = EV2[:, 0]*mkvc(t2x) + EV2[:, 1]*mkvc(t2y) + EV2[:, 2]*mkvc(t2z) + E3 = EV3[:, 0]*mkvc(t3x) + EV3[:, 1]*mkvc(t3y) + EV3[:, 2]*mkvc(t3z) + + return hstack((hstack((mkvc(E1), mkvc(E2))), mkvc(E3))) + + +def projectFaceVectorField(FV1, FV2, FV3, X, Y, Z): + """Prolect Face vector field""" + + n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, ar1, ar2, ar3 = getFaceNormals(X, Y, Z) + + F1 = FV1[:, 0]*mkvc(n1x) + FV1[:, 1]*mkvc(n1y) + FV1[:, 2]*mkvc(n1z) + F2 = FV2[:, 0]*mkvc(n2x) + FV2[:, 1]*mkvc(n2y) + FV2[:, 2]*mkvc(n2z) + F3 = FV3[:, 0]*mkvc(n3x) + FV3[:, 1]*mkvc(n3y) + FV3[:, 2]*mkvc(n3z) + + return hstack((hstack((mkvc(F1), mkvc(F2))), mkvc(F3))) diff --git a/code/ndgrid.py b/code/ndgrid.py deleted file mode 100644 index d051db8f..00000000 --- a/code/ndgrid.py +++ /dev/null @@ -1,29 +0,0 @@ -from numpy import * - -def ndgrid(x,y,z): - - n1 = size(x) - n2 = size(y) - n3 = size(z) - X = zeros([n1,n2,n3]) - Y = zeros([n1,n2,n3]) - Z = zeros([n1,n2,n3]) - for i in range(0, n2): - for j in range(0,n3): - X[:,i,j] = x - - for i in range(0, n1): - for j in range(0,n3): - Y[i,:,j] = y - - for i in range(0, n1): - for j in range(0,n2): - Z[i,j,:] = z - - - return (X,Y,Z) - - -if __name__ == '__main__': - - X = ndgrid([1,2,3],[2,4,5,6],[4,6,7,8]) diff --git a/code/sputils.py b/code/sputils.py index d5a83145..bf54b15a 100644 --- a/code/sputils.py +++ b/code/sputils.py @@ -1,67 +1,77 @@ -from scipy.sparse import linalg from scipy import sparse from numpy import * -#======== Define 1D derivatives ============= def ddx(n): - return sparse.spdiags(-ones(n),0,n,n+1) + sparse.spdiags(ones(n+1),1,n,n+1) + """Define 1D derivatives""" + # ddx = lambda n: sparse.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format='csr') + return sparse.spdiags(-ones(n), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1) + -#======== Define 1D average ============= def av(n): - return 0.5*(sparse.spdiags(ones(n+1),0,n,n+1) + sparse.spdiags(ones(n+1),1,n,n+1)) + """Define 1D average""" + return 0.5*(sparse.spdiags(ones(n+1), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1)) + -#======== Diagonal matrix ============= def sdiag(h): - return sparse.spdiags(h,0,size(h),size(h)) + """Diagonal matrix""" + return sparse.spdiags(h, 0, size(h), size(h)) + -#======== sparse identity ============= def speye(n): - return sparse.spdiags(ones(n),0,n,n) + """sparse identity""" + return sparse.spdiags(ones(n), 0, n, n) -#======== two kron prods ============= -def kron3(A,B,C): - return sparse.kron(sparse.kron(A,B),C) - -#======== append on bottom ============= -def appendBottom(A,B): - C = sparse.vstack((A,B)) - C = C.tocsr() - return C - -#======== append on bottom ============= -def appendBottom3(A,B,C): - C = appendBottom(appendBottom(A,B),C) - C = C.tocsr() - return C -#======== append on right ============= -def appendRight(A,B): - C = sparse.hstack((A,B)) - C = C.tocsr() - return C +def kron3(A, B, C): + """two kron prods""" + return sparse.kron(sparse.kron(A, B), C) -#======== append on right ============= -def appendRight3(A,B,C): - C = appendRight(appendRight(A,B),C) - C = C.tocsr() - return C -#======== blockdigonal ============= -def blkDiag(A,B): - O12 = sparse.coo_matrix((shape(A)[0],shape(B)[1])) - O21 = sparse.coo_matrix((shape(B)[0],shape(A)[1])) - C = sparse.vstack((sparse.hstack((A,O12)),sparse.hstack((O21,B)))) +def appendBottom(A, B): + """append on bottom""" + C = sparse.vstack((A, B)) C = C.tocsr() - return C - -#======== blockdigonal 3 ============= -def blkDiag3(A,B,C): - ABC = blkDiag(blkDiag(A,B),C) + return C + + +def appendBottom3(A, B, C): + """append on bottom""" + C = appendBottom(appendBottom(A, B), C) + C = C.tocsr() + return C + + +def appendRight(A, B): + """append on right""" + C = sparse.hstack((A, B)) + C = C.tocsr() + return C + + +def appendRight3(A, B, C): + """append on right""" + C = appendRight(appendRight(A, B), C) + C = C.tocsr() + return C + + +def blkDiag(A, B): + """blockdigonal""" + O12 = sparse.coo_matrix((shape(A)[0], shape(B)[1])) + O21 = sparse.coo_matrix((shape(B)[0], shape(A)[1])) + C = sparse.vstack((sparse.hstack((A, O12)), sparse.hstack((O21, B)))) + C = C.tocsr() + return C + + +def blkDiag3(A, B, C): + """blockdigonal 3""" + ABC = blkDiag(blkDiag(A, B), C) ABC = ABC.tocsr() return ABC - -#======== spzeros ============= -def spzeros(n1,n2): - return sparse.coo_matrix((n1,n2)) - + + +def spzeros(n1, n2): + """spzeros""" + return sparse.coo_matrix((n1, n2)) diff --git a/code/utils.py b/code/utils.py index ebd028e3..7ea54f17 100644 --- a/code/utils.py +++ b/code/utils.py @@ -1,124 +1,127 @@ from numpy import * -def diff(A,d): - end = -1 - if(d==1): - return A[1:,0:,0:] - A[0:end,0:,0:] - elif(d==2): - return A[0:,1:,0:] - A[0:,0:end,0:] +def diff(A, d): + if(d == 1): + return A[1:, :, :] - A[:-1, :, :] + elif(d == 2): + return A[:, 1:, :] - A[:, :-1, :] else: - return A[0:,0:,1:] - A[0:,0:,0:end] + return A[:, :, 1:] - A[:, :, :-1] #else: # print('d must be 1,2 or 3') def diffp(A, d1, d2): - end = -1 - if(d1 == 1 and d2 == 2 ): - return A[1:,1:, 0:] - A[0:end,0:end,0:] + if(d1 == 1 and d2 == 2): + return A[1:, 1:, :] - A[:-1, :-1, :] elif(d1 == 1 and d2 == 3): - return A[1:,0:,1:] - A[0:end,0:,0:end] + return A[1:, :, 1:] - A[:-1, :, :-1] else: - return A[0:,1:,1:] - A[0:,0:end,0:end] + return A[:, 1:, 1:] - A[:, :-1, :-1] def diffm(A, d1, d2): - end = -1 - if(d1 == 3 and d2 == 2 ): - return A[:,0:end,1:] - A[:,1:,0:end] + if(d1 == 3 and d2 == 2): + return A[:, :-1, 1:] - A[:, 1:, :-1] elif(d1 == 1 and d2 == 3): - return A[1:, :, 0:end] - A[0:end,:,1:] + return A[1:, :, :-1] - A[:-1, :, 1:] elif(d1 == 2 and d2 == 1): - return A[0:end, 1:, :] - A[1:, 0:end, :] + return A[:-1, 1:, :] - A[1:, :-1, :] + else: + print('d must be 1, 2 or 3') + + +def ave(A, d): + if(d == 1): + return 0.5*(A[1:, :, :] + A[:-1, :, :]) + elif(d == 2): + return 0.5*(A[:, 1:, :] + A[:, :-1, :]) + elif(d == 3): + return 0.5*(A[:, :, 1:] + A[:, :, :-1]) else: print('d must be 1,2 or 3') - -def ave(A,d): - end = 0 - if(d==1): - return 0.5*(A[1:,:,:] + A[0:end-1,0:,:]) - elif(d==2): - return 0.5*(A[:,1:,:] + A[0:,0:end-1,:]) - elif(d==3): - return 0.5*(A[:,:,1:] + A[0:,0:,0:end-1]) - else: - print('d must be 1,2 or 3') - -def reshapeF(sp,d): - return reshape(sp,d,'F') -def mkvc(A): - return reshape(A,[size(A),1],'F').flatten() - - -def ndgrid(x,y,z): - +def reshapeF(sp, d): + return reshape(sp, d, 'F') + + +def mkvc(A): + return reshape(A, [size(A), 1], 'F').flatten() + + +def ndgrid(x, y, z): + n1 = size(x) n2 = size(y) n3 = size(z) - X = zeros([n1,n2,n3]) - Y = zeros([n1,n2,n3]) - Z = zeros([n1,n2,n3]) + X = zeros([n1, n2, n3]) + Y = zeros([n1, n2, n3]) + Z = zeros([n1, n2, n3]) for i in range(0, n2): - for j in range(0,n3): - X[:,i,j] = x - + for j in range(0, n3): + X[:, i, j] = x + for i in range(0, n1): - for j in range(0,n3): - Y[i,:,j] = y - + for j in range(0, n3): + Y[i, :, j] = y + for i in range(0, n1): - for j in range(0,n2): - Z[i,j,:] = z - - - return (X,Y,Z) - + for j in range(0, n2): + Z[i, j, :] = z + + return (X, Y, Z) + def ind2sub(shape, ind): # From the given shape, returns the subscrips of the given index - revshp = []; - revshp.extend(shape); - mult = [1]; + revshp = [] + revshp.extend(shape) + mult = [1] for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]); - mult = array(mult).reshape(len(mult)); - - sub = []; - - for i in range(0,len(shape)): - sub.extend([math.floor(ind / mult[i])]); - ind = ind - (math.floor(ind/mult[i]) * mult[i]); - return sub; + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult)) + + sub = [] + + for i in range(0, len(shape)): + sub.extend([math.floor(ind / mult[i])]) + ind = ind - (math.floor(ind/mult[i]) * mult[i]) + return sub + def sub2ind(shape, subs): # From the given shape, returns the index of the given subscript - revshp = list(shape); - mult = [1]; + revshp = list(shape) + mult = [1] for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]); - mult = array(mult).reshape(len(mult),1); - - idx = dot((subs) , (mult)); - return idx; + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult), 1) + + idx = dot((subs), (mult)) + return idx def mkmat(x): - return reshape(matrix(x),(size(x),1),'F') - -def hstack3(a,b,c): - a = mkvc(a); b = mkvc(b); c = mkvc(c) - a = mkmat(a); b = mkmat(b); c = mkmat(c) - return hstack((hstack((a,b)),c)) - - + return reshape(matrix(x), (size(x), 1), 'F') + + +def hstack3(a, b, c): + a = mkvc(a) + b = mkvc(b) + c = mkvc(c) + a = mkmat(a) + b = mkmat(b) + c = mkmat(c) + return hstack((hstack((a, b)), c)) if __name__ == '__main__': X, Y, Z = mgrid[0:4, 0:5, 0:6] + print Z + t = ave(X, 1) - \ No newline at end of file + print t From 91132fd737d2a456ddcd9765f9dc16cc8cdc5b38 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 11 Jun 2013 16:20:10 +0200 Subject: [PATCH 003/359] Mesh Class simple as: myMesh = Mesh([5, 4]) myMesh.nfaces --- code/Mesh.py | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 code/Mesh.py diff --git a/code/Mesh.py b/code/Mesh.py new file mode 100644 index 00000000..8ca87165 --- /dev/null +++ b/code/Mesh.py @@ -0,0 +1,130 @@ +import numpy as np + + +class Mesh(object): + """docstring for Mesh""" + def __init__(self, h): + + if type(h) != list: + raise Exception("Type of h must be a list variable. e.g. [5, 4, 2] or [[1,1,1],[0.5,0.5]]") + + if np.sum([np.size(x) for x in h]) == len(h): + # We have specified a shorthand for the mesh e.g. [5, 4, 2] + # We will recreate the h, such that it lies on the unit cube/square/line + domain = 1. # (must be a float) + h = [np.ones(x)*(domain/x) for x in h] + + dim = len(h) + + if dim > 1 and np.all([len(np.shape(x)) > 1 and np.shape(x)[1] > 1 for x in h]): + # The h has internal structure, and is not a vector + # Thus, we must be describing the verticies of the mesh + # Hence, the mesh is a Logically Orthogonal Mesh + self.meshType = 'LOM' + else: + # Could add other checks, but here the default is a rectangular mesh + self.meshType = 'RECT' + + if self.meshType != 'LOM': + # Ensure that the h is a numpy array, with shape: (n,) + h = [np.array(x).ravel() for x in h] + + # Define the number of nodes + if self.meshType == 'LOM': + self._nnodes = np.array(np.shape(h[0])) + else: + self._nnodes = np.array([len(x) for x in h]) + 1 + + self._nc = self._nnodes - 1 + self._ncells = np.prod(self._nc) + self._h = h + self._dim = dim + + m = self._nnodes + if dim == 1: + self._nfaces = np.prod(m) + self._nedges = np.prod(m) + elif dim == 2: + self._nfx = m - [0, 1] + self._nfy = m - [1, 0] + self._nex = m - [1, 0] + self._ney = m - [0, 1] + + self._nfaces = [np.prod(self.nfx), np.prod(self.nfy)] + self._nedges = [np.prod(self.nex), np.prod(self.ney)] + elif dim == 3: + self._nfx = m - [0, 1, 1] + self._nfy = m - [1, 0, 1] + self._nfz = m - [1, 1, 0] + self._nex = m - [1, 0, 0] + self._ney = m - [0, 1, 0] + self._nez = m - [0, 0, 1] + + self._nfaces = [np.prod(self.nfx), np.prod(self.nfy), np.prod(self.nfz)] + self._nedges = [np.prod(self.nex), np.prod(self.ney), np.prod(self.nez)] + + def dim(): + doc = "The dimension of the mesh: 1, 2, or 3" + fget = lambda self: self._dim + return locals() + dim = property(**dim()) + + def nc(): + doc = "Number of cells in each direction of the mesh" + fget = lambda self: self._nc + return locals() + nc = property(**nc()) + + def ncells(): + doc = "Number of cells in the mesh" + fget = lambda self: self._ncells + return locals() + ncells = property(**ncells()) + + def nfaces(): + doc = "Number of faces in each direction of the mesh" + fget = lambda self: self._nfaces + return locals() + nfaces = property(**nfaces()) + + def nedges(): + doc = "Number of edges in each direction of the mesh" + fget = lambda self: self._nedges + return locals() + nedges = property(**nedges()) + + def nfx(): + doc = "Number of faces in the x direction of the mesh" + fget = lambda self: self._nfx if self.dim > 1 else None + return locals() + nfx = property(**nfx()) + + def nfy(): + doc = "Number of faces in the y direction of the mesh" + fget = lambda self: self._nfy if self.dim > 1 else None + return locals() + nfy = property(**nfy()) + + def nfz(): + doc = "Number of faces in the z direction of the mesh" + fget = lambda self: self._nfz if self.dim > 2 else None + return locals() + nfz = property(**nfz()) + + def nex(): + doc = "Number of edges in the x direction of the mesh" + fget = lambda self: self._nex if self.dim > 1 else None + return locals() + nex = property(**nex()) + + def ney(): + doc = "Number of edges in the y direction of the mesh" + fget = lambda self: self._ney if self.dim > 1 else None + return locals() + ney = property(**ney()) + + def nez(): + doc = "Number of edges in the z direction of the mesh" + fget = lambda self: self._nez if self.dim > 2 else None + return locals() + nez = property(**nez()) From 668b84b7ee966d82c7dc1009fd6ad0d4056b1e84 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 11 Jun 2013 16:21:03 +0200 Subject: [PATCH 004/359] Testing framework. Numbering of the mesh is tested so far. --- code/tests/__init__.py | 3 ++ code/tests/test_mesh.py | 74 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 code/tests/__init__.py create mode 100644 code/tests/test_mesh.py diff --git a/code/tests/__init__.py b/code/tests/__init__.py new file mode 100644 index 00000000..80b21e43 --- /dev/null +++ b/code/tests/__init__.py @@ -0,0 +1,3 @@ +# init.py + +from test_mesh import * \ No newline at end of file diff --git a/code/tests/test_mesh.py b/code/tests/test_mesh.py new file mode 100644 index 00000000..a700391f --- /dev/null +++ b/code/tests/test_mesh.py @@ -0,0 +1,74 @@ +import unittest +import sys +sys.path.append('../') +from Mesh import Mesh +import numpy as np + + +class TestMeshNumbers3D(unittest.TestCase): + + def setUp(self): + self.mesh = Mesh([6, 2, 3]) + + def test_meshDimensions(self): + self.assertTrue(self.mesh.dim, 3) + + def test_mesh_nc(self): + self.assertTrue(np.all(self.mesh.nc == [6, 2, 3])) + + def test_mesh_nf(self): + x = np.all(self.mesh.nfx == [7, 2, 3]) + y = np.all(self.mesh.nfy == [6, 3, 3]) + z = np.all(self.mesh.nfz == [6, 2, 4]) + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_ne(self): + x = np.all(self.mesh.nex == [6, 3, 4]) + y = np.all(self.mesh.ney == [7, 2, 4]) + z = np.all(self.mesh.nez == [7, 3, 3]) + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_numbers(self): + c = self.mesh.ncells == 36 + f = np.all(self.mesh.nfaces == [42, 54, 48]) + e = np.all(self.mesh.nedges == [72, 56, 63]) + + self.assertTrue(np.all([c, f, e])) + + +class TestMeshNumbers2D(unittest.TestCase): + + def setUp(self): + self.mesh = Mesh([6, 2]) + + def test_meshDimensions(self): + self.assertTrue(self.mesh.dim, 2) + + def test_mesh_nc(self): + self.assertTrue(np.all(self.mesh.nc == [6, 2])) + + def test_mesh_nf(self): + x = np.all(self.mesh.nfx == [7, 2]) + y = np.all(self.mesh.nfy == [6, 3]) + z = self.mesh.nfz is None + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_ne(self): + x = np.all(self.mesh.nex == [6, 3]) + y = np.all(self.mesh.ney == [7, 2]) + z = self.mesh.nez is None + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_numbers(self): + c = self.mesh.ncells == 12 + f = np.all(self.mesh.nfaces == [14, 18]) + e = np.all(self.mesh.nedges == [18, 14]) + + self.assertTrue(np.all([c, f, e])) + +if __name__ == '__main__': + unittest.main() From 48cd71b7078a28b0f37cfcb7974bc952189749c3 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Wed, 19 Jun 2013 12:14:56 -0700 Subject: [PATCH 005/359] GaussNewton example for Rosenbrock function ( to be generalized!!) --- code/GaussNewton.py | 85 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 code/GaussNewton.py diff --git a/code/GaussNewton.py b/code/GaussNewton.py new file mode 100644 index 00000000..997ffbb4 --- /dev/null +++ b/code/GaussNewton.py @@ -0,0 +1,85 @@ +import numpy as np +from pylab import norm + +def GaussNewton(x0, maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, tolG=1e-3, eps=1e-16, xStop=np.empty): + """ + GaussNewton optimization for Rosenbrock function (has to be generalized) + """ + # initial output + print "%s GaussNewton %s" % ('='*22,'='*22) + print "iter\tJc\t\tnorm(dJ)\tLS" + print "%s" % '-'*57 + + # evaluate stopping criteria + if xStop==np.empty: + xStop=x0 + Jstop = Rosenbrock(xStop) + print "%3d\t%1.2e" % (-1, Jstop[0]) + + # initialize + xc = x0 + STOP = np.zeros((5,1),dtype=bool) + iterLS=0; iter=0 + + Jold = Jstop + xOld=xc + while 1: + # evaluate objective function + Jc,dJ,H = Rosenbrock(xc) + print "%3d\t%1.2e\t%1.2e\t%d" % (iter, Jc[0],norm(dJ),iterLS) + + # check stopping rules + STOP[0] = (iter>0) & (abs(Jc[0]-Jold[0]) <= tolJ*(1+abs(Jstop[0]))) + STOP[1] = (iter>0) & (norm(xc-xOld) <= tolX*(1+norm(x0))) + STOP[2] = norm(dJ) <= tolG*(1+abs(Jstop[0])) + STOP[3] = norm(dJ) <= 1e3*eps + STOP[4] = (iter >= maxIter) + if all(STOP[0:3]) | any(STOP[3:]): + break + + # get search direction + dx = np.linalg.solve(H,-dJ) + + # Armijo linesearch + descent = np.dot(dJ.T,dx) + LS =0; t = 1; iterLS=1 + while (iterLS Date: Wed, 19 Jun 2013 12:39:00 -0700 Subject: [PATCH 006/359] Generalized Gauss Newton by using Lambda Functions --- code/GaussNewton.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/code/GaussNewton.py b/code/GaussNewton.py index 997ffbb4..ab9f5f52 100644 --- a/code/GaussNewton.py +++ b/code/GaussNewton.py @@ -1,9 +1,19 @@ import numpy as np from pylab import norm -def GaussNewton(x0, maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, tolG=1e-3, eps=1e-16, xStop=np.empty): +def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, + tolG=1e-3, eps=1e-16, xStop=np.empty): """ - GaussNewton optimization for Rosenbrock function (has to be generalized) + GaussNewton Optimization + + Input: + ------ + fctn - objective Function (lambda function) + x0 - starting guess + + Output: + ------- + xOpt - numerical optimizer """ # initial output print "%s GaussNewton %s" % ('='*22,'='*22) @@ -13,7 +23,7 @@ def GaussNewton(x0, maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX= # evaluate stopping criteria if xStop==np.empty: xStop=x0 - Jstop = Rosenbrock(xStop) + Jstop = fctn(xStop) print "%3d\t%1.2e" % (-1, Jstop[0]) # initialize @@ -25,7 +35,7 @@ def GaussNewton(x0, maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX= xOld=xc while 1: # evaluate objective function - Jc,dJ,H = Rosenbrock(xc) + Jc,dJ,H = fctn(xc) print "%3d\t%1.2e\t%1.2e\t%d" % (iter, Jc[0],norm(dJ),iterLS) # check stopping rules @@ -45,7 +55,7 @@ def GaussNewton(x0, maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX= LS =0; t = 1; iterLS=1 while (iterLS Date: Wed, 19 Jun 2013 17:40:30 -0700 Subject: [PATCH 007/359] added derivative check --- code/GaussNewton.py | 63 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/code/GaussNewton.py b/code/GaussNewton.py index ab9f5f52..e0304a8d 100644 --- a/code/GaussNewton.py +++ b/code/GaussNewton.py @@ -1,8 +1,9 @@ import numpy as np +import matplotlib.pyplot as plt from pylab import norm def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, - tolG=1e-3, eps=1e-16, xStop=np.empty): + tolG=1e-3, eps=1e-16, xStop=[]): """ GaussNewton Optimization @@ -21,7 +22,7 @@ def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, print "%s" % '-'*57 # evaluate stopping criteria - if xStop==np.empty: + if xStop==[]: xStop=x0 Jstop = fctn(xStop) print "%3d\t%1.2e" % (-1, Jstop[0]) @@ -69,11 +70,11 @@ def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, iter = iter +1 print "%s STOP! %s" % ('-'*25,'-'*25) - print "%d : |Jc-Jold|=%1.4e <= tolJ*(1+|Jstop|)=%1.4e" % (STOP[0],abs(Jc[0]-Jold[0]),tolJ*(1+abs(Jstop[0]))) - print "%d : |xc-xOld|=%1.4e <= tolX*(1+|x0|) =%1.4e" % (STOP[1],norm(xc-xOld),tolX*(1+norm(x0))) - print "%d : |dJ| =%1.4e <= tolG*(1+|Jstop|)=%1.4e" % (STOP[2],norm(dJ),tolG*(1+abs(Jstop[0]))) - print "%d : |dJ| =%1.4e <= 1e3*eps =%1.4e" % (STOP[3],norm(dJ),1e3*eps) - print "%d : iter =%d\t\t <= maxIter =%d" % (STOP[4],iter,maxIter) + print "%d : |Jc-Jold| = %1.4e <= tolJ*(1+|Jstop|) = %1.4e" % (STOP[0],abs(Jc[0]-Jold[0]),tolJ*(1+abs(Jstop[0]))) + print "%d : |xc-xOld| = %1.4e <= tolX*(1+|x0|) = %1.4e" % (STOP[1],norm(xc-xOld),tolX*(1+norm(x0))) + print "%d : |dJ| = %1.4e <= tolG*(1+|Jstop|) = %1.4e" % (STOP[2],norm(dJ),tolG*(1+abs(Jstop[0]))) + print "%d : |dJ| = %1.4e <= 1e3*eps = %1.4e" % (STOP[3],norm(dJ),1e3*eps) + print "%d : iter = %3d\t <= maxIter\t = %3d" % (STOP[4],iter,maxIter) print "%s DONE! %s\n" % ('='*25,'='*25) return xc @@ -82,15 +83,59 @@ def Rosenbrock(x): """ Rosenbrock function for testing GaussNewton scheme """ - J = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 - dJ = np.array([-400*(x[1]*x[0]-x[0]**3)-2*(1-x[0]),200*(x[1]-x[0]**2)]) + J = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 + dJ = np.array([2*(200*x[0]**3-200*x[0]*x[1]+x[0]-1),200*(x[1]-x[0]**2)]) H = np.array([[-400*x[1]+1200*x[0]**2+2, -400*x[0]],[ -400*x[0], 200]],dtype=float); return J,dJ,H +def checkDerivative(fctn,x0): + """ + Basic derivative check + + Compares error decay of 0th and 1st order Taylor approximation at point + x0 for a randomized search direction. + + Input: + ------ + fctn - function handle + x0 - point at which to check derivative + """ + + print "%s checkDerivative %s" % ('='*20,'='*20) + print "iter\th\t\t|J0-Jt|\t\t|J0+h*dJ'*dx-Jt|" + + Jc,dJ,H = fctn(x0) + + dx = np.random.randn(len(x0),1) + + t = np.logspace(-1,-10,10) + E0 = np.zeros(t.shape) + E1 = np.zeros(t.shape) + + for i in range(0,10): + Jt = fctn(x0+t[i]*dx) + E0[i] = norm(Jt[0]-Jc[0]) # 0th order Taylor + E1[i] = norm(Jt[0]-Jc[0]-t[i]*np.dot(dJ.T,dx)) # 1st order Taylor + + print "%d\t%1.2e\t%1.3e\t%1.3e" % (i,t[i],E0[i],E1[i]) + + print "%s DONE! %s\n" % ('='*25,'='*25) + plt.figure() + plt.clf() + plt.loglog(t,E0,'b') + plt.loglog(t,E1,'g--') + plt.title('checkDerivative') + plt.xlabel('h') + plt.ylabel('error of Taylor approximation') + plt.legend(['0th order', '1st order'],loc='upper left') + plt.show() + return + if __name__ == '__main__': x0 = np.array([[2.6],[3.7]]) fctn = lambda x:Rosenbrock(x) + checkDerivative(fctn,x0) xOpt = GaussNewton(fctn,x0,maxIter=20) print "xOpt=[%f,%f]" % (xOpt[0],xOpt[1]) \ No newline at end of file From 13325e63fc3b986c228b03c62da9d52317e794ef Mon Sep 17 00:00:00 2001 From: Luz Angelica Caudillo Mata Date: Tue, 2 Jul 2013 12:59:02 -0700 Subject: [PATCH 008/359] Implements the first draft of the TensorMesh class with basic visualization functions. It works for 1, 2 and 3 dimensions. Provides nodal, cell centers and staggered grids. --- code/TensorMesh.py | 257 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 code/TensorMesh.py diff --git a/code/TensorMesh.py b/code/TensorMesh.py new file mode 100644 index 00000000..3a061561 --- /dev/null +++ b/code/TensorMesh.py @@ -0,0 +1,257 @@ +#------------------------------------------------------------------------------- +# Packages +#------------------------------------------------------------------------------- +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D + +#------------------------------------------------------------------------------- +# Class definition +#------------------------------------------------------------------------------- +class TensorMesh: + """ + Define nodal, cell-centered and staggered tensor meshes for 1, 2 and 3 + dimensions. + """ + + # ---------------------- Properties -------------------------------------- + h = None # Array Spacing or cell-sizes in each direction + x0 = None # Array Origin (x1,x2,x3) + dim = None # Int Dimension + n = None # Array Number of cells in each direction + nC = None # Int Total number of cells + nE = None # Int Total number of edges + nF = None # Int Total number of faces + + # ----------------------- Methods ---------------------------------------- + def __init__(self,h,x0): + """Compute number of edges,faces and cell-centers """ + + # Assign values to properties + self.h = h + self.x0 = x0 + + + #Compute derived properties + self.dim = np.size(x0) + + #Compute the num of cells in each direction + self.n = np.zeros((self.dim,1)) + + for d in range(self.dim): + self.n[d] = np.size(h[d]) + + # Compute the number of cell-centers + self.nC = np.prod(self.n) + + # Compute the number of edges (makes sense only for 3D) + # Equivalent to: + # nEdges = n[0] * (n[1]+1) * (n[2]+1) + # + (n[0]+1) * ny[1] * (nz[2]+1) + # + (n[0]+1) * (ny[1]+1)* (nz[2]) + + if self.dim == 3: + self.nE = np.prod(np.kron(np.ones((3,1)),self.n.T)+np.ones((3,3))-np.eye(3),1) + print self.nE + + # Compute the number of faces (makes sense only for 2 and 3D) + # Equivalent to + # nFaces = (n[0]+1) * n[1] * n[2] + # + n[0] * (ny[1]+1) * nz[2] + # + n[0] * ny[1] * (nz[2]+1) + if self.dim >=2: + self.nF = np.prod(np.kron(np.ones((self.dim,1)),self.n.T)+np.eye(self.dim),1) + print self.nF + + def xin(self,i): + """Construct the 1D nodal mesh from the ith-component of h. Return an array.""" + return np.insert(np.cumsum(self.h[i-1]),0,0.0) + self.x0[i-1] + + def xic(self,i): + """Construct the 1D cell-centerd mesh from the ith-component of h. Return an array.""" + return .5*( np.insert(np.cumsum(self.h[i-1][:,0:-1]),0,0.0) + np.cumsum(self.h[i-1])) + + def getNodalGrid(self): + """Construct nodal grid for 1, 2 and 3 dimensions""" + if self.dim==1: + return [self.xin(1)] + elif self.dim==2: + return self.ndgrid([self.xin(1),self.xin(2)]) + elif self.dim==3: + return self.ndgrid([self.xin(1),self.xin(2),self.xin(3)]) + + def ndgrid(self, xin): + """Form tensorial grid for 1, 2 and 3 dimensions. Return X1,X2,X3 arrays depending on the dimension""" + ei = lambda i : np.ones((np.size(xin[i-1]),1)) + + if self.dim==1: + return [xin] + elif self.dim==2: + X1 = np.kron(ei(2),xin[0]).reshape(-1,1) + X2 = np.kron(xin[1],ei(1).T).reshape(-1,1) + return X1,X2 + elif self.dim==3: + X1 = np.kron(ei(3),np.kron(ei(2),xin[0])).reshape(-1,1) + X2 = np.kron(ei(3).T,np.kron(xin[1],ei(1).T)).reshape(-1,1) + X3 = np.kron(xin[2],np.kron(ei(2),ei(1))).T.reshape(-1,1) + + return X1,X2,X3 + + def getCellCenteredGrid(self): + """Construct cell-centered grid for 1, 2 and 3 dimensions.""" + + if self.dim==1: + return [self.xic(1)] + elif self.dim==2: + return self.ndgrid([self.xic(1),self.xic(2)]) + elif self.dim==3: + return self.ndgrid([self.xic(1),self.xic(2),self.xic(3)]) + + def getFaceStgGrid(self,direction): + """Construct the face staggered grids for 2 and 3 dimensions.""" + + if self.dim==1: + print 'Error: dimension must be larger than 1' + elif self.dim==2: + if direction == 1: + return self.ndgrid([self.xin(1),self.xic(2)]) + elif direction == 2: + return self.ndgrid([self.xic(1),self.xin(2)]) + else: + print 'Error: direction must be equal to 1 or 2' + elif self.dim==3: + if direction == 1: + return self.ndgrid([self.xin(1),self.xic(2),self.xic(3)]) + elif direction == 2: + return self.ndgrid([self.xic(1),self.xin(2),self.xic(3)]) + elif direction == 3: + return self.ndgrid([self.xic(1),self.xic(2),self.xin(3)]) + else: + print 'Error: direction must be equal to 1, 2 or 3' + + def getEdgeStgGrid(self,direction): + """Construct the edge staggered grids for 3 dimension case.""" + if self.dim != 3: + print 'Error: dimension must be equal to 3' + else: + if direction == 1: + return self.ndgrid([self.xic(1),self.xin(2),self.xin(3)]) + elif direction == 2: + return self.ndgrid([self.xin(1),self.xic(2),self.xin(3)]) + elif direction == 3: + return self.ndgrid([self.xin(1),self.xin(2),self.xic(3)]) + else: + print 'Error: direction must be equal to 1, 2 or 3' + + def plotImage(self,I): + + if self.dim==1: + fig = plt.figure(1) + fig.clf() + ax=plt.subplot(111) + if np.size(I)==self.n[0]: + print 'cell-centered image' + xx = self.getCellCenteredGrid() + ax.plot(xx[0],I,'ro') + elif np.size(I)==self.n[0]+1: + print 'nodal image' + xx = self.getNodalGrid() + ax.plot(xx[0],I,'bs') + + fig.show() + + + def plotGrid(self): + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" + if self.dim == 1: + fig = plt.figure(1) + fig.clf() + ax = plt.subplot(111) + xn = self.getNodalGrid() + xc = self.getCellCenteredGrid() + print xn + ax.hold(True) + ax.plot(xn,np.ones(np.shape(xn)),'bs') + ax.plot(xc,np.ones(np.shape(xc)),'ro') + ax.plot(xn,np.ones(np.shape(xn)),'k--') + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + fig.show() + elif self.dim == 2: + fig = plt.figure(2) + fig.clf() + ax = plt.subplot(111) + xn = self.getNodalGrid() + xc = self.getCellCenteredGrid() + xs1 = self.getFaceStgGrid(1) + xs2 = self.getFaceStgGrid(2) + + ax.hold(True) + ax.plot(xn[0],xn[1],'bs') + ax.plot(xc[0],xc[1],'ro') + ax.plot(xs1[0],xs1[1],'g>') + ax.plot(xs2[0],xs2[1],'g^') + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + fig.show() + elif self.dim == 3: + fig = plt.figure(3) + fig.clf() + ax = fig.add_subplot(111, projection='3d') + xn = self.getNodalGrid() + xc = self.getCellCenteredGrid() + xfs1 = self.getFaceStgGrid(1) + xfs2 = self.getFaceStgGrid(2) + xfs3 = self.getFaceStgGrid(3) + xes1 = self.getEdgeStgGrid(1) + xes2 = self.getEdgeStgGrid(2) + xes3 = self.getEdgeStgGrid(3) + + ax.hold(True) + ax.plot(xn[0],xn[1],'bs',zs=xn[2]) + ax.plot(xc[0],xc[1],'ro',zs=xc[2]) + ax.plot(xfs1[0],xfs1[1],'g>',zs=xfs1[2]) + ax.plot(xfs2[0],xfs2[1],'g<',zs=xfs2[2]) + ax.plot(xfs3[0],xfs3[1],'g^',zs=xfs3[2]) + ax.plot(xes1[0],xes1[1],'k>',zs=xes1[2]) + ax.plot(xes2[0],xes2[1],'k<',zs=xes2[2]) + ax.plot(xes3[0],xes3[1],'k^',zs=xes3[2]) + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + ax.set_zlabel('x3') + fig.show() + + + +if __name__ == '__main__': + print('Welcome to tensor mesh!') + + testDim = 1 + h1 = 0.3*np.ones((1,7)) + h1[:,0] = 0.5 + h1[:,-1] = 0.6 + h2 = .5* np.ones((1,4)) + h3 = .4* np.ones((1,6)) + x0 = np.zeros((3,1)) + + if testDim == 1: + h = [h1] + x0 = x0[0] + elif testDim==2: + h = [h1,h2] + x0 = x0[0:2] + else: + h = [h1,h2,h3] + + I = np.linspace(0,1,8) + M = TensorMesh(h,x0) + + xn = M.plotGrid() + + + \ No newline at end of file From e9d41ab95fd210562d6f23b9da02a9346172b1c5 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 5 Jul 2013 16:00:19 -0700 Subject: [PATCH 009/359] Changed Mesh to BaseMesh. Added conventions of n{C-F-E}{x-y-z} so mesh.nCx will return the number of cells in the x direction. Added a unitTest to ensure the mesh dimensions. --- code/BaseMesh.py | 179 ++++++++++++++++++++++++++++++++++++ code/Mesh.py | 130 -------------------------- code/tests/test_basemesh.py | 88 ++++++++++++++++++ code/tests/test_mesh.py | 74 --------------- 4 files changed, 267 insertions(+), 204 deletions(-) create mode 100644 code/BaseMesh.py delete mode 100644 code/Mesh.py create mode 100644 code/tests/test_basemesh.py delete mode 100644 code/tests/test_mesh.py diff --git a/code/BaseMesh.py b/code/BaseMesh.py new file mode 100644 index 00000000..90ad07f3 --- /dev/null +++ b/code/BaseMesh.py @@ -0,0 +1,179 @@ +import numpy as np + + +class BaseMesh(object): + """BaseMesh does all the counting you don't want to do.""" + def __init__(self, n, x0=None): + + # Check inputs + if x0 is None: + x0 = np.zeros(len(n)) + + if not len(n) == len(x0): + raise Exception("Dimension mismatch. x0 != len(n)") + + if len(n) > 3: + raise Exception("Dimensions higher than 3 are not supported.") + + # Ensure x0 & n are 1D vectors + self._n = np.array(n, dtype=int).ravel() + self._x0 = np.array(x0).ravel() + self._dim = len(n) + + def x0(): + doc = "Origin of the mesh" + fget = lambda self: self._x0 + return locals() + x0 = property(**x0()) + + def n(): + doc = "Number of Cells in each dimension (array of integers)" + fget = lambda self: self._n + return locals() + n = property(**n()) + + def dim(): + doc = "The dimension of the mesh (1, 2, or 3)." + fget = lambda self: self._dim + return locals() + dim = property(**dim()) + + def nCx(): + doc = "Number oc cells in the x direction" + fget = lambda self: self.n[0] + return locals() + nCx = property(**nCx()) + + def nCy(): + doc = "Number of cells in the y direction" + + def fget(self): + if self.dim > 1: + return self.n[1] + else: + return None + return locals() + nCy = property(**nCy()) + + def nCz(): + doc = "Number of cells in the z direction" + + def fget(self): + if self.dim > 2: + return self.n[2] + else: + return None + return locals() + nCz = property(**nCz()) + + def nC(): + doc = "Total number of cells" + fget = lambda self: np.prod(self.n) + return locals() + nC = property(**nC()) + + def nNx(): + doc = "Number of nodes in the x-direction" + fget = lambda self: self.nCx + 1 + return locals() + nNx = property(**nNx()) + + def nNy(): + doc = "Number of noes in the y-direction" + + def fget(self): + if self.dim > 1: + return self.n[1] + 1 + else: + return None + return locals() + nNy = property(**nNy()) + + def nNz(): + doc = "Number of nodes in the z-direction" + + def fget(self): + if self.dim > 2: + return self.n[2] + 1 + else: + return None + return locals() + nNz = property(**nNz()) + + def nN(): + doc = "Total number of nodes" + fget = lambda self: self.n + 1 + return locals() + nN = property(**nN()) + + def nEx(): + doc = "Number of x-edges" + fget = lambda self: np.array([x for x in [self.nCx, self.nNy, self.nNz] if not x is None]) + return locals() + nEx = property(**nEx()) + + def nEy(): + doc = "Number of y-edges" + + def fget(self): + if self.dim > 1: + return np.array([x for x in [self.nNx, self.nCy, self.nNz] if not x is None]) + else: + return None + return locals() + nEy = property(**nEy()) + + def nEz(): + doc = "Number of z-edges" + + def fget(self): + if self.dim > 2: + return np.array([x for x in [self.nNx, self.nNy, self.nCz] if not x is None]) + else: + return None + return locals() + nEz = property(**nEz()) + + def nE(): + doc = "Total number of edges" + fget = lambda self: np.array([np.prod(x) for x in [self.nEx, self.nEy, self.nEz] if not x is None]) + return locals() + nE = property(**nE()) + + def nFx(): + doc = "Number of x-faces" + fget = lambda self: np.array([x for x in [self.nNx, self.nCy, self.nCz] if not x is None]) + return locals() + nFx = property(**nFx()) + + def nFy(): + doc = "Number of y-faces" + + def fget(self): + if self.dim > 1: + return np.array([x for x in [self.nCx, self.nNy, self.nCz] if not x is None]) + else: + return None + return locals() + nFy = property(**nFy()) + + def nFz(): + doc = "Number of z-faces" + + def fget(self): + if self.dim > 2: + return np.array([x for x in [self.nCx, self.nCy, self.nNz] if not x is None]) + else: + return None + return locals() + nFz = property(**nFz()) + + def nF(): + doc = "Total number of faces in each dimension" + fget = lambda self: np.array([np.prod(x) for x in [self.nFx, self.nFy, self.nFz] if not x is None]) + return locals() + nF = property(**nF()) + +if __name__ == '__main__': + m = BaseMesh([3, 2, 4]) + print m.n diff --git a/code/Mesh.py b/code/Mesh.py deleted file mode 100644 index 8ca87165..00000000 --- a/code/Mesh.py +++ /dev/null @@ -1,130 +0,0 @@ -import numpy as np - - -class Mesh(object): - """docstring for Mesh""" - def __init__(self, h): - - if type(h) != list: - raise Exception("Type of h must be a list variable. e.g. [5, 4, 2] or [[1,1,1],[0.5,0.5]]") - - if np.sum([np.size(x) for x in h]) == len(h): - # We have specified a shorthand for the mesh e.g. [5, 4, 2] - # We will recreate the h, such that it lies on the unit cube/square/line - domain = 1. # (must be a float) - h = [np.ones(x)*(domain/x) for x in h] - - dim = len(h) - - if dim > 1 and np.all([len(np.shape(x)) > 1 and np.shape(x)[1] > 1 for x in h]): - # The h has internal structure, and is not a vector - # Thus, we must be describing the verticies of the mesh - # Hence, the mesh is a Logically Orthogonal Mesh - self.meshType = 'LOM' - else: - # Could add other checks, but here the default is a rectangular mesh - self.meshType = 'RECT' - - if self.meshType != 'LOM': - # Ensure that the h is a numpy array, with shape: (n,) - h = [np.array(x).ravel() for x in h] - - # Define the number of nodes - if self.meshType == 'LOM': - self._nnodes = np.array(np.shape(h[0])) - else: - self._nnodes = np.array([len(x) for x in h]) + 1 - - self._nc = self._nnodes - 1 - self._ncells = np.prod(self._nc) - self._h = h - self._dim = dim - - m = self._nnodes - if dim == 1: - self._nfaces = np.prod(m) - self._nedges = np.prod(m) - elif dim == 2: - self._nfx = m - [0, 1] - self._nfy = m - [1, 0] - self._nex = m - [1, 0] - self._ney = m - [0, 1] - - self._nfaces = [np.prod(self.nfx), np.prod(self.nfy)] - self._nedges = [np.prod(self.nex), np.prod(self.ney)] - elif dim == 3: - self._nfx = m - [0, 1, 1] - self._nfy = m - [1, 0, 1] - self._nfz = m - [1, 1, 0] - self._nex = m - [1, 0, 0] - self._ney = m - [0, 1, 0] - self._nez = m - [0, 0, 1] - - self._nfaces = [np.prod(self.nfx), np.prod(self.nfy), np.prod(self.nfz)] - self._nedges = [np.prod(self.nex), np.prod(self.ney), np.prod(self.nez)] - - def dim(): - doc = "The dimension of the mesh: 1, 2, or 3" - fget = lambda self: self._dim - return locals() - dim = property(**dim()) - - def nc(): - doc = "Number of cells in each direction of the mesh" - fget = lambda self: self._nc - return locals() - nc = property(**nc()) - - def ncells(): - doc = "Number of cells in the mesh" - fget = lambda self: self._ncells - return locals() - ncells = property(**ncells()) - - def nfaces(): - doc = "Number of faces in each direction of the mesh" - fget = lambda self: self._nfaces - return locals() - nfaces = property(**nfaces()) - - def nedges(): - doc = "Number of edges in each direction of the mesh" - fget = lambda self: self._nedges - return locals() - nedges = property(**nedges()) - - def nfx(): - doc = "Number of faces in the x direction of the mesh" - fget = lambda self: self._nfx if self.dim > 1 else None - return locals() - nfx = property(**nfx()) - - def nfy(): - doc = "Number of faces in the y direction of the mesh" - fget = lambda self: self._nfy if self.dim > 1 else None - return locals() - nfy = property(**nfy()) - - def nfz(): - doc = "Number of faces in the z direction of the mesh" - fget = lambda self: self._nfz if self.dim > 2 else None - return locals() - nfz = property(**nfz()) - - def nex(): - doc = "Number of edges in the x direction of the mesh" - fget = lambda self: self._nex if self.dim > 1 else None - return locals() - nex = property(**nex()) - - def ney(): - doc = "Number of edges in the y direction of the mesh" - fget = lambda self: self._ney if self.dim > 1 else None - return locals() - ney = property(**ney()) - - def nez(): - doc = "Number of edges in the z direction of the mesh" - fget = lambda self: self._nez if self.dim > 2 else None - return locals() - nez = property(**nez()) diff --git a/code/tests/test_basemesh.py b/code/tests/test_basemesh.py new file mode 100644 index 00000000..88655c60 --- /dev/null +++ b/code/tests/test_basemesh.py @@ -0,0 +1,88 @@ +import unittest +import sys +sys.path.append('../') +from BaseMesh import BaseMesh +import numpy as np + + +class TestMeshNumbers3D(unittest.TestCase): + + def setUp(self): + self.mesh = BaseMesh([6, 2, 3]) + + def test_meshDimensions(self): + self.assertTrue(self.mesh.dim, 3) + + def test_mesh_nc(self): + self.assertTrue(np.all(self.mesh.n == [6, 2, 3])) + + def test_mesh_nc_xyz(self): + x = np.all(self.mesh.nCx == 6) + y = np.all(self.mesh.nCy == 2) + z = np.all(self.mesh.nCz == 3) + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_nf(self): + x = np.all(self.mesh.nFx == [7, 2, 3]) + y = np.all(self.mesh.nFy == [6, 3, 3]) + z = np.all(self.mesh.nFz == [6, 2, 4]) + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_ne(self): + x = np.all(self.mesh.nEx == [6, 3, 4]) + y = np.all(self.mesh.nEy == [7, 2, 4]) + z = np.all(self.mesh.nEz == [7, 3, 3]) + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_numbers(self): + c = self.mesh.nC == 36 + f = np.all(self.mesh.nF == [42, 54, 48]) + e = np.all(self.mesh.nE == [72, 56, 63]) + + self.assertTrue(np.all([c, f, e])) + + +class TestMeshNumbers2D(unittest.TestCase): + + def setUp(self): + self.mesh = BaseMesh([6, 2]) + + def test_meshDimensions(self): + self.assertTrue(self.mesh.dim, 2) + + def test_mesh_nc(self): + self.assertTrue(np.all(self.mesh.n == [6, 2])) + + def test_mesh_nc_xyz(self): + x = np.all(self.mesh.nCx == 6) + y = np.all(self.mesh.nCy == 2) + z = self.mesh.nCz is None + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_nf(self): + x = np.all(self.mesh.nFx == [7, 2]) + y = np.all(self.mesh.nFy == [6, 3]) + z = self.mesh.nFz is None + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_ne(self): + x = np.all(self.mesh.nEx == [6, 3]) + y = np.all(self.mesh.nEy == [7, 2]) + z = self.mesh.nEz is None + + self.assertTrue(np.all([x, y, z])) + + def test_mesh_numbers(self): + c = self.mesh.nC == 12 + f = np.all(self.mesh.nF == [14, 18]) + e = np.all(self.mesh.nE == [18, 14]) + + self.assertTrue(np.all([c, f, e])) + +if __name__ == '__main__': + unittest.main() diff --git a/code/tests/test_mesh.py b/code/tests/test_mesh.py deleted file mode 100644 index a700391f..00000000 --- a/code/tests/test_mesh.py +++ /dev/null @@ -1,74 +0,0 @@ -import unittest -import sys -sys.path.append('../') -from Mesh import Mesh -import numpy as np - - -class TestMeshNumbers3D(unittest.TestCase): - - def setUp(self): - self.mesh = Mesh([6, 2, 3]) - - def test_meshDimensions(self): - self.assertTrue(self.mesh.dim, 3) - - def test_mesh_nc(self): - self.assertTrue(np.all(self.mesh.nc == [6, 2, 3])) - - def test_mesh_nf(self): - x = np.all(self.mesh.nfx == [7, 2, 3]) - y = np.all(self.mesh.nfy == [6, 3, 3]) - z = np.all(self.mesh.nfz == [6, 2, 4]) - - self.assertTrue(np.all([x, y, z])) - - def test_mesh_ne(self): - x = np.all(self.mesh.nex == [6, 3, 4]) - y = np.all(self.mesh.ney == [7, 2, 4]) - z = np.all(self.mesh.nez == [7, 3, 3]) - - self.assertTrue(np.all([x, y, z])) - - def test_mesh_numbers(self): - c = self.mesh.ncells == 36 - f = np.all(self.mesh.nfaces == [42, 54, 48]) - e = np.all(self.mesh.nedges == [72, 56, 63]) - - self.assertTrue(np.all([c, f, e])) - - -class TestMeshNumbers2D(unittest.TestCase): - - def setUp(self): - self.mesh = Mesh([6, 2]) - - def test_meshDimensions(self): - self.assertTrue(self.mesh.dim, 2) - - def test_mesh_nc(self): - self.assertTrue(np.all(self.mesh.nc == [6, 2])) - - def test_mesh_nf(self): - x = np.all(self.mesh.nfx == [7, 2]) - y = np.all(self.mesh.nfy == [6, 3]) - z = self.mesh.nfz is None - - self.assertTrue(np.all([x, y, z])) - - def test_mesh_ne(self): - x = np.all(self.mesh.nex == [6, 3]) - y = np.all(self.mesh.ney == [7, 2]) - z = self.mesh.nez is None - - self.assertTrue(np.all([x, y, z])) - - def test_mesh_numbers(self): - c = self.mesh.ncells == 12 - f = np.all(self.mesh.nfaces == [14, 18]) - e = np.all(self.mesh.nedges == [18, 14]) - - self.assertTrue(np.all([c, f, e])) - -if __name__ == '__main__': - unittest.main() From 6c4910a15733e7735be6e35ce1a17124045721d6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 9 Jul 2013 19:46:50 -0700 Subject: [PATCH 010/359] Base Mesh Documentation --- code/BaseMesh.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/code/BaseMesh.py b/code/BaseMesh.py index 90ad07f3..2b72ee80 100644 --- a/code/BaseMesh.py +++ b/code/BaseMesh.py @@ -2,7 +2,33 @@ import numpy as np class BaseMesh(object): - """BaseMesh does all the counting you don't want to do.""" + """BaseMesh does all the counting you don't want to do. + + x0 origin ndarray (dim, ) + n number of cells ndarray (dim, ) + dim dimension of mesh int 1, 2, or 3 + + nCx num cells in x dir int + nCy num cells in y dir int + nCz num cells in z dir int + nC total number of cells int + + nNx num nodes in x dir int + nNy num nodes in y dir int + nNz num nodes in z dir int + nN total number of nodes int + + nEx num edges in x dir ndarray [nEx_x, nEx_y, nEx_z] + nEy num edges in y dir ndarray [nEy_x, nEy_y, nEy_z] + nEz num edges in z dir ndarray [nEz_x, nEz_y, nEz_z] + nE total number of edges ndarray (dim, ) + + nFx num faces in x dir ndarray [nFx_x, nFx_y, nFx_z] + nFy num faces in y dir ndarray [nFy_x, nFy_y, nFy_z] + nFz num faces in z dir ndarray [nFz_x, nFz_y, nFz_z] + nF total number of faces ndarray (dim, ) + + """ def __init__(self, n, x0=None): # Check inputs From 8e3e0e0faae1d2d4072493894f4ae80e05c60cbb Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 9 Jul 2013 19:50:40 -0700 Subject: [PATCH 011/359] TensorMesh now inherits BaseMesh (worked with Luz!) tests for tensorMesh and utils (e.g. ndgrid) are included and pass Split the TensorMesh into Grid and View --- code/TensorGrid.py | 144 ++++++++++++++++ code/TensorMesh.py | 313 ++++++++-------------------------- code/TensorView.py | 96 +++++++++++ code/tests/test_tensorMesh.py | 34 ++++ code/tests/test_utils.py | 53 ++++++ code/utils.py | 64 ++++--- 6 files changed, 439 insertions(+), 265 deletions(-) create mode 100644 code/TensorGrid.py create mode 100644 code/TensorView.py create mode 100644 code/tests/test_tensorMesh.py create mode 100644 code/tests/test_utils.py diff --git a/code/TensorGrid.py b/code/TensorGrid.py new file mode 100644 index 00000000..aa4b31fd --- /dev/null +++ b/code/TensorGrid.py @@ -0,0 +1,144 @@ +import numpy as np +from utils import ndgrid + + +class TensorGrid(object): + """ + Define nodal, cell-centered and staggered tensor grids for 1, 2 and 3 + dimensions. + + This class is inherited by TensorMesh + """ + def __init__(self): + pass + + def vectorNx(): + doc = "Nodal grid vector (1D) in the x direction." + fget = lambda self: np.r_[0., self.hx.cumsum()] + self.x0[0] + return locals() + vectorNx = property(**vectorNx()) + + def vectorNy(): + doc = "Nodal grid vector (1D) in the y direction." + fget = lambda self: None if self.dim < 2 else np.r_[0., self.hy.cumsum()] + self.x0[1] + return locals() + vectorNy = property(**vectorNy()) + + def vectorNz(): + doc = "Nodal grid vector (1D) in the z direction." + fget = lambda self: None if self.dim < 3 else np.r_[0., self.hz.cumsum()] + self.x0[2] + return locals() + vectorNz = property(**vectorNz()) + + def vectorCCx(): + doc = "Cell-centered grid vector (1D) in the x direction." + fget = lambda self: np.r_[0, self.hx[:-1].cumsum()] + self.hx*0.5 + self.x0[0] + return locals() + vectorCCx = property(**vectorCCx()) + + def vectorCCy(): + doc = "Cell-centered grid vector (1D) in the y direction." + fget = lambda self: None if self.dim < 2 else np.r_[0, self.hy[:-1].cumsum()] + self.hy*0.5 + self.x0[1] + return locals() + vectorCCy = property(**vectorCCy()) + + def vectorCCz(): + doc = "Cell-centered grid vector (1D) in the z direction." + fget = lambda self: None if self.dim < 3 else np.r_[0, self.hz[:-1].cumsum()] + self.hz*0.5 + self.x0[2] + return locals() + vectorCCz = property(**vectorCCz()) + + def gridCC(): + doc = "Cell-centered grid." + + def fget(self): + if self._gridCC is None: + self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridCC + return locals() + _gridCC = None # Store grid by default + gridCC = property(**gridCC()) + + def gridN(): + doc = "Nodal grid." + + def fget(self): + if self._gridN is None: + self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridN + return locals() + _gridN = None # Store grid by default + gridN = property(**gridN()) + + def gridFx(): + doc = "Face staggered grid in the x direction." + + def fget(self): + if self._gridFx is None: + self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridFx + return locals() + _gridFx = None # Store grid by default + gridFx = property(**gridFx()) + + def gridFy(): + doc = "Face staggered grid in the y direction." + + def fget(self): + if self._gridFy is None: + self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridFy + return locals() + _gridFy = None # Store grid by default + gridFy = property(**gridFy()) + + def gridFz(): + doc = "Face staggered grid in the z direction." + + def fget(self): + if self._gridFz is None: + self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridFz + return locals() + _gridFz = None # Store grid by default + gridFz = property(**gridFz()) + + def gridEx(): + doc = "Edge staggered grid in the x direction." + + def fget(self): + if self._gridEx is None: + self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridEx + return locals() + _gridEx = None # Store grid by default + gridEx = property(**gridEx()) + + def gridEy(): + doc = "Edge staggered grid in the y direction." + + def fget(self): + if self._gridEy is None: + self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridEy + return locals() + _gridEy = None # Store grid by default + gridEy = property(**gridEy()) + + def gridEz(): + doc = "Edge staggered grid in the z direction." + + def fget(self): + if self._gridEz is None: + self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridEz + return locals() + _gridEz = None # Store grid by default + gridEz = property(**gridEz()) + + def getBoundaryIndex(self, gridType): + """Needed for faces edges and cells""" + pass + + def getCellNumbering(self): + pass diff --git a/code/TensorMesh.py b/code/TensorMesh.py index 3a061561..6b2305f5 100644 --- a/code/TensorMesh.py +++ b/code/TensorMesh.py @@ -1,257 +1,82 @@ -#------------------------------------------------------------------------------- -# Packages -#------------------------------------------------------------------------------- import numpy as np -import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d import Axes3D +from BaseMesh import BaseMesh +from TensorGrid import TensorGrid +from TensorView import TensorView -#------------------------------------------------------------------------------- -# Class definition -#------------------------------------------------------------------------------- -class TensorMesh: - """ - Define nodal, cell-centered and staggered tensor meshes for 1, 2 and 3 - dimensions. + +class TensorMesh(BaseMesh, TensorGrid, TensorView): """ - - # ---------------------- Properties -------------------------------------- - h = None # Array Spacing or cell-sizes in each direction - x0 = None # Array Origin (x1,x2,x3) - dim = None # Int Dimension - n = None # Array Number of cells in each direction - nC = None # Int Total number of cells - nE = None # Int Total number of edges - nF = None # Int Total number of faces - - # ----------------------- Methods ---------------------------------------- - def __init__(self,h,x0): - """Compute number of edges,faces and cell-centers """ - - # Assign values to properties - self.h = h - self.x0 = x0 - - - #Compute derived properties - self.dim = np.size(x0) - - #Compute the num of cells in each direction - self.n = np.zeros((self.dim,1)) - - for d in range(self.dim): - self.n[d] = np.size(h[d]) - - # Compute the number of cell-centers - self.nC = np.prod(self.n) - - # Compute the number of edges (makes sense only for 3D) - # Equivalent to: - # nEdges = n[0] * (n[1]+1) * (n[2]+1) - # + (n[0]+1) * ny[1] * (nz[2]+1) - # + (n[0]+1) * (ny[1]+1)* (nz[2]) - - if self.dim == 3: - self.nE = np.prod(np.kron(np.ones((3,1)),self.n.T)+np.ones((3,3))-np.eye(3),1) - print self.nE - - # Compute the number of faces (makes sense only for 2 and 3D) - # Equivalent to - # nFaces = (n[0]+1) * n[1] * n[2] - # + n[0] * (ny[1]+1) * nz[2] - # + n[0] * ny[1] * (nz[2]+1) - if self.dim >=2: - self.nF = np.prod(np.kron(np.ones((self.dim,1)),self.n.T)+np.eye(self.dim),1) - print self.nF + TensorMesh is a mesh class that deals with tensor product meshes. - def xin(self,i): - """Construct the 1D nodal mesh from the ith-component of h. Return an array.""" - return np.insert(np.cumsum(self.h[i-1]),0,0.0) + self.x0[i-1] - - def xic(self,i): - """Construct the 1D cell-centerd mesh from the ith-component of h. Return an array.""" - return .5*( np.insert(np.cumsum(self.h[i-1][:,0:-1]),0,0.0) + np.cumsum(self.h[i-1])) + Any Mesh that has a constant width along the entire axis + such that it can defined by a single width vector, called 'h'. + + e.g. + + hx = np.array([1,1,1]) + hy = np.array([1,2]) + hz = np.array([1,1,1,1]) + + mesh = TensorMesh([hx, hy, hz]) + + """ + def __init__(self, h, x0=None): + super(TensorMesh, self).__init__(np.array([len(x) for x in h]), x0) + + assert len(h) == len(x0), "Dimension mismatch. x0 != len(h)" + + for i, h_i in enumerate(h): + assert type(h_i) == np.ndarray, ("h[%i] is not a numpy array." % i) + + # Ensure h contains 1D vectors + self._h = [x.ravel() for x in h] + + def h(): + doc = "h is a list containing the cell widths of the tensor mesh in each dimension." + fget = lambda self: self._h + return locals() + h = property(**h()) + + def hx(): + doc = "Width of cells in the x direction" + fget = lambda self: self._h[0] + return locals() + hx = property(**hx()) + + def hy(): + doc = "Width of cells in the y direction" + fget = lambda self: None if self.dim < 2 else self._h[1] + return locals() + hy = property(**hy()) + + def hz(): + doc = "Width of cells in the z direction" + fget = lambda self: None if self.dim < 3 else self._h[2] + return locals() + hz = property(**hz()) - def getNodalGrid(self): - """Construct nodal grid for 1, 2 and 3 dimensions""" - if self.dim==1: - return [self.xin(1)] - elif self.dim==2: - return self.ndgrid([self.xin(1),self.xin(2)]) - elif self.dim==3: - return self.ndgrid([self.xin(1),self.xin(2),self.xin(3)]) - - def ndgrid(self, xin): - """Form tensorial grid for 1, 2 and 3 dimensions. Return X1,X2,X3 arrays depending on the dimension""" - ei = lambda i : np.ones((np.size(xin[i-1]),1)) - - if self.dim==1: - return [xin] - elif self.dim==2: - X1 = np.kron(ei(2),xin[0]).reshape(-1,1) - X2 = np.kron(xin[1],ei(1).T).reshape(-1,1) - return X1,X2 - elif self.dim==3: - X1 = np.kron(ei(3),np.kron(ei(2),xin[0])).reshape(-1,1) - X2 = np.kron(ei(3).T,np.kron(xin[1],ei(1).T)).reshape(-1,1) - X3 = np.kron(xin[2],np.kron(ei(2),ei(1))).T.reshape(-1,1) - - return X1,X2,X3 - - def getCellCenteredGrid(self): - """Construct cell-centered grid for 1, 2 and 3 dimensions.""" - - if self.dim==1: - return [self.xic(1)] - elif self.dim==2: - return self.ndgrid([self.xic(1),self.xic(2)]) - elif self.dim==3: - return self.ndgrid([self.xic(1),self.xic(2),self.xic(3)]) - - def getFaceStgGrid(self,direction): - """Construct the face staggered grids for 2 and 3 dimensions.""" - if self.dim==1: - print 'Error: dimension must be larger than 1' - elif self.dim==2: - if direction == 1: - return self.ndgrid([self.xin(1),self.xic(2)]) - elif direction == 2: - return self.ndgrid([self.xic(1),self.xin(2)]) - else: - print 'Error: direction must be equal to 1 or 2' - elif self.dim==3: - if direction == 1: - return self.ndgrid([self.xin(1),self.xic(2),self.xic(3)]) - elif direction == 2: - return self.ndgrid([self.xic(1),self.xin(2),self.xic(3)]) - elif direction == 3: - return self.ndgrid([self.xic(1),self.xic(2),self.xin(3)]) - else: - print 'Error: direction must be equal to 1, 2 or 3' - - def getEdgeStgGrid(self,direction): - """Construct the edge staggered grids for 3 dimension case.""" - if self.dim != 3: - print 'Error: dimension must be equal to 3' - else: - if direction == 1: - return self.ndgrid([self.xic(1),self.xin(2),self.xin(3)]) - elif direction == 2: - return self.ndgrid([self.xin(1),self.xic(2),self.xin(3)]) - elif direction == 3: - return self.ndgrid([self.xin(1),self.xin(2),self.xic(3)]) - else: - print 'Error: direction must be equal to 1, 2 or 3' - - def plotImage(self,I): - - if self.dim==1: - fig = plt.figure(1) - fig.clf() - ax=plt.subplot(111) - if np.size(I)==self.n[0]: - print 'cell-centered image' - xx = self.getCellCenteredGrid() - ax.plot(xx[0],I,'ro') - elif np.size(I)==self.n[0]+1: - print 'nodal image' - xx = self.getNodalGrid() - ax.plot(xx[0],I,'bs') - - fig.show() - - - def plotGrid(self): - """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" - if self.dim == 1: - fig = plt.figure(1) - fig.clf() - ax = plt.subplot(111) - xn = self.getNodalGrid() - xc = self.getCellCenteredGrid() - print xn - ax.hold(True) - ax.plot(xn,np.ones(np.shape(xn)),'bs') - ax.plot(xc,np.ones(np.shape(xc)),'ro') - ax.plot(xn,np.ones(np.shape(xn)),'k--') - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - fig.show() - elif self.dim == 2: - fig = plt.figure(2) - fig.clf() - ax = plt.subplot(111) - xn = self.getNodalGrid() - xc = self.getCellCenteredGrid() - xs1 = self.getFaceStgGrid(1) - xs2 = self.getFaceStgGrid(2) - - ax.hold(True) - ax.plot(xn[0],xn[1],'bs') - ax.plot(xc[0],xc[1],'ro') - ax.plot(xs1[0],xs1[1],'g>') - ax.plot(xs2[0],xs2[1],'g^') - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - ax.set_ylabel('x2') - fig.show() - elif self.dim == 3: - fig = plt.figure(3) - fig.clf() - ax = fig.add_subplot(111, projection='3d') - xn = self.getNodalGrid() - xc = self.getCellCenteredGrid() - xfs1 = self.getFaceStgGrid(1) - xfs2 = self.getFaceStgGrid(2) - xfs3 = self.getFaceStgGrid(3) - xes1 = self.getEdgeStgGrid(1) - xes2 = self.getEdgeStgGrid(2) - xes3 = self.getEdgeStgGrid(3) - - ax.hold(True) - ax.plot(xn[0],xn[1],'bs',zs=xn[2]) - ax.plot(xc[0],xc[1],'ro',zs=xc[2]) - ax.plot(xfs1[0],xfs1[1],'g>',zs=xfs1[2]) - ax.plot(xfs2[0],xfs2[1],'g<',zs=xfs2[2]) - ax.plot(xfs3[0],xfs3[1],'g^',zs=xfs3[2]) - ax.plot(xes1[0],xes1[1],'k>',zs=xes1[2]) - ax.plot(xes2[0],xes2[1],'k<',zs=xes2[2]) - ax.plot(xes3[0],xes3[1],'k^',zs=xes3[2]) - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - ax.set_ylabel('x2') - ax.set_zlabel('x3') - fig.show() - - - if __name__ == '__main__': print('Welcome to tensor mesh!') - + testDim = 1 - h1 = 0.3*np.ones((1,7)) - h1[:,0] = 0.5 - h1[:,-1] = 0.6 - h2 = .5* np.ones((1,4)) - h3 = .4* np.ones((1,6)) - x0 = np.zeros((3,1)) - + h1 = 0.3*np.ones((1, 7)) + h1[:, 0] = 0.5 + h1[:, -1] = 0.6 + h2 = .5 * np.ones((1, 4)) + h3 = .4 * np.ones((1, 6)) + x0 = np.zeros((3, 1)) + if testDim == 1: h = [h1] - x0 = x0[0] - elif testDim==2: - h = [h1,h2] + x0 = x0[0] + elif testDim == 2: + h = [h1, h2] x0 = x0[0:2] else: - h = [h1,h2,h3] - - I = np.linspace(0,1,8) - M = TensorMesh(h,x0) - - xn = M.plotGrid() - - - \ No newline at end of file + h = [h1, h2, h3] + + I = np.linspace(0, 1, 8) + M = TensorMesh(h, x0) + + xn = M.plotGrid() diff --git a/code/TensorView.py b/code/TensorView.py new file mode 100644 index 00000000..18a7bd00 --- /dev/null +++ b/code/TensorView.py @@ -0,0 +1,96 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D + + +class TensorView(object): + """ + Provides viewing functions for TensorMesh + + This class is inherited by TensorMesh + """ + def __init__(self): + pass + + def plotImage(self, I): + + if self.dim == 1: + fig = plt.figure(1) + fig.clf() + ax = plt.subplot(111) + if np.size(I) == self.n[0]: + print 'cell-centered image' + xx = self.gridCC + ax.plot(xx[0], I, 'ro') + elif np.size(I) == self.n[0]+1: + print 'nodal image' + xx = self.gridN + ax.plot(xx[0], I, 'bs') + + fig.show() + + def plotGrid(self): + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" + if self.dim == 1: + fig = plt.figure(1) + fig.clf() + ax = plt.subplot(111) + xn = self.gridN + xc = self.gridCC + print xn + ax.hold(True) + ax.plot(xn, np.ones(np.shape(xn)), 'bs') + ax.plot(xc, np.ones(np.shape(xc)), 'ro') + ax.plot(xn, np.ones(np.shape(xn)), 'k--') + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + fig.show() + elif self.dim == 2: + fig = plt.figure(2) + fig.clf() + ax = plt.subplot(111) + xn = self.gridN + xc = self.gridCC + xs1 = self.gridFx + xs2 = self.gridFy + + ax.hold(True) + ax.plot(xn[:, 0], xn[:, 1], 'bs') + ax.plot(xc[:, 0], xc[:, 1], 'ro') + ax.plot(xs1[:, 0], xs1[:, 1], 'g>') + ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + fig.show() + elif self.dim == 3: + fig = plt.figure(3) + fig.clf() + ax = fig.add_subplot(111, projection='3d') + xn = self.gridN + xc = self.gridCC + xfs1 = self.gridFx + xfs2 = self.gridFy + xfs3 = self.gridFz + + xes1 = self.gridEx + xes2 = self.gridEy + xes3 = self.gridEz + + ax.hold(True) + ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) + ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) + ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) + ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) + ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) + ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) + ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) + ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + ax.set_zlabel('x3') + fig.show() diff --git a/code/tests/test_tensorMesh.py b/code/tests/test_tensorMesh.py new file mode 100644 index 00000000..e1b74374 --- /dev/null +++ b/code/tests/test_tensorMesh.py @@ -0,0 +1,34 @@ +import numpy as np +import unittest +import sys +sys.path.append('../') +from TensorMesh import TensorMesh + + +class TestSequenceFunctions(unittest.TestCase): + + def setUp(self): + a = np.array([1, 1, 1]) + b = np.array([1, 2]) + x0 = np.array([3, 5]) + self.mesh2 = TensorMesh([a, b], x0) + + def test_vectorN_2D(self): + testNx = np.array([3, 4, 5, 6]) + testNy = np.array([5, 6, 8]) + + xtest = np.all(self.mesh2.vectorNx == testNx) + ytest = np.all(self.mesh2.vectorNy == testNy) + self.assertTrue(xtest and ytest) + + def test_vectorCC_2D(self): + testNx = np.array([3.5, 4.5, 5.5]) + testNy = np.array([5.5, 7]) + + xtest = np.all(self.mesh2.vectorCCx == testNx) + ytest = np.all(self.mesh2.vectorCCy == testNy) + self.assertTrue(xtest and ytest) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/tests/test_utils.py b/code/tests/test_utils.py new file mode 100644 index 00000000..5d05b710 --- /dev/null +++ b/code/tests/test_utils.py @@ -0,0 +1,53 @@ +import numpy as np +import unittest +import sys +sys.path.append('../') +from utils import mkvc, ndgrid + + +class TestSequenceFunctions(unittest.TestCase): + + def setUp(self): + self.a = np.array([1, 2, 3]) + self.b = np.array([1, 2]) + self.c = np.array([1, 2, 3, 4]) + + def test_mkvc1(self): + x = mkvc(self.a) + self.assertTrue(x.shape, (3,)) + + def test_mkvc2(self): + x = mkvc(self.a, 2) + self.assertTrue(x.shape, (3, 1)) + + def test_mkvc3(self): + x = mkvc(self.a, 3) + self.assertTrue(x.shape, (3, 1, 1)) + + def test_ndgrid_2D(self): + XY = ndgrid([self.a, self.b]) + + X1_test = np.array([1, 2, 3, 1, 2, 3]) + X2_test = np.array([1, 1, 1, 2, 2, 2]) + + xtest = np.all(XY[:, 0] == X1_test) + ytest = np.all(XY[:, 1] == X2_test) + + self.assertTrue(xtest and ytest) + + def test_ndgrid_3D(self): + XYZ = ndgrid([self.a, self.b, self.c]) + + X1_test = np.array([1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]) + X2_test = np.array([1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2]) + X3_test = np.array([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]) + + xtest = np.all(XYZ[:, 0] == X1_test) + ytest = np.all(XYZ[:, 1] == X2_test) + ztest = np.all(XYZ[:, 2] == X3_test) + + self.assertTrue(xtest and ytest and ztest) + +if __name__ == '__main__': + unittest.main() + diff --git a/code/utils.py b/code/utils.py index 7ea54f17..a41d8687 100644 --- a/code/utils.py +++ b/code/utils.py @@ -1,4 +1,5 @@ from numpy import * +import numpy as np def diff(A, d): @@ -43,35 +44,56 @@ def ave(A, d): print('d must be 1,2 or 3') -def reshapeF(sp, d): - return reshape(sp, d, 'F') +def reshapeF(x, size): + return np.reshape(x, size, order='F') -def mkvc(A): - return reshape(A, [size(A), 1], 'F').flatten() +def mkvc(x, numDims=1): + """Creates a vector with the number of dimension specified + + e.g.: + + a = np.array(1,2,3) + + mkvc(a, 1).shape + > (3, ) + + mkvc(a, 2).shape + > (3, 1) + + mkvc(a, 3).shape + > (3, 1, 1) + + """ + assert type(x) == np.ndarray, "Vector must be a numpy array" + + if numDims == 1: + return x.flatten(order='F') + elif numDims == 2: + return x.flatten(order='F')[:, np.newaxis] + elif numDims == 3: + return x.flatten(order='F')[:, np.newaxis, np.newaxis] -def ndgrid(x, y, z): +def ndgrid(xin): + """Form tensorial grid for 1, 2 and 3 dimensions. Return X1,X2,X3 arrays depending on the dimension""" - n1 = size(x) - n2 = size(y) - n3 = size(z) - X = zeros([n1, n2, n3]) - Y = zeros([n1, n2, n3]) - Z = zeros([n1, n2, n3]) - for i in range(0, n2): - for j in range(0, n3): - X[:, i, j] = x + if len(xin) == 1: + return xin + elif len(xin) == 2: + X2, X1 = [mkvc(x) for x in np.broadcast_arrays(mkvc(xin[1], 1), mkvc(xin[0], 2))] + return np.c_[X1, X2] + elif len(xin) == 3: + X3, X2, X1 = [mkvc(x) for x in np.broadcast_arrays(mkvc(xin[2], 1), mkvc(xin[1], 2), mkvc(xin[0], 3))] + return np.c_[X1, X2, X3] - for i in range(0, n1): - for j in range(0, n3): - Y[i, :, j] = y - for i in range(0, n1): - for j in range(0, n2): - Z[i, j, :] = z +def flattenF(x): + return np.flatten(x, order='F') - return (X, Y, Z) + +def printF(x): + pass def ind2sub(shape, ind): From e2fa98602c1bde796c1606279013978eb32c2610 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Tue, 9 Jul 2013 21:38:17 -0700 Subject: [PATCH 012/359] Moved code not being used in new code to it's own directory. --- code/{ => EldadsCode}/GaussNewton.py | 0 code/{ => EldadsCode}/MFDdriver.py | 0 code/{ => EldadsCode}/getCellVolume.py | 0 code/{ => EldadsCode}/getDiffOps.py | 0 code/{ => EldadsCode}/getEdgeInnerProduct.py | 0 code/{ => EldadsCode}/getEdgeTangent.py | 0 code/{ => EldadsCode}/getFaceInnerProduct.py | 0 code/{ => EldadsCode}/getFaceNormals.py | 0 code/{ => EldadsCode}/getVolume.py | 0 code/{ => EldadsCode}/inv3X3BlockDiagonal.py | 0 code/{ => EldadsCode}/meshUtils.py | 0 code/{ => EldadsCode}/sputils.py | 0 code/{ => EldadsCode}/tools.py | 0 code/{ => EldadsCode}/zevel.py | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename code/{ => EldadsCode}/GaussNewton.py (100%) rename code/{ => EldadsCode}/MFDdriver.py (100%) rename code/{ => EldadsCode}/getCellVolume.py (100%) rename code/{ => EldadsCode}/getDiffOps.py (100%) rename code/{ => EldadsCode}/getEdgeInnerProduct.py (100%) rename code/{ => EldadsCode}/getEdgeTangent.py (100%) rename code/{ => EldadsCode}/getFaceInnerProduct.py (100%) rename code/{ => EldadsCode}/getFaceNormals.py (100%) rename code/{ => EldadsCode}/getVolume.py (100%) rename code/{ => EldadsCode}/inv3X3BlockDiagonal.py (100%) rename code/{ => EldadsCode}/meshUtils.py (100%) rename code/{ => EldadsCode}/sputils.py (100%) rename code/{ => EldadsCode}/tools.py (100%) rename code/{ => EldadsCode}/zevel.py (100%) diff --git a/code/GaussNewton.py b/code/EldadsCode/GaussNewton.py similarity index 100% rename from code/GaussNewton.py rename to code/EldadsCode/GaussNewton.py diff --git a/code/MFDdriver.py b/code/EldadsCode/MFDdriver.py similarity index 100% rename from code/MFDdriver.py rename to code/EldadsCode/MFDdriver.py diff --git a/code/getCellVolume.py b/code/EldadsCode/getCellVolume.py similarity index 100% rename from code/getCellVolume.py rename to code/EldadsCode/getCellVolume.py diff --git a/code/getDiffOps.py b/code/EldadsCode/getDiffOps.py similarity index 100% rename from code/getDiffOps.py rename to code/EldadsCode/getDiffOps.py diff --git a/code/getEdgeInnerProduct.py b/code/EldadsCode/getEdgeInnerProduct.py similarity index 100% rename from code/getEdgeInnerProduct.py rename to code/EldadsCode/getEdgeInnerProduct.py diff --git a/code/getEdgeTangent.py b/code/EldadsCode/getEdgeTangent.py similarity index 100% rename from code/getEdgeTangent.py rename to code/EldadsCode/getEdgeTangent.py diff --git a/code/getFaceInnerProduct.py b/code/EldadsCode/getFaceInnerProduct.py similarity index 100% rename from code/getFaceInnerProduct.py rename to code/EldadsCode/getFaceInnerProduct.py diff --git a/code/getFaceNormals.py b/code/EldadsCode/getFaceNormals.py similarity index 100% rename from code/getFaceNormals.py rename to code/EldadsCode/getFaceNormals.py diff --git a/code/getVolume.py b/code/EldadsCode/getVolume.py similarity index 100% rename from code/getVolume.py rename to code/EldadsCode/getVolume.py diff --git a/code/inv3X3BlockDiagonal.py b/code/EldadsCode/inv3X3BlockDiagonal.py similarity index 100% rename from code/inv3X3BlockDiagonal.py rename to code/EldadsCode/inv3X3BlockDiagonal.py diff --git a/code/meshUtils.py b/code/EldadsCode/meshUtils.py similarity index 100% rename from code/meshUtils.py rename to code/EldadsCode/meshUtils.py diff --git a/code/sputils.py b/code/EldadsCode/sputils.py similarity index 100% rename from code/sputils.py rename to code/EldadsCode/sputils.py diff --git a/code/tools.py b/code/EldadsCode/tools.py similarity index 100% rename from code/tools.py rename to code/EldadsCode/tools.py diff --git a/code/zevel.py b/code/EldadsCode/zevel.py similarity index 100% rename from code/zevel.py rename to code/EldadsCode/zevel.py From 68b4719aea6092e9ab8f174f7a11c246a6a60aa6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 9 Jul 2013 22:00:17 -0700 Subject: [PATCH 013/359] Ability to run all tests at once. Removed __init__.py added runTests.py and .sh so that we can run all tests at one time. --- code/tests/__init__.py | 3 --- code/tests/runTests.py | 11 +++++++++++ code/tests/runTests.sh | 3 +++ code/tests/test_basemesh.py | 2 +- code/utils.py | 16 +++++++--------- 5 files changed, 22 insertions(+), 13 deletions(-) delete mode 100644 code/tests/__init__.py create mode 100644 code/tests/runTests.py create mode 100644 code/tests/runTests.sh diff --git a/code/tests/__init__.py b/code/tests/__init__.py deleted file mode 100644 index 80b21e43..00000000 --- a/code/tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# init.py - -from test_mesh import * \ No newline at end of file diff --git a/code/tests/runTests.py b/code/tests/runTests.py new file mode 100644 index 00000000..b6662f00 --- /dev/null +++ b/code/tests/runTests.py @@ -0,0 +1,11 @@ +import glob +import unittest + +# This code will run all tests in directory named test_*.py + +test_file_strings = glob.glob('test_*.py') +module_strings = [str[0:len(str)-3] for str in test_file_strings] +suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str + in module_strings] +testSuite = unittest.TestSuite(suites) +text_runner = unittest.TextTestRunner().run(testSuite) diff --git a/code/tests/runTests.sh b/code/tests/runTests.sh new file mode 100644 index 00000000..9bd83e67 --- /dev/null +++ b/code/tests/runTests.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +python -m unittest discover \ No newline at end of file diff --git a/code/tests/test_basemesh.py b/code/tests/test_basemesh.py index 88655c60..9aece19b 100644 --- a/code/tests/test_basemesh.py +++ b/code/tests/test_basemesh.py @@ -5,7 +5,7 @@ from BaseMesh import BaseMesh import numpy as np -class TestMeshNumbers3D(unittest.TestCase): +class TestBaseMesh(unittest.TestCase): def setUp(self): self.mesh = BaseMesh([6, 2, 3]) diff --git a/code/utils.py b/code/utils.py index a41d8687..a5b877cb 100644 --- a/code/utils.py +++ b/code/utils.py @@ -75,9 +75,15 @@ def mkvc(x, numDims=1): return x.flatten(order='F')[:, np.newaxis, np.newaxis] -def ndgrid(xin): +def ndgrid(*args): """Form tensorial grid for 1, 2 and 3 dimensions. Return X1,X2,X3 arrays depending on the dimension""" + # you can either pass a list [x1, x2, x3] or each seperately + if type(args[0]) == list: + xin = args[0] + else: + xin = args + if len(xin) == 1: return xin elif len(xin) == 2: @@ -88,14 +94,6 @@ def ndgrid(xin): return np.c_[X1, X2, X3] -def flattenF(x): - return np.flatten(x, order='F') - - -def printF(x): - pass - - def ind2sub(shape, ind): # From the given shape, returns the subscrips of the given index revshp = [] From 18fd590effcc776d7b1078b88d9bbcd18c87c98a Mon Sep 17 00:00:00 2001 From: SEOGI KANG Date: Wed, 10 Jul 2013 17:10:54 -0700 Subject: [PATCH 014/359] Generating 3D divergence matrix: getDIV.py Some funtions for sparse matrix: sputils.py -> Updated we've discussed before Test example for divergence --- code/getDIV.py | 75 ++++++++++++++++++++++++++++++++++++++++++ code/sputils.py | 18 ++++++++++ code/tests/test_div.py | 45 +++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 code/getDIV.py create mode 100644 code/sputils.py create mode 100644 code/tests/test_div.py diff --git a/code/getDIV.py b/code/getDIV.py new file mode 100644 index 00000000..6c45c57c --- /dev/null +++ b/code/getDIV.py @@ -0,0 +1,75 @@ +import numpy as np +from scipy import sparse +from utils import mkvc +from sputils import ddx, sdiag, speye, kron3 + +def getvol(h): + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # Compute cell volumes + v12 = h1.T*h2 + V = mkvc(v12.reshape(-1,1)*h3) + + return V + +def getarea(h): + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + # Compute areas of cell faces + area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) + area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) + area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) + area = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) + + return area + +def getDivMatrix(h): + """Consturct the 3D divergence operator on Faces.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + # Compute areas of cell faces + #area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) + #area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) + #area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) + #area = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) + area = getarea(h) + + S = sdiag(area) + + # Compute cell volumes + #v12 = h1.T*h2 + #V = mkvc(v12.reshape(-1,1)*h3) + V = getvol(h) + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3), speye(n2), d1) + D2 = kron3(speye(n3), d2, speye(n1)) + D3 = kron3(d3, speye(n2), speye(n1)) + + D = sparse.hstack((sparse.hstack((D1, D2)), D3)) + return sdiag(1/V)*D*S + diff --git a/code/sputils.py b/code/sputils.py new file mode 100644 index 00000000..204e71cc --- /dev/null +++ b/code/sputils.py @@ -0,0 +1,18 @@ +import numpy as np +from scipy import sparse + +def ddx(n): + """Define 1D derivatives""" + return sparse.spdiags((np.ones((n+1,1))*[-1,1]).T, [0,1], n, n+1) + +def sdiag(h): + """Sparse diagonal matrix""" + return sparse.spdiags(h, 0, np.size(h), np.size(h)) + +def speye(n): + """Sparse identity""" + return sparse.identity(n) + +def kron3(A, B, C): + """Two kron prods""" + return sparse.kron(sparse.kron(A, B), C) \ No newline at end of file diff --git a/code/tests/test_div.py b/code/tests/test_div.py new file mode 100644 index 00000000..bc0c1a9d --- /dev/null +++ b/code/tests/test_div.py @@ -0,0 +1,45 @@ +import numpy as np + +import sys +sys.path.append('../') +from TensorMesh import TensorMesh +from getDIV import getDivMatrix, getarea, getvol + +# Define the mesh +err=0. +for i in range(4): + icount=i+1; + nc = 2*icount; + h1 = np.pi/nc*np.ones((1,nc)) + h2 = np.pi/nc*np.ones((1,nc)) + h3 = np.pi/nc*np.ones((1,nc)) + h = [h1, h2, h3] + x0 = -np.pi/2*np.ones((3, 1)) + M = TensorMesh(h, x0) + #n = M.plotGrid() + + # Generate DIV matrix + DIV = getDivMatrix(h) + + #Test function + fun = lambda x: np.sin(x) + Fx = fun(M.gridFx[:,0]) + Fy = fun(M.gridFy[:,1]) + Fz = fun(M.gridFz[:,2]) + + F = np.concatenate((Fx,Fy,Fz)) + divF = DIV*F + sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + divF_anal = sol(M.gridCC[:,0], M.gridCC[:,1], M.gridCC[:,2]) + + area = getarea(h) + vol = getvol(h) + err = np.linalg.norm((divF-divF_anal)*np.sqrt(vol), 2) + if icount == 1: + err1 = err + print 'h | 2 norm | error ratio' + print '---------------------------------------' + print '%6.4f | %8.2e |'% (h1[0,0], err) + else: + print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err1/err) + From b33b04d9a627df71d6e9b7efe2cdf2b88119d7b3 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 10 Jul 2013 17:41:50 -0700 Subject: [PATCH 015/359] Improved ndgrid, and pushed unused utilities to EldadsCode folder. ndgrid returns vectors in a matrix by default, but input kwarg of vector=False, and you can return the matrices. --- code/EldadsCode/utils.py | 87 +++++++++++++++++++++ code/utils.py | 160 ++++++++++++++------------------------- 2 files changed, 143 insertions(+), 104 deletions(-) create mode 100644 code/EldadsCode/utils.py diff --git a/code/EldadsCode/utils.py b/code/EldadsCode/utils.py new file mode 100644 index 00000000..e912c5b8 --- /dev/null +++ b/code/EldadsCode/utils.py @@ -0,0 +1,87 @@ +from numpy import * +import numpy as np + + +def diff(A, d): + if(d == 1): + return A[1:, :, :] - A[:-1, :, :] + elif(d == 2): + return A[:, 1:, :] - A[:, :-1, :] + else: + return A[:, :, 1:] - A[:, :, :-1] + #else: + # print('d must be 1,2 or 3') + + +def diffp(A, d1, d2): + if(d1 == 1 and d2 == 2): + return A[1:, 1:, :] - A[:-1, :-1, :] + elif(d1 == 1 and d2 == 3): + return A[1:, :, 1:] - A[:-1, :, :-1] + else: + return A[:, 1:, 1:] - A[:, :-1, :-1] + + +def diffm(A, d1, d2): + if(d1 == 3 and d2 == 2): + return A[:, :-1, 1:] - A[:, 1:, :-1] + elif(d1 == 1 and d2 == 3): + return A[1:, :, :-1] - A[:-1, :, 1:] + elif(d1 == 2 and d2 == 1): + return A[:-1, 1:, :] - A[1:, :-1, :] + else: + print('d must be 1, 2 or 3') + + +def ave(A, d): + if(d == 1): + return 0.5*(A[1:, :, :] + A[:-1, :, :]) + elif(d == 2): + return 0.5*(A[:, 1:, :] + A[:, :-1, :]) + elif(d == 3): + return 0.5*(A[:, :, 1:] + A[:, :, :-1]) + else: + print('d must be 1,2 or 3') + + +def mkmat(x): + return reshape(matrix(x), (size(x), 1), 'F') + + +def hstack3(a, b, c): + a = mkvc(a) + b = mkvc(b) + c = mkvc(c) + a = mkmat(a) + b = mkmat(b) + c = mkmat(c) + return hstack((hstack((a, b)), c)) + + +def ind2sub(shape, ind): + """From the given shape, returns the subscrips of the given index""" + revshp = [] + revshp.extend(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult)) + + sub = [] + + for i in range(0, len(shape)): + sub.extend([math.floor(ind / mult[i])]) + ind = ind - (math.floor(ind/mult[i]) * mult[i]) + return sub + + +def sub2ind(shape, subs): + """From the given shape, returns the index of the given subscript""" + revshp = list(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult), 1) + + idx = dot((subs), (mult)) + return idx diff --git a/code/utils.py b/code/utils.py index a5b877cb..4937062b 100644 --- a/code/utils.py +++ b/code/utils.py @@ -1,49 +1,6 @@ -from numpy import * import numpy as np -def diff(A, d): - if(d == 1): - return A[1:, :, :] - A[:-1, :, :] - elif(d == 2): - return A[:, 1:, :] - A[:, :-1, :] - else: - return A[:, :, 1:] - A[:, :, :-1] - #else: - # print('d must be 1,2 or 3') - - -def diffp(A, d1, d2): - if(d1 == 1 and d2 == 2): - return A[1:, 1:, :] - A[:-1, :-1, :] - elif(d1 == 1 and d2 == 3): - return A[1:, :, 1:] - A[:-1, :, :-1] - else: - return A[:, 1:, 1:] - A[:, :-1, :-1] - - -def diffm(A, d1, d2): - if(d1 == 3 and d2 == 2): - return A[:, :-1, 1:] - A[:, 1:, :-1] - elif(d1 == 1 and d2 == 3): - return A[1:, :, :-1] - A[:-1, :, 1:] - elif(d1 == 2 and d2 == 1): - return A[:-1, 1:, :] - A[1:, :-1, :] - else: - print('d must be 1, 2 or 3') - - -def ave(A, d): - if(d == 1): - return 0.5*(A[1:, :, :] + A[:-1, :, :]) - elif(d == 2): - return 0.5*(A[:, 1:, :] + A[:, :-1, :]) - elif(d == 3): - return 0.5*(A[:, :, 1:] + A[:, :, :-1]) - else: - print('d must be 1,2 or 3') - - def reshapeF(x, size): return np.reshape(x, size, order='F') @@ -53,7 +10,7 @@ def mkvc(x, numDims=1): e.g.: - a = np.array(1,2,3) + a = np.array([1, 2, 3]) mkvc(a, 1).shape > (3, ) @@ -75,8 +32,45 @@ def mkvc(x, numDims=1): return x.flatten(order='F')[:, np.newaxis, np.newaxis] -def ndgrid(*args): - """Form tensorial grid for 1, 2 and 3 dimensions. Return X1,X2,X3 arrays depending on the dimension""" +def ndgrid(*args, **kwargs): + """ + Form tensorial grid for 1, 2, or 3 dimensions. + + Returns as column vectors by default. + + To return as matrix input: + + ndgrid(..., vector=False) + + The inputs can be a list or separate arguments. + + e.g. + + a = np.array([1, 2, 3]) + b = np.array([1, 2]) + + XY = ndgrid(a, b) + > [[1 1] + [2 1] + [3 1] + [1 2] + [2 2] + [3 2]] + + X, Y = ndgrid(a, b, vector=False) + > X = [[1 1] + [2 2] + [3 3]] + > Y = [[1 2] + [1 2] + [1 2]] + + """ + + # Read the keyword arguments, and only accept a vector=True/False + vector = kwargs.pop('vector', True) + assert type(vector) == bool, "'vector' keyword must be a bool" + assert len(kwargs) == 0, "Only 'vector' keyword accepted" # you can either pass a list [x1, x2, x3] or each seperately if type(args[0]) == list: @@ -84,64 +78,22 @@ def ndgrid(*args): else: xin = args + # Each vector needs to be a numpy array + assert np.all([type(x) == np.ndarray for x in xin]), "All vectors must be numpy arrays." + if len(xin) == 1: - return xin + return xin[0] elif len(xin) == 2: - X2, X1 = [mkvc(x) for x in np.broadcast_arrays(mkvc(xin[1], 1), mkvc(xin[0], 2))] - return np.c_[X1, X2] + XY = np.broadcast_arrays(mkvc(xin[1], 1), mkvc(xin[0], 2)) + if vector: + X2, X1 = [mkvc(x) for x in XY] + return np.c_[X1, X2] + else: + return XY[1], XY[0] elif len(xin) == 3: - X3, X2, X1 = [mkvc(x) for x in np.broadcast_arrays(mkvc(xin[2], 1), mkvc(xin[1], 2), mkvc(xin[0], 3))] - return np.c_[X1, X2, X3] - - -def ind2sub(shape, ind): - # From the given shape, returns the subscrips of the given index - revshp = [] - revshp.extend(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult)) - - sub = [] - - for i in range(0, len(shape)): - sub.extend([math.floor(ind / mult[i])]) - ind = ind - (math.floor(ind/mult[i]) * mult[i]) - return sub - - -def sub2ind(shape, subs): - # From the given shape, returns the index of the given subscript - revshp = list(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult), 1) - - idx = dot((subs), (mult)) - return idx - - -def mkmat(x): - return reshape(matrix(x), (size(x), 1), 'F') - - -def hstack3(a, b, c): - a = mkvc(a) - b = mkvc(b) - c = mkvc(c) - a = mkmat(a) - b = mkmat(b) - c = mkmat(c) - return hstack((hstack((a, b)), c)) - - -if __name__ == '__main__': - - X, Y, Z = mgrid[0:4, 0:5, 0:6] - - print Z - - t = ave(X, 1) - print t + XYZ = np.broadcast_arrays(mkvc(xin[2], 1), mkvc(xin[1], 2), mkvc(xin[0], 3)) + if vector: + X3, X2, X1 = [mkvc(x) for x in XYZ] + return np.c_[X1, X2, X3] + else: + return XYZ[2], XYZ[1], XYZ[0] From ba4e0a915e0ca93e54ca6834c46f42dd4e3a75c1 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 11 Jul 2013 12:33:14 -0700 Subject: [PATCH 016/359] Merge grid into the mesh class. --- code/TensorGrid.py | 144 --------------------------------------------- code/TensorMesh.py | 132 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 144 deletions(-) delete mode 100644 code/TensorGrid.py diff --git a/code/TensorGrid.py b/code/TensorGrid.py deleted file mode 100644 index aa4b31fd..00000000 --- a/code/TensorGrid.py +++ /dev/null @@ -1,144 +0,0 @@ -import numpy as np -from utils import ndgrid - - -class TensorGrid(object): - """ - Define nodal, cell-centered and staggered tensor grids for 1, 2 and 3 - dimensions. - - This class is inherited by TensorMesh - """ - def __init__(self): - pass - - def vectorNx(): - doc = "Nodal grid vector (1D) in the x direction." - fget = lambda self: np.r_[0., self.hx.cumsum()] + self.x0[0] - return locals() - vectorNx = property(**vectorNx()) - - def vectorNy(): - doc = "Nodal grid vector (1D) in the y direction." - fget = lambda self: None if self.dim < 2 else np.r_[0., self.hy.cumsum()] + self.x0[1] - return locals() - vectorNy = property(**vectorNy()) - - def vectorNz(): - doc = "Nodal grid vector (1D) in the z direction." - fget = lambda self: None if self.dim < 3 else np.r_[0., self.hz.cumsum()] + self.x0[2] - return locals() - vectorNz = property(**vectorNz()) - - def vectorCCx(): - doc = "Cell-centered grid vector (1D) in the x direction." - fget = lambda self: np.r_[0, self.hx[:-1].cumsum()] + self.hx*0.5 + self.x0[0] - return locals() - vectorCCx = property(**vectorCCx()) - - def vectorCCy(): - doc = "Cell-centered grid vector (1D) in the y direction." - fget = lambda self: None if self.dim < 2 else np.r_[0, self.hy[:-1].cumsum()] + self.hy*0.5 + self.x0[1] - return locals() - vectorCCy = property(**vectorCCy()) - - def vectorCCz(): - doc = "Cell-centered grid vector (1D) in the z direction." - fget = lambda self: None if self.dim < 3 else np.r_[0, self.hz[:-1].cumsum()] + self.hz*0.5 + self.x0[2] - return locals() - vectorCCz = property(**vectorCCz()) - - def gridCC(): - doc = "Cell-centered grid." - - def fget(self): - if self._gridCC is None: - self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) - return self._gridCC - return locals() - _gridCC = None # Store grid by default - gridCC = property(**gridCC()) - - def gridN(): - doc = "Nodal grid." - - def fget(self): - if self._gridN is None: - self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) - return self._gridN - return locals() - _gridN = None # Store grid by default - gridN = property(**gridN()) - - def gridFx(): - doc = "Face staggered grid in the x direction." - - def fget(self): - if self._gridFx is None: - self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) - return self._gridFx - return locals() - _gridFx = None # Store grid by default - gridFx = property(**gridFx()) - - def gridFy(): - doc = "Face staggered grid in the y direction." - - def fget(self): - if self._gridFy is None: - self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) - return self._gridFy - return locals() - _gridFy = None # Store grid by default - gridFy = property(**gridFy()) - - def gridFz(): - doc = "Face staggered grid in the z direction." - - def fget(self): - if self._gridFz is None: - self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) - return self._gridFz - return locals() - _gridFz = None # Store grid by default - gridFz = property(**gridFz()) - - def gridEx(): - doc = "Edge staggered grid in the x direction." - - def fget(self): - if self._gridEx is None: - self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) - return self._gridEx - return locals() - _gridEx = None # Store grid by default - gridEx = property(**gridEx()) - - def gridEy(): - doc = "Edge staggered grid in the y direction." - - def fget(self): - if self._gridEy is None: - self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) - return self._gridEy - return locals() - _gridEy = None # Store grid by default - gridEy = property(**gridEy()) - - def gridEz(): - doc = "Edge staggered grid in the z direction." - - def fget(self): - if self._gridEz is None: - self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) - return self._gridEz - return locals() - _gridEz = None # Store grid by default - gridEz = property(**gridEz()) - - def getBoundaryIndex(self, gridType): - """Needed for faces edges and cells""" - pass - - def getCellNumbering(self): - pass diff --git a/code/TensorMesh.py b/code/TensorMesh.py index 6b2305f5..d45856a3 100644 --- a/code/TensorMesh.py +++ b/code/TensorMesh.py @@ -2,6 +2,7 @@ import numpy as np from BaseMesh import BaseMesh from TensorGrid import TensorGrid from TensorView import TensorView +from utils import ndgrid class TensorMesh(BaseMesh, TensorGrid, TensorView): @@ -55,6 +56,137 @@ class TensorMesh(BaseMesh, TensorGrid, TensorView): return locals() hz = property(**hz()) + def vectorNx(): + doc = "Nodal grid vector (1D) in the x direction." + fget = lambda self: np.r_[0., self.hx.cumsum()] + self.x0[0] + return locals() + vectorNx = property(**vectorNx()) + + def vectorNy(): + doc = "Nodal grid vector (1D) in the y direction." + fget = lambda self: None if self.dim < 2 else np.r_[0., self.hy.cumsum()] + self.x0[1] + return locals() + vectorNy = property(**vectorNy()) + + def vectorNz(): + doc = "Nodal grid vector (1D) in the z direction." + fget = lambda self: None if self.dim < 3 else np.r_[0., self.hz.cumsum()] + self.x0[2] + return locals() + vectorNz = property(**vectorNz()) + + def vectorCCx(): + doc = "Cell-centered grid vector (1D) in the x direction." + fget = lambda self: np.r_[0, self.hx[:-1].cumsum()] + self.hx*0.5 + self.x0[0] + return locals() + vectorCCx = property(**vectorCCx()) + + def vectorCCy(): + doc = "Cell-centered grid vector (1D) in the y direction." + fget = lambda self: None if self.dim < 2 else np.r_[0, self.hy[:-1].cumsum()] + self.hy*0.5 + self.x0[1] + return locals() + vectorCCy = property(**vectorCCy()) + + def vectorCCz(): + doc = "Cell-centered grid vector (1D) in the z direction." + fget = lambda self: None if self.dim < 3 else np.r_[0, self.hz[:-1].cumsum()] + self.hz*0.5 + self.x0[2] + return locals() + vectorCCz = property(**vectorCCz()) + + def gridCC(): + doc = "Cell-centered grid." + + def fget(self): + if self._gridCC is None: + self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridCC + return locals() + _gridCC = None # Store grid by default + gridCC = property(**gridCC()) + + def gridN(): + doc = "Nodal grid." + + def fget(self): + if self._gridN is None: + self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridN + return locals() + _gridN = None # Store grid by default + gridN = property(**gridN()) + + def gridFx(): + doc = "Face staggered grid in the x direction." + + def fget(self): + if self._gridFx is None: + self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridFx + return locals() + _gridFx = None # Store grid by default + gridFx = property(**gridFx()) + + def gridFy(): + doc = "Face staggered grid in the y direction." + + def fget(self): + if self._gridFy is None: + self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridFy + return locals() + _gridFy = None # Store grid by default + gridFy = property(**gridFy()) + + def gridFz(): + doc = "Face staggered grid in the z direction." + + def fget(self): + if self._gridFz is None: + self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridFz + return locals() + _gridFz = None # Store grid by default + gridFz = property(**gridFz()) + + def gridEx(): + doc = "Edge staggered grid in the x direction." + + def fget(self): + if self._gridEx is None: + self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridEx + return locals() + _gridEx = None # Store grid by default + gridEx = property(**gridEx()) + + def gridEy(): + doc = "Edge staggered grid in the y direction." + + def fget(self): + if self._gridEy is None: + self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridEy + return locals() + _gridEy = None # Store grid by default + gridEy = property(**gridEy()) + + def gridEz(): + doc = "Edge staggered grid in the z direction." + + def fget(self): + if self._gridEz is None: + self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridEz + return locals() + _gridEz = None # Store grid by default + gridEz = property(**gridEz()) + + def getBoundaryIndex(self, gridType): + """Needed for faces edges and cells""" + pass + + def getCellNumbering(self): + pass + if __name__ == '__main__': print('Welcome to tensor mesh!') From f06bcb04649d3bc7a530dd9f72e563df27473b2a Mon Sep 17 00:00:00 2001 From: Luz Angelica Caudillo Mata Date: Thu, 11 Jul 2013 13:46:40 -0700 Subject: [PATCH 017/359] Minutes of SimPEG meeting --- minutes/.~lock.2013-07-11.doc# | 1 + minutes/2013-06-04.doc | Bin 0 -> 238080 bytes minutes/2013-06-04.pdf | Bin 0 -> 320911 bytes minutes/2013-06-26.doc | Bin 0 -> 294912 bytes minutes/2013-06-26.pdf | Bin 0 -> 277673 bytes minutes/2013-07-11.doc | Bin 0 -> 138752 bytes minutes/2013-07-11.pdf | Bin 0 -> 265557 bytes minutes/template.doc | Bin 0 -> 129024 bytes 8 files changed, 1 insertion(+) create mode 100644 minutes/.~lock.2013-07-11.doc# create mode 100644 minutes/2013-06-04.doc create mode 100644 minutes/2013-06-04.pdf create mode 100644 minutes/2013-06-26.doc create mode 100644 minutes/2013-06-26.pdf create mode 100644 minutes/2013-07-11.doc create mode 100644 minutes/2013-07-11.pdf create mode 100644 minutes/template.doc diff --git a/ minutes/.~lock.2013-07-11.doc# b/ minutes/.~lock.2013-07-11.doc# new file mode 100644 index 00000000..e7fcc6dc --- /dev/null +++ b/ minutes/.~lock.2013-07-11.doc# @@ -0,0 +1 @@ +,luz,Luzs-MacBook-Pro.local,11.07.2013 13:40,file:///Users/luz/Library/Application%20Support/OpenOffice.org/3; \ No newline at end of file diff --git a/ minutes/2013-06-04.doc b/ minutes/2013-06-04.doc new file mode 100644 index 0000000000000000000000000000000000000000..1d119753e3dbffc649f04f3edea89e8b6352c024 GIT binary patch literal 238080 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
(>yq$m&oXWvx4}=|nRw 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�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
U}+T~Bh$RdDvF<@B*Z=51Iq&#nG`zxKLiua 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 xZSxiQXsQ&-|t4`$z?9 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

(PTN>KnZ$fMDaFyK^f#+m2;3meR+5nZ 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≻I#lnWn*#lKoAN{oX2 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%0DC+Rmu3ywb<&*_EDm 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

mE_K&poT)OkYpkj@wEC3= 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 literal 0 HcmV?d00001 diff --git a/ minutes/2013-06-26.pdf b/ minutes/2013-06-26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..db632aa8d2dd9f96fdc8f90c094b9c62327c8fc6 GIT binary patch literal 277673 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 M=As3ewF6 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

A9RJb?KovO<$?J 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 literal 0 HcmV?d00001 diff --git a/ minutes/2013-07-11.pdf b/ minutes/2013-07-11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b89304b7f21e623c75c923513f5af9250eb9e300 GIT binary patch literal 265557 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�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

I^c4cQx-_hj#B)Q~sD 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ℜ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 Date: Thu, 11 Jul 2013 13:55:51 -0700 Subject: [PATCH 018/359] Minutes in HTML format --- minutes/.~lock.2013-07-11.doc# | 1 - minutes/2013-07-11.html | 1049 ++++++++++++++++++++++++ minutes/2013-07-11_html_m7b8da613.jpg | Bin 0 -> 81920 bytes 3 files changed, 1049 insertions(+), 1 deletion(-) delete mode 100644 minutes/.~lock.2013-07-11.doc# create mode 100644 minutes/2013-07-11.html create mode 100644 minutes/2013-07-11_html_m7b8da613.jpg diff --git a/ minutes/.~lock.2013-07-11.doc# b/ minutes/.~lock.2013-07-11.doc# deleted file mode 100644 index e7fcc6dc..00000000 --- a/ minutes/.~lock.2013-07-11.doc# +++ /dev/null @@ -1 +0,0 @@ -,luz,Luzs-MacBook-Pro.local,11.07.2013 13:40,file:///Users/luz/Library/Application%20Support/OpenOffice.org/3; \ No newline at end of file diff --git a/ minutes/2013-07-11.html b/ minutes/2013-07-11.html new file mode 100644 index 00000000..4e8ec343 --- /dev/null +++ b/ minutes/2013-07-11.html @@ -0,0 +1,1049 @@ + + + + + Meeting Report – Launch Meeting 2 + + + + + + + + +

+

+MEETING TEMPLATES - +SimPEG

+

+
+

+

+ + + + + + + +
+

Subject/Purpose +

+
+
    +
  • SimPEG + Mesh and operators meeting

    +
+
+

+

+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+

Organizer’s + Name

+
+

Luz + Angelica Caudillo Mata

+
+

Date

+
+

2013-07-11

+
+

Organizer’s + Location

+
+

ESB + 4013

+
+

Meeting + date/ location

+
+

GIF + room

+
+

from:

+
+

12:00

+
+

to:

+
+

13:00

+
+

+
+

+

+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

ATTENDANTS

+
+

No

+
+

Name

+
+

Initials

+
+

Rol

+
+

1

+
+

Eldad + Haber

+
+

EH

+
+

Participant

+
+

2

+
+

Dave + Marchant

+
+

DM

+
+

Participant

+
+

3

+
+

Lars + Ruthotto

+
+

LR

+
+

Participant

+
+

4

+
+

Luz + Angelica Caudillo Mata

+
+

LACM

+
+

Participant

+
+

5

+
+

Kristofer + Davis

+
+

KD

+
+

Participant

+
+

6

+
+

Seogi + Kang

+
+

SK

+
+

Participant

+
+

7

+
+

Jenn + Fohring

+
+

JF

+
+

Participant

+
+

8

+
+

Wing + Wa Yu

+
+

WY

+
+

Participant

+
+

9

+
+

Klara + Steklova

+
+

KS

+
+

Participant

+
+

10

+
+

Kristofer + Davis

+
+

KD

+
+

Participant

+
+

11

+
+

Christoph + Schwarbach

+
+

CS

+
+

Participant

+
+

+
+

+ + + + + + + + + + + + + + + + + + + + + + +
+

PRE-REQUISITES

+
+

Description

+
+

Who

+
+

Integrated + mesh +

+
+

RC, + LACM

+
+

Operators

+
+

KS,SK

+
+

Buy + sushi

+
+

JF

+
+

+
+

+

+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

AGENDA

+
+

Hours + of

+
+

Time + (min)

+
+

No

+
+

Topics

+
+

Discussion

+

Leader

+
+

Start

+
+

End

+
+

Plan

+
+

Real

+
+

13:00

+
+


+

+
+

10

+
+

10

+
+

0

+
+

Sushi

+
+

All

+
+


+

+
+


+

+
+

5

+
+

10

+
+

1

+
+

Mesh + class and naming conventions

+
+

RC

+
+


+

+
+


+

+
+

10

+
+

10

+
+

2

+
+

Operators: + DIV

+
+

SK

+
+


+

+
+


+

+
+

10

+
+

10

+
+

3

+
+

Bitbucket

+
+

DM

+
+


+

+
+


+

+
+

5

+
+

5

+
+

4

+
+

Wiki

+
+

LR

+
+


+

+
+


+

+
+


+

+
+

25

+
+

5

+
+

Future + work

+
+

EH

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+


+

+
+

+
+

+ + + + + + + + + + + +
+

Totals

+
+

60

+
+

70

+
+


+

+
+

+
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

ACTIVITIES, + ACTIONS AND IMPORTANT INFORMATION

+
+
No
+
+

What

+
+

Who

+
+

When

+
+

1

+
+

+ Complete coding and testing DIV,GRAD, CURL, Mass and Averaging + Matrices operators

+
+

SK, + KS

+
+

18-07-2013

+
+

2

+
+

Full + simulation QSMEF

+
+

EH, + JF

+
+

18-07-2013

+
+

3

+
+

Implement + different types of sources (see types in section Future work)

+
+

KD

+
+

18-07-2013

+
+

4

+
+

Plotting + fields in a mesh

+
+

LR, + RC

+
+

18-07-2013

+
+

5

+
+


+

+
+

+
+


+

+
+

6

+
+


+

+
+

+
+


+

+
+

7

+
+


+

+
+

+
+


+

+
+

8

+
+


+

+
+

+
+


+

+
+

+
+

+

+
+

+

+Notes

+

+
+

+

+MEETING +SUMARY

+

+
+

+
    +
  1. + Mesh class and naming conventions

    +
+

+ RC and LACM integrated all the mesh codes created +by LR-LACM, RC and DM. Some naming conventions for the class +properties and methods were defined. See the wiki section “Coding +Conventions” for further details.

+

+

+

+ The updated mesh class was already uploaded in the repository.

+

+
+

+
    +
  1. + Operators

    +
+

+SK showed his implementation of the DIV operator. This code +implements testing. It requires a bit more of work to be completed +and tested.

+

+
+

+
    +
  1. + Wiki

    +
+

+LR updated the wiki page inside the repository. General message: +use it!

+

+
+

+
    +
  1. + Bitbucket:

    +
+

+DM briefly showed how to use SourceTree and bitbucket together to +upload the new code done.

+

+ +

+

+ An +important thing to realize is that everyone can click the button +merge. So, be careful!

+

+
+

+
    +
  1. + Future work:

    +
+
    +
  • + Types of sources to be implemented:

    +
+

+ a) Analytical sources: +

+
    +
      +
        +
          +
            +
          • + Dipoles

            +
          • + Half space (For example in the air bone context)

            +
          • + Full space +

            +
          • + Look for analytical expressions

            +
          +
        +
      +
    +
+

+ b) Wires: for example loops. +

+

+ +

+

+ c) Point dipoles

+

+
+

+
    +
  • + Plotting fields in a mesh

    +
  • + Design class structure for the full simulation of the Quasi Static + Maxwell's Equations in Frequency domain (QSMEF).

    +
  • + Forward modeling with flow (in particular interested in advection + case)

    +
  • + Solvers

    +
+

+Which ones to use? Some options mentioned: +

+
    +
      +
    • + MUMPS (favorite): http://graal.ens-lyon.fr/MUMPS/

      +
    • + SuperLU: + http://crd-legacy.lbl.gov/~xiaoye/SuperLU/ +

      +
    • + PETSc: http://www.mcs.anl.gov/petsc/

      +
    +
+

+
+

+

+
+

+

+AGREEMENTS

+

+
+

+
    +
  1. + The + output of our code must support MATLAB compatibility output and + visualization. So we can easily compare the results with what we + have.

    +
+

+
+

+

+COMMENTS +AND OTHER TOPICS TO BE DISCUSSED IN FURTHER MEETINGS

+
    +
  1. + Interpolation + matrix to move from the solution to the receivers and decide about + which mesh to use

    +
  2. + Connection + to MUMPS: EH, Roman will work on this after full simulation QSME is + done.

    +
  3. + Think + about output formats (design a data file for transmitters, receivers + and frequency? )

    +
+

+
+

+
    +
  1. + Next + meeting will be on Thursday July 18, 2013 at lunch time in GIF room.

    +
  2. + Wing + is on charge of the sushi next time.

    +
+

+
+

+
+

+ University of + British Columbia . + 3/3

+

Meeting + Template, Version 1.0 + © + LACM 2013

+
+ + \ No newline at end of file diff --git a/ minutes/2013-07-11_html_m7b8da613.jpg b/ minutes/2013-07-11_html_m7b8da613.jpg new file mode 100644 index 0000000000000000000000000000000000000000..695b44f901174a2621ea09ab0b292b2da09fd4f5 GIT binary patch literal 81920 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
(>yq$m&oXWvx4}=|nRw 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�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
U}+T~Bh$RdDvF<@B*Z=51Iq&#nG`zxKLiua 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 xZSxiQXsQ&-|t4`$z?9 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

(PTN>KnZ$fMDaFyK^f#+m2;3meR+5nZ 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≻I#lnWn*#lKoAN{oX2 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%0DC+Rmu3ywb<&*_EDm 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

mE_K&poT)OkYpkj@wEC3= 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 diff --git a/ minutes/2013-06-26.pdf b/ minutes/2013-06-26.pdf deleted file mode 100644 index db632aa8d2dd9f96fdc8f90c094b9c62327c8fc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277673 zcmd?QbzD}>7AU+C0VSoI2T%~{?gl}WlXm943W%%qH@)_P`$ zyu1vOhE~Q7CZsH2%WDQPQws+}I|eZeT?a!^Lw#!lLwihAxsu_h_=0nT5i_S0;IO(V@_{pS3^Zc`R>EooZvHwceqQks>k6hA}fH z%(~{e@6^UJ^ExRx_8DjIje`7SZ?RKfIgbDFMlWmZK)v|#Gesu8D&`bjwQl_RSE{pd zA;SI7JNo<7OIrJ5?#CY*sAcP=q|g>U;eGmXBiHp~4(nr6wV9JOqW++;R+eoq+cgO> z(~B4lHJPFF)zcZv)R&}Yr#NM=42~KWw428Em1<7bwni!!oH1`>&(OSYug)Bo$W zJYJYhXPtV(tY2}v*E`7aLW|qTStj-+8nrL|skEO*th#=YR-#{Bd$mUbsb9`;R%pN^ z>{)oq^;+28JlxLZG~dIE`PRHjMxItiBAQm0_{)d4dH6Wrzb`LnrsSQ8_H8E}?cTu3 zXh5o0&x<((w7N^)jkbP2Ke&(~Ju5=f)7==dTSWZBKiGvn*69r~gKxoG%F|ojXJ`59 ztDQZ*^q-H~R11gA8XuV9^gZdikDVsou^W?$Z}ds-)mg8pStKUPkOYdG$tZ=TPT^w$ zs(Uh-pDa@l&De*j?*?agR8WsshmZSGl4ZD%F}Sn!ehnD+rKa$!ZlBC?t4AG$;_*oN zeG?VgmO$y4%)wF2;8sHjX6=ZE4!4;w;f#{APzX`x0Qwdh79HiyaW128nVd=kTE7Mi z3u1Rnb~Qv9{9&snJEFhCiV}c{lKGw>v_x+AmNhSfRrWs9$2twPU3e99chY+`H@*fO z;rD3dW00F2fT2>d4+-7yI%);HUrBuSy^sfDJVejaKJ)NLKL};}7Br}VWo^*a>>+A$ z#JjuO@9lj5SzN@1OZMxh3@TanDNDBX^6%jm=OV83p^Zf7N{@2!hjRGr_j}NZt?iHU zw`|?vA>sNcBc80IuWxNamGjY1trXuARdt?{kSsM!3zPF6;-`qYyRfH|KWWVfRd4B- zq0PfMdN1~@67%WTv8_rD#}|p**7LQWrcI)7Vp!$N;}xZCEoW6zfyNA>z*F?Jm|Z7}u(|1W2^nn1fsi`Fam|I7--fjW_{a3d z-&}ZvcFKFdf;jM8nio1t#hB!~-DF->LU=K*B}5q>OT8k{s*cdEJe;bVg#4W zJ7!=arDgiP+lVxF!+}GlOV+d{f1-xx+gozxYX0^BX|E`a4;HVz*Lr%gG&cNtaFprk z>-t~&BkPfVmE8v@x6xlFXv|q3v(`h4l}OZHXfteHDOg{;;`wOK1I1*Z6V5S?<=RkEpc?s*dc!lE+vU_sM6X6k+KJO$TLjI2@bkQ9k|drNuXrUpZ^CR{ zMB2m7h;>+P^CQX)OAm^RLl0SCzUyF?2lcQ<%CyNj71>8wtnIMLC|&}AZzI{(_U#vZ zlO;J!H&cV-zODdC-n@I(>$G7AY?40eTnr6W8$dnVCsjj9@g7w)H**b^?&|Q5zLe1M zuC>%CVmesGMY^--RV|XMEK!i0jb7=zx2qt89v?>5M@oFLKRSdPM)9xKMa5V~VRn6ovX<+&N3*IXd! zz7@Zf=Dsaj(H$Q?tcvEct-;n^6Fw}6>9TEbGVm3A!gi@EfhLbJ!dR_}%|F&81gyhM zl<-H;lTXsBI@mHow}apl2Gt)YdW$)Ug6vw(yHV2E&>T;*Ou@LAiVA9@Bkaiic#9uP79)Hc|0m*?WH*w$X2RBC7Pt6QL#(o6;?Y}Y zua1>`)W2TLck~heiJ2<(7t2&=tRNfXSt;*{SAFyL3ONX{SJ)W?1IMH9zqZnMm{*ef z3fK{)AG3$w%ZDm510yh^=JZsHUND@jD1u8~borkZm;ru`uhblLi=LZGaEsie#sw*| zI%v`q@Lw1ZSZ<>7Nv-E9A4noS+TF}-wla=EA+;8l-xW$DMOVS~F@^awCr@^z$nJx+ zUG}8!*qH~~;bPe)_J|wr;mkp9mDzJYI(1(*$nq;0_IstzUVv)9E2&)I*#e40=uCj^X;y10iRH@}`zKamp(B1+*^7OmAm zL~v;#=%);IHW|X+ln`_ylwc0#R>uQ8mh2FAg7Vg5^uxp8!iNI~<#OMGgyGX&9*Yn% zL53QMr1nrG1G2;4iNB41yA*~@7v~`wCq*^iHAvbe{ubXKY&tRL|AaMNSz{POEV9lE zK}QwTsW5!tR(lb|m@iu&g;zpjCnMQ>5Y@7WXdkat87D z?h~-v%$N}m$`IQL@uw^Q1WnJ4`?E<+>#oTmFAJ^aVYlZSDk6Q@ybyLZ!aekFL2i!` z{Ru0=l7nnSD1eF6Dqhz}|)haH{H z(lgjFBVvrENQQqIfZUMD2Thg*oAcWTFD6Bl?}N>5^s{P8C3FzQoA6vgddsQ=`3es- zztiFf$3jf_&k*LqEEXqbe??{EXCKO-4*iCzYZ-3oTK%!3?J5ouS5ePeYd(BqA8eLS z9UZzLPO{8RaFkwiQ)4N-8f4E3lv&m2pRfoiXLm+Bv&)dk;uvm+!b{OgO?vWTXW4%! zwhYLVIbpn-r5xZ#Q48LpRvRy_t(KH?!Vc{fA?Ts5VQ?Gbb{EDmkAGA6-NjVNIQhbj zfTidifqut;eg~51R6#c#RlYQGs*#gpzz&PGfJyT6y)8Wlu2v;-=Y>E~mi0pHjd2ve zsr9OCiafc;0ntM_bORY;9*}{OvyB6*XOx*=`^dwl)LZ-d*VF52_2jbcL=$2-9Ne!b08n-c(qpl-BQqLSq7E*BRyvAzEyQBW$rn>(o;P%j@q^T zr<%E%u&3=|r%*4FqI{Zzli>t{BADImKy%fIGyW!iw24w-pT0bfFhwg!F2mQzHop&; z>fTfq*)%aoLotpRB~g|FJbKUOxWp_{Qp9QdvddE?rXBH+BGkCpu38!SOuXVRN(xT? zIOkQ1RgO<(Hy5iZUN5<38ak#;N&6ptixKF1+iSosq-G007j%{Pu zn{K;mC<{TS;w{;H39hP{GG(--Xd7t7Q4($AnIGssq>ZPO4>NgTKf%i@9#MDHkCho5 z)lZd=KVx6W4rFA>AWC+A9S*TZ;MWj8eN#d6(5y6b&BQ(z^}wy8A|G!;j=<#2c9FwA z=4x;Pl=}kOISpt{R69{Db0@$jT-LYLTQCk~=SVPYHx#xz`%JJE;iTCU7s5(0rt0RV z)n?ilB*CNd2{fxbljSSlpne7n0Z(YK;c$q4dOj@#v&vI|QY{32+3fX298Q)j|EC*9 zqVY1cuwRZ3RX6DPl!iH$tCx{CsXJBMAAE$I1>5U zKq0T*)^o)s<21^NsFWw}u&DW%+boJ5B%k~GOHCgg(C(IUTj_~F90d|dPJNTN4->gD z%5a@ItZmyfduugLD+;xfJ!Db@y1hN<%+-z$xM^p0RN$3T7z|S;90ceLi@q_Hj~wewc|u{RaTzk;-+IT0J22ICo-d5JQn-tI&x-++Iu z@`8GpN^@`Sl$NG5;@FqrGyS<$VtklE=S7;Jgw(+tI~UE@h+`pN{_O;vuy!-`a`Pup zP6(DDo`L*non@$!f(BDtt&=cZO~hOV)O~V(u0;p*1UiPlme$oqp&SavL7#zJzI)2dpW9tt`PpzlBt3CwjlOz8lwtLewgbwZ@Q7@vS;m$amULx<9IR#|^ILxYg)DB?_C zYTBIoMdBFT`V7zwdh>?*gnm};jhYK?08cl7^TD1irJt=0R!T)ydfbJ3>Ji#Mc;f|e ztQv%6zX#V0q<2ywfL_+d@>lB~FGPKFCHIMZK`IseV$n>U|i#pQA`9&A%_ zPsm|yQ6V~FW%^Rm-rfDVgFzn)=k6{{{MCy1&eM{`x|9R!+Z!tGvkWTe zpLJt4;?v--YA+Bh{HylgP$B-RzXL!tz`siS0ZqOyp1YVE{y&fE6G&T4ATL}XXNP+Baa8K}|Ln4F-pu<=w_TBA0c61ijW5XQ6qXWU_Uc6jdkc*B1T zh36oCJs{G@GioMrQSdjw%h1`l)GKDp6J~}c;@9d=%D>BtOnNgwR3A!}?76nc0>|)p zscZntBjrsj`q0$+L(eSPQgr_v;X^T03U|TuB>6Fgz?_AfY82|HcpGe3f$LnM;v#0j zHlpAD2v`c6HLHD_i?2Y2pC|D`3Oj=8Gi4Bm9igg3T!IjGw5|&LYx(xah`A4!!g~Mc z2^yXlN8j1gvh?xx;Tyb5=*$bpsx9 zOR3r5eGf#Iw-a5bS&m~hhzl0SVn%KwoU(rj;>Cww3InHt?vD(6D7Lm}D7v}Bf{=QL zH`Oz1@ffQcy3JaU!9E6H?nkhTX&$@9?93(n`hKx@grgG@XX{m65rZaWT&JK2wgc9U{N| z0rMw^(|EsuJ6Z$a+*}d0#6*o#pF-n>zlveK#%w3#`mh7zZX-_eLj+0wUK%|H#?^?`A+8s}!k?kP9y2G2#^5-!I!Lfm|;Lb+>G9 zS2b!|KdPTRcp7&G8%#rDW5g}#yeIBZPtf}zV6*Bbh%uw~3%V}1i2!+T7QICq7H{YS zmRuylC_iQN%!~+R{?`Z8nk9#T}j|zSvwHFN@pVmEuc2@ z5?}q+uanbk_<8bpEQN(`l&~_asK!vF&Lmz@r7}HDJ7Io}fK6N=2{#K5v zU&=dO+FSWZQCX?6G6JIJQ~RE^V||4DwQK6`sMht%-RC6}iOb`f30k|({L$i#w;BPW zo*#G7R_zn$ow+d#SvEf#p|hnHbLfsv1P#X}uGFS_B6VCpp(-!LRf}_&_}aPFl^Jc< zIu7S)39DASTWY$A>77-4?cbzf>6-q;d_-q`x@acTRQJ<`9U-axTu7UGp^KMA23vM* z`DJe;iYc40hJfpOU+{j*m|+3~ROQ`ngt4_}7R9Sp*NEF9hZ-7_b+T{n>0d3=Pn^%> z)lH<4rv~I9gywYKs@$5y9`9vb(?&)0Jz8>fYAzCI&C#qRj7pOS6w49&^7Fo6&N}); zZhhAqYM{l9Uf>|$jB@lpw{399V^E4c8Fq}meo7mg#oM!YFVO*WG;6W+2L26V3(_~a zTB$XziAQLx-waZsEc^Sq!d=o3pB^VADLo+s%|hIIq_&P3Nj4)-(#|@e!lQY;h~d6v zEXqJB@bnxJW)YCd$hEVQhREksdbwdBG6SCdErt-aHVvc!95EvNzS&YgG9_jlf}xVP zz6D+Fj&U@f^dCBxrsEVK8;JNOZDr(T2a=-6AS=B{UKo;nua?cbHGpkr%|Chi4&rK$ z@HI42OU68hN-5fG4;=SzHBwiO>~)=@x2$!?o@SY38)#pBbgs)Yp)wl$ zu!Uwc7AE{;Wk)7~2&tB)N;twt%fI zz7)$~6)Co$dYvahUf5c8KDNEtep+MMczU0dis$0(VB?TFO^2h?GcwxC;aG;`bOV~R z;S`2IhUFtVS0(7Man^QK%^)QYzfSS_IEP$J#H$3WZC*FkvlMKEpiI>D_ERnj`z94l zHE#{cH(s6ZUn*$9mXtR6I2AXQ8w+e1XIJLSyVjgH^2M-%GSA;wlp9iANC z!1yLpuu3sp5k4u>f^T7cE>?UEMSp)q=)HLMTx*8MoPU}9dsS;9<0X&E4hs1g&#v4e zp?}uMU|Y%RLC>x?jBq0@Eux{7!Jl~$@aZmff_RrPxqDz|;o`XK{?W+#&%}y?tBoOp zij1C_p}qryyrZ7O-ERp?U1LKAWm5w%<-)|o$WF@e!qC*%#DSEFjggI%LDRP-|)4#@UKLTsEESPG|jIx4ighQJ1fgS zlQ!Qczb^uhUW!SG0WdHC00aI3-)8_30QTO!y9$>3V1;`C2Y3HI93lb&`~ze}WMm{n zBqS76j7KP_=%`3Yk8mELV`5=rVen z1ekl@rvYSG5cU!5BXFvIViWYg;QyOD@{V$UqjrDxkOP+hH{^L|f8dbqaXM7PW5W{{ z@_&1S%METGMs>?l_XEJfdHU^w#ZAX^MW6p>dBL&p)Sh2*kJE))WnKV;#HZ;TGXl0z ziaP%#7MS2v3u=!I*)Jo*0DPxsj@0SEtbwA+e~AUq%br0@<;J3Ah5EphESO<>mYv~a zD}hY1gyHVmLc*sY{60U3pb?!!)nz{fdnpL5v?CV2@H@bUyJ-oP zvSlxHbdLx8rq+p9^LsV_gH4jBoh5M*QZX%^dCLBe!-i!S2C|o~s9rR7WA0sFIVmC; zEMJyUc{_(ZH6yybgZl02>3!7XRyEWn3M1wOVDxq@?MiCQ_k@Ykevm?Cs*fUsetXr? z$qR4g$yjs3@;P0|;l8;fy(eQ+W^?76AEN+-5;D<#KFg%4o7Pl4s&kJGq}AC^t4y~mb? z%O9sbyr?b&AonqrkDxyPf^P``E@K@d`b}ubNVf70qYFM!L;%n~mt(vxldd`4XH<$i zMN|g>c*ob5mh=owc+1>o8mLLlu$;Xm16eUfPX=Cb**r1=$vTkIV5ii3xi}W>@(wGw zyfKimyB#I;OswuIy5m=V*IyWXv zzIjYokG9>T)gSW!Y{OQ97P1kw*tr&2>^J=fa+4{*Re7wY3;wvFhbw;s^o}4&F|Me? zd>jOMEdGd8IFUMl(_XZFTn+Ii1rXA`Zrx_N&GA*_W_;k;z5~*6Jz;BRSy>^l`zrvK zF5B_;bh(8=F&C<5Ge{Ap*n%M#tyl|DJ^NFM{cT8tton-04)FWe^_k&F=10ZDuAvbh z0EfO~f`;&8;|f{#Pv(~izoIuuW7S*OHyf>wAf?K4zr?~76f185e_U!HnUKQ7XW=C1 zc2&aCrGXInU!>CWYt3jM9)i-N6kIeFhp~Pb-vArJl)BI+fxuEca7gS50Q-qx0`N4c z@K#iU^d}wg`dhVxml-SlQB}F~vA8qY$shnQ`Zl_KC}p^S z<<#u>3@#`a*O3!fF%5vXXd`yrqOH>lnEVHG0MIT|iOugorDD1X!0I=SQeGMFF;f=+ z0P^de>{qn;%TXEG06?o5R;0v1=h-Fl;Rh&82S@Z{ucT)#lj}Zx1EA<;Ieeg^_X#ug z2Y*1TaRvopStRLLTca%C)dc}SKY!ZK?YM}askk3u!3QQ0IK5z(d2_^n5- z8cb=wj>8%NTdpdx-v=$ZlnmGW3ya7KSGw}+!u|m%kpMf-uCR5b*D`rtGsrt_twU*d zBNqX;4REi0a(Y$YZesQ=7f2B-MEb7e9Gfk%Vc{;wvzNN|TgDQ?Z#Eu`gRh*f_bXq^ z`v41T%ZMZwPP1V-0I=;xbVRxnWFKNYb-z`JGq0RVH= z%h;N#e!PEuQ4v4mY9Sa0Um{}Nj?j?PTwMeJe2L$I})a_lfN+hf8;d}-CP*l z;2&+hfrO?&YYH3^%oBRkG$$I zFEi?#Wlvazm`MScdrF!v-~f4 zhX&;JLF;VuJ39n8czNBRW_+x;lpU1!0RYw9%RBRYs&^q!h+8#)P_}GQ=6kjXz<96+ zcN&*+Kl(QNPX_<96{NUw6t*t1TaGOJ@)LCV(W?_D4U;EkIRKRZt^Ac=N_AKMm*1Iu z03K8spFb*IKDe`7cZLBNn7Z@Z@@nqS2lIT&yoO791i+3oD4?1bq?!jft^6kpD$uxU zJQXgw^RNN>G0K?5SJfgcKixQ(!Spg(IB$7hOZB8mnN$mlzOh|>2Ukdn&u{JF^6}Qf z@OF0+QUbVv?gIQX5-j;s9h+Qe1N&jB<+lP}5P`!l+n2Mqpt=X(IzQx~O!aD6v>-SC zlhxna9n-px{MQ$Q3E!jwoME#`fqTo{Sg318R%cB2e!OqCK?2m-rrHw(1U4*Iw+yYS01P`_P&_o98{misVY?%=(>UeoJZs7sMk;PR?#l19IJ6` zfYsVtT=GiqjE(r7NZ@yZVcSpEG_h=#mBi~wK_wFeGJL8|b;L9L5uayXWF2&c0`shg z@W#6v;~I)_pUXnL0C*=l$Kw-61BT=gDY%MUb9V~K>xd>n0GX{CsR;>IGd-nZ)p++D zN7jk(P@&MsZa=ax;rAXD065ZECJtx`@OTr}sX1UXReuQpnQ$7`=9c1Lb$hqB%Z6%93slYD-N%hzlPg~>TD<2&3IBCl`nWaeNSySgnL!i~#bx?$!}a;ICax|l#MEl~eDRPepW zC|l2&M@62&4Q+uT5rx=|_dNp}ggte9zkaCgw6sVnsB(Vitb^EDUyx54iK8Xoc&7~+ zHh8}39e_xO6+A=-DKlF(ahq{{DU-6u8#1Uop-U02vKFMbeElr^ zZ|ixIlkr};bK&g;QiWpjXEuwSpi)5)7%U;WH16@XjZR+5d#vSt@?|WYBN^uRL~Q^7 zW}3Tiz&(N-eMhZE8aW}G>#IwCa+hc{*z>o?TZE|GE}8mo-UQ80?2BFz+}xT+cLdSs z#Snc5ycjCQ_8@{k2>+XlYi%X;s-Na?t<$=VG7%!1V1bUCO(B3{Zm1vY^%LrM2ZVov z?QfcX>vP<}AhQN7G~r*do+-rQoSJ{2qe(uJomgl;k{$A77f41+ZOXt)zw*$EeWCfiva=6vw2q1KV3L&Ji4U6ST60{cPn|l z@}MD`U#)TkM_PO!?Fa1d&aq&p?SMZ%be(luQHj0WSD!4*)Ew!@#sUDWQ5?-MZ^&GQ z$9j}m)*LJGGbNcx1bQC;*oIV5^*@dx=o3Bh?yK^r?1Th&;~+>2-qC{c9y0Zg&fU`< z@)&fD&THvjemrF`+X%E-!2AspRgg)<=-$creg75-$5box#_RJqG1}e zo-a}!qLs&Yt8B3|zqqj@Y2A+_#m`>PY(jSAs3qsWrzh_KkH4JV;JTxyc)?9VC z0Ij=aD~hFx&QEi-L&N6k;MZ8#k6#Oo*QeCy-$e0D=Ay<=#=S0Z$*BAfkEOq`{QVs^ z=3UWv@co)eBWqCm{U^r>5Fd%}pas1q+gc0TMCKaw`p%U7Dli|}8B!hBTGp>764Ab0 zx%i#*{^|nnJ<~Ve0X`7$nr*Fh$>G`ycE9E4t&5Z7D3cSQ4E-Pfb+K;d2w=a4tV2X(9=4G%Ubhda$ z%pmdt8o|RJpi!7CyJG&RCxd{^S{7fXD9Xs9qf(9l!uOCvq)PIXfX#;IW2MhrT)lVFH66#51DY6XNp zx#KyqQFh|UHo=TU0!HJCJgVyKmiRqiey?*mhi9^tjfLOHKh--b#cY2+R_ z>warEAfe6jI9BkE4FKRqe=@w;pU|l-ay^6R&Cg=X_H4*p*kb!^8RfIJI5ZejrugD! z;#!^f=&6}4!<1x8Os=J?vSioAos@&+!5%@yLn12NcToN3<$*8kjVoN`bl#3EJ6%8D ze5!Nlf5>f7FW{IuSe@9bbz)=~eW=b78AA0F7TMhW@p|_<=KS-w0!dR1(^7BM!oM^U zH8NJ@hZvc7uBMAv{GF}*fdtP55^)#$Ytq+&2B4jnv!1PfnMx+a9}7G;6afkLi_rp`CZ? z?{5^6KIf3v@%*C!G4UlQB|h;gLRSKX+qaV=$TH(NH=2&gby8*LJYdzQ zFp$2bTh|h6B>FI}|M7RAe&s&JQrEKX;p^p1UMpH5%|m@${fSrL&Ull;(9BYom>%PL zX=Qxba-n05$LUr>?GKI)3kSD$j#91v9r?vh6IW&TW>poojD;U%bNVy)Kx;w!&9|oL zFTzagUs`9Ww3i<=`jmwD(v$w+1wa!Sz$7Y>lcl&p+VeP^+0L3fQ9ac=Dd}Pt`!-=o zbOpx3{*x%^Ph@vjh%g`VQ|I&i2ZVzE=4QU?*E??@7%%_Llz?m8_~1$B9lAdYi#c_2L17|$D5y<->stIv zi0T(40AoWDMB@6@#P0D~&frZ;_Md?<0I0@j^Cs1Ya^qy|Z#4>3r63e8-+EmTD&>Fa zTXb9lU6|CF!w+1J6#Ia^l4D6nVeNZ~#LfTuHDvW0tk z`-NBMQ|YBp6aVvqTIvnJWTP2CRhfVC;)s-2J-G-uRm5=H$%Jmn8)59IUf!Dd?Alv< zl1ZVF`x3UuWXlwB0`%L2Ri@a!4!J}$fydhUFWS`R^b4z3TU;T9b!t-?rnApnri^?5 z9PJ8(F=G5zQ+ z*85+thr#Tv!|->&9l|u$oj*d<5S)*i?eOl0MkA)*2qIUvj<*HFz{M+Erl@5cH}|?x z5v1MQ7t?UR0|K^VLk4((0}f@V$yN3f3fCLfZj=L@?ifvIUji0PKU3EsUNP(h*VKR^ z=ljn_T3eilv)Z$*_}kyD&^`7I!*v^&cZ?=$A~whS4)EgKl9v|+k_4vmKiM{AMfna; zq#vH#R+WX+Pm?_>t+CvoNgI<59~ysoeE*^28?Dmh>6&TwlO*L=T^B#JA}`e&cgJ<{ z@`wzA=She>@#EALe#H-o{zDU5G))9%HarvU5<5z*?0F*gHKrce+40}}l3;?{=JUYv zSK#}ep&q(^c-1CO*TLB{7i$)hiC+Rm#lU>7-enIuSTLR0bBD{fpJ2YF_%`g@t^{t! z%?sbwgZq;4Ndj$x*Jiz-WuN#Z)044xgU&P!ft?vf)Zu^V54*HSLo$LqYtVkVnqW!< zLm(yje5?un8_z-J`<=XNuZsuKpj`aU7rA2T~y<0i5Q@`Qfvnp=xR12smcZBvf#-tFz`AwZp#b= z7(H(63113=E3ur?3@qjxq7-_A!~>XOdLatZ;5@OeEvI}LSl)bWLu zahz?6R_EB`%Tpqc>)oc$z0MP1!iQlgHg|3~-@}(AcH7pOXes=C8Z+O4;08LyfoM&u z-XCYk-zr@q2g|jO-64AQ!Qs`#rI);d`{$?i!WyzaU1q-2GziyTAzOiO=3dkq=5z9k zId8o+Y}i9fDWyqc8;VYMewOtqYv;nQ=)$b_m!2jKjlQ>#+BfqEPPL8bjk7D9uZ^Ke zl_jFLp|54cdN#;Ua{v}6Q?{erlBvgB?9Yxhtr~foRFW2_VjYvACYDE;DTNW?VsDZF z%mQ2|b7SjyjtXMk@&uE^!ZyF!tt;_TJ+@sv?xNaDLe<=f>;4c*6TbUJoW!mMbGHsj zS=Yvpw1e*e3cYlX+Nrr`)TSJ^M-)<3XffxZ^pWl(=@cQMW92Ym6QP^5R&1CeD7nzbL&MGB1dcr4dqiy|p_$Zhx9nFbEAaL6zcyC?6>Io+LA^6MU}0cP_?bn zMP-@`z}hsh9sRLpEr4ev5_(;x*`~*ev0gE{dlj2HhNmVL?o>1Tkf|BW>S0ulDpil3 zsszGiLJg%jY;JCO)etPHjnmd_=<bFPVOkm{B7>FH)A+WJ%}> zO{#bi#1Ml$wSL*s{{YZAUaBnh8IL`(ilbIV2UX^f#5Z)en--voE zHLD3nc*(KK*pj9E(?Dy?#~v5Qje+82=_9Y~NmRYO8^^=yMe&FkB6;(5rq~)fmhOiX zS`1Z{>6zYn0I+%uOrm}9_22M!55<$rn5wpz!@W9>Ga5>&`K3A--)h$fp|;m1|a$hqt%Y$F@w zF6r`isB#j9ws5|XmZy&Go*x$z^H;Mv3A`oa7M?dQ+Cmc;TDKeFagw8)Sif|aCIx_z z#|`_UM}=1KMicxCfg6+J@tqal1OYUR$Ft=FbfW=k>pZu($&MVYgjYPq8=9q}e;x=$MZCAvnuKFD|am^W=;NQ42!_ zQt)dM6hmJQ#`EH9=qD;8%Y1p#b1z`__sPtk!gqHiw(2>0Q|&&F_RcC=(t0|%!_o`V z^koTj`tknH;c$X?o6 zg=hti6THfHM72g5L0Juj2o7%SHUO|CQs)%0R%?OmxZ+pmN>Wv(>x!hZ_)q%3b^d=0 zK|s~HyTg1kd3`OiMv#P@+`r!>G=lqiwSlZO3qTe>f{z#B=OKAs2AkA_)J1T~x9DbM z0FVn{4j$LbJ76CHah}>pbEns6WGrz+>|eq8Eaf&nWTWtu_tFs zf>uS_;ck|D195FP?+3mN&;Wxj#Ib<*`sLjdSpJfYano{YE%tJ=P@Y+@8ccX48SMUZ z2*3t$PSX5X8f!naw@KrQng%v=3YTeEM^}!D$88g`mnV`qcKYpK(L*BNU%-Y}mAXFS zZi8(*OEVrjvVWSi+0%CFnUB!>;@TJCWZ=O90>95o9{S|!D}KVr@=*A&G`D$~aLaos zHiUQfw=p|ng$+9mrl?)3`29*Em=!US3C(I~KrnHm1Xmsa1o)mF?ikW>$PA8+`P?;t z2OE3aT+0tsizb^$RDR?r6P3hnG8{wR$&lw;v|Nbhfg(|I7PSv`6#4+dYFCA+>3pRl@uqleuPTk z)rYo9=jPXQlI9*g9@ywsBoa9Serg23w2JR_OuF~C^?kN3tv)8$iu}pwKQ&{@IkJC) zQn-Q1x{O*=IpT$K?^HW>_0Lhj^V-o0j0>$Y{r72el@6w~KO_@)5YaXd75E{^=6T!w zmOGtC2qjB3NSw{0{Pbga=N*&OYcTQ5%u}q`rD-Si-o)yrBU>xtk2^R7VJakSdCRu& z`9+lFM*}`{PV_st;N>3xv3y0@*0c5B0dRYl24Z?na!s|f*Oz%@i$5BdO(bRSaJf67 zk&A;FD%gOMsgP2fS(b}k6*~Iwz?|{aK|HbGPlojZ7N{}JwTn>T1P0GcgNH}KFP7h) zD7-3uNiQnF9Q2PYCMpwcS^m0lhsf7T_t1B6`*pKxP>xX$2gwt0ZsAE{1WBE8LHk%e zln5DlYBYtfzG)l7w2mv6v&gGCs2=x6=7%|~&05O&j<}1Wve77~0E7%?VR`FMMy|TU zQ*s@bXPX!2MLT3?uy;0&nzxIu6A|G-olWq8^EaO%pBcwz4C0EF5h`Cnind2`N=5^R z*AcYi6m#%O3&vbwb9g^z1K3{7L2=hJ`_w0n*a`El4ww>Ne$%wL(HW658dFp!P$`LT z_;Vyc7QrnX;bCurb^KYg5iP0#LRW>7$q2x7utuM}e0Z341SZ8_*4^i0xa?p#A>bsK zRb>>Jx6VQ~Tm;;Pudx}d?Ni$HpNfKFMh5CFK-$Klv#$TrjpPhrU>?N|y0faT#EJ#PGKkK=B(o#pYHs<{aK z)1;?lPY?cNl%O32{MhO;omBj&{Coo0p#0I;t6Hq4=P#4eruel9KQOEPnh|V1s+1az z^o%%(Zh`$Gg}2+I7(Rig`zVGl0Pf^^d!Z!02uNF%3c3MIJR;xC?qc86)@g$u?uAfU z5<^e}Xjg`P;GOAMN(?cq0*t6+bS2Is_(p(xs_#}&{2_WzXQ1bEeoPhs{sQzNhm2GO znnI65dS9yCF|joK%N2m5VZZgvGZ7`q91q|;X)>uyFjnu<|61{lu+cyY$8dVk2_eJy z7po7{vZn~x+Lyv>8Z1E2J9KZCKd#UCC!fXYXI z%0;>`U^!Z^Z}o_xPE%RS9xWH?RZ7NtDE!BA;PDNKN-%Ggyzj>v0Hs63Z?#FR$L)}) zis0q7Sw_!^4{$$*&@DxA*F;VgxF-~GLz6=+U86|LouGbzQC!?4 z;T&HdFU_4jPyU>qT-%P?h_%(-NK3%&K2+WIdXGmU3d~>Vcb^b7$&KIOLl3G-ufCpC zDQE<0-v!c0ScSOTC(ZjTT=(J-(%0+k6Wnc|p0V7P^7eg}X zqo+y!#Hj>LCZxGhW{abPlQZ}-MW}kmu#!|INog`WB&_C9fnYonZZfONA68JqDsTiSj zUaTU%dfJcKfESdAxg)k4O%4@9deDbL>_Cl*36Ws7y}18eZX zL%@0Bkk@~O5zM{l=80_Ybnttxt|bHv<@advyJw6Z=>P~1reFGewkhyaPnol(5UQH$ zsSlp2j`$4W*%wGzHcgylXzEWq6gU48Y|aS4h8LIXJ>5gn)UD`dla286gt&Y<(wX*Y!hBSGJCtRQbuzxY**9foz; zZNNGXm+?PY?I(}E;i20?+8~7?HZ7y&S-ni{y^|DFI|ak5Il;sXy1M?^^^Ek@#Qzuj z$bC#2WgGY@Owt~~UnlWtd;plKZEGAkj?~%HBtgKolbE2cst*5_h_^@4_qhQ;Qs0of z+gKQ}!dj6A0N8d9XDW!TJZYY@8>j9yBUfyICg%i7kTxy&4n80OjH8gx8d{fN9{j^INourB~Bw4Q1}B(Q{V)TRsBPOmCByU-t%eMp*iQ9+W9P{oaBS zG&!Or+zVm-^k3Pw@`TW&rx!F2fJbz|>pi_MrJI;~J3;I@A zK7)Vd@YgSV{e>8a_sMapY3t(AcfeX$;E*?!Z&*if9~{AlANYFaMh0?;^4tV`lb-dJ zrzut3$fae+S++qqR;_F90&|EgSt>8j3J0>P<%e%>`Tc4&XT3m;0-z8IC6X<0j5xwG zAAqd#kW|LESnRZ7C}$crY?v8>vDXJsSEFWd*sf79R#;uSZ|-1XCDA zPAqEME&fg3t-2{U`+ zjKCrM3-4$)shwc9F78<695NS>ET&}vL}q32DU#-GPK$vNqD#Gk~`$( zf0j1YLzdCCItaoCzS}e6*m`J5P!+l-46y;n{#}6-Zy%OQG?46n(YpwV^8shm;fU5m z;~{nB#e=*(eEihQyN+(|PnTwE=+&n7dTT+elz75OeJ@0z}8H!m4`#3z0b`ci;#SJ7}r=hCxNs zv$voN#CLInvx?ZKG6yfdo(4|x_~yRAa*wU}dvkB50d>tJjHfamnP0S$rT@^jAPU%yPXa>b{vW7!SRE4iHZGP8^DGMR(kkz| z0{ok7ilX3`rw;4AEzsS5PY~=`b6Wil(9D4vnJKgI4meCc`59ZG_aZCSMNP&0=8)Qo z{FKiR6ujO#vS>I%igQ-pB&l)xEnvpNQF?5poakpZ(Us}ROuiwVzR>C=xVyhE{rihO zgl1@yZuECsj!N6AUED@NlyH3zmulRw)49R?56ibTj5I{}D(qE9p0B-W$^@$Boca8{LWztOs*F&V_+3~Yf!N-l&3cru<3+eftl>qlYx6%q|Mda6lB=GD%4Qw({Pe~d z!9F5Y-%I-la-xcwYr~q`VX35zGdtYbK>B|oa2*XlH7Q*hMljFMOIIaWxDtdHgdYuJ-|K_Cf{d|i?DorD zzrUfDqgAQn%`h2NIQrY|5mxBIEPW##aLN-WH8pXH)(Tr{x?EwNnm5D9*?#|Pm}uCp z)JHVZSp{4}HWxahi?aWId!#Y$&LB;9;8`GTLgwaAN`o*@3hFP_qNI5*m(8bb>yN&@ zKu&$VF8;fYK+#&I9JZ4oJAK<+QF#2j7ZfnABev zEs1!Z2$1ug*vxuLaA5|&{qq_KhJGG!vKJ`%WVWg3SgJ<+!`3AhUE*y!4bv+l;W^l0 z8Om-8AT43Z5~t}i10rYow*z@V>qFhw4eXiEeKPMS9al&3%UqqdKI3VR<2*1S&uU*s zWOTQO*xn+#&67e4BA?l#2jhAlj`-6aA?VT1HpD;ppUy6>1F0joYD%YC@E0YAe;_f) zMBla|he;q7ra4&JR~?;EM)7%P+uaM`$0a9%{)0~>{y6DAw(_O=ObUg1DYhxtS|G{X?)HdkqFWva_ zB{Iphc0SeA1(;WW*}t%S;PZvV!#WY_t@s^~-D4`2uSyO{C+9z@IIbL@4qBd5($UdZ<|L{)KJys>jO$9khf?qYIvTxbBf>w z$G&SeL0&VYxzf#V**ga!wl4kG1GNIxkn3#gr2R{KlZk?63D%J$@j+nkV>Q+2pU|ItVw8_>9^`&jV+=<6cUe_#WoB1=u%#z9yQ4*KwLE3^G6M1tDxhwPcgj zZT}+RL_srDK-&CuK7^66@yX1?7V+C1Z~t)Y`6&g~geWuxQeDwy7_-0EU-sGJoR{GI z_F(jix$2xHW^DdH&qk*)ba^Qri4uOcSNU-a++00sqCM93qE8S=;+M<%3OZ>N^>4oV z*Slj-lp2hE>LZ$#j*|EHeeQMesD*S)dzg&F|MCaYj=te{^ghpAc2}t+MCI0B53h}W zrtgSJHIAc_4{tv-&hWTIxqOy>QzBrP3I9@jvd~BR@|L9kuLDCKt&VbUY-=p*6a}ZP zx`x-Kuc;>BiDlkaCH{O()~Td0i+^!lBHCm6Kd*uu6@lfuX35aDw6-{VDB(g*pz`@^ z-rCi$0eZb}NbNUZ>KLPp=bz&L@B%NK+LGq+`|5|=J|GVhUFwezFAUVrQs?fKtq|UA z3;(UD*V+4U8rQUxOXraEn`1<^qvNp=80Mka~Y$>-wn#FMLN$~8qb6V%h+L{^c zk0VNvzv_Vh;kJK%OffFn@~Q7ZRA>0(8PCoj??!@>rYDJjfsMMo$Cu}Q!zAj$4NstK zAL@)m`Vn=V`S9EF2a2(Xqk~Pn7>B;*IvVpm!=9wI&wX~-sAXJhR%u0pPi^<)8mBd* zH>5vNWn4$yQp5k#L3Ll;KIh_nT;O)EmkW9tOL_A<45;L>tMO;vJo|a$ocwoJ_}f88 z`*P2{nK-r}LCm;FIpnBi_uBF8&ZeWVVQn;`{_i$fziHQ0}1JZYICoO^$eR2OR?mnVwICK$eJ@gj|P^ zl+2P}jzQQ{i1F!<1td&_81fyIA4sQLvu2Wm^+Pupr+qW)0Zt#4ejuT>eMr!h9DK8! zW|Fj1_L%&dXwO?p=riLFq%bpgmC~Gbi!bWcgQt@nu{T)0uV^#g5i0GftTkYA zhkU)8-_s=2UUeN~L6@YycFZ31M2R0J z8R!SUa6N^}7uB?NfQX-tiZ=Yy*}Ey#F=chsY+S92Crx5P--PcxWDu#YV~R=a0S~uV zonPe-tkuua`#%e`pGHqD@N;irn$$Yxu6i~s!j0kLB^H_G-z#LQ#Zadtiw_zK)Fw`F zTJ<`(uO(Fm>GDg_U*5Cf62YWd{{#kKx*%7&O zqz8%~zbwiv=n&s=FR~GVQx;K{ zb4SG~;(hV(jY2(yEk5{Zm}Jvko77~_nh=-MY+t3~VI`Prx}RX(T&O3pSX~iuU_u2^ z4YaqmH00x;N?%CK$pnT6c*#W$doDJSvXH7yHLCGN`7|pq$K*NxGVq1g`#sk0{aT2l zomzqvlzLaG$;y)UKU7+2w=@z0(ZO?y@CL02dbR?IUb(7oiU|U9$othE8QPa zqB2ZSNmhbvR|Hr6cB$nP+*rAV4_XYROGmim#L=$CxhhS5;a^m@nw&lqxHWDcv zo5Y_Igf}9IQ?ZkZ=<5GGwSEs`^~z?N6VTwc6BI$N>C0Tfk!3%lxXCAT=YRFo-Ap!7 zcD`VHi$(2*KNWJxRmjk+LeqnV2}U9B`h{Wt-6SEe{PNdq@dI?e$7n6FoiD-;A)0!QsZqXeuLjKip~t+!})ow>7stWWWu{Q}kI8hpOF zMw;s0RVuen1mg%l?5kKeR%6ef&wFL{4Dz^$6>AFTv2O9(g<)hWArop+FQW`S*Y`zS z&U(xLs8n)3TXx#zDT=S?`2(%O=u%zfd`eytdWzCV2~JdOYl(LnGuXXSJNdv+PKJiY zOFRm#Vbxd9NWb|1gB$G^y>k^@Bf#{saARqcKr91f?p{2ATve&Py$5r-s%RAVHLJqi8UU zN21NfUK%{;8x-iEhYT7Gr6p^D{7TG}7UBP65Ch_&WT2SHxe9jQ628}ows&J#l5330 z8^*;Xh9WQa{)a2o8Gs6>m=YyJlbbyDNa3Hm5?2yGVf;_~0&pZhTX5>*YZEDYR|wg= zzhIm---5<)^*@w!>v>+N=i;v`fgbzB!R}&*f(EV&M))WHsD@iKb6!^t?#^8-DtU6C z?bA;G2sk%H!jG=$@#IfrEsS*S`b6^IrLdl!*0pC`QJMw)bl&t`2D4;gP89fb zNV6pJ6oIOBx2o|6r1%Op5uudWW;t;&DJJ3qQH2Rk@1+id>-eJNHH1Z}KmGQ8eGO$j z&n&RMZf2xRZMBPS7nA0jQhjW?Nf~@*x>MeRmdqBHDp`S61 z5;_<+Us@G4GLxf*Ise<756z_W6XqeQECjpG#Z<+p0d+OTkxsMV<5L}>vX7dxzfdAj zxJfrNK*pJcKBJ*X)|rdOw}~iYN@612e1zZNxrP)zAJ;NX_<=s17E9p^t@7tFvZTs- zfxlHSAKJjkt*`Y;6TaU&M10p*)BvI<+U%2F=L(($tWKB0N~iVI(5d;m_kOD-23Aa# zg<@=&(a>z-q+J6kN!C``pP2$W=-fUGU&E#>p_YLx*vK6|atCKb$vaw{r>$%@n&QL8 zreDpk=mU@TazLtNC#pzmHulxvA=)7tWpY^Cn5+Rlk!BDi*Ho7~1^|gmb4zi`;Zad! z1h@!xb*s)f067g#!xJ>=6gp#v_plz8ha+TRV~tZ|=4; zbGIBqhel|?>Z<#?jUfHIJ-F#Beh8j7m(QXQp7D#V+Wg|EVLbP#x#|2ehlqV$Q*P!6 z`+&qioz=;26JBA%xFC}v>*>bH7%Q(?bZcQIv!|({RppFk*Qs=Lu%5MJ!yrOW`hl*m zX3!)iPZnF)US)8ATRuBg*1|9Cw`{Rv&R>H`gu)ryK?9ElDonhxT%3w)saf~4q}BNz_Xn~(jUMc z?d&a${CX&=SJFzJ{;bzTjcF2JQAvTbF(aRGBZ=2-gDDl^YQc$X9X8`+A9a;Hg@jyb zH-5R?d=*Q^Mkz3c1H&qo&N^n z89{-1yb1r8rnl#XO4`^?D!`&`3f1c<(!}{g{AfH7kzXfY@u2ZM{}(es4wUl&nl)OY z_)Jlxg@)X>BHhfUcQKb++JB+5-=;DaQ<$TwfVo+9w3m`GXzHaS{{gyG{y-yz_2j_% z`}0-Y)CdR~>5~{8h3t7BQ}$Pc?(`pB7NWBQLBt8pj9v$dT2keZx2dBfL4p3r3H_^* zlD{HF+trilUpEQq;`wRMycd99qq8Kgqb&3WZgq6YB`pJp8d$HraLa2Oei_5R8gDZc$1A^(x=&;9E zs9l|CLo?wi&!o{RM;#>fAR(2A9mDh@$qHb5hXkT`G0yZeV+4yvFm1Bz9KSWEK@Gazk}RYua6bRU4MD42Qbk_CAJq z1|olXK3ljcRtEF=xc+*tJyT8gV<3tnrBs=jI%eX_6{h2~Hs!>k^}8voO>wzNQDEQM z2QjxJun4OtTqOng9)B5{I)3PUaLW@UmWTUGC3Xf<@>xQYKmEqkQg^f6#712bH)!}8f@|iuKY7@zB{c`>dSL5Q-ri{Z#jHD%+cr~f=-(z`%AiU{!Ob}AnK1mfFOt8J138pvi`+Zj^yb# zZX~%A2JGrC_M2sBQoFoLkiW>p57`{eyFU5ZP^-xG6nc&HrT$LCFOl2K@7m79$iHI#dx9;Xwe+l7($fR*LscSZ1U7^GJ+d09!zGODo*)(kgKW>En{n3 zH4x3qCxq^Zc^Tg#n37^xKy=F&Tg!H!z?a}x8Hn%Rlf_m`YsAUQ$JjCFKO2KaTgkS`sckA+2P zUYT|cT0DmWp3vcK;RrD*F>slgl%kCJq5r z`s|qljjko*ZjDU1F$BvkONbE{WpFRR=`u+1Wna{1N31qX9F#3CJVP-ts^>pY?8InH zU{B(9HMtvKYQ0Ljl%_0Cog|V?n%@pI=0|`oW()C)j_KEV#@{Q_-p*v7m8%0e_;9hY z=pq-?F%OH`2jLo|u2#{y2UN!@O+*(g^BVE7fkd{<2EUEr&sm=KdRC@h|6@bw6LrGS zEv6y=<$*v^!Y?6zPPIH;?@c`Xm3r_@?d03=Gx!v#bctG?mB+05ltyPJa_1-jv+v%i zw(pTm)75NJSz?>ur;(xK%AKCo?PliOR=qCfnR&#qu9;ZI;pBk$g4*1Q0KFl-XR8N| zCCoOecdVx;8OmL9ge1`06{=-tbzn5Fri1QV54Fn|p?%mXB+xe#u!aadORIP_&jOPQ zk&s41z#NL{pf2CNbQn$b?}$amEM!9TRaI^hV5X_Y`EnNV^<t+%9hBqoR z9+r<T#jvcG&%WrYAOa=k&08PJzPkwe@9MA4S`1w2)f>M zPxso+eRn74yWsqrM@!#bBuU$GZ{cC0XBBlTudq(-)4qnj$YLrkuRu5PYEHRYv0jXX z?t#4N!v2mr%hlrSrWPg<#3^x7?eaKv6&m2YeTiutF6U(Lj|v;?GGET~;{P&v<;VRN zE)hjrSRY~*NNeyR?|1$i#;23$k4R3 zSW?z|pYHi<1Rl)?k&-;ZoIL&T_kK89MvGgTylU{gQ{uvf?@mAORA~(;7C}rq;0e!axB2vu#NE!O-9I zAl$f+XKL1(me}jo0!et=BSbCP3q>HS$)gM$^+h#4A_aWR^GvqlDDcX8y>F&#Uf~hA z*G?3xl<|2=wuV%dU1R@Sm0l)L-Zw9dT%!T!=S78fb==O`^33_RR?~$uip&rkHNqXm z(yS}d*t&r;WFp)8)dP^WHAg%IvX2iT(kGg!wSJgdRATkK?(YFFy-nKKg5bP5b&~Qf ziJ(-$5hJircM5vQTyB&;?Hj{RukLdqbuUIAmK-w!;5)-Zf(RISk+pV{5-KY8RJmvV zKpLpsQwt_K-{sI2=d|MBh{1gNAVz?WP4ymF@gln{>x;_j=k0s`P{c3Ns1I7xF7^!+ zTV>$pPM9ahW`j#A*|XJT2YWd+%huZeNQSLchTv1?AEzj+XGbL7H>XE51FB=KK(&NN zSceG_=-PKoD7;DZOBrzAxNI7`T-`Pv-iw|Ie z$^vGncdct*90N5%rjm$epVP#Ks>3ygzkzr|4_KHErq~{lFm!pe@x(@mGP;SW%ZcQl zvb8&jNK18=^Lwm7BmN{GA$j3fXXV5&tx(oM!2mTiSt<51;^c3W;g?9u_8q0t(!Vh8 z^6qmicrUjm*8^|*;Q6t$9QLtuswY{3eUJO`K4pJCn+u`1`a1iY)Pjn_K1B3I;G>&C zr(lQRc?yo241OhGZh(+{-dC}j`pGUidIX-nZcC!H7h#_Wa&sj&mXApCcSLZ80uFiZ zsSha&{JKAo)^@ONhDcE>ow3@^gB#;~$CSOk0)?Qr6ZKj6Z<2Aioqa)ZmoQ3qDQ5ch z?Nwn1t?OX4voLrE~A>Qh&_*@X@DKi{ffa+HDby+*W&BLYoOMJ)hNg|;;? zK-tX9O@^jVW7El_*d?RcoyLu~rI4pKHM-YrcBlst2zhcyv82&uTFI`x16hYKNFeGj z1PxQFHcF0Mou;`Dhz2SR)NS=tk-b`^!TO4(h86c0e0ht0v*mUyjzcPOfi!SgZBQL- z=tDD+c&v`q@Ci_vfw>_zM{6^x4Ve*a#NPr`1ozK+POwh{U9P;1;5jB*=C%Wr<-98|MvK*kO!^Nd1o*D-nbb+?TlqL(_{ChP|Z=q zwnkCo3E*~6XuPyv5**cNz?G4v48>eiIuALEZa%3WhH}{gR}U*RRz=z)VG4*v5RYG} zsEICVxFYDus;p&I4vqw*U76z7uNQ!7lF5l52K7B|kkDMi*F{@J}rQ+?O}1G_8OaRg17axdz}%X?YM z$GsQCj{cxP6<*ILco`#4ia?AB2EH@0HkY_nkNYREUA)KT_YsRcHPGmHM5v^M(yS7C z2Nz67{%zlVbqVg4vv}_?Dti;*7O{-SeE5OXI!%){TV1}k_{VL#5VtK!{DCBv>oAfK zEjp1gQS($^O0bqtO^i#OiCOhDjCBm39LU7T)GXMWm1`Sin09||-wd5#TD$Uj^gHiB zJWl4~s1vsMB<{zc3xtJR$CRCv71W8jYv7~3GnXM6DCH4t{(Jao93qkXf#hDvxAs^p zqCk@e=R+PHX|+_20&blu32f&D7z>W!6UI8oOJpg`f`!^jDPbLB*bW7@Rys(@>dR`NPV9%$j%sIPmI>Yz_5B|G=tLzeemkJFXJ#=?W@eDF>izqNU`K0dT#7zy-(B2_q9p4GR7mXw(B%Bg5Wm~>~)knO8qx}UDmR`+$SlJ9vnLO4_PiUI3 zwNA^QD^u%j$OZewxQ!KEJ+;ML1uydmhv&7>M~W>)M@(_M@!TH*MO| z_$CLzXBAG5{*4BRFqX4JG*pZSk4Vr|y&OMEC1@GYLyy(Em_#g3K=^WSr)I_CfIK22 zfaNxn6~SMgsb#PN2%WQy8Mn8ia|AOsQv724@7K#HR0B>`b@*Tu0TXFSxI(Gay%o|g zMjIDH9@Ke>#aH=iZIDw!6a+Bc6S*!yixWb_rftR5%I1_*?z#X;vcC~Gr?@fzV3OKt zdNsDprXY|bDGynS33qV3&YS&ugUM&S?~0=ckBOCfT#IzYyiW~bSBk9PXdnVo^uZx* zc5jLd+eSB1c(u!nIr82WWbCkbRI_5r=a{&yF9t)OW8pGpP@B*TXvYWu0^C$+{~)wg zRMN&;h3Dt_Z_ihKx1ySeI38i^VvC0YdsX}zhV8#dF>0ME1_!84@_X+}PlcV^86)=U za`*1>1_tU_i^SxiC{QjJ+s;d=gz&2Z>y3S<-i@%2-|Kkq-lwb$31C0JCcJ1py*zpK zEm$VOqwEWyDT@_l!J2FiF+1jpOvJ3qf8RfGKvg6NPCGsWyJBXeP{WC7EUM62*zub@ zIFL*5a5(yFu=#iha^`_p?th+~|yftvc^<|P%Q z@o`Zz!l@HM;;Gs|#OVC7yc5JVNh`O629SqE3HVZzqIjz<(5oHe%z_+J9S*gU)}xB; zJ5v2Pn1qxC*O9-Z{UQh5Q*o>!SCge7IWY)EF@kBFX;`x^dsX@aX>KRs2U1t1XM)%P zYRi`7cNd}JaDlX}m~CovuMq6tQ-7UY9VW-Fm&?BLQwz@kfP|W2Wuv M=As3ewF6 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

A9RJb?KovO<$?J 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 diff --git a/ minutes/2013-07-11.html b/ minutes/2013-07-11.html deleted file mode 100644 index 4e8ec343..00000000 --- a/ minutes/2013-07-11.html +++ /dev/null @@ -1,1049 +0,0 @@ - - - - - Meeting Report – Launch Meeting 2 - - - - - - - - -

-

-MEETING TEMPLATES - -SimPEG

-

-
-

-

- - - - - - - -
-

Subject/Purpose -

-
-
    -
  • SimPEG - Mesh and operators meeting

    -
-
-

-

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - -
-

Organizer’s - Name

-
-

Luz - Angelica Caudillo Mata

-
-

Date

-
-

2013-07-11

-
-

Organizer’s - Location

-
-

ESB - 4013

-
-

Meeting - date/ location

-
-

GIF - room

-
-

from:

-
-

12:00

-
-

to:

-
-

13:00

-
-

-
-

-

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

ATTENDANTS

-
-

No

-
-

Name

-
-

Initials

-
-

Rol

-
-

1

-
-

Eldad - Haber

-
-

EH

-
-

Participant

-
-

2

-
-

Dave - Marchant

-
-

DM

-
-

Participant

-
-

3

-
-

Lars - Ruthotto

-
-

LR

-
-

Participant

-
-

4

-
-

Luz - Angelica Caudillo Mata

-
-

LACM

-
-

Participant

-
-

5

-
-

Kristofer - Davis

-
-

KD

-
-

Participant

-
-

6

-
-

Seogi - Kang

-
-

SK

-
-

Participant

-
-

7

-
-

Jenn - Fohring

-
-

JF

-
-

Participant

-
-

8

-
-

Wing - Wa Yu

-
-

WY

-
-

Participant

-
-

9

-
-

Klara - Steklova

-
-

KS

-
-

Participant

-
-

10

-
-

Kristofer - Davis

-
-

KD

-
-

Participant

-
-

11

-
-

Christoph - Schwarbach

-
-

CS

-
-

Participant

-
-

-
-

- - - - - - - - - - - - - - - - - - - - - - -
-

PRE-REQUISITES

-
-

Description

-
-

Who

-
-

Integrated - mesh -

-
-

RC, - LACM

-
-

Operators

-
-

KS,SK

-
-

Buy - sushi

-
-

JF

-
-

-
-

-

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

AGENDA

-
-

Hours - of

-
-

Time - (min)

-
-

No

-
-

Topics

-
-

Discussion

-

Leader

-
-

Start

-
-

End

-
-

Plan

-
-

Real

-
-

13:00

-
-


-

-
-

10

-
-

10

-
-

0

-
-

Sushi

-
-

All

-
-


-

-
-


-

-
-

5

-
-

10

-
-

1

-
-

Mesh - class and naming conventions

-
-

RC

-
-


-

-
-


-

-
-

10

-
-

10

-
-

2

-
-

Operators: - DIV

-
-

SK

-
-


-

-
-


-

-
-

10

-
-

10

-
-

3

-
-

Bitbucket

-
-

DM

-
-


-

-
-


-

-
-

5

-
-

5

-
-

4

-
-

Wiki

-
-

LR

-
-


-

-
-


-

-
-


-

-
-

25

-
-

5

-
-

Future - work

-
-

EH

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-


-

-
-

-
-

- - - - - - - - - - - -
-

Totals

-
-

60

-
-

70

-
-


-

-
-

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

ACTIVITIES, - ACTIONS AND IMPORTANT INFORMATION

-
-
No
-
-

What

-
-

Who

-
-

When

-
-

1

-
-

- Complete coding and testing DIV,GRAD, CURL, Mass and Averaging - Matrices operators

-
-

SK, - KS

-
-

18-07-2013

-
-

2

-
-

Full - simulation QSMEF

-
-

EH, - JF

-
-

18-07-2013

-
-

3

-
-

Implement - different types of sources (see types in section Future work)

-
-

KD

-
-

18-07-2013

-
-

4

-
-

Plotting - fields in a mesh

-
-

LR, - RC

-
-

18-07-2013

-
-

5

-
-


-

-
-

-
-


-

-
-

6

-
-


-

-
-

-
-


-

-
-

7

-
-


-

-
-

-
-


-

-
-

8

-
-


-

-
-

-
-


-

-
-

-
-

-

-
-

-

-Notes

-

-
-

-

-MEETING -SUMARY

-

-
-

-
    -
  1. - Mesh class and naming conventions

    -
-

- RC and LACM integrated all the mesh codes created -by LR-LACM, RC and DM. Some naming conventions for the class -properties and methods were defined. See the wiki section “Coding -Conventions” for further details.

-

-

-

- The updated mesh class was already uploaded in the repository.

-

-
-

-
    -
  1. - Operators

    -
-

-SK showed his implementation of the DIV operator. This code -implements testing. It requires a bit more of work to be completed -and tested.

-

-
-

-
    -
  1. - Wiki

    -
-

-LR updated the wiki page inside the repository. General message: -use it!

-

-
-

-
    -
  1. - Bitbucket:

    -
-

-DM briefly showed how to use SourceTree and bitbucket together to -upload the new code done.

-

- -

-

- An -important thing to realize is that everyone can click the button -merge. So, be careful!

-

-
-

-
    -
  1. - Future work:

    -
-
    -
  • - Types of sources to be implemented:

    -
-

- a) Analytical sources: -

-
    -
      -
        -
          -
            -
          • - Dipoles

            -
          • - Half space (For example in the air bone context)

            -
          • - Full space -

            -
          • - Look for analytical expressions

            -
          -
        -
      -
    -
-

- b) Wires: for example loops. -

-

- -

-

- c) Point dipoles

-

-
-

-
    -
  • - Plotting fields in a mesh

    -
  • - Design class structure for the full simulation of the Quasi Static - Maxwell's Equations in Frequency domain (QSMEF).

    -
  • - Forward modeling with flow (in particular interested in advection - case)

    -
  • - Solvers

    -
-

-Which ones to use? Some options mentioned: -

-
    -
      -
    • - MUMPS (favorite): http://graal.ens-lyon.fr/MUMPS/

      -
    • - SuperLU: - http://crd-legacy.lbl.gov/~xiaoye/SuperLU/ -

      -
    • - PETSc: http://www.mcs.anl.gov/petsc/

      -
    -
-

-
-

-

-
-

-

-AGREEMENTS

-

-
-

-
    -
  1. - The - output of our code must support MATLAB compatibility output and - visualization. So we can easily compare the results with what we - have.

    -
-

-
-

-

-COMMENTS -AND OTHER TOPICS TO BE DISCUSSED IN FURTHER MEETINGS

-
    -
  1. - Interpolation - matrix to move from the solution to the receivers and decide about - which mesh to use

    -
  2. - Connection - to MUMPS: EH, Roman will work on this after full simulation QSME is - done.

    -
  3. - Think - about output formats (design a data file for transmitters, receivers - and frequency? )

    -
-

-
-

-
    -
  1. - Next - meeting will be on Thursday July 18, 2013 at lunch time in GIF room.

    -
  2. - Wing - is on charge of the sushi next time.

    -
-

-
-

-
-

- University of - British Columbia . - 3/3

-

Meeting - Template, Version 1.0 - © - LACM 2013

-
- - \ No newline at end of file diff --git a/ minutes/2013-07-11.pdf b/ minutes/2013-07-11.pdf deleted file mode 100644 index b89304b7f21e623c75c923513f5af9250eb9e300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265557 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�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 diff --git a/ minutes/template.doc b/ minutes/template.doc deleted file mode 100644 index f59589fb779ae14fb61b3df1556d5ab54605be59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129024 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 Date: Fri, 30 Aug 2013 22:41:02 -0700 Subject: [PATCH 105/359] Added sphinx doc support. goto docs and type: make html see the wonderful documents!! --- docs/Makefile | 153 ++++++++++++++++++++ docs/api_BaseMesh.rst | 8 ++ docs/api_TensorMesh.rst | 8 ++ docs/conf.py | 244 ++++++++++++++++++++++++++++++++ docs/examples/mesh/plot_grid.py | 12 ++ docs/index.rst | 38 +++++ docs/make.bat | 190 +++++++++++++++++++++++++ 7 files changed, 653 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/api_BaseMesh.rst create mode 100644 docs/api_TensorMesh.rst create mode 100644 docs/conf.py create mode 100644 docs/examples/mesh/plot_grid.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..bee80244 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SimPEG.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SimPEG.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/SimPEG" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SimPEG" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/docs/api_BaseMesh.rst b/docs/api_BaseMesh.rst new file mode 100644 index 00000000..66249953 --- /dev/null +++ b/docs/api_BaseMesh.rst @@ -0,0 +1,8 @@ +.. _api_BaseMesh: + +Base Mesh +********* + +.. automodule:: SimPEG.BaseMesh + :members: + :undoc-members: diff --git a/docs/api_TensorMesh.rst b/docs/api_TensorMesh.rst new file mode 100644 index 00000000..9eb346cb --- /dev/null +++ b/docs/api_TensorMesh.rst @@ -0,0 +1,8 @@ +.. _api_TensorMesh: + +Tensor Mesh +*********** + +.. automodule:: SimPEG.TensorMesh + :members: + :undoc-members: diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..86aacce4 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- +# +# SimPEG documentation build configuration file, created by +# sphinx-quickstart on Fri Aug 30 18:42:44 2013. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +sys.path.append('../') + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc', 'matplotlib.sphinxext.plot_directive'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'SimPEG' +copyright = u'2013, SimPEG Developers' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.0.1' +# The full version, including alpha/beta/rc tags. +release = '0.0.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'SimPEGdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'SimPEG.tex', u'SimPEG Documentation', + u'Rowan Cockett', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'simpeg', u'SimPEG Documentation', + [u'Rowan Cockett'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'SimPEG', u'SimPEG Documentation', + u'Rowan Cockett', 'SimPEG', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' diff --git a/docs/examples/mesh/plot_grid.py b/docs/examples/mesh/plot_grid.py new file mode 100644 index 00000000..6eafb939 --- /dev/null +++ b/docs/examples/mesh/plot_grid.py @@ -0,0 +1,12 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +x0 = np.zeros(2) +h1 = np.linspace(.1,.5,3) +h2 = np.linspace(.1,.5,5) +mesh = TensorMesh([h1,h2],x0) +mesh.plotGrid() + +plt.show() + diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..c30567cc --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,38 @@ +.. SimPEG documentation master file, created by + sphinx-quickstart on Fri Aug 30 18:42:44 2013. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +SimPEG +====== + +SimPEG (Simulation and Parameter Estimation in Geophysics) is a python package for simulation and gradient based parameter estimation in the context of geophysical applications. + +The vision is to create a package for finite volume simulation with applications to geophysical imaging and subsurface flow. To enable the understanding of the many different components, this package has the following features: + +* modular with respect to the spacial discretization +* is built with the inverse problem in mind +* supports different hyperbolic solvers (Euler, Semi-Lagrangian, Lagrangian) +* supports 2D and 3D problems + + +Contents +======== + +.. toctree:: + :maxdepth: 2 + + api_BaseMesh + api_TensorMesh + +.. plot:: examples/mesh/plot_grid.py + :include-source: + + +Project Index & Search +====================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..2ac3df69 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\SimPEG.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\SimPEG.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end From 2330ae4ec185e07accdbc26d710e9d5552b07071 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 23:51:58 -0700 Subject: [PATCH 106/359] upgraded documentation. Added plots to docs. --- SimPEG/BaseMesh.py | 175 +++++++++++++----- SimPEG/TensorView.py | 22 ++- .../mesh/{plot_grid.py => plot_grid_2D.py} | 3 +- docs/examples/mesh/plot_grid_3D.py | 12 ++ docs/index.rst | 4 +- 5 files changed, 159 insertions(+), 57 deletions(-) rename docs/examples/mesh/{plot_grid.py => plot_grid_2D.py} (77%) create mode 100644 docs/examples/mesh/plot_grid_3D.py diff --git a/SimPEG/BaseMesh.py b/SimPEG/BaseMesh.py index fd799dea..c57828e9 100644 --- a/SimPEG/BaseMesh.py +++ b/SimPEG/BaseMesh.py @@ -3,31 +3,12 @@ from utils import mkvc class BaseMesh(object): - """BaseMesh does all the counting you don't want to do. + """ + BaseMesh does all the counting you don't want to do. + BaseMesh should be inherited by meshes with a regular structure. - x0 origin ndarray (dim, ) - n number of cells ndarray (dim, ) - dim dimension of mesh int 1, 2, or 3 - - nCx num cells in x dir int - nCy num cells in y dir int - nCz num cells in z dir int - nC total number of cells int - - nNx num nodes in x dir int - nNy num nodes in y dir int - nNz num nodes in z dir int - nN total number of nodes int - - nEx num edges in x dir ndarray [nEx_x, nEx_y, nEx_z] - nEy num edges in y dir ndarray [nEy_x, nEy_y, nEy_z] - nEz num edges in z dir ndarray [nEz_x, nEz_y, nEz_z] - nE total number of edges ndarray (dim, ) - - nFx num faces in x dir ndarray [nFx_x, nFx_y, nFx_z] - nFy num faces in y dir ndarray [nFy_x, nFy_y, nFy_z] - nFz num faces in z dir ndarray [nFz_x, nFz_y, nFz_z] - nF total number of faces ndarray (dim, ) + :param numpy.array,list n: number of cells in each direction (dim, ) + :param numpy.array,list x0: Origin of the mesh (dim, ) """ def __init__(self, n, x0=None): @@ -48,7 +29,12 @@ class BaseMesh(object): self._dim = len(n) def x0(): - doc = "Origin of the mesh" + doc = """ + Origin of the mesh + + :rtype: numpy.array (dim, ) + :return: x0 + """ fget = lambda self: self._x0 return locals() x0 = property(**x0()) @@ -161,25 +147,45 @@ class BaseMesh(object): return switchKernal(x) def n(): - doc = "Number of Cells in each dimension (array of integers)" + doc = """ + Number of Cells in each dimension (array of integers) + + :rtype: numpy.array + :return: n + """ fget = lambda self: self._n return locals() n = property(**n()) def dim(): - doc = "The dimension of the mesh (1, 2, or 3)." + doc = """ + The dimension of the mesh (1, 2, or 3). + + :rtype: int + :return: dim + """ fget = lambda self: self._dim return locals() dim = property(**dim()) def nCx(): - doc = "Number oc cells in the x direction" + doc = """ + Number of cells in the x direction + + :rtype: int + :return: nCx + """ fget = lambda self: self.n[0] return locals() nCx = property(**nCx()) def nCy(): - doc = "Number of cells in the y direction" + doc = """ + Number of cells in the y direction + + :rtype: int + :return: nCy or None if dim < 2 + """ def fget(self): if self.dim > 1: @@ -190,7 +196,11 @@ class BaseMesh(object): nCy = property(**nCy()) def nCz(): - doc = "Number of cells in the z direction" + doc = """Number of cells in the z direction + + :rtype: int + :return: nCz or None if dim < 3 + """ def fget(self): if self.dim > 2: @@ -201,19 +211,34 @@ class BaseMesh(object): nCz = property(**nCz()) def nC(): - doc = "Total number of cells" + doc = """ + Total number of cells in the model. + + :rtype: int + :return: nC + """ fget = lambda self: np.prod(self.n) return locals() nC = property(**nC()) def nNx(): - doc = "Number of nodes in the x-direction" + doc = """ + Number of nodes in the x-direction + + :rtype: int + :return: nNx + """ fget = lambda self: self.nCx + 1 return locals() nNx = property(**nNx()) def nNy(): - doc = "Number of noes in the y-direction" + doc = """ + Number of noes in the y-direction + + :rtype: int + :return: nNy or None if dim < 2 + """ def fget(self): if self.dim > 1: @@ -224,7 +249,12 @@ class BaseMesh(object): nNy = property(**nNy()) def nNz(): - doc = "Number of nodes in the z-direction" + doc = """ + Number of nodes in the z-direction + + :rtype: int + :return: nNz or None if dim < 3 + """ def fget(self): if self.dim > 2: @@ -235,19 +265,34 @@ class BaseMesh(object): nNz = property(**nNz()) def nN(): - doc = "Total number of nodes" + doc = """ + Total number of nodes + + :rtype: int + :return: nN + """ fget = lambda self: np.prod(self.n + 1) return locals() nN = property(**nN()) def nEx(): - doc = "Number of x-edges" + doc = """ + Number of x-edges in each direction + + :rtype: numpy.array (dim, ) + :return: nEx + """ fget = lambda self: np.array([x for x in [self.nCx, self.nNy, self.nNz] if not x is None]) return locals() nEx = property(**nEx()) def nEy(): - doc = "Number of y-edges" + doc = """ + Number of y-edges in each direction + + :rtype: numpy.array (dim, ) + :return: nEy or None if dim < 2 + """ def fget(self): if self.dim > 1: @@ -258,7 +303,12 @@ class BaseMesh(object): nEy = property(**nEy()) def nEz(): - doc = "Number of z-edges" + doc = """ + Number of z-edges in each direction + + :rtype: numpy.array (dim, ) + :return: nEz or None if dim < 3 + """ def fget(self): if self.dim > 2: @@ -269,19 +319,34 @@ class BaseMesh(object): nEz = property(**nEz()) def nE(): - doc = "Total number of edges" + doc = """ + Total number of edges in each direction + + :rtype: numpy.array (dim, ) + :return: [prod(nEx), prod(nEy), prod(nEz)] + """ fget = lambda self: np.array([np.prod(x) for x in [self.nEx, self.nEy, self.nEz] if not x is None]) return locals() nE = property(**nE()) def nFx(): - doc = "Number of x-faces" + doc = """ + Number of x-faces in each direction + + :rtype: numpy.array (dim, ) + :return: nFx + """ fget = lambda self: np.array([x for x in [self.nNx, self.nCy, self.nCz] if not x is None]) return locals() nFx = property(**nFx()) def nFy(): - doc = "Number of y-faces" + doc = """ + Number of y-faces in each direction + + :rtype: numpy.array (dim, ) + :return: nFy or None if dim < 2 + """ def fget(self): if self.dim > 1: @@ -292,7 +357,12 @@ class BaseMesh(object): nFy = property(**nFy()) def nFz(): - doc = "Number of z-faces" + doc = """ + Number of z-faces in each direction + + :rtype: numpy.array (dim, ) + :return: nFz or None if dim < 3 + """ def fget(self): if self.dim > 2: @@ -303,13 +373,23 @@ class BaseMesh(object): nFz = property(**nFz()) def nF(): - doc = "Total number of faces in each dimension" + doc = """ + Total number of faces in each direction + + :rtype: numpy.array (dim, ) + :return: [prod(nFx), prod(nFy), prod(nFz)] + """ fget = lambda self: np.array([np.prod(x) for x in [self.nFx, self.nFy, self.nFz] if not x is None]) return locals() nF = property(**nF()) def normals(): - doc = "Face Normals" + doc = """ + Face Normals + + :rtype: numpy.array (sum(nF), dim) + :return: normals + """ def fget(self): if self.dim == 2: @@ -325,7 +405,12 @@ class BaseMesh(object): normals = property(**normals()) def tangents(): - doc = "Edge Tangents" + doc = """ + Edge Tangents + + :rtype: numpy.array (sum(nE), dim) + :return: normals + """ def fget(self): if self.dim == 2: diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 01cad4e4..3140bdd5 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -13,7 +13,7 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True,annotationColor='w'): + def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True,annotationColor='w',showIt=False): """ Mesh.plotImage(I) @@ -164,11 +164,19 @@ class TensorView(object): ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') - plt.show() + if showIt: plt.show() return ph - def plotGrid(self): - """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" + def plotGrid(self, showIt=False): + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. + + + .. plot:: examples/mesh/plot_grid_2D.py + :include-source: + + .. plot:: examples/mesh/plot_grid_3D.py + :include-source: + """ if self.dim == 1: fig = plt.figure(1) fig.clf() @@ -182,7 +190,7 @@ class TensorView(object): ax.grid(True) ax.hold(False) ax.set_xlabel('x1') - plt.show() + if showIt: plt.show() elif self.dim == 2: fig = plt.figure(2) fig.clf() @@ -201,7 +209,7 @@ class TensorView(object): ax.hold(False) ax.set_xlabel('x1') ax.set_ylabel('x2') - plt.show() + if showIt: plt.show() elif self.dim == 3: fig = plt.figure(3) fig.clf() @@ -230,4 +238,4 @@ class TensorView(object): ax.set_xlabel('x1') ax.set_ylabel('x2') ax.set_zlabel('x3') - plt.show() + if showIt: plt.show() diff --git a/docs/examples/mesh/plot_grid.py b/docs/examples/mesh/plot_grid_2D.py similarity index 77% rename from docs/examples/mesh/plot_grid.py rename to docs/examples/mesh/plot_grid_2D.py index 6eafb939..c53a8e02 100644 --- a/docs/examples/mesh/plot_grid.py +++ b/docs/examples/mesh/plot_grid_2D.py @@ -2,10 +2,9 @@ import numpy as np import matplotlib.pyplot as plt from SimPEG import TensorMesh -x0 = np.zeros(2) h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) -mesh = TensorMesh([h1,h2],x0) +mesh = TensorMesh([h1, h2]) mesh.plotGrid() plt.show() diff --git a/docs/examples/mesh/plot_grid_3D.py b/docs/examples/mesh/plot_grid_3D.py new file mode 100644 index 00000000..8da62346 --- /dev/null +++ b/docs/examples/mesh/plot_grid_3D.py @@ -0,0 +1,12 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +h1 = np.linspace(.1,.5,3) +h2 = np.linspace(.1,.5,5) +h3 = np.linspace(.1,.5,3) +mesh = TensorMesh([h1,h2,h3]) +mesh.plotGrid() + +plt.show() + diff --git a/docs/index.rst b/docs/index.rst index c30567cc..20998c3f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -24,9 +24,7 @@ Contents api_BaseMesh api_TensorMesh - -.. plot:: examples/mesh/plot_grid.py - :include-source: + api_TensorView Project Index & Search From 950fcc572f85168365b66b1b4ffbce476ca12fc7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 10:20:23 -0700 Subject: [PATCH 107/359] Documentation updates. --- SimPEG/TensorView.py | 22 +++++++++++++++------- docs/api_DiffOperators.rst | 8 ++++++++ docs/api_GaussNewton.rst | 8 ++++++++ docs/api_InnerProducts.rst | 8 ++++++++ docs/api_LOMView.rst | 8 ++++++++ docs/api_LogicallyOrthogonalMesh.rst | 8 ++++++++ docs/api_TensorView.rst | 8 ++++++++ docs/examples/mesh/plot_image_2D.py | 11 +++++++++++ docs/examples/mesh/plot_image_3D.py | 12 ++++++++++++ docs/examples/mesh/plot_nodes.py | 13 +++++++++++++ docs/index.rst | 23 +++++++++++++++++++++-- 11 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 docs/api_DiffOperators.rst create mode 100644 docs/api_GaussNewton.rst create mode 100644 docs/api_InnerProducts.rst create mode 100644 docs/api_LOMView.rst create mode 100644 docs/api_LogicallyOrthogonalMesh.rst create mode 100644 docs/api_TensorView.rst create mode 100644 docs/examples/mesh/plot_image_2D.py create mode 100644 docs/examples/mesh/plot_image_3D.py create mode 100644 docs/examples/mesh/plot_nodes.py diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 3140bdd5..2b02bfaa 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -21,15 +21,23 @@ class TensorView(object): Input: - I - scalar field (np.array) + :param numpy.array I: scalar field Optional Input: - imageType - type of image ('CC','N','Fx','Fy','Fz','Ex','Ey','Ez') - figNum - number of figure to plot to - ax - axis to plot to - direction - 3D only. slice dimensions - numbering - 3D only. show numbering of slices + :param str imageType: type of image ('CC','N','Fx','Fy','Fz','Ex','Ey','Ez') + :param int figNum: number of figure to plot to + :param matplotlib.axes.Axes ax: axis to plot to + :param str direction: slice dimensions, 3D only ('x', 'y', 'z') + :param bool numbering: show numbering of slices, 3D only + :param str annotationColor: color of annotation, e.g. 'w', 'k', 'b' + :param bool showIt: call plt.show() + + .. plot:: examples/mesh/plot_image_2D.py + :include-source: + + .. plot:: examples/mesh/plot_image_3D.py + :include-source: """ assert type(I) == np.ndarray, "I must be a numpy array" assert type(numbering) == bool, "numbering must be a bool" @@ -154,6 +162,7 @@ class TensorView(object): gyY = np.c_[gy, gy, gy+np.nan].ravel() ax.plot(gxX, gxY, annotationColor+'-', linewidth=2) ax.plot(gyX, gyY, annotationColor+'-', linewidth=2) + ax.axis('tight') if numbering: pad = np.sum(self.hx)*0.04 @@ -170,7 +179,6 @@ class TensorView(object): def plotGrid(self, showIt=False): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. - .. plot:: examples/mesh/plot_grid_2D.py :include-source: diff --git a/docs/api_DiffOperators.rst b/docs/api_DiffOperators.rst new file mode 100644 index 00000000..57763a33 --- /dev/null +++ b/docs/api_DiffOperators.rst @@ -0,0 +1,8 @@ +.. _api_DiffOperators: + +Differential Operators +********************** + +.. automodule:: SimPEG.DiffOperators + :members: + :undoc-members: diff --git a/docs/api_GaussNewton.rst b/docs/api_GaussNewton.rst new file mode 100644 index 00000000..65012347 --- /dev/null +++ b/docs/api_GaussNewton.rst @@ -0,0 +1,8 @@ +.. _api_GaussNewton: + +Gauss Newton +************ + +.. automodule:: SimPEG.GaussNewton + :members: + :undoc-members: diff --git a/docs/api_InnerProducts.rst b/docs/api_InnerProducts.rst new file mode 100644 index 00000000..6dfd2a77 --- /dev/null +++ b/docs/api_InnerProducts.rst @@ -0,0 +1,8 @@ +.. _api_InnerProducts: + +Inner Products +************** + +.. automodule:: SimPEG.InnerProducts + :members: + :undoc-members: diff --git a/docs/api_LOMView.rst b/docs/api_LOMView.rst new file mode 100644 index 00000000..67e1bb91 --- /dev/null +++ b/docs/api_LOMView.rst @@ -0,0 +1,8 @@ +.. _api_LOMView: + +LOM View +*********** + +.. automodule:: SimPEG.LOMView + :members: + :undoc-members: diff --git a/docs/api_LogicallyOrthogonalMesh.rst b/docs/api_LogicallyOrthogonalMesh.rst new file mode 100644 index 00000000..3b8296d7 --- /dev/null +++ b/docs/api_LogicallyOrthogonalMesh.rst @@ -0,0 +1,8 @@ +.. _api_LogicallyOrthogonalMesh: + +Logically Orthogonal Mesh +************************* + +.. automodule:: SimPEG.LogicallyOrthogonalMesh + :members: + :undoc-members: diff --git a/docs/api_TensorView.rst b/docs/api_TensorView.rst new file mode 100644 index 00000000..6ae80276 --- /dev/null +++ b/docs/api_TensorView.rst @@ -0,0 +1,8 @@ +.. _api_TensorView: + +Tensor View +*********** + +.. automodule:: SimPEG.TensorView + :members: + :undoc-members: diff --git a/docs/examples/mesh/plot_image_2D.py b/docs/examples/mesh/plot_image_2D.py new file mode 100644 index 00000000..c7bcb0d5 --- /dev/null +++ b/docs/examples/mesh/plot_image_2D.py @@ -0,0 +1,11 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +n = 20 +h = np.ones(n)/n +M = TensorMesh([h, h]) +I = np.sin(M.gridCC[:,0]*2*np.pi)*np.sin(M.gridCC[:,1]*2*np.pi) +M.plotImage(I) + +plt.show() diff --git a/docs/examples/mesh/plot_image_3D.py b/docs/examples/mesh/plot_image_3D.py new file mode 100644 index 00000000..d00756a1 --- /dev/null +++ b/docs/examples/mesh/plot_image_3D.py @@ -0,0 +1,12 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +n = 20 +h = np.ones(n)/n +M = TensorMesh([h,h,h]) + +I = np.sin(M.gridCC[:,0]*2*np.pi)*np.sin(M.gridCC[:,1]*2*np.pi)*np.sin(M.gridCC[:,2]*2*np.pi) +M.plotImage(I, annotationColor='k') + +plt.show() diff --git a/docs/examples/mesh/plot_nodes.py b/docs/examples/mesh/plot_nodes.py new file mode 100644 index 00000000..5d2c912b --- /dev/null +++ b/docs/examples/mesh/plot_nodes.py @@ -0,0 +1,13 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +x0 = np.zeros(2) +h1 = np.linspace(.1,.5,3) +h2 = np.linspace(.1,.5,5) +M = TensorMesh([h1,h2],x0) +M.plotGrid() +plt.hold() +plt.plot(M.gridN[:,0], M.gridN[:,1], 'ks', markersize=10) +plt.show() + diff --git a/docs/index.rst b/docs/index.rst index 20998c3f..ce50bc3d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -16,8 +16,8 @@ The vision is to create a package for finite volume simulation with applications * supports 2D and 3D problems -Contents -======== +Meshing & Operators +=================== .. toctree:: :maxdepth: 2 @@ -25,6 +25,25 @@ Contents api_BaseMesh api_TensorMesh api_TensorView + api_LogicallyOrthogonalMesh + api_LomView + api_DiffOperators + api_InnerProducts + +Inversion +========= + +.. toctree:: + :maxdepth: 2 + + api_GaussNewton + +Example Problems +================ + +.. toctree:: + :maxdepth: 2 + Project Index & Search From d7d4303e34cf309671c1869f1966984548ec51d5 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 10:27:03 -0700 Subject: [PATCH 108/359] update to conf.py for readthedocs --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 86aacce4..d5b5efaa 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -27,7 +27,7 @@ sys.path.append('../') # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc', 'matplotlib.sphinxext.plot_directive'] +extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'] #, 'matplotlib.sphinxext.plot_directive' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 11f4c5ba513c4f8334f12bef4ad23bf63fa3dd50 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 10:38:09 -0700 Subject: [PATCH 109/359] added pip requirement file. --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..24ce15ab --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +numpy From b8e234a56e062d01741496dbc63c25fa61b0657f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 10:53:06 -0700 Subject: [PATCH 110/359] Test addition to conf.py for plotting in the documentation. --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index d5b5efaa..86aacce4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -27,7 +27,7 @@ sys.path.append('../') # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc'] #, 'matplotlib.sphinxext.plot_directive' +extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc', 'matplotlib.sphinxext.plot_directive'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 44a846cb23621a6409d0d4fd612168e5ca7f3b8c Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 11:36:09 -0700 Subject: [PATCH 111/359] added lines to the tensor view. --- SimPEG/TensorView.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 2b02bfaa..168986a0 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -2,6 +2,7 @@ import numpy as np import matplotlib.pyplot as plt import matplotlib from mpl_toolkits.mplot3d import Axes3D +from utils import mkvc class TensorView(object): @@ -213,6 +214,17 @@ class TensorView(object): ax.plot(xc[:, 0], xc[:, 1], 'ro') ax.plot(xs1[:, 0], xs1[:, 1], 'g>') ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + + # Plot the grid lines + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() + X = np.r_[X1, X2] + Y = np.r_[Y1, Y2] + plt.plot(X, Y) + ax.grid(True) ax.hold(False) ax.set_xlabel('x1') @@ -241,6 +253,23 @@ class TensorView(object): ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) + + # Plot the grid lines + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() + Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() + Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() + X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() + Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() + Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() + X = np.r_[X1, X2, X3] + Y = np.r_[Y1, Y2, Y3] + Z = np.r_[Z1, Z2, Z3] + plt.plot(X, Y, 'b-', zs=Z) + ax.grid(True) ax.hold(False) ax.set_xlabel('x1') From dde447423493cfe479ef2e06f1f029a1c284bf5a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 14:53:22 -0700 Subject: [PATCH 112/359] updated plots and documentation --- SimPEG/LogicallyOrthogonalMesh.py | 4 + SimPEG/TensorMesh.py | 5 +- SimPEG/TensorView.py | 82 +++++++++++-------- .../mesh/plot_LogicallyOrthogonalMesh.py | 6 ++ docs/examples/mesh/plot_TensorMesh.py | 21 +++++ docs/examples/mesh/plot_grid_2D.py | 2 +- docs/examples/mesh/plot_grid_3D.py | 2 +- 7 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 docs/examples/mesh/plot_LogicallyOrthogonalMesh.py create mode 100644 docs/examples/mesh/plot_TensorMesh.py diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index cfa8b7ed..49e2ee07 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -16,6 +16,10 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): """ LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. + Example of a logically orthogonal mesh: + + .. plot:: examples/mesh/plot_LogicallyOrthogonalMesh.py + """ _meshType = 'LOM' diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index c59f4acd..2015838c 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -21,8 +21,9 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): mesh = TensorMesh([hx, hy, hz]) - .. math:: - x^2 = 5 + Example of a padded tensor mesh: + + .. plot:: examples/mesh/plot_TensorMesh.py """ _meshType = 'TENSOR' diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 168986a0..e0c570cd 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -177,9 +177,16 @@ class TensorView(object): if showIt: plt.show() return ph - def plotGrid(self, showIt=False): + def plotGrid(self, nodes=False, faces=False, centers=False, edges=False, lines=True, showIt=False): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. + :param bool nodes: plot nodes + :param bool faces: plot faces + :param bool centers: plot centers + :param bool edges: plot edges + :param bool lines: plot lines connecting nodes + :param bool showIt: call plt.show() + .. plot:: examples/mesh/plot_grid_2D.py :include-source: @@ -210,20 +217,22 @@ class TensorView(object): xs2 = self.gridFy ax.hold(True) - ax.plot(xn[:, 0], xn[:, 1], 'bs') - ax.plot(xc[:, 0], xc[:, 1], 'ro') - ax.plot(xs1[:, 0], xs1[:, 1], 'g>') - ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs') + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro') + if faces: + ax.plot(xs1[:, 0], xs1[:, 1], 'g>') + ax.plot(xs2[:, 0], xs2[:, 1], 'g^') # Plot the grid lines - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() - X = np.r_[X1, X2] - Y = np.r_[Y1, Y2] - plt.plot(X, Y) + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() + X = np.r_[X1, X2] + Y = np.r_[Y1, Y2] + plt.plot(X, Y) ax.grid(True) ax.hold(False) @@ -245,30 +254,33 @@ class TensorView(object): xes3 = self.gridEz ax.hold(True) - ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) - ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) - ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) - ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) - ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) - ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) - ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) - ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) + if faces: + ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) + ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) + ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) + if edges: + ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) + ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) + ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) # Plot the grid lines - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() - Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() - Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() - X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() - Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() - Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() - X = np.r_[X1, X2, X3] - Y = np.r_[Y1, Y2, Y3] - Z = np.r_[Z1, Z2, Z3] - plt.plot(X, Y, 'b-', zs=Z) + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() + Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() + Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() + X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() + Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() + Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() + X = np.r_[X1, X2, X3] + Y = np.r_[Y1, Y2, Y3] + Z = np.r_[Z1, Z2, Z3] + plt.plot(X, Y, 'b-', zs=Z) ax.grid(True) ax.hold(False) diff --git a/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py new file mode 100644 index 00000000..55350946 --- /dev/null +++ b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py @@ -0,0 +1,6 @@ +from SimPEG import LogicallyOrthogonalMesh, utils +import matplotlib.pyplot as plt +X, Y = utils.exampleLomGird([3,3],'rotate') +M = LogicallyOrthogonalMesh([X, Y]) +M.plotGrid() +plt.show() diff --git a/docs/examples/mesh/plot_TensorMesh.py b/docs/examples/mesh/plot_TensorMesh.py new file mode 100644 index 00000000..94c627f8 --- /dev/null +++ b/docs/examples/mesh/plot_TensorMesh.py @@ -0,0 +1,21 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +pad = 7 +padfactor = 1.4 +xpad = (np.ones(pad)*padfactor)**np.arange(pad) +ypad = (np.ones(pad)*padfactor)**np.arange(pad) + +core = 15 +xcore = np.ones(core) +ycore = np.ones(core) + +h1 = np.r_[xpad[::-1],xcore,xpad] +h2 = np.r_[ypad[::-1],ycore,ypad] + +mesh = TensorMesh([h1, h2]) +mesh.plotGrid() +plt.axis('tight') + +plt.show() diff --git a/docs/examples/mesh/plot_grid_2D.py b/docs/examples/mesh/plot_grid_2D.py index c53a8e02..258fbdfc 100644 --- a/docs/examples/mesh/plot_grid_2D.py +++ b/docs/examples/mesh/plot_grid_2D.py @@ -5,7 +5,7 @@ from SimPEG import TensorMesh h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) mesh = TensorMesh([h1, h2]) -mesh.plotGrid() +mesh.plotGrid(nodes=True, faces=True, centers=True, lines=True) plt.show() diff --git a/docs/examples/mesh/plot_grid_3D.py b/docs/examples/mesh/plot_grid_3D.py index 8da62346..caf8dbd2 100644 --- a/docs/examples/mesh/plot_grid_3D.py +++ b/docs/examples/mesh/plot_grid_3D.py @@ -6,7 +6,7 @@ h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) h3 = np.linspace(.1,.5,3) mesh = TensorMesh([h1,h2,h3]) -mesh.plotGrid() +mesh.plotGrid(nodes=True, faces=True, centers=True, lines=True) plt.show() From 71668deb1b5f8ae50eb8060c842986ec1b44d9dd Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 16:46:02 -0700 Subject: [PATCH 113/359] inner product documentation --- SimPEG/InnerProducts.py | 197 +++++++++++++++++++++++++++++- SimPEG/LogicallyOrthogonalMesh.py | 17 ++- docs/api_LOMView.rst | 4 +- docs/index.rst | 2 +- 4 files changed, 204 insertions(+), 16 deletions(-) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 1add3e72..18803344 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -43,6 +43,88 @@ class InnerProducts(object): def getFaceInnerProduct(mesh, mu=None, returnP=False): + """ + :param numpy.array mu: material property (tensor properties are possible) at each cell center (nC, (1, 3, or 6)) + :param bool returnP: returns the projection matrices + :rtype: scipy.csr_matrix + :return: M, the inner product matrix + + Depending on the number of columns (either 1, 3, or 6) of mu, the material property is interpreted as follows: + + .. math:: + \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{1} & 0 \\\\ 0 & 0 & \mu_{1} \end{matrix}\\right] + + \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{2} & 0 \\\\ 0 & 0 & \mu_{3} \end{matrix}\\right] + + \left[\\begin{matrix} \mu_{1} & \mu_{4} & \mu_{5} \\\\ \mu_{4} & \mu_{2} & \mu_{6} \\\\ \mu_{5} & \mu_{6} & \mu_{3} \end{matrix}\\right] + + Example problem for DC resistivity: + + .. math:: + + \sigma^{-1}\mathbf{J} = \\nabla \phi + + We can define in weak form by integrating with a general face function F: + + .. math:: + + \int_{\\text{cell}}{\sigma^{-1}\mathbf{J} \cdot \mathbf{F}} = \int_{\\text{cell}}{\\nabla \phi \cdot \mathbf{F}} + + \int_{\\text{cell}}{\sigma^{-1}\mathbf{J} \cdot \mathbf{F}} = \int_{\\text{cell}}{(\\nabla \cdot \mathbf{F}) \phi } + \int_{\partial \\text{cell}}{ \phi \mathbf{F} \cdot \mathbf{n}} + + We can then discretize for every cell: + + .. math:: + + v_{\\text{cell}} \sigma^{-1} (\mathbf{J}_x \mathbf{F}_x +\mathbf{J}_y \mathbf{F}_y + \mathbf{J}_z \mathbf{F}_z ) = -\phi^{\\top} v_{\\text{cell}} (\mathbf{D}_{\\text{cell}} \mathbf{F}) + \\text{BC} + + We can represent this in vector form (again this is for every cell), and will generalize for the case of anisotropic (tensor) sigma. + + .. math:: + + \mathbf{F}_c^{\\top} (\sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}}) \mathbf{J}_c = -\phi^{\\top} v_{\\text{cell}}( v_\\text{cell}^{-1} \mathbf{D}_{\\text{cell}} \mathbf{A} \mathbf{F}) + \\text{BC} + + We multiply by volume on each side of the tensor conductivity to keep symmetry in the system. Here J_c is the Cartesian J (on the faces) and must be calculated differently depending on the mesh: + + .. math:: + \mathbf{J}_c = \mathbf{Q}_{(i)}\mathbf{J}_\\text{TENSOR} = \mathbf{N}_{(i)}^{-1}\mathbf{Q}_{(i)}\mathbf{J}_\\text{LOM} + + Here the i index refers to where we choose to approximate this integral. We will approximate this relation at every node of the cell, there are 8 in 3D, using a projection matrix Q_i to pick the appropriate fluxes. We will then average to the cell center: + + .. math:: + + \mathbf{F}^{\\top} + {1\over 8} + \left(\sum_{i=1}^8 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + \mathbf{J} + = + -\mathbf{F}^{\\top} \mathbf{A} \mathbf{D}_{\\text{cell}}^{\\top} \phi + \\text{BC} + + \mathbf{M}(\Sigma^{-1}) \mathbf{J} + = + -\mathbf{A} \mathbf{D}_{\\text{cell}}^{\\top} \phi + \\text{BC} + + \mathbf{M}(\Sigma^{-1}) = {1\over 8} + \left(\sum_{i=1}^8 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + + The M is returned if mu is set equal to \Sigma^{-1}. + + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: + + P = [P000, P001, P010, P011, P100, P101, P110, P111] + + Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + + .. math:: + \mathbf{P}_{(i)} = \sqrt{ {1\over 8} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} + + Note that this is completed for each cell in the mesh at the same time. + + """ if mu is None: # default is ones mu = np.ones((mesh.nC, 1)) @@ -82,10 +164,10 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): # 100 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k # 010 | i ,j+1,k | i , j, k | i, j+1, k | i, j, k # 110 | i+1,j+1,k | i+1, j, k | i, j+1, k | i, j, k - # 001 | i ,j ,k | i , j, k | i, j , k | i, j, k+1 - # 101 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k+1 - # 011 | i ,j+1,k | i , j, k | i, j+1, k | i, j, k+1 - # 111 | i+1,j+1,k | i+1, j, k | i, j+1, k | i, j, k+1 + # 001 | i ,j ,k+1 | i , j, k | i, j , k | i, j, k+1 + # 101 | i+1,j ,k+1 | i+1, j, k | i, j , k | i, j, k+1 + # 011 | i ,j+1,k+1 | i , j, k | i, j+1, k | i, j, k+1 + # 111 | i+1,j+1,k+1 | i+1, j, k | i, j+1, k | i, j, k+1 # Square root of cell volume multiplied by 1/8 v = np.sqrt(0.125*mesh.vol) @@ -120,6 +202,42 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): def getFaceInnerProduct2D(mesh, mu=None, returnP=False): + """ + :param numpy.array mu: material property (tensor properties are possible) at each cell center (nC, (1, 2, or 3)) + :param bool returnP: returns the projection matrices + :rtype: scipy.csr_matrix + :return: M, the inner product matrix + + Depending on the number of columns (either 1, 2, or 3) of mu, the material property is interpreted as follows: + + .. math:: + \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{1} \end{matrix}\\right] + + \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{2} \end{matrix}\\right] + + \left[\\begin{matrix} \mu_{1} & \mu_{3} \\\\ \mu_{3} & \mu_{2} \end{matrix}\\right] + + + .. math:: + + \mathbf{M}(\Sigma^{-1}) = {1\over 4} + \left(\sum_{i=1}^4 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + + + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: + + P = [P00, P10, P01, P11] + + Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + + .. math:: + \mathbf{P}_{(i)} = \sqrt{ {1\over 4} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} + + Note that this is completed for each cell in the mesh at the same time. + + """ if mu is None: # default is ones mu = np.ones((mesh.nC, 1)) @@ -185,6 +303,41 @@ def getFaceInnerProduct2D(mesh, mu=None, returnP=False): def getEdgeInnerProduct(mesh, sigma=None, returnP=False): + """ + :param numpy.array sigma: material property (tensor properties are possible) at each cell center (nC, (1, 3, or 6)) + :param bool returnP: returns the projection matrices + :rtype: scipy.csr_matrix + :return: M, the inner product matrix + + + Depending on the number of columns (either 1, 3, or 6) of mu, the material property is interpreted as follows: + + .. math:: + \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{1} & 0 \\\\ 0 & 0 & \sigma_{1} \end{matrix}\\right] + + \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{2} & 0 \\\\ 0 & 0 & \sigma_{3} \end{matrix}\\right] + + \left[\\begin{matrix} \sigma_{1} & \sigma_{4} & \sigma_{5} \\\\ \sigma_{4} & \sigma_{2} & \sigma_{6} \\\\ \sigma_{5} & \sigma_{6} & \sigma_{3} \end{matrix}\\right] + + What is returned: + + .. math:: + \mathbf{M}(\Sigma^{-1}) = {1\over 8} + \left(\sum_{i=1}^8 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: + + P = [P000, P001, P010, P011, P100, P101, P110, P111] + + Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + + .. math:: + \mathbf{P}_{(i)} = \sqrt{ {1\over 8} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} + + Note that this is completed for each cell in the mesh at the same time. + """ if sigma is None: # default is ones sigma = np.ones((mesh.nC, 1)) @@ -262,6 +415,42 @@ def getEdgeInnerProduct(mesh, sigma=None, returnP=False): def getEdgeInnerProduct2D(mesh, sigma=None, returnP=False): + """ + :param numpy.array sigma: material property (tensor properties are possible) at each cell center (nC, (1, 2, or 3)) + :param bool returnP: returns the projection matrices + :rtype: scipy.csr_matrix + :return: M, the inner product matrix + + Depending on the number of columns (either 1, 2, or 3) of sigma, the material property is interpreted as follows: + + .. math:: + \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{1} \end{matrix}\\right] + + \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{2} \end{matrix}\\right] + + \left[\\begin{matrix} \sigma_{1} & \sigma_{3} \\\\ \sigma_{3} & \sigma_{2} \end{matrix}\\right] + + + .. math:: + + \mathbf{M}(\Sigma^{-1}) = {1\over 4} + \left(\sum_{i=1}^4 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + + + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: + + P = [P00, P10, P01, P11] + + Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + + .. math:: + \mathbf{P}_{(i)} = \sqrt{ {1\over 4} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} + + Note that this is completed for each cell in the mesh at the same time. + + """ if sigma is None: # default is ones sigma = np.ones((mesh.nC, 1)) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 49e2ee07..b9516a6d 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -258,17 +258,16 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): area = property(**area()) def normals(): - doc = """ -Face normals: calling this will average -the computed normals so that there is one -per face. This is especially relevant in -3D, as there are up to 4 different normals -for each face that will be different. + doc = """Face normals: calling this will average + the computed normals so that there is one + per face. This is especially relevant in + 3D, as there are up to 4 different normals + for each face that will be different. -To reshape the normals into a matrix and get the y component: + To reshape the normals into a matrix and get the y component: -NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') -""" + NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') + """ def fget(self): if(self._normals is None): diff --git a/docs/api_LOMView.rst b/docs/api_LOMView.rst index 67e1bb91..61630c26 100644 --- a/docs/api_LOMView.rst +++ b/docs/api_LOMView.rst @@ -1,8 +1,8 @@ .. _api_LOMView: LOM View -*********** +******** -.. automodule:: SimPEG.LOMView +.. automodule:: SimPEG.LomView :members: :undoc-members: diff --git a/docs/index.rst b/docs/index.rst index ce50bc3d..22c9d5e9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,7 +26,7 @@ Meshing & Operators api_TensorMesh api_TensorView api_LogicallyOrthogonalMesh - api_LomView + api_LOMView api_DiffOperators api_InnerProducts From 063a3d8b57b7f18462f2266cbec64bb38150d2ae Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 17:19:00 -0700 Subject: [PATCH 114/359] updates to documentation --- SimPEG/DiffOperators.py | 12 +-- SimPEG/InnerProducts.py | 182 +++++++++++++++++++++++----------------- SimPEG/LomView.py | 10 ++- 3 files changed, 119 insertions(+), 85 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index f8c1feb9..9a8a9db9 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -111,12 +111,12 @@ class DiffOperators(object): """ Function that sets the boundary conditions for cell-centred derivative operators. - Examples: + Examples:: - BC = 'neumann' # Neumann in all directions - BC = ['neumann', 'dirichlet', 'neumann'] # 3D, Dirichlet in y Neumann else - BC = [['neumann', 'dirichlet'], 'dirichlet', 'dirichlet'] # 3D, Neumann in x on bottom of domain, - # Dirichlet else + BC = 'neumann' # Neumann in all directions + BC = ['neumann', 'dirichlet', 'neumann'] # 3D, Dirichlet in y Neumann else + BC = [['neumann', 'dirichlet'], 'dirichlet', 'dirichlet'] # 3D, Neumann in x on bottom of domain, + # Dirichlet else """ if(type(BC) is str): @@ -266,7 +266,7 @@ class DiffOperators(object): nodalAve = property(**nodalAve()) def nodalVectorAve(): - doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension seperate." + doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension separate." def fget(self): if(self._nodalVectorAve is None): diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 18803344..fca632f4 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -6,59 +6,11 @@ import numpy as np class InnerProducts(object): """ Class creates the inner product matrices that you need! - """ - def __init__(self): - raise Exception('InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class.') - def getFaceInnerProduct(self, mu=None, returnP=False): - if self.dim == 2: - return getFaceInnerProduct2D(self, mu, returnP) - elif self.dim == 3: - return getFaceInnerProduct(self, mu, returnP) - - def getEdgeInnerProduct(self, sigma=None, returnP=False): - if self.dim == 2: - return getEdgeInnerProduct2D(self, sigma, returnP) - elif self.dim == 3: - return getEdgeInnerProduct(self, sigma, returnP) - -# ------------------------ Geometries ------------------------------ -# -# -# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) -# / / -# / / | -# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) -# / / | -# / / | -# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) -# | | | -# | | node(i+1,j+1,k+1) -# | | / -# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) -# | | / -# | | / -# | |/ -# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class. -def getFaceInnerProduct(mesh, mu=None, returnP=False): - """ - :param numpy.array mu: material property (tensor properties are possible) at each cell center (nC, (1, 3, or 6)) - :param bool returnP: returns the projection matrices - :rtype: scipy.csr_matrix - :return: M, the inner product matrix - - Depending on the number of columns (either 1, 3, or 6) of mu, the material property is interpreted as follows: - - .. math:: - \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{1} & 0 \\\\ 0 & 0 & \mu_{1} \end{matrix}\\right] - - \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{2} & 0 \\\\ 0 & 0 & \mu_{3} \end{matrix}\\right] - - \left[\\begin{matrix} \mu_{1} & \mu_{4} & \mu_{5} \\\\ \mu_{4} & \mu_{2} & \mu_{6} \\\\ \mu_{5} & \mu_{6} & \mu_{3} \end{matrix}\\right] - - Example problem for DC resistivity: + **Example problem for DC resistivity** .. math:: @@ -89,14 +41,16 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): .. math:: \mathbf{J}_c = \mathbf{Q}_{(i)}\mathbf{J}_\\text{TENSOR} = \mathbf{N}_{(i)}^{-1}\mathbf{Q}_{(i)}\mathbf{J}_\\text{LOM} - Here the i index refers to where we choose to approximate this integral. We will approximate this relation at every node of the cell, there are 8 in 3D, using a projection matrix Q_i to pick the appropriate fluxes. We will then average to the cell center: + Here the i index refers to where we choose to approximate this integral. + We will approximate this relation at every node of the cell, there are 8 in 3D, using a projection matrix Q_i to pick the appropriate fluxes. + We will then average to the cell center. For the TENSOR mesh, this looks like: .. math:: \mathbf{F}^{\\top} {1\over 8} \left(\sum_{i=1}^8 - \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \mathbf{Q}_{(i)}^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{Q}_{(i)} \\right) \mathbf{J} = @@ -108,16 +62,92 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): \mathbf{M}(\Sigma^{-1}) = {1\over 8} \left(\sum_{i=1}^8 - \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \mathbf{Q}_{(i)}^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{Q}_{(i)} \\right) The M is returned if mu is set equal to \Sigma^{-1}. + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes). + Here each P (3*nC, sum(nF)) is a combination of the projection, volume, and any normalization to Cartesian coordinates: + + .. math:: + \mathbf{P}_{(i)} = \sqrt{ {1\over 8} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} + + Note that this is completed for each cell in the mesh at the same time. + """ + def __init__(self): + raise Exception('InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class.') + + def getFaceInnerProduct(self, mu=None, returnP=False): + """Wrapper function, + + :py:func:`SimPEG.InnerProducts.getEdgeInnerProduct` + + :py:func:`SimPEG.InnerProducts.getEdgeInnerProduct2D` + """ + if self.dim == 2: + return getFaceInnerProduct2D(self, mu, returnP) + elif self.dim == 3: + return getFaceInnerProduct(self, mu, returnP) + + def getEdgeInnerProduct(self, sigma=None, returnP=False): + """Wrapper function, + + :py:func:`SimPEG.InnerProducts.getFaceInnerProduct` + + :py:func:`SimPEG.InnerProducts.getFaceInnerProduct2D` + """ + if self.dim == 2: + return getEdgeInnerProduct2D(self, sigma, returnP) + elif self.dim == 3: + return getEdgeInnerProduct(self, sigma, returnP) + +# ------------------------ Geometries ------------------------------ +# +# +# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) +# / / +# / / | +# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) +# / / | +# / / | +# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) +# | | | +# | | node(i+1,j+1,k+1) +# | | / +# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) +# | | / +# | | / +# | |/ +# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + +def getFaceInnerProduct(mesh, mu=None, returnP=False): + """ + :param numpy.array mu: material property (tensor properties are possible) at each cell center (nC, (1, 3, or 6)) + :param bool returnP: returns the projection matrices + :rtype: scipy.csr_matrix + :return: M, the inner product matrix (sum(nF), sum(nF)) + + Depending on the number of columns (either 1, 3, or 6) of mu, the material property is interpreted as follows: + + .. math:: + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{1} & 0 \\\\ 0 & 0 & \mu_{1} \end{matrix}\\right] + + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & 0 & 0 \\\\ 0 & \mu_{2} & 0 \\\\ 0 & 0 & \mu_{3} \end{matrix}\\right] + + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & \mu_{4} & \mu_{5} \\\\ \mu_{4} & \mu_{2} & \mu_{6} \\\\ \mu_{5} & \mu_{6} & \mu_{3} \end{matrix}\\right] + + \mathbf{M}(\\vec{\mu}) = {1\over 8} + \left(\sum_{i=1}^8 + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \\vec{\mu} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \\right) + If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: P = [P000, P001, P010, P011, P100, P101, P110, P111] - Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + Here each P (3*nC, sum(nF)) is a combination of the projection, volume, and any normalization to Cartesian coordinates: .. math:: \mathbf{P}_{(i)} = \sqrt{ {1\over 8} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} @@ -206,23 +236,23 @@ def getFaceInnerProduct2D(mesh, mu=None, returnP=False): :param numpy.array mu: material property (tensor properties are possible) at each cell center (nC, (1, 2, or 3)) :param bool returnP: returns the projection matrices :rtype: scipy.csr_matrix - :return: M, the inner product matrix + :return: M, the inner product matrix (sum(nF), sum(nF)) Depending on the number of columns (either 1, 2, or 3) of mu, the material property is interpreted as follows: .. math:: - \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{1} \end{matrix}\\right] + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{1} \end{matrix}\\right] - \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{2} \end{matrix}\\right] + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & 0 \\\\ 0 & \mu_{2} \end{matrix}\\right] - \left[\\begin{matrix} \mu_{1} & \mu_{3} \\\\ \mu_{3} & \mu_{2} \end{matrix}\\right] + \\vec{\mu} = \left[\\begin{matrix} \mu_{1} & \mu_{3} \\\\ \mu_{3} & \mu_{2} \end{matrix}\\right] .. math:: - \mathbf{M}(\Sigma^{-1}) = {1\over 4} + \mathbf{M}(\\vec{\mu}) = {1\over 4} \left(\sum_{i=1}^4 - \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \\vec{\mu} \sqrt{v_{\\text{cell}}} \mathbf{J}_c \\right) @@ -230,7 +260,7 @@ def getFaceInnerProduct2D(mesh, mu=None, returnP=False): P = [P00, P10, P01, P11] - Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + Here each P (2*nC, sum(nF)) is a combination of the projection, volume, and any normalization to Cartesian coordinates: .. math:: \mathbf{P}_{(i)} = \sqrt{ {1\over 4} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} @@ -307,31 +337,31 @@ def getEdgeInnerProduct(mesh, sigma=None, returnP=False): :param numpy.array sigma: material property (tensor properties are possible) at each cell center (nC, (1, 3, or 6)) :param bool returnP: returns the projection matrices :rtype: scipy.csr_matrix - :return: M, the inner product matrix + :return: M, the inner product matrix (sum(nE), sum(nE)) - Depending on the number of columns (either 1, 3, or 6) of mu, the material property is interpreted as follows: + Depending on the number of columns (either 1, 3, or 6) of sigma, the material property is interpreted as follows: .. math:: - \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{1} & 0 \\\\ 0 & 0 & \sigma_{1} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{1} & 0 \\\\ 0 & 0 & \sigma_{1} \end{matrix}\\right] - \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{2} & 0 \\\\ 0 & 0 & \sigma_{3} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & 0 & 0 \\\\ 0 & \sigma_{2} & 0 \\\\ 0 & 0 & \sigma_{3} \end{matrix}\\right] - \left[\\begin{matrix} \sigma_{1} & \sigma_{4} & \sigma_{5} \\\\ \sigma_{4} & \sigma_{2} & \sigma_{6} \\\\ \sigma_{5} & \sigma_{6} & \sigma_{3} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & \sigma_{4} & \sigma_{5} \\\\ \sigma_{4} & \sigma_{2} & \sigma_{6} \\\\ \sigma_{5} & \sigma_{6} & \sigma_{3} \end{matrix}\\right] What is returned: .. math:: - \mathbf{M}(\Sigma^{-1}) = {1\over 8} + \mathbf{M}(\Sigma) = {1\over 8} \left(\sum_{i=1}^8 - \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma \sqrt{v_{\\text{cell}}} \mathbf{J}_c \\right) If requested (returnP=True) the projection matricies are returned as well (ordered by nodes):: P = [P000, P001, P010, P011, P100, P101, P110, P111] - Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + Here each P (3*nC, sum(nE)) is a combination of the projection, volume, and any normalization to Cartesian coordinates: .. math:: \mathbf{P}_{(i)} = \sqrt{ {1\over 8} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} @@ -419,23 +449,23 @@ def getEdgeInnerProduct2D(mesh, sigma=None, returnP=False): :param numpy.array sigma: material property (tensor properties are possible) at each cell center (nC, (1, 2, or 3)) :param bool returnP: returns the projection matrices :rtype: scipy.csr_matrix - :return: M, the inner product matrix + :return: M, the inner product matrix (sum(nE), sum(nE)) Depending on the number of columns (either 1, 2, or 3) of sigma, the material property is interpreted as follows: .. math:: - \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{1} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{1} \end{matrix}\\right] - \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{2} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & 0 \\\\ 0 & \sigma_{2} \end{matrix}\\right] - \left[\\begin{matrix} \sigma_{1} & \sigma_{3} \\\\ \sigma_{3} & \sigma_{2} \end{matrix}\\right] + \Sigma = \left[\\begin{matrix} \sigma_{1} & \sigma_{3} \\\\ \sigma_{3} & \sigma_{2} \end{matrix}\\right] .. math:: - \mathbf{M}(\Sigma^{-1}) = {1\over 4} + \mathbf{M}(\Sigma) = {1\over 4} \left(\sum_{i=1}^4 - \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma^{-1} \sqrt{v_{\\text{cell}}} \mathbf{J}_c + \mathbf{J}_c^{-\\top} \sqrt{v_{\\text{cell}}} \Sigma \sqrt{v_{\\text{cell}}} \mathbf{J}_c \\right) @@ -443,7 +473,7 @@ def getEdgeInnerProduct2D(mesh, sigma=None, returnP=False): P = [P00, P10, P01, P11] - Here each P is a combination of the projection, volume, and any normalization to Cartesian coordinates: + Here each P (2*nC, sum(nE)) is a combination of the projection, volume, and any normalization to Cartesian coordinates: .. math:: \mathbf{P}_{(i)} = \sqrt{ {1\over 4} v_{\\text{cell}}} \overbrace{\mathbf{N}_{(i)}^{-1}}^{\\text{LOM only}} \mathbf{Q}_{(i)} diff --git a/SimPEG/LomView.py b/SimPEG/LomView.py index 4c9b1dab..4b4f36a3 100644 --- a/SimPEG/LomView.py +++ b/SimPEG/LomView.py @@ -7,15 +7,19 @@ from utils import mkvc class LomView(object): """ - Provides viewing functions for TensorMesh + Provides viewing functions for LogicallyOrthogonalMesh + + This class is inherited by LogicallyOrthogonalMesh - This class is inherited by TensorMesh """ def __init__(self): pass def plotGrid(self, length=0.05): - """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. + + .. plot:: examples/mesh/plot_LogicallyOrthogonalMesh.py + """ NN = self.r(self.gridN, 'N', 'N', 'M') if self.dim == 2: fig = plt.figure(2) From 6cb42ad20e65bf7777f8a153f9e500096a9c8f6d Mon Sep 17 00:00:00 2001 From: rowanc1 Date: Tue, 1 Oct 2013 00:23:18 +0000 Subject: [PATCH 115/359] LogicallyOrthogonalMesh.py edited online with Bitbucket --- SimPEG/LogicallyOrthogonalMesh.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index b9516a6d..07c37255 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -264,9 +264,9 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): 3D, as there are up to 4 different normals for each face that will be different. - To reshape the normals into a matrix and get the y component: + To reshape the normals into a matrix and get the y component:: - NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') + NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') """ def fget(self): From a6da74c3476a07b3c8e9ac5f68dbcfa2ffe7c219 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 1 Oct 2013 20:33:57 -0700 Subject: [PATCH 116/359] Creating the inverse problem framework. Feedback welcome! --- SimPEG/GaussNewton.py | 64 +++++------ SimPEG/__init__.py | 1 + SimPEG/forward/Problem.py | 115 +++++++++++++++++++ SimPEG/forward/__init__.py | 1 + SimPEG/inverse/Optimize.py | 222 +++++++++++++++++++++++++++++++++++++ SimPEG/inverse/__init__.py | 1 + docs/api_Problem.rst | 8 ++ docs/index.rst | 3 +- 8 files changed, 382 insertions(+), 33 deletions(-) create mode 100644 SimPEG/forward/Problem.py create mode 100644 SimPEG/forward/__init__.py create mode 100644 SimPEG/inverse/Optimize.py create mode 100644 SimPEG/inverse/__init__.py create mode 100644 docs/api_Problem.rst diff --git a/SimPEG/GaussNewton.py b/SimPEG/GaussNewton.py index e0304a8d..bd6d37c3 100644 --- a/SimPEG/GaussNewton.py +++ b/SimPEG/GaussNewton.py @@ -2,25 +2,25 @@ import numpy as np import matplotlib.pyplot as plt from pylab import norm -def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, +def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, tolG=1e-3, eps=1e-16, xStop=[]): """ GaussNewton Optimization - + Input: ------ fctn - objective Function (lambda function) x0 - starting guess - + Output: ------- xOpt - numerical optimizer """ # initial output print "%s GaussNewton %s" % ('='*22,'='*22) - print "iter\tJc\t\tnorm(dJ)\tLS" + print "iter\tJc\t\tnorm(dJ)\tLS" print "%s" % '-'*57 - + # evaluate stopping criteria if xStop==[]: xStop=x0 @@ -31,26 +31,26 @@ def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, xc = x0 STOP = np.zeros((5,1),dtype=bool) iterLS=0; iter=0 - + Jold = Jstop xOld=xc while 1: # evaluate objective function Jc,dJ,H = fctn(xc) print "%3d\t%1.2e\t%1.2e\t%d" % (iter, Jc[0],norm(dJ),iterLS) - + # check stopping rules STOP[0] = (iter>0) & (abs(Jc[0]-Jold[0]) <= tolJ*(1+abs(Jstop[0]))) STOP[1] = (iter>0) & (norm(xc-xOld) <= tolX*(1+norm(x0))) STOP[2] = norm(dJ) <= tolG*(1+abs(Jstop[0])) STOP[3] = norm(dJ) <= 1e3*eps STOP[4] = (iter >= maxIter) - if all(STOP[0:3]) | any(STOP[3:]): + if all(STOP[0:3]) | any(STOP[3:]): break - + # get search direction dx = np.linalg.solve(H,-dJ) - + # Armijo linesearch descent = np.dot(dJ.T,dx) LS =0; t = 1; iterLS=1 @@ -62,13 +62,13 @@ def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, break iterLS = iterLS+1 t = .5*t - + # store old values Jold = Jc; xOld = xc - # update + # update xc = xt iter = iter +1 - + print "%s STOP! %s" % ('-'*25,'-'*25) print "%d : |Jc-Jold| = %1.4e <= tolJ*(1+|Jstop|) = %1.4e" % (STOP[0],abs(Jc[0]-Jold[0]),tolJ*(1+abs(Jstop[0]))) print "%d : |xc-xOld| = %1.4e <= tolX*(1+|x0|) = %1.4e" % (STOP[1],norm(xc-xOld),tolX*(1+norm(x0))) @@ -76,50 +76,50 @@ def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, print "%d : |dJ| = %1.4e <= 1e3*eps = %1.4e" % (STOP[3],norm(dJ),1e3*eps) print "%d : iter = %3d\t <= maxIter\t = %3d" % (STOP[4],iter,maxIter) print "%s DONE! %s\n" % ('='*25,'='*25) - + return xc - + def Rosenbrock(x): """ Rosenbrock function for testing GaussNewton scheme """ - J = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 + J = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 dJ = np.array([2*(200*x[0]**3-200*x[0]*x[1]+x[0]-1),200*(x[1]-x[0]**2)]) H = np.array([[-400*x[1]+1200*x[0]**2+2, -400*x[0]],[ -400*x[0], 200]],dtype=float); - + return J,dJ,H - + def checkDerivative(fctn,x0): """ Basic derivative check - - Compares error decay of 0th and 1st order Taylor approximation at point + + Compares error decay of 0th and 1st order Taylor approximation at point x0 for a randomized search direction. - + Input: ------ fctn - function handle - x0 - point at which to check derivative + x0 - point at which to check derivative """ - + print "%s checkDerivative %s" % ('='*20,'='*20) print "iter\th\t\t|J0-Jt|\t\t|J0+h*dJ'*dx-Jt|" Jc,dJ,H = fctn(x0) - + dx = np.random.randn(len(x0),1) - + t = np.logspace(-1,-10,10) E0 = np.zeros(t.shape) E1 = np.zeros(t.shape) - + for i in range(0,10): Jt = fctn(x0+t[i]*dx) - E0[i] = norm(Jt[0]-Jc[0]) # 0th order Taylor - E1[i] = norm(Jt[0]-Jc[0]-t[i]*np.dot(dJ.T,dx)) # 1st order Taylor - + E0[i] = norm(Jt[0]-Jc[0]) # 0th order Taylor + E1[i] = norm(Jt[0]-Jc[0]-t[i]*np.dot(dJ.T,dx)) # 1st order Taylor + print "%d\t%1.2e\t%1.3e\t%1.3e" % (i,t[i],E0[i],E1[i]) - + print "%s DONE! %s\n" % ('='*25,'='*25) plt.figure() plt.clf() @@ -131,11 +131,11 @@ def checkDerivative(fctn,x0): plt.legend(['0th order', '1st order'],loc='upper left') plt.show() return - + if __name__ == '__main__': x0 = np.array([[2.6],[3.7]]) fctn = lambda x:Rosenbrock(x) checkDerivative(fctn,x0) xOpt = GaussNewton(fctn,x0,maxIter=20) print "xOpt=[%f,%f]" % (xOpt[0],xOpt[1]) - \ No newline at end of file + diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index ca9b9f7b..f36000a7 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,3 +1,4 @@ from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh import utils +import inverse diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py new file mode 100644 index 00000000..f83ea505 --- /dev/null +++ b/SimPEG/forward/Problem.py @@ -0,0 +1,115 @@ +import numpy as np +from SimPEG.utils import mkvc, sdiag +norm = np.linalg.norm + + +class Problem(object): + """Problem is the base class for all geophysical forward problems in SimPEG""" + def __init__(self, mesh): + self.mesh = mesh + pass + + def residual(self, m): + pass + + def modelTransform(self, m): + """ + :param numpy.array m: model + :rtype: numpy.array + :return: transformed model + + The modelTransform changes the model into the physical property. + + A common example of this is to invert for electrical conductivity + in log space. In this case, your model will be log(sigma) and to + get back to sigma, you can take the exponential: + + .. math:: + + m = \log{\sigma} + + \exp{m} = \exp{\log{\sigma}} = \sigma + """ + return np.exp(mkvc(m)) + + def modelTransformDeriv(self, m): + """ + :param numpy.array m: model + :rtype: scipy.csr_matrix + :return: derivative of transformed model + + The modelTransform changes the model into the physical property. + The modelTransformDeriv provides the derivative of the modelTransform. + + If the model transform is: + + .. math:: + + m = \log{\sigma} + + \exp{m} = \exp{\log{\sigma}} = \sigma + + Then the derivative is: + + .. math:: + + \\frac{\partial \exp{m}}{\partial m} = \\text{sdiag}(\exp{m}) + """ + return sdiag(np.exp(mkvc(m))) + + def _test_modelTransformDeriv(self): + m = np.random.rand(5) + return checkDerivative(lambda m : [self.modelTransform(m), self.modelTransformDeriv(m)], m) + + def misfit(self, field): + """ + :param numpy.array field: geophysical field of interest + :rtype: float + :return: data misfit + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} (\mathbf{Pu} - d_\\text{obs}) \\right|_2^2 + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + """ + R = self.W*(self.P*field - self.dobs) + return 0.5*mkvc(R).inner(mkvc(R)) + + def misfitDeriv(self, field): + """ + TODO: Change this documentation. + + :param numpy.array field: geophysical field of interest + :rtype: float + :return: data misfit derivative + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} (\mathbf{Pu} - d_\\text{obs}) \\right|_2^2 + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + """ + + R = self.W*(self.P*field - self.dobs) + # TODO: make in terms of the field and call Jt, e.g. if looping over RHSs using i: self.Jt(field[:,i],self.W[:,i]*R[:,i]) + return mkvc(R) + + def J(self, u): + pass + + def Jt(self, v): + pass + +if __name__ == '__main__': + from SimPEG.inverse import checkDerivative + + p = Problem(None) + m = np.random.rand(5) + checkDerivative(lambda m : [p.modelTransform(m), p.modelTransformDeriv(m)], m) diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py new file mode 100644 index 00000000..3c4d3728 --- /dev/null +++ b/SimPEG/forward/__init__.py @@ -0,0 +1 @@ +from Problem import * diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py new file mode 100644 index 00000000..53a11410 --- /dev/null +++ b/SimPEG/inverse/Optimize.py @@ -0,0 +1,222 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG.utils import mkvc, sdiag +norm = np.linalg.norm + + +class Minimize(object): + """docstring for Minimize""" + + name = "GeneralOptimizationAlgorithm" + + maxIter = 20 + maxIterLS = 10 + LSreduction = 1e-4 + LSshorten = 0.5 + tolF = 1e-4 + tolX = 1e-4 + tolG = 1e-4 + eps = 1e-16 + + def __init__(self, problem, **kwargs): + self.problem = problem + + # Set the variables, throw an error if they don't exist. + for attr in kwargs: + if hasattr(self, attr): + setattr(self, attr, kwargs[attr]) + else: + raise Exception('%s attr is not recognized' % attr) + + def minimize(self, x0): + + self.startup(x0) + self.printInit() + + while True: + self.f, self.g, self.H = self.evalFunction(self.xc) + self.printIter() + if self.stoppingCriteria(): break + p = self.findSearchDirection() + xt, passLS = self.linesearch(p) + if not passLS: + xt = self.linesearchBreak(p) + self.doEndIteration(xt) + + self.printDone() + + return self.xc + + def startup(self, x0): + self._iter = 0 + self._iterLS = 0 + self._STOP = np.zeros((5,1),dtype=bool) + + self.x0 = x0 + self.xc = x0 + self.xOld = x0 + + def printInit(self): + print "%s %s %s" % ('='*22, self.name, '='*22) + print "iter\tJc\t\tnorm(dJ)\tLS" + print "%s" % '-'*57 + + def printIter(self): + print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) + + def printDone(self): + print "%s STOP! %s" % ('-'*25,'-'*25) + print "%d : |fc-fOld| = %1.4e <= tolF*(1+|fStop|) = %1.4e" % (self._STOP[0], abs(self.f-self.fOld), self.tolF*(1+abs(self.fStop))) + print "%d : |xc-xOld| = %1.4e <= tolX*(1+|x0|) = %1.4e" % (self._STOP[1], norm(self.xc-self.xOld), self.tolX*(1+norm(self.x0))) + print "%d : |g| = %1.4e <= tolG*(1+|fStop|) = %1.4e" % (self._STOP[2], norm(self.g), self.tolG*(1+abs(self.fStop))) + print "%d : |g| = %1.4e <= 1e3*eps = %1.4e" % (self._STOP[3], norm(self.g), 1e3*self.eps) + print "%d : iter = %3d\t <= maxIter\t = %3d" % (self._STOP[4], self._iter, self.maxIter) + print "%s DONE! %s\n" % ('='*25,'='*25) + + def evalFunction(self, x, doDerivative=True): + f, g, H = self.problem(x) + return f, g, H + + def findSearchDirection(self): + return -self.g + + def stoppingCriteria(self): + if self._iter == 0: + self.fStop = self.f # Save this for stopping criteria + + # check stopping rules + self._STOP[0] = self._iter > 0 and (abs(self.f-self.fOld) <= self.tolF*(1+abs(self.fStop))) + self._STOP[1] = self._iter > 0 and (norm(self.xc-self.xOld) <= self.tolX*(1+norm(self.x0))) + self._STOP[2] = norm(self.g) <= self.tolG*(1+abs(self.fStop)) + self._STOP[3] = norm(self.g) <= 1e3*self.eps + self._STOP[4] = self._iter >= self.maxIter + return all(self._STOP[0:3]) | any(self._STOP[3:]) + + def linesearch(self, p): + # Armijo linesearch + descent = np.inner(self.g, p) + t = 1 + iterLS = 0 + while iterLS < self.maxIterLS: + xt = self.xc + t*p + ft, temp, temp = self.evalFunction(xt, doDerivative=False) + if ft < self.f + t*self.LSreduction*descent: + break + iterLS += 1 + t = self.LSshorten*t + + self._iterLS = iterLS + return xt, iterLS < self.maxIterLS + + def linesearchBreak(self, p): + raise Exception('The linesearch got broken. Boo.') + + def doEndIteration(self, xt): + # store old values + self.fOld = self.f + self.xOld, self.xc = self.xc, xt + self._iter += 1 + + +class GaussNewton(Minimize): + name = 'GaussNewton' + def findSearchDirection(self): + return np.linalg.solve(self.H,-self.g) + + +class SteepestDescent(Minimize): + name = 'SteepestDescent' + def findSearchDirection(self): + return -self.g + + + +def Rosenbrock(x): + """Rosenbrock function for testing GaussNewton scheme""" + + f = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 + g = np.array([2*(200*x[0]**3-200*x[0]*x[1]+x[0]-1), 200*(x[1]-x[0]**2)]) + H = np.array([[-400*x[1]+1200*x[0]**2+2, -400*x[0]], [-400*x[0], 200]]) + return f, g, H + + +def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): + """ + Basic derivative check + + Compares error decay of 0th and 1st order Taylor approximation at point + x0 for a randomized search direction. + + Input: + ------ + fctn - function handle + x0 - point at which to check derivative + """ + + print "%s checkDerivative %s" % ('='*20, '='*20) + print "iter\th\t\t|J0-Jt|\t\t|J0+h*dJ'*dx-Jt|\tOrder\n%s" % ('-'*57) + + Jc = fctn(x0) + + x0 = mkvc(x0) + + if dx is None: + dx = np.random.randn(len(x0)) + + t = np.logspace(-1, -num, num) + E0 = np.ones(t.shape) + E1 = np.ones(t.shape) + + l2norm = lambda x: np.sqrt(np.inner(x, x)) # because np.norm breaks if they are scalars? + for i in range(num): + Jt = fctn(x0+t[i]*dx) + E0[i] = l2norm(Jt[0]-Jc[0]) # 0th order Taylor + E1[i] = l2norm(Jt[0]-Jc[0]-t[i]*Jc[1].dot(dx)) # 1st order Taylor + order0 = np.log10(E0[:-1]/E0[1:]) + order1 = np.log10(E1[:-1]/E1[1:]) + print "%d\t%1.2e\t%1.3e\t\t%1.3e\t\t%1.3f" % (i, t[i], E0[i], E1[i], np.nan if i == 0 else order1[i-1]) + + tolerance = 0.9 + expectedOrder = 2 + eps = 1e-10 + order0 = order0[E0[1:] > eps] + order1 = order1[E1[1:] > eps] + belowTol = order1.size == 0 and order0.size > 0 + correctOrder = order1.size > 0 and np.mean(order1) > tolerance * expectedOrder + + passTest = belowTol or correctOrder + + if passTest: + print "%s PASS! %s\n" % ('='*25, '='*25) + else: + print "%s\n%s FAIL! %s\n%s" % ('*'*57, '<'*25, '>'*25, '*'*57) + + if plotIt: + plt.figure() + plt.clf() + plt.loglog(t, E0, 'b') + plt.loglog(t, E1, 'g--') + plt.title('checkDerivative') + plt.xlabel('h') + plt.ylabel('error of Taylor approximation') + plt.legend(['0th order', '1st order'], loc='upper left') + plt.show() + + return passTest + +if __name__ == '__main__': + x0 = np.array([2.6, 3.7]) + checkDerivative(Rosenbrock, x0, plotIt=False) + xOpt = GaussNewton(Rosenbrock, maxIter=20).minimize(x0) + print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) + xOpt = SteepestDescent(Rosenbrock, maxIter=20, maxIterLS=15).minimize(x0) + print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) + + def simplePass(x): + return np.sin(x), sdiag(np.cos(x)) + + def simpleFail(x): + return np.sin(x), -sdiag(np.cos(x)) + + checkDerivative(simplePass, np.random.randn(5), plotIt=False) + checkDerivative(simpleFail, np.random.randn(5), plotIt=False) diff --git a/SimPEG/inverse/__init__.py b/SimPEG/inverse/__init__.py new file mode 100644 index 00000000..b2a5e506 --- /dev/null +++ b/SimPEG/inverse/__init__.py @@ -0,0 +1 @@ +from Optimize import * diff --git a/docs/api_Problem.rst b/docs/api_Problem.rst new file mode 100644 index 00000000..d43616d9 --- /dev/null +++ b/docs/api_Problem.rst @@ -0,0 +1,8 @@ +.. _api_Problem: + +Problem +******* + +.. automodule:: SimPEG.forward.Problem + :members: + :undoc-members: diff --git a/docs/index.rst b/docs/index.rst index 22c9d5e9..48ebe940 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -38,12 +38,13 @@ Inversion api_GaussNewton -Example Problems +Forward Problems ================ .. toctree:: :maxdepth: 2 + api_Problem Project Index & Search From 7a4ccc9a383e0fd9373d53855d511f031b63f57d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 1 Oct 2013 23:58:35 -0700 Subject: [PATCH 117/359] Updates to problem. Problem is defined as a general PDE that has a field and a model. --- SimPEG/forward/Problem.py | 173 +++++++++++++++++++++++++++++++++----- 1 file changed, 153 insertions(+), 20 deletions(-) diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index f83ea505..48848a07 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -4,14 +4,132 @@ norm = np.linalg.norm class Problem(object): - """Problem is the base class for all geophysical forward problems in SimPEG""" + """ + Problem is the base class for all geophysical forward problems in SimPEG. + + + The problem is a partial differential equation of the form: + + .. math:: + c(m, u) = 0 + + Here, m is the model and u is the field (or fields). + Given the model, m, we can calculate the fields u(m), + however, the data we collect is a subset of the fields, + and can be defined by a linear projection, P. + + .. math:: + d_\\text{pred} = Pu(m) + + We are interested in how changing the model transforms the data, + as such we can take write the Taylor expansion: + + .. math:: + Pu(m + hv) = Pu(m) + hP\\frac{\partial u(m)}{\partial m} v + \mathcal{O}(h^2 \left\| v \\right\| ) + + We can linearize and define the sensitivity matrix as: + + .. math:: + J = P\\frac{\partial u}{\partial m} + + The sensitivity matrix, and it's transpose will be used in the inverse problem + to (locally) find how model parameters change the data, and optimize! + """ + def __init__(self, mesh): self.mesh = mesh + + @property + def RHS(self): + """ + Source matrix. + """ + return self._RHS + @RHS.setter + def RHS(self, value): + self._RHS = value + + @property + def W(self): + """ + Standard deviation weighting matrix. + """ + return self._W + @W.setter + def W(self, value): + self._W = value + + @property + def P(self): + """ + Projection matrix. + + .. math:: + d_\\text{pred} = Pu(m) + """ + return self._P + @P.setter + def P(self, value): + self._P = value + + + @property + def dobs(self): + """ + Observed data. + """ + return self._dobs + @dobs.setter + def dobs(self, value): + self._P = value + + + def J(self, u): + """ + Working with the general PDE, c(m, u) = 0, where m is the model and u is the field, + the sensitivity is defined as: + + .. math:: + J = P\\frac{\partial u}{\partial m} + + We can take the derivative of the PDE: + + .. math:: + \\nabla_m c(m, u) \delta m + \\nabla_u c(m, u) \delta u = 0 + + If the forward problem is invertible, then we can rearrange for du/dm: + + .. math:: + J = - P \left( \\nabla_u c(m, u) \\right)^{-1} \\nabla_m c(m, u) + + This can often be computed given a vector (i.e. J(v)) rather than stored, as J is a large dense matrix. + + """ pass - def residual(self, m): + def Jt(self, v): + """ + Transpose of J + """ pass + def field(self, m): + """ + The fields. + """ + pass + + def dpred(self, m, u=None): + """ + Predicted data. + + .. math:: + d_\\text{pred} = Pu(m) + """ + if u is None: + u = self.field(m) + return self.P*u + def modelTransform(self, m): """ :param numpy.array m: model @@ -61,9 +179,10 @@ class Problem(object): m = np.random.rand(5) return checkDerivative(lambda m : [self.modelTransform(m), self.modelTransformDeriv(m)], m) - def misfit(self, field): + def misfit(self, m, R=None): """ - :param numpy.array field: geophysical field of interest + :param numpy.array m: geophysical model + :param numpy.array R: residual, R = W o (dpred - dobs) :rtype: float :return: data misfit @@ -71,41 +190,55 @@ class Problem(object): .. math:: - \mu_\\text{data} = {1\over 2}\left| \mathbf{W} (\mathbf{Pu} - d_\\text{obs}) \\right|_2^2 + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. """ - R = self.W*(self.P*field - self.dobs) - return 0.5*mkvc(R).inner(mkvc(R)) + if R is None: + R = self.W*(self.dpred(m) - self.dobs) - def misfitDeriv(self, field): + R = mkvc(R) + return 0.5*R.inner(R) + + def misfitDeriv(self, m, R=None, u=None): """ - TODO: Change this documentation. - - :param numpy.array field: geophysical field of interest - :rtype: float + :param numpy.array m: geophysical model + :rtype: numpy.array :return: data misfit derivative The data misfit using an l_2 norm is: .. math:: - \mu_\\text{data} = {1\over 2}\left| \mathbf{W} (\mathbf{Pu} - d_\\text{obs}) \\right|_2^2 + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + + \mathbf{R} = \mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs} + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W \circ R} \\right|_2^2 Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + + The derivative of this, with respect to the model, is: + + .. math:: + + \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top (\mathbf{W \circ R}) + """ + if u is None: + u = self.field(m) - R = self.W*(self.P*field - self.dobs) - # TODO: make in terms of the field and call Jt, e.g. if looping over RHSs using i: self.Jt(field[:,i],self.W[:,i]*R[:,i]) - return mkvc(R) + if R is None: + R = self.W*(self.dpred(m, u=u) - self.dobs) - def J(self, u): - pass + dmisfit = 0 + for i in range(self.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.Jt(u[:,i], self.W[:,i]*R[:,i]) + + return dmisfit - def Jt(self, v): - pass if __name__ == '__main__': from SimPEG.inverse import checkDerivative From d8c676015e0b971ba825ec79865b90b9a45fb2fa Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 2 Oct 2013 15:24:51 -0700 Subject: [PATCH 118/359] Fixes to ModelBuilder. Start of the DCProblem. --- SimPEG/DiffOperators.py | 12 ++-- SimPEG/InnerProducts.py | 2 +- SimPEG/forward/DCProblem/DCProblem.py | 93 +++++++++++++++++++++++++++ SimPEG/forward/DCProblem/DCutils.py | 29 +++++++++ SimPEG/forward/Problem.py | 76 ++++++++++++++++++---- SimPEG/utils/ModelBuilder.py | 48 ++++++++------ 6 files changed, 224 insertions(+), 36 deletions(-) create mode 100644 SimPEG/forward/DCProblem/DCProblem.py create mode 100644 SimPEG/forward/DCProblem/DCutils.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 9a8a9db9..d50cc5ba 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -1,6 +1,6 @@ import numpy as np from scipy import sparse as sp -from utils import mkvc, sdiag, speye, kron3, spzeros +from SimPEG.utils import mkvc, sdiag, speye, kron3, spzeros def ddx(n): @@ -287,15 +287,19 @@ class DiffOperators(object): nodalVectorAve = property(**nodalVectorAve()) def getEdgeMass(self, materialProp=None): - """mass matix for products of edge functions w'*M(materialProp)*e""" + """mass matrix for products of edge functions w'*M(materialProp)*e""" if(materialProp is None): materialProp = np.ones(self.nC) Av = self.edgeAve return sdiag(Av.T * (self.vol * mkvc(materialProp))) def getFaceMass(self, materialProp=None): - """mass matix for products of edge functions w'*M(materialProp)*e""" + """mass matrix for products of face functions w'*M(materialProp)*f""" if(materialProp is None): materialProp = np.ones(self.nC) Av = self.faceAve - return sdiag(Av.T*(self.vol*mkvc(materialProp))) + return sdiag(Av.T * (self.vol * mkvc(materialProp))) + + def getFaceMassDeriv(self): + Av = self.faceAve + return Av.T * sdiag(self.vol) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index fca632f4..9fe84ac3 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -1,5 +1,5 @@ from scipy import sparse as sp -from utils import sub2ind, ndgrid, mkvc, getSubArray, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal +from SimPEG.utils import sub2ind, ndgrid, mkvc, getSubArray, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal import numpy as np diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py new file mode 100644 index 00000000..b94b35b5 --- /dev/null +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -0,0 +1,93 @@ +from SimPEG import TensorMesh +from SimPEG.forward import Problem, SyntheticProblem +from SimPEG.utils import ModelBuilder +import numpy as np +import scipy.sparse.linalg as linalg +import DCutils + +class DCProblem(Problem): + """docstring for DCProblem""" + def __init__(self, mesh): + super(DCProblem, self).__init__(mesh) + self.mesh.setCellGradBC('neumann') + + def createMatrix(self, m): + D = self.mesh.faceDiv + G = self.mesh.cellGrad + sigma = self.modelTransform(m) + Msig = self.mesh.getFaceMass(sigma) + A = D*Msig*G + return A.tocsc() + + def field(self, m): + A = self.createMatrix(m) + solve = linalg.factorized(A) + + nRHSs = self.RHS.shape[1] # Number of RHSs + phi = np.zeros((self.mesh.nC, nRHSs)) + np.nan + for ii in range(nRHSs): + phi[:,ii] = solve(self.RHS[:,ii]) + + return phi + + def J(self, m, v, u=None, RHSii=0, solve=None): + P = self.P + D = self.mesh.faceDiv + G = self.mesh.cellGrad + A = self.createMatrix(m) + Av_dm = self.mesh.getFaceMassDeriv() + mT_dm = self.modelTransform(m) + + dCdu = A + dCdm = - D * ( sdiag( G * u[:, RHSii] ) * ( Av_dm * ( mT_dm * v ) ) ) + + if solve is None: + solve = linalg.factorized(dCdu) + + return - P * solve(dCdm) + + + +if __name__ == '__main__': + # Create the mesh + h1 = np.ones(100) + h2 = np.ones(100) + mesh = TensorMesh([h1,h2]) + + # Create some parameters for the model + sig1 = 1 + sig2 = 0.01 + + # Create a synthetic model from a block in a half-space + p0 = [20, 20] + p1 = [50, 50] + condVals = [sig1, sig2] + mSynth = ModelBuilder.defineBlockConductivity(p0,p1,mesh.gridCC,condVals) + mesh.plotImage(mSynth, showIt=False) + + + # Set up the projection + nelec = 50 + spacelec = 2 + surfloc = 0.5 + elecini = 0.5 + elecend = 0.5+spacelec*(nelec-1) + elecLocR = np.linspace(elecini, elecend, nelec) + rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 + q, Q, rxmidloc = DCutils.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) + + + # Create some data + class syntheticDCProblem(DCProblem, SyntheticProblem): + pass + + synthetic = syntheticDCProblem(mesh); + synthetic.P = Q.T + synthetic.RHS = q + dobs, Wd = synthetic.createData(mSynth) + + # Now set up the problem to do some minimization + problem = DCProblem(mesh) + + + diff --git a/SimPEG/forward/DCProblem/DCutils.py b/SimPEG/forward/DCProblem/DCutils.py new file mode 100644 index 00000000..f3445096 --- /dev/null +++ b/SimPEG/forward/DCProblem/DCutils.py @@ -0,0 +1,29 @@ +import numpy as np +import scipy.sparse as sp + +def genTxRxmat(nelec, spacelec, surfloc, elecini, mesh): + """ Generate projection matrix (Q) and """ + elecend = 0.5+spacelec*(nelec-1) + elecLocR = np.linspace(elecini, elecend, nelec) + elecLocT = elecLocR+1 + nrx = nelec-1 + ntx = nelec-1 + q = np.zeros((mesh.nC, ntx)) + Q = np.zeros((mesh.nC, nrx)) + + for i in range(nrx): + + rxind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i])) + rxind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i+1])) + + txind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i])) + txind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i+1])) + + q[txind1,i] = 1 + q[txind2,i] = -1 + Q[rxind1,i] = 1 + Q[rxind2,i] = -1 + + Q = sp.csr_matrix(Q) + rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 + return q, Q, rxmidLoc diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 48848a07..ff8bdb00 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -84,8 +84,15 @@ class Problem(object): self._P = value - def J(self, u): + def J(self, m, v, u=None, RHSii=0): """ + :param numpy.array m: model + :param numpy.array v: vector to multiply + :param numpy.array u: fields + :param int RHSii: which RHS to calculate sensitivity too + :rtype: numpy.array + :return: Jv + Working with the general PDE, c(m, u) = 0, where m is the model and u is the field, the sensitivity is defined as: @@ -107,15 +114,26 @@ class Problem(object): """ pass - def Jt(self, v): + def Jt(self, m, v, u=None, RHSii=0): """ + :param numpy.array m: model + :param numpy.array v: vector to multiply + :param numpy.array u: fields + :param int RHSii: which RHS to calculate sensitivity too + :rtype: numpy.array + :return: JTv + Transpose of J """ pass def field(self, m): """ - The fields. + The field given the model. + + .. math:: + u(m) + """ pass @@ -179,10 +197,10 @@ class Problem(object): m = np.random.rand(5) return checkDerivative(lambda m : [self.modelTransform(m), self.modelTransformDeriv(m)], m) - def misfit(self, m, R=None): + def misfit(self, m, u=None): """ :param numpy.array m: geophysical model - :param numpy.array R: residual, R = W o (dpred - dobs) + :param numpy.array u: fields :rtype: float :return: data misfit @@ -195,15 +213,15 @@ class Problem(object): Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. """ - if R is None: - R = self.W*(self.dpred(m) - self.dobs) + R = self.W*(self.dpred(m, u=u) - self.dobs) R = mkvc(R) return 0.5*R.inner(R) - def misfitDeriv(self, m, R=None, u=None): + def misfitDeriv(self, m, u=None): """ :param numpy.array m: geophysical model + :param numpy.array u: fields :rtype: numpy.array :return: data misfit derivative @@ -213,6 +231,12 @@ class Problem(object): \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + If the field, u, is provided, the calculation of the data is fast: + + .. math:: + + \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} + \mathbf{R} = \mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs} \mu_\\text{data} = {1\over 2}\left| \mathbf{W \circ R} \\right|_2^2 @@ -230,8 +254,7 @@ class Problem(object): if u is None: u = self.field(m) - if R is None: - R = self.W*(self.dpred(m, u=u) - self.dobs) + R = self.W*(self.dpred(m, u=u) - self.dobs) dmisfit = 0 for i in range(self.RHS.shape[1]): # Loop over each right hand side @@ -240,9 +263,40 @@ class Problem(object): return dmisfit +class SyntheticProblem(object): + """ + Has helpful functions when dealing with synthetic problems + + To use this class, inherit to your problem:: + + class mySyntheticExample(Problem, SyntheticProblem): + pass + """ + def createData(self, m, std=0.05): + """ + :param numpy.array m: geophysical model + :param numpy.array std: standard deviation + :rtype: numpy.array, numpy.array + :return: dobs, Wd + + Create synthetic data given a model, and a standard deviation. + + Returns the observed data with random Gaussian noise + and Wd which is the same size as data, and can be used to weight the inversion. + """ + dobs = self.dpred(m) + dobs = dobs + noise = std*abs(dobs)*np.random.randn(*dobs.shape) + dobs = dobs+noise + eps = np.linalg.norm(mkvc(dobs),2)*1e-5 + Wd = 1/(abs(dobs)*std+eps) + return dobs, Wd + + + if __name__ == '__main__': from SimPEG.inverse import checkDerivative p = Problem(None) m = np.random.rand(5) - checkDerivative(lambda m : [p.modelTransform(m), p.modelTransformDeriv(m)], m) + checkDerivative(lambda m : [p.modelTransform(m), p.modelTransformDeriv(m)], m, plotIt=False) diff --git a/SimPEG/utils/ModelBuilder.py b/SimPEG/utils/ModelBuilder.py index 3b1f977f..527d5eef 100644 --- a/SimPEG/utils/ModelBuilder.py +++ b/SimPEG/utils/ModelBuilder.py @@ -15,10 +15,6 @@ def getIndecesBlock(p0,p1,ccMesh): The points p0 and p1 must live in the the same dimensional space as the mesh. """ - # Validation of the input - assert type(p0) == np.ndarray, "Vector must be a numpy array" - assert type(p1) == np.ndarray, "Vector must be a numpy array" - # Validation: p0 and p1 live in the same dimensional space assert len(p0) == len(p1), "Dimension mismatch. len(p0) != len(p1)" @@ -47,7 +43,7 @@ def getIndecesBlock(p0,p1,ccMesh): ind = np.where(indX & indY) - else: + elif dimMesh == 3: # Define the points x1 = p0[0] y1 = p0[1] @@ -98,13 +94,16 @@ def defineTwoLayeredConductivity(depth,ccMesh,condVals): # Identify 1st cell centered reference point p0[0] = ccMesh[0,0] - p0[1] = ccMesh[0,1] - p0[2] = ccMesh[0,2] + if dim>1: p0[1] = ccMesh[0,1] + if dim>2: p0[2] = ccMesh[0,2] # Identify the last cell-centered reference point p1[0] = ccMesh[-1,0] - p1[1] = ccMesh[-1,1] - p1[2] = ccMesh[-1,2] - depth; + if dim>1: p1[1] = ccMesh[-1,1] + if dim>2: p1[2] = ccMesh[-1,2] + + # The depth is always defined on the last one. + p1[len(p1)-1] -= depth ind = getIndecesBlock(p0,p1,ccMesh) @@ -117,23 +116,24 @@ def scalarConductivity(ccMesh,pFunction): Define the distribution conductivity in the mesh according to the analytical expression given in pFunction """ - xCC = ccMesh[:,0] - yCC = ccMesh[:,1] - zCC = ccMesh[:,2] + dim = np.size(ccMesh[0,:]) + CC = [ccMesh[:,0]] + if dim>1: CC.append(ccMesh[:,1]) + if dim>2: CC.append(ccMesh[:,2]) - sigma = pFunction(xCC,yCC,zCC) + + sigma = pFunction(*CC) return sigma if __name__ == '__main__': - import sys - sys.path.append('../') - from TensorMesh import TensorMesh + from SimPEG import TensorMesh + from matplotlib import pyplot as plt # Define the mesh - testDim = 3 + testDim = 2 h1 = 0.3*np.ones(7) h1[0] = 0.5 h1[-1] = 0.6 @@ -157,8 +157,8 @@ if __name__ == '__main__': # ------------------- Test conductivities! -------------------------- print('Testing 1 block conductivity') - p0 = np.array([0.5,0.5,0.5]) - p1 = np.array([1.0,1.0,1.0]) + p0 = np.array([0.5,0.5,0.5])[:testDim] + p1 = np.array([1.0,1.0,1.0])[:testDim] condVals = np.array([100,1e-6]) sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) @@ -167,6 +167,7 @@ if __name__ == '__main__': print sigma.shape M.plotImage(sigma) print 'Done with block! :)' + plt.show() # ----------------------------------------- print('Testing the two layered model') @@ -178,11 +179,17 @@ if __name__ == '__main__': M.plotImage(sigma) print sigma print 'layer model!' + plt.show() # ----------------------------------------- print('Testing scalar conductivity') - pFunction = lambda x,y,z: np.exp(x+y+z) + if testDim == 1: + pFunction = lambda x: np.exp(x) + elif testDim == 2: + pFunction = lambda x,y: np.exp(x+y) + elif testDim == 3: + pFunction = lambda x,y,z: np.exp(x+y+z) sigma = scalarConductivity(ccMesh,pFunction) @@ -190,5 +197,6 @@ if __name__ == '__main__': M.plotImage(sigma) print sigma print 'Scalar conductivity defined!' + plt.show() # ----------------------------------------- From 21501e7482773ecd6e5f5fbe9a39e730cdd68da0 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 10:37:43 -0700 Subject: [PATCH 119/359] DC Problem tested and working. --- SimPEG/forward/DCProblem/DCProblem.py | 50 +++++++++++++++++---- SimPEG/forward/Problem.py | 62 ++++++++++++++++++++++----- 2 files changed, 93 insertions(+), 19 deletions(-) diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py index b94b35b5..fa557ea5 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -1,6 +1,7 @@ from SimPEG import TensorMesh from SimPEG.forward import Problem, SyntheticProblem -from SimPEG.utils import ModelBuilder +from SimPEG.inverse import checkDerivative +from SimPEG.utils import ModelBuilder, sdiag import numpy as np import scipy.sparse.linalg as linalg import DCutils @@ -30,22 +31,39 @@ class DCProblem(Problem): return phi - def J(self, m, v, u=None, RHSii=0, solve=None): + def J(self, m, v, u=None, solve=None): P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad A = self.createMatrix(m) Av_dm = self.mesh.getFaceMassDeriv() - mT_dm = self.modelTransform(m) + mT_dm = self.modelTransformDeriv(m) dCdu = A - dCdm = - D * ( sdiag( G * u[:, RHSii] ) * ( Av_dm * ( mT_dm * v ) ) ) + dCdm = D * ( sdiag( G * u ) * ( Av_dm * ( mT_dm * v ) ) ) if solve is None: solve = linalg.factorized(dCdu) - return - P * solve(dCdm) + Jv = - P * solve(dCdm) + return Jv + def Jt(self, m, v, u=None, solve=None): + P = self.P + D = self.mesh.faceDiv + G = self.mesh.cellGrad + A = self.createMatrix(m) + Av_dm = self.mesh.getFaceMassDeriv() + mT_dm = self.modelTransformDeriv(m) + + dCdu = A.T + + if solve is None: + solve = linalg.factorized(dCdu.tocsc()) + w = solve(P.T*v) + + Jtv = - mT_dm.T * ( Av_dm.T * ( sdiag( G * u ) * ( D.T * w ) ) ) + return Jtv if __name__ == '__main__': @@ -75,19 +93,35 @@ if __name__ == '__main__': elecLocR = np.linspace(elecini, elecend, nelec) rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 q, Q, rxmidloc = DCutils.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) - + P = Q.T # Create some data class syntheticDCProblem(DCProblem, SyntheticProblem): pass synthetic = syntheticDCProblem(mesh); - synthetic.P = Q.T + synthetic.P = P synthetic.RHS = q - dobs, Wd = synthetic.createData(mSynth) + dobs, Wd = synthetic.createData(mSynth, std=0.05) # Now set up the problem to do some minimization problem = DCProblem(mesh) + problem.P = P + problem.RHS = q + problem.W = Wd + problem.dobs = dobs + m0 = mesh.gridCC[:,0]*0+sig1 + print problem.misfit(m0) + print problem.misfit(mSynth) + # Check Derivative + derChk = lambda m: [problem.misfit(m), problem.misfitDeriv(m)] + checkDerivative(derChk, mSynth) + # Adjoint Test + u = np.random.rand(mesh.nC) + v = np.random.rand(mesh.nC) + w = np.random.rand(dobs.shape[0]) + print w.dot(problem.J(mSynth, v, u=u)) + print v.dot(problem.Jt(mSynth, w, u=u)) diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index ff8bdb00..39ddf8a8 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -81,15 +81,14 @@ class Problem(object): return self._dobs @dobs.setter def dobs(self, value): - self._P = value + self._dobs = value - def J(self, m, v, u=None, RHSii=0): + def J(self, m, v, u=None): """ :param numpy.array m: model :param numpy.array v: vector to multiply :param numpy.array u: fields - :param int RHSii: which RHS to calculate sensitivity too :rtype: numpy.array :return: Jv @@ -114,12 +113,11 @@ class Problem(object): """ pass - def Jt(self, m, v, u=None, RHSii=0): + def Jt(self, m, v, u=None): """ :param numpy.array m: model :param numpy.array v: vector to multiply :param numpy.array u: fields - :param int RHSii: which RHS to calculate sensitivity too :rtype: numpy.array :return: JTv @@ -216,7 +214,7 @@ class Problem(object): R = self.W*(self.dpred(m, u=u) - self.dobs) R = mkvc(R) - return 0.5*R.inner(R) + return 0.5*R.dot(R) def misfitDeriv(self, m, u=None): """ @@ -237,9 +235,7 @@ class Problem(object): \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} - \mathbf{R} = \mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs} - - \mu_\\text{data} = {1\over 2}\left| \mathbf{W \circ R} \\right|_2^2 + \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. @@ -248,7 +244,7 @@ class Problem(object): .. math:: - \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top (\mathbf{W \circ R}) + \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} """ if u is None: @@ -258,7 +254,51 @@ class Problem(object): dmisfit = 0 for i in range(self.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.Jt(u[:,i], self.W[:,i]*R[:,i]) + dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) + + return dmisfit + + def misfitDerivDeriv(self, m, u=None): + """ + :param numpy.array m: geophysical model + :param numpy.array u: fields + :rtype: numpy.array + :return: data misfit derivative + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + + If the field, u, is provided, the calculation of the data is fast: + + .. math:: + + \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} + + \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + + The derivative of this, with respect to the model, is: + + .. math:: + + \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} + + \\frac{\partial^2 \mu_\\text{data}}{\partial^2 \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ W J} + + """ + if u is None: + u = self.field(m) + + R = self.W*(self.dpred(m, u=u) - self.dobs) + + dmisfit = 0 + for i in range(self.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) return dmisfit From 56aa003a3ceaffaa65ed50635869ec7223c15c4d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 12:16:10 -0700 Subject: [PATCH 120/359] Start of DC documentation. --- SimPEG/forward/DCProblem/DCProblem.py | 14 ++++++++++++++ SimPEG/forward/DCProblem/__init__.py | 2 ++ SimPEG/forward/__init__.py | 1 + docs/api_Problem.rst | 18 ++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 SimPEG/forward/DCProblem/__init__.py diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py index fa557ea5..cf33d86c 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -32,6 +32,20 @@ class DCProblem(Problem): return phi def J(self, m, v, u=None, solve=None): + """ + :param numpy.array m: model + :param numpy.array v: vector to multiply + :param numpy.array u: fields + :rtype: numpy.array + :return: Jv + + .. math:: + c(m,u) = A(m)u - q = G\\text{sdiag}(M(mT(m)))Du - q = 0 + + \\nabla_u (A(m)u - q) = A(m) + + \\nabla_m (A(m)u - q) = G\\text{sdiag}(Du)\\nabla_m (M(mT(m))) + """ P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad diff --git a/SimPEG/forward/DCProblem/__init__.py b/SimPEG/forward/DCProblem/__init__.py new file mode 100644 index 00000000..a868cf80 --- /dev/null +++ b/SimPEG/forward/DCProblem/__init__.py @@ -0,0 +1,2 @@ +from DCProblem import * +from DCutils import * diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py index 3c4d3728..fe849d41 100644 --- a/SimPEG/forward/__init__.py +++ b/SimPEG/forward/__init__.py @@ -1 +1,2 @@ from Problem import * +import DCProblem diff --git a/docs/api_Problem.rst b/docs/api_Problem.rst index d43616d9..83250f3e 100644 --- a/docs/api_Problem.rst +++ b/docs/api_Problem.rst @@ -1,8 +1,26 @@ .. _api_Problem: + + Problem ******* .. automodule:: SimPEG.forward.Problem :members: :undoc-members: + + +DCProblem +********* + +.. automodule:: SimPEG.forward.DCProblem.DCProblem + :members: + :undoc-members: + + +DCutils +******* + +.. automodule:: SimPEG.forward.DCProblem.DCutils + :members: + :undoc-members: From bed86b9ce4bdabc02d9a2ae90e14ff450a017e06 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 12:28:08 -0700 Subject: [PATCH 121/359] Update documentation and show example field. --- SimPEG/forward/DCProblem/DCProblem.py | 31 +++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py index cf33d86c..491123c3 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -7,12 +7,29 @@ import scipy.sparse.linalg as linalg import DCutils class DCProblem(Problem): - """docstring for DCProblem""" + """ + **DCProblem** + + Geophysical DC resistivity problem. + + """ def __init__(self, mesh): super(DCProblem, self).__init__(mesh) self.mesh.setCellGradBC('neumann') def createMatrix(self, m): + """ + Makes the matrix A(m) for the DC resistivity problem. + + :param numpy.array m: model + :rtype: scipy.csc_matrix + :return: A(m) + + .. math:: + c(m,u) = A(m)u - q = G\\text{sdiag}(M(mT(m)))Du - q = 0 + + Where M() is the mass matrix and mT is the model transform. + """ D = self.mesh.faceDiv G = self.mesh.cellGrad sigma = self.modelTransform(m) @@ -44,7 +61,14 @@ class DCProblem(Problem): \\nabla_u (A(m)u - q) = A(m) - \\nabla_m (A(m)u - q) = G\\text{sdiag}(Du)\\nabla_m (M(mT(m))) + \\nabla_m (A(m)u - q) = G\\text{sdiag}(Du)\\nabla_m(M(mT(m))) + + Where M() is the mass matrix and mT is the model transform. + + .. math:: + J = - P \left( \\nabla_u c(m, u) \\right)^{-1} \\nabla_m c(m, u) + + J(v) = - P ( A(m)^{-1} ( G\\text{sdiag}(Du)\\nabla_m(M(mT(m))) v ) ) """ P = self.P D = self.mesh.faceDiv @@ -118,6 +142,9 @@ if __name__ == '__main__': synthetic.RHS = q dobs, Wd = synthetic.createData(mSynth, std=0.05) + u = synthetic.field(mSynth) + mesh.plotImage(u[:,10], showIt=True) + # Now set up the problem to do some minimization problem = DCProblem(mesh) problem.P = P From 7cf8ef231003a4fb2313b484740bb8e9702e0257 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 14:55:22 -0700 Subject: [PATCH 122/359] Moved testing code to the test directory. added __init__.py and some documentation. --- SimPEG/GaussNewton.py | 141 -------------------- SimPEG/forward/DCProblem/DCProblem.py | 2 +- SimPEG/forward/Problem.py | 4 - SimPEG/inverse/Optimize.py | 75 ----------- SimPEG/tests/{OrderTest.py => TestUtils.py} | 132 ++++++++++++++---- SimPEG/tests/__init__.py | 2 + SimPEG/tests/test_massMatrices.py | 2 +- SimPEG/tests/test_operators.py | 2 +- SimPEG/tests/test_tensorMesh.py | 6 +- SimPEG/tests/test_utils.py | 4 +- docs/api_GaussNewton.rst | 8 -- docs/api_Optimize.rst | 8 ++ docs/api_Tests.rst | 8 ++ docs/index.rst | 24 ++-- 14 files changed, 144 insertions(+), 274 deletions(-) delete mode 100644 SimPEG/GaussNewton.py rename SimPEG/tests/{OrderTest.py => TestUtils.py} (56%) create mode 100644 SimPEG/tests/__init__.py delete mode 100644 docs/api_GaussNewton.rst create mode 100644 docs/api_Optimize.rst create mode 100644 docs/api_Tests.rst diff --git a/SimPEG/GaussNewton.py b/SimPEG/GaussNewton.py deleted file mode 100644 index bd6d37c3..00000000 --- a/SimPEG/GaussNewton.py +++ /dev/null @@ -1,141 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -from pylab import norm - -def GaussNewton(fctn, x0,maxIter=20, maxIterLS=10, LSreduction=1e-4, tolJ=1e-3, tolX=1e-3, - tolG=1e-3, eps=1e-16, xStop=[]): - """ - GaussNewton Optimization - - Input: - ------ - fctn - objective Function (lambda function) - x0 - starting guess - - Output: - ------- - xOpt - numerical optimizer - """ - # initial output - print "%s GaussNewton %s" % ('='*22,'='*22) - print "iter\tJc\t\tnorm(dJ)\tLS" - print "%s" % '-'*57 - - # evaluate stopping criteria - if xStop==[]: - xStop=x0 - Jstop = fctn(xStop) - print "%3d\t%1.2e" % (-1, Jstop[0]) - - # initialize - xc = x0 - STOP = np.zeros((5,1),dtype=bool) - iterLS=0; iter=0 - - Jold = Jstop - xOld=xc - while 1: - # evaluate objective function - Jc,dJ,H = fctn(xc) - print "%3d\t%1.2e\t%1.2e\t%d" % (iter, Jc[0],norm(dJ),iterLS) - - # check stopping rules - STOP[0] = (iter>0) & (abs(Jc[0]-Jold[0]) <= tolJ*(1+abs(Jstop[0]))) - STOP[1] = (iter>0) & (norm(xc-xOld) <= tolX*(1+norm(x0))) - STOP[2] = norm(dJ) <= tolG*(1+abs(Jstop[0])) - STOP[3] = norm(dJ) <= 1e3*eps - STOP[4] = (iter >= maxIter) - if all(STOP[0:3]) | any(STOP[3:]): - break - - # get search direction - dx = np.linalg.solve(H,-dJ) - - # Armijo linesearch - descent = np.dot(dJ.T,dx) - LS =0; t = 1; iterLS=1 - while (iterLS eps] - order1 = order1[E1[1:] > eps] - belowTol = order1.size == 0 and order0.size > 0 - correctOrder = order1.size > 0 and np.mean(order1) > tolerance * expectedOrder - - passTest = belowTol or correctOrder - - if passTest: - print "%s PASS! %s\n" % ('='*25, '='*25) - else: - print "%s\n%s FAIL! %s\n%s" % ('*'*57, '<'*25, '>'*25, '*'*57) - - if plotIt: - plt.figure() - plt.clf() - plt.loglog(t, E0, 'b') - plt.loglog(t, E1, 'g--') - plt.title('checkDerivative') - plt.xlabel('h') - plt.ylabel('error of Taylor approximation') - plt.legend(['0th order', '1st order'], loc='upper left') - plt.show() - - return passTest - if __name__ == '__main__': x0 = np.array([2.6, 3.7]) checkDerivative(Rosenbrock, x0, plotIt=False) diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/TestUtils.py similarity index 56% rename from SimPEG/tests/OrderTest.py rename to SimPEG/tests/TestUtils.py index fb305d32..79340da7 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/TestUtils.py @@ -1,5 +1,7 @@ -import sys -sys.path.append('../../') +import numpy as np +import matplotlib.pyplot as plt +from pylab import norm +from SimPEG.utils import mkvc from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh import numpy as np import unittest @@ -16,46 +18,47 @@ class OrderTest(unittest.TestCase): Given are an operator A and its discretization A[h]. For a given test function f and h --> 0 we compare: - error(h) = \| A[h](f) - A(f) \|_{\infty} + .. math:: + error(h) = \| A[h](f) - A(f) \|_{\infty} Note that you can provide any norm. Test is passed when estimated rate order of convergence is at least within the specified tolerance of the estimated rate supplied by the user. - Minimal example for a curl operator: + Minimal example for a curl operator:: - class TestCURL(OrderTest): - name = "Curl" + class TestCURL(OrderTest): + name = "Curl" - def getError(self): - # For given Mesh, generate A[h], f and A(f) and return norm of error. + def getError(self): + # For given Mesh, generate A[h], f and A(f) and return norm of error. - fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) - sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) - Ex = fun(self.M.gridEx[:, 1]) - Ey = fun(self.M.gridEy[:, 2]) - Ez = fun(self.M.gridEz[:, 0]) - f = np.concatenate((Ex, Ey, Ez)) + Ex = fun(self.M.gridEx[:, 1]) + Ey = fun(self.M.gridEy[:, 2]) + Ez = fun(self.M.gridEz[:, 0]) + f = np.concatenate((Ex, Ey, Ez)) - Fx = sol(self.M.gridFx[:, 2]) - Fy = sol(self.M.gridFy[:, 0]) - Fz = sol(self.M.gridFz[:, 1]) - Af = np.concatenate((Fx, Fy, Fz)) + Fx = sol(self.M.gridFx[:, 2]) + Fy = sol(self.M.gridFy[:, 0]) + Fz = sol(self.M.gridFz[:, 1]) + Af = np.concatenate((Fx, Fy, Fz)) - # Generate DIV matrix - Ah = self.M.edgeCurl + # Generate DIV matrix + Ah = self.M.edgeCurl - curlE = Ah*E - err = np.linalg.norm((Ah*f -Af), np.inf) - return err + curlE = Ah*E + err = np.linalg.norm((Ah*f -Af), np.inf) + return err - def test_order(self): - # runs the test - self.orderTest() + def test_order(self): + # runs the test + self.orderTest() See also: test_operatorOrder.py @@ -159,5 +162,78 @@ class OrderTest(unittest.TestCase): print '' self.assertTrue(passTest) -if __name__ == '__main__': - unittest.main() +def Rosenbrock(x): + """Rosenbrock function for testing GaussNewton scheme""" + + f = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 + g = np.array([2*(200*x[0]**3-200*x[0]*x[1]+x[0]-1), 200*(x[1]-x[0]**2)]) + H = np.array([[-400*x[1]+1200*x[0]**2+2, -400*x[0]], [-400*x[0], 200]]) + return f, g, H + +def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): + """ + Basic derivative check + + Compares error decay of 0th and 1st order Taylor approximation at point + x0 for a randomized search direction. + + :param lambda fctn: function handle + :param numpy.array x0: point at which to check derivative + :param int num: number of times to reduce step length, h + :param bool plotIt: if you would like to plot + :param numpy.array dx: step direction + :rtype: bool + :return: did you pass the test?! + + """ + + print "%s checkDerivative %s" % ('='*20, '='*20) + print "iter\th\t\t|J0-Jt|\t\t|J0+h*dJ'*dx-Jt|\tOrder\n%s" % ('-'*57) + + Jc = fctn(x0) + + x0 = mkvc(x0) + + if dx is None: + dx = np.random.randn(len(x0)) + + t = np.logspace(-1, -num, num) + E0 = np.ones(t.shape) + E1 = np.ones(t.shape) + + l2norm = lambda x: np.sqrt(np.inner(x, x)) # because np.norm breaks if they are scalars? + for i in range(num): + Jt = fctn(x0+t[i]*dx) + E0[i] = l2norm(Jt[0]-Jc[0]) # 0th order Taylor + E1[i] = l2norm(Jt[0]-Jc[0]-t[i]*Jc[1].dot(dx)) # 1st order Taylor + order0 = np.log10(E0[:-1]/E0[1:]) + order1 = np.log10(E1[:-1]/E1[1:]) + print "%d\t%1.2e\t%1.3e\t\t%1.3e\t\t%1.3f" % (i, t[i], E0[i], E1[i], np.nan if i == 0 else order1[i-1]) + + tolerance = 0.9 + expectedOrder = 2 + eps = 1e-10 + order0 = order0[E0[1:] > eps] + order1 = order1[E1[1:] > eps] + belowTol = order1.size == 0 and order0.size > 0 + correctOrder = order1.size > 0 and np.mean(order1) > tolerance * expectedOrder + + passTest = belowTol or correctOrder + + if passTest: + print "%s PASS! %s\n" % ('='*25, '='*25) + else: + print "%s\n%s FAIL! %s\n%s" % ('*'*57, '<'*25, '>'*25, '*'*57) + + if plotIt: + plt.figure() + plt.clf() + plt.loglog(t, E0, 'b') + plt.loglog(t, E1, 'g--') + plt.title('checkDerivative') + plt.xlabel('h') + plt.ylabel('error of Taylor approximation') + plt.legend(['0th order', '1st order'], loc='upper left') + plt.show() + + return passTest diff --git a/SimPEG/tests/__init__.py b/SimPEG/tests/__init__.py new file mode 100644 index 00000000..f896cfd0 --- /dev/null +++ b/SimPEG/tests/__init__.py @@ -0,0 +1,2 @@ +import TestUtils +from TestUtils import checkDerivative, Rosenbrock, OrderTest diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 13037156..79626ca1 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from OrderTest import OrderTest +from TestUtils import OrderTest # MATLAB code: diff --git a/SimPEG/tests/test_operators.py b/SimPEG/tests/test_operators.py index ab377089..6906c580 100644 --- a/SimPEG/tests/test_operators.py +++ b/SimPEG/tests/test_operators.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from OrderTest import OrderTest +from TestUtils import OrderTest MESHTYPES = ['uniformTensorMesh', 'uniformLOM', 'rotateLOM'] call2 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1]) diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index 32d47353..300e6634 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -1,9 +1,7 @@ import numpy as np import unittest -import sys -sys.path.append('../') -from TensorMesh import TensorMesh -from OrderTest import OrderTest +from SimPEG import TensorMesh +from TestUtils import OrderTest from scipy.sparse.linalg import dsolve diff --git a/SimPEG/tests/test_utils.py b/SimPEG/tests/test_utils.py index 0dcdd362..f0b867ec 100644 --- a/SimPEG/tests/test_utils.py +++ b/SimPEG/tests/test_utils.py @@ -1,8 +1,6 @@ import numpy as np import unittest -import sys -sys.path.append('../') -from utils import mkvc, ndgrid, indexCube, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal +from SimPEG.utils import mkvc, ndgrid, indexCube, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal class TestSequenceFunctions(unittest.TestCase): diff --git a/docs/api_GaussNewton.rst b/docs/api_GaussNewton.rst deleted file mode 100644 index 65012347..00000000 --- a/docs/api_GaussNewton.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _api_GaussNewton: - -Gauss Newton -************ - -.. automodule:: SimPEG.GaussNewton - :members: - :undoc-members: diff --git a/docs/api_Optimize.rst b/docs/api_Optimize.rst new file mode 100644 index 00000000..9765bd3b --- /dev/null +++ b/docs/api_Optimize.rst @@ -0,0 +1,8 @@ +.. _api_Inverse: + +Optimize +******** + +.. automodule:: SimPEG.inverse.Optimize + :members: + :undoc-members: diff --git a/docs/api_Tests.rst b/docs/api_Tests.rst new file mode 100644 index 00000000..164f5b5d --- /dev/null +++ b/docs/api_Tests.rst @@ -0,0 +1,8 @@ +.. _api_Tests: + +Testing SimPEG +************** + +.. automodule:: SimPEG.tests.TestUtils + :members: + :undoc-members: diff --git a/docs/index.rst b/docs/index.rst index 48ebe940..b08624d5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -30,14 +30,6 @@ Meshing & Operators api_DiffOperators api_InnerProducts -Inversion -========= - -.. toctree:: - :maxdepth: 2 - - api_GaussNewton - Forward Problems ================ @@ -46,6 +38,22 @@ Forward Problems api_Problem +Inversion +========= + +.. toctree:: + :maxdepth: 2 + + api_Optimize + +Testing SimPEG +============== + +.. toctree:: + :maxdepth: 2 + + api_Tests + Project Index & Search ====================== From fb69446cfba65552d7c20628d82f2dbb971085c5 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 15:15:08 -0700 Subject: [PATCH 123/359] Testing problem and DCProblem. --- SimPEG/forward/Problem.py | 9 --- SimPEG/tests/test_forward_DCproblem.py | 81 ++++++++++++++++++++++++++ SimPEG/tests/test_forward_problem.py | 28 +++++++++ 3 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 SimPEG/tests/test_forward_DCproblem.py create mode 100644 SimPEG/tests/test_forward_problem.py diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 7c693d17..1558ecf0 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -327,12 +327,3 @@ class SyntheticProblem(object): eps = np.linalg.norm(mkvc(dobs),2)*1e-5 Wd = 1/(abs(dobs)*std+eps) return dobs, Wd - - - -if __name__ == '__main__': - from SimPEG.inverse import checkDerivative - - p = Problem(None) - m = np.random.rand(5) - checkDerivative(lambda m : [p.modelTransform(m), p.modelTransformDeriv(m)], m, plotIt=False) diff --git a/SimPEG/tests/test_forward_DCproblem.py b/SimPEG/tests/test_forward_DCproblem.py new file mode 100644 index 00000000..b5e6d844 --- /dev/null +++ b/SimPEG/tests/test_forward_DCproblem.py @@ -0,0 +1,81 @@ +import numpy as np +import unittest +from SimPEG import TensorMesh +from SimPEG.utils import ModelBuilder, sdiag +from SimPEG.forward import Problem, SyntheticProblem +from SimPEG.forward.DCProblem import DCProblem, DCutils +from TestUtils import checkDerivative +from scipy.sparse.linalg import dsolve + + +class DCProblemTests(unittest.TestCase): + + def setUp(self): + # Create the mesh + h1 = np.ones(20) + h2 = np.ones(20) + mesh = TensorMesh([h1,h2]) + + # Create some parameters for the model + sig1 = 1 + sig2 = 0.01 + + # Create a synthetic model from a block in a half-space + p0 = [2, 2] + p1 = [5, 5] + condVals = [sig1, sig2] + mSynth = ModelBuilder.defineBlockConductivity(p0,p1,mesh.gridCC,condVals) + + # Set up the projection + nelec = 10 + spacelec = 2 + surfloc = 0.5 + elecini = 0.5 + elecend = 0.5+spacelec*(nelec-1) + elecLocR = np.linspace(elecini, elecend, nelec) + rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 + q, Q, rxmidloc = DCutils.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) + P = Q.T + + # Create some data + class syntheticDCProblem(DCProblem, SyntheticProblem): + pass + + synthetic = syntheticDCProblem(mesh); + synthetic.P = P + synthetic.RHS = q + dobs, Wd = synthetic.createData(mSynth, std=0.05) + + # Now set up the problem to do some minimization + problem = DCProblem(mesh) + problem.P = P + problem.RHS = q + problem.W = Wd + problem.dobs = dobs + + self.p = problem + self.mesh = mesh + self.m0 = mSynth + self.dobs = dobs + + + def test_misfit(self): + print 'SimPEG.forward.DCProblem: Testing Misfit' + derChk = lambda m: [self.p.misfit(m), self.p.misfitDeriv(m)] + passed = checkDerivative(derChk, self.m0, plotIt=False) + self.assertTrue(passed) + + def test_adjoint(self): + # Adjoint Test + u = np.random.rand(self.mesh.nC) + v = np.random.rand(self.mesh.nC) + w = np.random.rand(self.dobs.shape[0]) + wtJv = w.dot(self.p.J(self.m0, v, u=u)) + vtJtw = v.dot(self.p.Jt(self.m0, w, u=u)) + passed = (wtJv - vtJtw) < 1e-10 + self.assertTrue(passed) + + + +if __name__ == '__main__': + unittest.main() diff --git a/SimPEG/tests/test_forward_problem.py b/SimPEG/tests/test_forward_problem.py new file mode 100644 index 00000000..b7180dca --- /dev/null +++ b/SimPEG/tests/test_forward_problem.py @@ -0,0 +1,28 @@ +import numpy as np +import unittest +from SimPEG import TensorMesh +from SimPEG.forward import Problem +from TestUtils import checkDerivative +from scipy.sparse.linalg import dsolve + + +class ProblemTests(unittest.TestCase): + + def setUp(self): + + a = np.array([1, 1, 1]) + b = np.array([1, 2]) + c = np.array([1, 4]) + self.mesh2 = TensorMesh([a, b], np.array([3, 5])) + self.p2 = Problem(self.mesh2) + + + def test_modelTransform(self): + print 'SimPEG.forward.Problem: Testing Model Transform' + m = np.random.rand(self.mesh2.nC) + passed = checkDerivative(lambda m : [self.p2.modelTransform(m), self.p2.modelTransformDeriv(m)], m, plotIt=False) + self.assertTrue(passed) + + +if __name__ == '__main__': + unittest.main() From 65f129e7a84ccb616697f04b865ce6dbfd7af106 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 3 Oct 2013 15:31:08 -0700 Subject: [PATCH 124/359] Documented utilities. --- SimPEG/utils/ModelBuilder.py | 25 ++++++++++++++----------- SimPEG/utils/__init__.py | 5 ++++- SimPEG/utils/lomutils.py | 27 +++++++++++---------------- SimPEG/utils/matutils.py | 4 ++-- docs/api_Utils.rst | 21 +++++++++++++++++++++ docs/index.rst | 9 +++++++++ 6 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 docs/api_Utils.rst diff --git a/SimPEG/utils/ModelBuilder.py b/SimPEG/utils/ModelBuilder.py index 527d5eef..170da1bf 100644 --- a/SimPEG/utils/ModelBuilder.py +++ b/SimPEG/utils/ModelBuilder.py @@ -3,16 +3,18 @@ import numpy as np def getIndecesBlock(p0,p1,ccMesh): """ - Creates a vector containing the block indexes in the cell centerd mesh. - Returns a tuple + Creates a vector containing the block indexes in the cell centerd mesh. + Returns a tuple - The block is defined by the points - p0 : describe the position of the left upper front corner, and - p1 : describe the position of the right bottom back corner. + The block is defined by the points - ccMesh represents the cell-centered mesh + p0, describe the position of the left upper front corner, and - The points p0 and p1 must live in the the same dimensional space as the mesh. + p1, describe the position of the right bottom back corner. + + ccMesh represents the cell-centered mesh + + The points p0 and p1 must live in the the same dimensional space as the mesh. """ # Validation: p0 and p1 live in the same dimensional space @@ -64,9 +66,9 @@ def getIndecesBlock(p0,p1,ccMesh): def defineBlockConductivity(p0,p1,ccMesh,condVals): """ - Build a block with the conductivity specified by condVal. Returns an array. - condVals[0] conductivity of the block - condVals[1] conductivity of the ground + Build a block with the conductivity specified by condVal. Returns an array. + condVals[0] conductivity of the block + condVals[1] conductivity of the ground """ sigma = np.zeros(ccMesh.shape[0]) + condVals[1] ind = getIndecesBlock(p0,p1,ccMesh) @@ -80,7 +82,8 @@ def defineTwoLayeredConductivity(depth,ccMesh,condVals): Define a two layered model. Depth of the first layer must be specified. CondVals vector with the conductivity values of the layers. Eg: - Convention to number the layers: + Convention to number the layers:: + <----------------------------|------------------------------------> 0 depth zf 1st layer 2nd layer diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py index bb46a4e9..7c976ce3 100644 --- a/SimPEG/utils/__init__.py +++ b/SimPEG/utils/__init__.py @@ -1,4 +1,7 @@ +import matutils +import sputils +import lomutils +import ModelBuilder from matutils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind from sputils import spzeros, kron3, speye, sdiag from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird -import ModelBuilder diff --git a/SimPEG/utils/lomutils.py b/SimPEG/utils/lomutils.py index cdd6e0de..9020ce12 100644 --- a/SimPEG/utils/lomutils.py +++ b/SimPEG/utils/lomutils.py @@ -31,19 +31,18 @@ def volTetra(xyz, A, B, C, D): """ Returns the volume for tetrahedras volume specified by the indexes A to D. + :param numpy.array xyz: X,Y,Z vertex vector + :param numpy.array A,B,C,D: vert index of the tetrahedra + :rtype: numpy.array + :return: V, volume of the tetrahedra - Input: - xyz - X,Y,Z vertex vector - A,B,C,D - vert index of the tetrahedra + Algorithm http://en.wikipedia.org/wiki/Tetrahedron#Volume - Output: - V - volume + .. math:: - Algorithm: http://en.wikipedia.org/wiki/Tetrahedron#Volume + V = {1 \over 3} A h - V = 1/3 A * h - - V = 1/6 | ( a - d ) o ( ( b - d ) X ( c - d ) ) | + V = {1 \over 6} | ( a - d ) \cdot ( ( b - d ) ( c - d ) ) | """ @@ -69,7 +68,7 @@ def indexCube(nodes, gridSize, n=None): Output: index - index in the order asked e.g. 'ABCD' --> (A,B,C,D) - TWO DIMENSIONS: + TWO DIMENSIONS:: node(i,j) node(i,j+1) A -------------- B @@ -81,7 +80,7 @@ def indexCube(nodes, gridSize, n=None): node(i+1,j) node(i+1,j+1) - THREE DIMENSIONS: + THREE DIMENSIONS:: node(i,j,k+1) node(i,j+1,k+1) E --------------- F @@ -97,10 +96,6 @@ def indexCube(nodes, gridSize, n=None): D -------------- C node(i+1,j,k) node(i+1,j+1,k) - - @author Rowan Cockett - - Last modified on: 2013/07/26 """ assert type(nodes) == str, "Nodes must be a str variable: e.g. 'ABCD'" @@ -211,7 +206,7 @@ def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): # # So also could be viewed as the average parallelogram. # - # WARNING: This does not compute correctly for concave quadrilaterals + # TODO: This does not compute correctly for concave quadrilaterals area = (length(nA)+length(nB)+length(nC)+length(nD))/4 return N, area diff --git a/SimPEG/utils/matutils.py b/SimPEG/utils/matutils.py index 20cc33df..24286cdd 100644 --- a/SimPEG/utils/matutils.py +++ b/SimPEG/utils/matutils.py @@ -4,7 +4,7 @@ import numpy as np def mkvc(x, numDims=1): """Creates a vector with the number of dimension specified - e.g.: + e.g.:: a = np.array([1, 2, 3]) @@ -43,7 +43,7 @@ def ndgrid(*args, **kwargs): The inputs can be a list or separate arguments. - e.g. + e.g.:: a = np.array([1, 2, 3]) b = np.array([1, 2]) diff --git a/docs/api_Utils.rst b/docs/api_Utils.rst new file mode 100644 index 00000000..e952010b --- /dev/null +++ b/docs/api_Utils.rst @@ -0,0 +1,21 @@ +.. _api_Utils: + +Utilities +********* + +.. automodule:: SimPEG.utils.matutils + :members: + :undoc-members: + +.. automodule:: SimPEG.utils.sputils + :members: + :undoc-members: + +.. automodule:: SimPEG.utils.lomutils + :members: + :undoc-members: + +.. automodule:: SimPEG.utils.ModelBuilder + :members: + :undoc-members: + diff --git a/docs/index.rst b/docs/index.rst index b08624d5..4c01c4cd 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -55,6 +55,15 @@ Testing SimPEG api_Tests +Utility Codes +============= + +.. toctree:: + :maxdepth: 2 + + api_Utils + + Project Index & Search ====================== From 0089931075422708228de96062993ee9bbbb727f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 7 Oct 2013 15:15:18 -0700 Subject: [PATCH 125/359] bug fixes for optimization --- SimPEG/inverse/Optimize.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index df6aa9a5..eee18b16 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -20,7 +20,9 @@ class Minimize(object): def __init__(self, problem, **kwargs): self.problem = problem + self.setKwargs(**kwargs) + def setKwargs(self, **kwargs): # Set the variables, throw an error if they don't exist. for attr in kwargs: if hasattr(self, attr): @@ -130,6 +132,7 @@ class SteepestDescent(Minimize): return -self.g if __name__ == '__main__': + from SimPEG.tests import Rosenbrock, checkDerivative x0 = np.array([2.6, 3.7]) checkDerivative(Rosenbrock, x0, plotIt=False) xOpt = GaussNewton(Rosenbrock, maxIter=20).minimize(x0) From 9d93167828ea182148957043b8f7112b5fa541b8 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 16 Oct 2013 08:46:33 -0700 Subject: [PATCH 126/359] Curl Bug. --- SimPEG/DiffOperators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 9a8a9db9..b2a75ed4 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -169,7 +169,7 @@ class DiffOperators(object): # The number of cell centers in each direction n1 = self.nCx n2 = self.nCy - n3 = self.nCy + n3 = self.nCz # Compute lengths of cell edges L = self.edge From 9cf76966c20ceee736b2ed8e108fa2b5a6b3b732 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 16 Oct 2013 09:08:54 -0700 Subject: [PATCH 127/359] Tensor View bug with origin. --- SimPEG/TensorView.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index e0c570cd..58f21bc5 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -154,8 +154,8 @@ class TensorView(object): # Plot the mesh ph = ax.pcolormesh(xx, yy, C.T) # Plot the lines - gx = np.arange(nX+1)*self.vectorNx[-1] - gy = np.arange(nY+1)*self.vectorNy[-1] + gx = np.arange(nX+1)*(self.vectorNx[-1]-self.x0[0]) + gy = np.arange(nY+1)*(self.vectorNy[-1]-self.x0[1]) # Repeat and seperate with NaN gxX = np.c_[gx, gx, gx+np.nan].ravel() gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() @@ -171,7 +171,7 @@ class TensorView(object): for ix in range(int(nX)): iz = ix + iy*nX if iz < self.nCz: - ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, + ax.text((ix+1)*(self.vectorNx[-1]-self.x0[0])-pad,(iy)*(self.vectorNy[-1]-self.x0[1])+pad, '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') if showIt: plt.show() From 4851295738e9aa30b2bdfcd043ee6a79032a27ab Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 16 Oct 2013 09:18:08 -0700 Subject: [PATCH 128/359] initial solver work: import SimPEG.Solver --- SimPEG/Solver.py | 75 +++++++++++++++++++++++++++++++++++++++ SimPEG/__init__.py | 1 + SimPEG/forward/Problem.py | 10 ++++++ 3 files changed, 86 insertions(+) create mode 100644 SimPEG/Solver.py diff --git a/SimPEG/Solver.py b/SimPEG/Solver.py new file mode 100644 index 00000000..2087ef5f --- /dev/null +++ b/SimPEG/Solver.py @@ -0,0 +1,75 @@ +import numpy as np +import scipy.sparse.linalg as linalg + + +class Solver(object): + """docstring for Solver""" + def __init__(self, A, doDirect=True, flag=None, options={}): + + assert type(doDirect) is bool, 'doDirect must be a boolean' + assert flag in [None, 'L', 'U', 'D'], "flag must be set to None, 'L', 'U', or 'D'" + + self.A = A + + self.dsolve = None + self.doDirect = doDirect + self.flag = flag + self.options = options + + def solve(self, b): + if self.flag is None and self.doDirect: + return self.solveDirect(b, **self.options) + elif self.flag is None and not self.doDirect: + return self.solveIter(b, **self.options) + elif self.flag == 'U': + return self.solveBackward(b) + elif self.flag == 'L': + return self.solveForward(b) + elif self.flag == 'D': + return self.solveDiagonal(b) + else: + raise Exception('Unknown flag.') + pass + + def clean(self): + """Cleans up the memory""" + del self.dsolve + self.dsolve = None + + def solveDirect(self, b, backend='scipy'): + assert np.shape(self.A)[1] == np.shape(b)[0], 'Dimension mismatch' + + if self.dsolve is None: + self.A = self.A.tocsc() # for efficiency + self.dsolve = linalg.factorized(self.A) + + if len(b.shape) == 1 or b.shape[1] == 1: + # Just one RHS + return self.dsolve(b) + + # Multiple RHSs + X = np.empty_like(b) + for i in range(b.shape[1]): + X[:,i] = self.dsolve(b[:,i]) + + return X + + def solveIter(self, b, M=None, iterSolver='CG'): + pass + + def solveBackward(self, b): + pass + + def solveForward(self, b): + pass + + def solveDiagonal(self, b): + diagA = self.A.diagonal() + if len(b.shape) == 1 or b.shape[1] == 1: + # Just one RHS + return b/diagA + # Multiple RHSs + X = np.empty_like(b) + for i in range(b.shape[1]): + X[:,i] = b[:,i]/diagA + return X diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index f36000a7..ea9faf33 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -2,3 +2,4 @@ from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh import utils import inverse +from Solver import Solver diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 1558ecf0..5b716f1f 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -83,6 +83,16 @@ class Problem(object): def dobs(self, value): self._dobs = value + def evalFunction(self, m, doDerivative=True): + """ + :param numpy.array m: model + :param bool doDerivative: do you want to compute the derivative? + :rtype: numpy.array + :return: Jv + """ + f = self.misfit(m) + + return f, g, H def J(self, m, v, u=None): """ From 6f459238132c92368ce40ccb09bc11aee86a5f4c Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 16 Oct 2013 11:32:33 -0700 Subject: [PATCH 129/359] Tensor View Can now take 'ExEy' and it will show subplots. --- SimPEG/TensorView.py | 59 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 58f21bc5..909856a4 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -42,7 +42,6 @@ class TensorView(object): """ assert type(I) == np.ndarray, "I must be a numpy array" assert type(numbering) == bool, "numbering must be a bool" - assert imageType in ["CC", "N","Fx","Fy","Fz","Ex","Ey","Ez"], "imageType must be 'CC', 'N','Fx','Fy','Fz','Ex','Ey','Ez'" assert direction in ["x", "y","z"], "direction must be either x,y, or z" @@ -51,17 +50,62 @@ class TensorView(object): elif imageType == 'N': assert I.size == self.nN, "Incorrect dimensions for N." elif imageType == 'Fx': - assert I.size == np.prod(self.nFx), "Incorrect dimensions for Fx." + if I.size != np.prod(self.nFx): I, fy, fz = self.r(I,'F','F','M') elif imageType == 'Fy': - assert I.size == np.prod(self.nFy), "Incorrect dimensions for Fy." + if I.size != np.prod(self.nFy): fx, I, fz = self.r(I,'F','F','M') elif imageType == 'Fz': - assert I.size == np.prod(self.nFz), "Incorrect dimensions for Fz." + if I.size != np.prod(self.nFz): fx, fy, I = self.r(I,'F','F','M') elif imageType == 'Ex': - assert I.size == np.prod(self.nEx), "Incorrect dimensions for Ex." + if I.size != np.prod(self.nEx): I, ey, ez = self.r(I,'E','E','M') elif imageType == 'Ey': - assert I.size == np.prod(self.nEy), "Incorrect dimensions for Ey." + if I.size != np.prod(self.nEy): ex, I, ez = self.r(I,'E','E','M') elif imageType == 'Ez': - assert I.size == np.prod(self.nEz), "Incorrect dimensions for Ez." + if I.size != np.prod(self.nEz): ex, ey, I = self.r(I,'E','E','M') + elif imageType[0] == 'E': + plotAll = len(imageType) == 1 + options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} + fig = plt.figure(figNum) + # Determine the subplot number: 131, 121 + numPlots = 130 if plotAll else len(imageType)/2*10+100 + pltNum = 1 + ex, ey, ez = self.r(I,'E','E','M') + if plotAll or 'Ex' in imageType: + ax_x = plt.subplot(numPlots+pltNum) + self.plotImage(ex, imageType='Ex', ax=ax_x, **options) + pltNum +=1 + if plotAll or 'Ey' in imageType: + ax_y = plt.subplot(numPlots+pltNum) + self.plotImage(ey, imageType='Ey', ax=ax_y, **options) + pltNum +=1 + if plotAll or 'Ez' in imageType: + ax_z = plt.subplot(numPlots+pltNum) + self.plotImage(ez, imageType='Ez', ax=ax_z, **options) + pltNum +=1 + return + elif imageType[0] == 'F': + plotAll = len(imageType) == 1 + options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} + fig = plt.figure(figNum) + # Determine the subplot number: 131, 121 + numPlots = 130 if plotAll else len(imageType)/2*10+100 + pltNum = 1 + fx, fy, fz = self.r(I,'F','F','M') + if plotAll or 'Fx' in imageType: + ax_x = plt.subplot(numPlots+pltNum) + self.plotImage(fx, imageType='Fx', ax=ax_x, **options) + pltNum +=1 + if plotAll or 'Fy' in imageType: + ax_y = plt.subplot(numPlots+pltNum) + self.plotImage(fy, imageType='Fy', ax=ax_y, **options) + pltNum +=1 + if plotAll or 'Fz' in imageType: + ax_z = plt.subplot(numPlots+pltNum) + self.plotImage(fz, imageType='Fz', ax=ax_z, **options) + pltNum +=1 + return + else: + raise Exception("imageType must be 'CC', 'N','Fx','Fy','Fz','Ex','Ey','Ez'") + if ax is None: fig = plt.figure(figNum) @@ -174,6 +218,7 @@ class TensorView(object): ax.text((ix+1)*(self.vectorNx[-1]-self.x0[0])-pad,(iy)*(self.vectorNy[-1]-self.x0[1])+pad, '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') + ax.set_title(imageType) if showIt: plt.show() return ph From 17643c52cc0282903d5509db8826c30420b418e7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 16 Oct 2013 11:35:39 -0700 Subject: [PATCH 130/359] minor updates to TensorView documentation. --- SimPEG/TensorView.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 909856a4..ba4f1b63 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -26,7 +26,7 @@ class TensorView(object): Optional Input: - :param str imageType: type of image ('CC','N','Fx','Fy','Fz','Ex','Ey','Ez') + :param str imageType: type of image ('CC','N','F','Fx','Fy','Fz','E','Ex','Ey','Ez') or combinations, e.g. ExEy or FxFz :param int figNum: number of figure to plot to :param matplotlib.axes.Axes ax: axis to plot to :param str direction: slice dimensions, 3D only ('x', 'y', 'z') From 26f9b83b76c81e9a000286f844b840f54d7c7f51 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Fri, 18 Oct 2013 14:21:12 -0700 Subject: [PATCH 131/359] Added general getMass method to reduce code duplication. --- SimPEG/DiffOperators.py | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 3b5d8333..666bd98a 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -286,6 +286,49 @@ class DiffOperators(object): _nodalVectorAve = None nodalVectorAve = property(**nodalVectorAve()) + def getMass(self, loc='e', materialProp=None, inv=False): + """ Produces mass matricies. + + Kwargs: + loc (str): 'e' - Average to edges + 'f' faces + materialProp: property to be averaged (see below) + inv (bool): True returns matrix inverse + + Returns: + scipy.sparse.csr.csr_matrix + + materialProp can be: + None -> takes materialProp = 1 (default) + float -> a constant value for entire domain + numpy.ndarray -> if materialProp.size == self.nC + 3D property model + if materialProp.size = self.nCz + 1D (layered eath) property model + """ + if materialProp is None: + materialProp = np.ones(self.nC) + elif type(materialProp) is float: + materialProp = np.ones(self.nC)*materialProp + elif materialProp.shape == (self.nCz,): + materialProp = materialProp.repeat(self.nCx*self.nCy) + materialProp = mkvc(materialProp) + assert materialProp.shape == (self.nC,), "materialProp incorrect shape" + + if loc=='e': + Av = self.edgeAve + elif loc=='f': + Av = self.faceAve + else: + raise ValueError('Invalid loc') + + diag = Av.T * (self.vol * mkvc(materialProp)) + + if inv: + diag = 1/diag + + return sdiag(diag) + def getEdgeMass(self, materialProp=None): """mass matrix for products of edge functions w'*M(materialProp)*e""" if(materialProp is None): From 1f770dfd63482dd21c7385b1949fc16ddbc0c360 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Fri, 18 Oct 2013 14:23:57 -0700 Subject: [PATCH 132/359] Updated getEdgeMass and getFaceMass to use the getMass method. --- SimPEG/DiffOperators.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 666bd98a..86fd35f7 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -329,19 +329,13 @@ class DiffOperators(object): return sdiag(diag) - def getEdgeMass(self, materialProp=None): + def getEdgeMass(self, materialProp=None, inv=False): """mass matrix for products of edge functions w'*M(materialProp)*e""" - if(materialProp is None): - materialProp = np.ones(self.nC) - Av = self.edgeAve - return sdiag(Av.T * (self.vol * mkvc(materialProp))) + return self.getMass(loc='e', materialProp=materialProp, inv=inv) - def getFaceMass(self, materialProp=None): + def getFaceMass(self, materialProp=None, inv=False): """mass matrix for products of face functions w'*M(materialProp)*f""" - if(materialProp is None): - materialProp = np.ones(self.nC) - Av = self.faceAve - return sdiag(Av.T * (self.vol * mkvc(materialProp))) + return self.getMass(loc='f', materialProp=materialProp, inv=inv) def getFaceMassDeriv(self): Av = self.faceAve From 0bebcd48add4b73bb1acf7a01114187bb297d24b Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Fri, 18 Oct 2013 14:32:33 -0700 Subject: [PATCH 133/359] Changed kwarg order for easier use. --- SimPEG/DiffOperators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 86fd35f7..b2a7a6a5 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -286,7 +286,7 @@ class DiffOperators(object): _nodalVectorAve = None nodalVectorAve = property(**nodalVectorAve()) - def getMass(self, loc='e', materialProp=None, inv=False): + def getMass(self, materialProp=None, loc='e', inv=False): """ Produces mass matricies. Kwargs: From 1c3a04f3375386e1645cbc722054f7e084f22828 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Fri, 18 Oct 2013 14:41:26 -0700 Subject: [PATCH 134/359] Changed nomenclature for averaging operators (issue #6) --- SimPEG/DiffOperators.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index b2a7a6a5..88756ad8 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -203,46 +203,46 @@ class DiffOperators(object): _edgeCurl = None edgeCurl = property(**edgeCurl()) - def faceAve(): + def aveF2CC(): doc = "Construct the averaging operator on cell faces to cell centers." def fget(self): - if(self._faceAve is None): + if(self._aveF2CC is None): n = self.n if(self.dim == 1): - self._faceAve = av(n[0]) + self._aveF2CC = av(n[0]) elif(self.dim == 2): - self._faceAve = sp.hstack((sp.kron(speye(n[1]), av(n[0])), + self._aveF2CC = sp.hstack((sp.kron(speye(n[1]), av(n[0])), sp.kron(av(n[1]), speye(n[0]))), format="csr") elif(self.dim == 3): - self._faceAve = sp.hstack((kron3(speye(n[2]), speye(n[1]), av(n[0])), + self._aveF2CC = sp.hstack((kron3(speye(n[2]), speye(n[1]), av(n[0])), kron3(speye(n[2]), av(n[1]), speye(n[0])), kron3(av(n[2]), speye(n[1]), speye(n[0]))), format="csr") - return self._faceAve + return self._aveF2CC return locals() - _faceAve = None - faceAve = property(**faceAve()) + _aveF2CC = None + aveF2CC = property(**aveF2CC()) - def edgeAve(): + def aveE2CC(): doc = "Construct the averaging operator on cell edges to cell centers." def fget(self): - if(self._edgeAve is None): + if(self._aveE2CC is None): # The number of cell centers in each direction n = self.n if(self.dim == 1): raise Exception('Edge Averaging does not make sense in 1D: Use Identity?') elif(self.dim == 2): - self._edgeAve = sp.hstack((sp.kron(av(n[1]), speye(n[0])), + self._aveE2CC = sp.hstack((sp.kron(av(n[1]), speye(n[0])), sp.kron(speye(n[1]), av(n[0]))), format="csr") elif(self.dim == 3): - self._edgeAve = sp.hstack((kron3(av(n[2]), av(n[1]), speye(n[0])), + self._aveE2CC = sp.hstack((kron3(av(n[2]), av(n[1]), speye(n[0])), kron3(av(n[2]), speye(n[1]), av(n[0])), kron3(speye(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._edgeAve + return self._aveE2CC return locals() - _edgeAve = None - edgeAve = property(**edgeAve()) + _aveE2CC = None + aveE2CC = property(**aveE2CC()) def nodalAve(): doc = "Construct the averaging operator on cell nodes to cell centers." @@ -316,9 +316,9 @@ class DiffOperators(object): assert materialProp.shape == (self.nC,), "materialProp incorrect shape" if loc=='e': - Av = self.edgeAve + Av = self.aveE2CC elif loc=='f': - Av = self.faceAve + Av = self.aveF2CC else: raise ValueError('Invalid loc') @@ -338,5 +338,5 @@ class DiffOperators(object): return self.getMass(loc='f', materialProp=materialProp, inv=inv) def getFaceMassDeriv(self): - Av = self.faceAve + Av = self.aveF2CC return Av.T * sdiag(self.vol) From 04dfc83e1a74a2d1c51e21070944fe15476783fc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 18 Oct 2013 15:27:02 -0700 Subject: [PATCH 135/359] documentation and a few more renaming. --- SimPEG/DiffOperators.py | 58 +++++++++++++++---------------- SimPEG/LogicallyOrthogonalMesh.py | 2 +- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 88756ad8..f26252d9 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -244,61 +244,59 @@ class DiffOperators(object): _aveE2CC = None aveE2CC = property(**aveE2CC()) - def nodalAve(): + def aveN2CC(): doc = "Construct the averaging operator on cell nodes to cell centers." def fget(self): - if(self._nodalAve is None): + if(self._aveN2CC is None): # The number of cell centers in each direction n = self.n if(self.dim == 1): - self._nodalAve = av(n[0]) + self._aveN2CC = av(n[0]) elif(self.dim == 2): - self._nodalAve = sp.hstack((sp.kron(av(n[1]), av(n[0])), - sp.kron(av(n[1]), av(n[0]))), format="csr") + self._aveN2CC = sp.hstack((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") elif(self.dim == 3): - self._nodalAve = sp.hstack((kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._nodalAve + self._aveN2CC = sp.hstack((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._aveN2CC return locals() - _nodalAve = None - nodalAve = property(**nodalAve()) + _aveN2CC = None + aveN2CC = property(**aveN2CC()) - def nodalVectorAve(): + def aveN2CCv(): doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension separate." def fget(self): - if(self._nodalVectorAve is None): + if(self._aveN2CCv is None): # The number of cell centers in each direction n = self.n if(self.dim == 1): - self._nodalVectorAve = av(n[0]) + self._aveN2CCv = av(n[0]) elif(self.dim == 2): - self._nodalVectorAve = sp.block_diag((sp.kron(av(n[1]), av(n[0])), - sp.kron(av(n[1]), av(n[0]))), format="csr") + self._aveN2CCv = sp.block_diag((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") elif(self.dim == 3): - self._nodalVectorAve = sp.block_diag((kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._nodalVectorAve + self._aveN2CCv = sp.block_diag((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._aveN2CCv return locals() - _nodalVectorAve = None - nodalVectorAve = property(**nodalVectorAve()) + _aveN2CCv = None + aveN2CCv = property(**aveN2CCv()) def getMass(self, materialProp=None, loc='e', inv=False): """ Produces mass matricies. - Kwargs: - loc (str): 'e' - Average to edges - 'f' faces - materialProp: property to be averaged (see below) - inv (bool): True returns matrix inverse + :param str loc: Average to location: 'e'-edges, 'f'-faces + :param None,float,numpy.ndarray materialProp: property to be averaged (see below) + :param bool inv: True returns matrix inverse + :rtype: scipy.sparse.csr.csr_matrix + :return: M, the mass matrix - Returns: - scipy.sparse.csr.csr_matrix + materialProp can be:: - materialProp can be: None -> takes materialProp = 1 (default) float -> a constant value for entire domain numpy.ndarray -> if materialProp.size == self.nC diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 07c37255..5d2b7ffa 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -45,7 +45,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): def fget(self): if self._gridCC is None: - ccV = (self.nodalVectorAve*mkvc(self.gridN)) + ccV = (self.aveN2CCv*mkvc(self.gridN)) self._gridCC = ccV.reshape((-1, self.dim), order='F') return self._gridCC return locals() From e56e5cbf05986bd5b8507bde3a5f3bce26511b73 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 18 Oct 2013 17:04:23 -0700 Subject: [PATCH 136/359] Removed inversion option. --- SimPEG/DiffOperators.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index f26252d9..110fe9bd 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -286,12 +286,11 @@ class DiffOperators(object): _aveN2CCv = None aveN2CCv = property(**aveN2CCv()) - def getMass(self, materialProp=None, loc='e', inv=False): + def getMass(self, materialProp=None, loc='e'): """ Produces mass matricies. :param str loc: Average to location: 'e'-edges, 'f'-faces :param None,float,numpy.ndarray materialProp: property to be averaged (see below) - :param bool inv: True returns matrix inverse :rtype: scipy.sparse.csr.csr_matrix :return: M, the mass matrix @@ -322,18 +321,15 @@ class DiffOperators(object): diag = Av.T * (self.vol * mkvc(materialProp)) - if inv: - diag = 1/diag - return sdiag(diag) - def getEdgeMass(self, materialProp=None, inv=False): + def getEdgeMass(self, materialProp=None): """mass matrix for products of edge functions w'*M(materialProp)*e""" - return self.getMass(loc='e', materialProp=materialProp, inv=inv) + return self.getMass(loc='e', materialProp=materialProp) - def getFaceMass(self, materialProp=None, inv=False): + def getFaceMass(self, materialProp=None): """mass matrix for products of face functions w'*M(materialProp)*f""" - return self.getMass(loc='f', materialProp=materialProp, inv=inv) + return self.getMass(loc='f', materialProp=materialProp) def getFaceMassDeriv(self): Av = self.aveF2CC From db694dd780331f16c9d7d000ce2babce1877f5dc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 18 Oct 2013 17:22:13 -0700 Subject: [PATCH 137/359] moved to mesh folder. --- SimPEG/TensorView.py | 2 +- SimPEG/__init__.py | 3 +- SimPEG/forward/DCProblem/DCProblem.py | 2 +- SimPEG/{ => mesh}/BaseMesh.py | 2 +- SimPEG/mesh/DiffOperators.py | 336 +++++++++++++++++++ SimPEG/{ => mesh}/InnerProducts.py | 0 SimPEG/{ => mesh}/LogicallyOrthogonalMesh.py | 2 +- SimPEG/{ => mesh}/LomView.py | 2 +- SimPEG/{ => mesh}/TensorMesh.py | 2 +- SimPEG/mesh/TensorView.py | 335 ++++++++++++++++++ SimPEG/mesh/__init__.py | 8 + SimPEG/tests/TestUtils.py | 3 +- SimPEG/tests/test_LogicallyOrthogonalMesh.py | 7 +- SimPEG/tests/test_basemesh.py | 3 +- SimPEG/tests/test_forward_DCproblem.py | 2 +- SimPEG/tests/test_forward_problem.py | 2 +- SimPEG/tests/test_tensorMesh.py | 2 +- SimPEG/utils/ModelBuilder.py | 3 +- docs/api_BaseMesh.rst | 2 +- docs/api_DiffOperators.rst | 2 +- docs/api_InnerProducts.rst | 2 +- docs/api_LOMView.rst | 2 +- docs/api_LogicallyOrthogonalMesh.rst | 2 +- docs/api_TensorMesh.rst | 2 +- docs/api_TensorView.rst | 2 +- 25 files changed, 703 insertions(+), 27 deletions(-) rename SimPEG/{ => mesh}/BaseMesh.py (99%) create mode 100644 SimPEG/mesh/DiffOperators.py rename SimPEG/{ => mesh}/InnerProducts.py (100%) rename SimPEG/{ => mesh}/LogicallyOrthogonalMesh.py (99%) rename SimPEG/{ => mesh}/LomView.py (99%) rename SimPEG/{ => mesh}/TensorMesh.py (96%) create mode 100644 SimPEG/mesh/TensorView.py create mode 100644 SimPEG/mesh/__init__.py diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index ba4f1b63..687a520d 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt import matplotlib from mpl_toolkits.mplot3d import Axes3D -from utils import mkvc +from SimPEG.utils import mkvc class TensorView(object): diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index ea9faf33..e8946f88 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,5 +1,4 @@ -from TensorMesh import TensorMesh -from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh +import mesh import utils import inverse from Solver import Solver diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py index b8115598..1df8897b 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -1,4 +1,4 @@ -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh from SimPEG.forward import Problem, SyntheticProblem from SimPEG.tests import checkDerivative from SimPEG.utils import ModelBuilder, sdiag diff --git a/SimPEG/BaseMesh.py b/SimPEG/mesh/BaseMesh.py similarity index 99% rename from SimPEG/BaseMesh.py rename to SimPEG/mesh/BaseMesh.py index c57828e9..29c43dd1 100644 --- a/SimPEG/BaseMesh.py +++ b/SimPEG/mesh/BaseMesh.py @@ -1,5 +1,5 @@ import numpy as np -from utils import mkvc +from SimPEG.utils import mkvc class BaseMesh(object): diff --git a/SimPEG/mesh/DiffOperators.py b/SimPEG/mesh/DiffOperators.py new file mode 100644 index 00000000..110fe9bd --- /dev/null +++ b/SimPEG/mesh/DiffOperators.py @@ -0,0 +1,336 @@ +import numpy as np +from scipy import sparse as sp +from SimPEG.utils import mkvc, sdiag, speye, kron3, spzeros + + +def ddx(n): + """Define 1D derivatives, inner, this means we go from n+1 to n+1""" + return sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format="csr") + + +def checkBC(bc): + """ Checks if boundary condition 'bc' is valid. """ + if(type(bc) is str): + bc = [bc, bc] + assert type(bc) is list, 'bc must be a list' + assert len(bc) == 2, 'bc must have two elements' + + for bc_i in bc: + assert type(bc_i) is str, "each bc must be a string" + assert bc_i in ['dirichlet', 'neumann'], "each bc must be either, 'dirichlet' or 'neumann'" + return bc + + +def ddxCellGrad(n, bc): + """Create 1D derivative operator from cell-centres to nodes this means we go from n to n+1""" + bc = checkBC(bc) + + D = sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [-1, 0], n+1, n, format="csr") + # Set the first side + if(bc[0] == 'dirichlet'): + D[0, 0] = 2 + elif(bc[0] == 'neumann'): + D[0, 0] = 0 + # Set the second side + if(bc[1] == 'dirichlet'): + D[-1, -1] = -2 + elif(bc[1] == 'neumann'): + D[-1, -1] = 0 + return D + + +def av(n): + """Define 1D averaging operator from cell-centres to nodes.""" + return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr") + + +class DiffOperators(object): + """ + Class creates the differential operators that you need! + """ + def __init__(self): + raise Exception('DiffOperators is a base class providing differential operators on meshes and cannot run on its own. Inherit to your favorite Mesh class.') + + def faceDiv(): + doc = "Construct divergence operator (face-stg to cell-centres)." + + def fget(self): + if(self._faceDiv is None): + # The number of cell centers in each direction + n = self.n + # Compute faceDivergence operator on faces + if(self.dim == 1): + D = ddx(n[0]) + elif(self.dim == 2): + D1 = sp.kron(speye(n[1]), ddx(n[0])) + D2 = sp.kron(ddx(n[1]), speye(n[0])) + D = sp.hstack((D1, D2), format="csr") + elif(self.dim == 3): + D1 = kron3(speye(n[2]), speye(n[1]), ddx(n[0])) + D2 = kron3(speye(n[2]), ddx(n[1]), speye(n[0])) + D3 = kron3(ddx(n[2]), speye(n[1]), speye(n[0])) + D = sp.hstack((D1, D2, D3), format="csr") + # Compute areas of cell faces & volumes + S = self.area + V = self.vol + self._faceDiv = sdiag(1/V)*D*sdiag(S) + + return self._faceDiv + return locals() + _faceDiv = None + faceDiv = property(**faceDiv()) + + def nodalGrad(): + doc = "Construct gradient operator (nodes to edges)." + + def fget(self): + if(self._nodalGrad is None): + # The number of cell centers in each direction + n = self.n + # Compute divergence operator on faces + if(self.dim == 1): + G = ddx(n[0]) + elif(self.dim == 2): + D1 = sp.kron(speye(n[1]+1), ddx(n[0])) + D2 = sp.kron(ddx(n[1]), speye(n[0]+1)) + G = sp.vstack((D1, D2), format="csr") + elif(self.dim == 3): + D1 = kron3(speye(n[2]+1), speye(n[1]+1), ddx(n[0])) + D2 = kron3(speye(n[2]+1), ddx(n[1]), speye(n[0]+1)) + D3 = kron3(ddx(n[2]), speye(n[1]+1), speye(n[0]+1)) + G = sp.vstack((D1, D2, D3), format="csr") + # Compute lengths of cell edges + L = self.edge + self._nodalGrad = sdiag(1/L)*G + return self._nodalGrad + return locals() + _nodalGrad = None + nodalGrad = property(**nodalGrad()) + + def setCellGradBC(self, BC): + """ + Function that sets the boundary conditions for cell-centred derivative operators. + + Examples:: + + BC = 'neumann' # Neumann in all directions + BC = ['neumann', 'dirichlet', 'neumann'] # 3D, Dirichlet in y Neumann else + BC = [['neumann', 'dirichlet'], 'dirichlet', 'dirichlet'] # 3D, Neumann in x on bottom of domain, + # Dirichlet else + + """ + if(type(BC) is str): + BC = [BC for _ in self.n] # Repeat the str self.dim times + elif(type(BC) is list): + assert len(BC) == self.dim, 'BC list must be the size of your mesh' + else: + raise Exception("BC must be a str or a list.") + + for i, bc_i in enumerate(BC): + BC[i] = checkBC(bc_i) + + self._cellGrad = None # ensure we create a new gradient next time we call it + self._cellGradBC = BC + return BC + _cellGradBC = 'neumann' + + def cellGrad(): + doc = "The cell centered Gradient, takes you to cell faces." + + def fget(self): + if(self._cellGrad is None): + BC = self.setCellGradBC(self._cellGradBC) + n = self.n + if(self.dim == 1): + G = ddxCellGrad(n[0], BC[0]) + elif(self.dim == 2): + G1 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC[0])) + G2 = sp.kron(ddxCellGrad(n[1], BC[1]), speye(n[0])) + G = sp.vstack((G1, G2), format="csr") + elif(self.dim == 3): + G1 = kron3(speye(n[2]), speye(n[1]), ddxCellGrad(n[0], BC[0])) + G2 = kron3(speye(n[2]), ddxCellGrad(n[1], BC[1]), speye(n[0])) + G3 = kron3(ddxCellGrad(n[2], BC[2]), speye(n[1]), speye(n[0])) + G = sp.vstack((G1, G2, G3), format="csr") + # Compute areas of cell faces & volumes + S = self.area + V = self.vol + self._cellGrad = sdiag(S)*G*sdiag(1/V) + return self._cellGrad + return locals() + _cellGrad = None + cellGrad = property(**cellGrad()) + + def edgeCurl(): + doc = "Construct the 3D curl operator." + + def fget(self): + if(self._edgeCurl is None): + # The number of cell centers in each direction + n1 = self.nCx + n2 = self.nCy + n3 = self.nCz + + # Compute lengths of cell edges + L = self.edge + + # Compute areas of cell faces + S = self.area + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + + D32 = kron3(d3, speye(n2), speye(n1+1)) + D23 = kron3(speye(n3), d2, speye(n1+1)) + D31 = kron3(d3, speye(n2+1), speye(n1)) + D13 = kron3(speye(n3), speye(n2+1), d1) + D21 = kron3(speye(n3+1), d2, speye(n1)) + D12 = kron3(speye(n3+1), speye(n2), d1) + + O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) + O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) + O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) + + C = sp.vstack((sp.hstack((O1, -D32, D23)), + sp.hstack((D31, O2, -D13)), + sp.hstack((-D21, D12, O3))), format="csr") + + self._edgeCurl = sdiag(1/S)*(C*sdiag(L)) + return self._edgeCurl + return locals() + _edgeCurl = None + edgeCurl = property(**edgeCurl()) + + def aveF2CC(): + doc = "Construct the averaging operator on cell faces to cell centers." + + def fget(self): + if(self._aveF2CC is None): + n = self.n + if(self.dim == 1): + self._aveF2CC = av(n[0]) + elif(self.dim == 2): + self._aveF2CC = sp.hstack((sp.kron(speye(n[1]), av(n[0])), + sp.kron(av(n[1]), speye(n[0]))), format="csr") + elif(self.dim == 3): + self._aveF2CC = sp.hstack((kron3(speye(n[2]), speye(n[1]), av(n[0])), + kron3(speye(n[2]), av(n[1]), speye(n[0])), + kron3(av(n[2]), speye(n[1]), speye(n[0]))), format="csr") + return self._aveF2CC + return locals() + _aveF2CC = None + aveF2CC = property(**aveF2CC()) + + def aveE2CC(): + doc = "Construct the averaging operator on cell edges to cell centers." + + def fget(self): + if(self._aveE2CC is None): + # The number of cell centers in each direction + n = self.n + if(self.dim == 1): + raise Exception('Edge Averaging does not make sense in 1D: Use Identity?') + elif(self.dim == 2): + self._aveE2CC = sp.hstack((sp.kron(av(n[1]), speye(n[0])), + sp.kron(speye(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._aveE2CC = sp.hstack((kron3(av(n[2]), av(n[1]), speye(n[0])), + kron3(av(n[2]), speye(n[1]), av(n[0])), + kron3(speye(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._aveE2CC + return locals() + _aveE2CC = None + aveE2CC = property(**aveE2CC()) + + def aveN2CC(): + doc = "Construct the averaging operator on cell nodes to cell centers." + + def fget(self): + if(self._aveN2CC is None): + # The number of cell centers in each direction + n = self.n + if(self.dim == 1): + self._aveN2CC = av(n[0]) + elif(self.dim == 2): + self._aveN2CC = sp.hstack((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._aveN2CC = sp.hstack((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._aveN2CC + return locals() + _aveN2CC = None + aveN2CC = property(**aveN2CC()) + + def aveN2CCv(): + doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension separate." + + def fget(self): + if(self._aveN2CCv is None): + # The number of cell centers in each direction + n = self.n + if(self.dim == 1): + self._aveN2CCv = av(n[0]) + elif(self.dim == 2): + self._aveN2CCv = sp.block_diag((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._aveN2CCv = sp.block_diag((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._aveN2CCv + return locals() + _aveN2CCv = None + aveN2CCv = property(**aveN2CCv()) + + def getMass(self, materialProp=None, loc='e'): + """ Produces mass matricies. + + :param str loc: Average to location: 'e'-edges, 'f'-faces + :param None,float,numpy.ndarray materialProp: property to be averaged (see below) + :rtype: scipy.sparse.csr.csr_matrix + :return: M, the mass matrix + + materialProp can be:: + + None -> takes materialProp = 1 (default) + float -> a constant value for entire domain + numpy.ndarray -> if materialProp.size == self.nC + 3D property model + if materialProp.size = self.nCz + 1D (layered eath) property model + """ + if materialProp is None: + materialProp = np.ones(self.nC) + elif type(materialProp) is float: + materialProp = np.ones(self.nC)*materialProp + elif materialProp.shape == (self.nCz,): + materialProp = materialProp.repeat(self.nCx*self.nCy) + materialProp = mkvc(materialProp) + assert materialProp.shape == (self.nC,), "materialProp incorrect shape" + + if loc=='e': + Av = self.aveE2CC + elif loc=='f': + Av = self.aveF2CC + else: + raise ValueError('Invalid loc') + + diag = Av.T * (self.vol * mkvc(materialProp)) + + return sdiag(diag) + + def getEdgeMass(self, materialProp=None): + """mass matrix for products of edge functions w'*M(materialProp)*e""" + return self.getMass(loc='e', materialProp=materialProp) + + def getFaceMass(self, materialProp=None): + """mass matrix for products of face functions w'*M(materialProp)*f""" + return self.getMass(loc='f', materialProp=materialProp) + + def getFaceMassDeriv(self): + Av = self.aveF2CC + return Av.T * sdiag(self.vol) diff --git a/SimPEG/InnerProducts.py b/SimPEG/mesh/InnerProducts.py similarity index 100% rename from SimPEG/InnerProducts.py rename to SimPEG/mesh/InnerProducts.py diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/mesh/LogicallyOrthogonalMesh.py similarity index 99% rename from SimPEG/LogicallyOrthogonalMesh.py rename to SimPEG/mesh/LogicallyOrthogonalMesh.py index 5d2b7ffa..7b1e1bca 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/mesh/LogicallyOrthogonalMesh.py @@ -3,7 +3,7 @@ from BaseMesh import BaseMesh from DiffOperators import DiffOperators from InnerProducts import InnerProducts from LomView import LomView -from utils import mkvc, ndgrid, volTetra, indexCube, faceInfo +from SimPEG.utils import mkvc, ndgrid, volTetra, indexCube, faceInfo # Some helper functions. length2D = lambda x: (x[:, 0]**2 + x[:, 1]**2)**0.5 diff --git a/SimPEG/LomView.py b/SimPEG/mesh/LomView.py similarity index 99% rename from SimPEG/LomView.py rename to SimPEG/mesh/LomView.py index 4b4f36a3..2a9b242b 100644 --- a/SimPEG/LomView.py +++ b/SimPEG/mesh/LomView.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt import matplotlib from mpl_toolkits.mplot3d import Axes3D -from utils import mkvc +from SimPEG.utils import mkvc class LomView(object): diff --git a/SimPEG/TensorMesh.py b/SimPEG/mesh/TensorMesh.py similarity index 96% rename from SimPEG/TensorMesh.py rename to SimPEG/mesh/TensorMesh.py index 2015838c..a3329c14 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -3,7 +3,7 @@ from BaseMesh import BaseMesh from TensorView import TensorView from DiffOperators import DiffOperators from InnerProducts import InnerProducts -from utils import ndgrid, mkvc +from SimPEG.utils import ndgrid, mkvc class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): diff --git a/SimPEG/mesh/TensorView.py b/SimPEG/mesh/TensorView.py new file mode 100644 index 00000000..687a520d --- /dev/null +++ b/SimPEG/mesh/TensorView.py @@ -0,0 +1,335 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib +from mpl_toolkits.mplot3d import Axes3D +from SimPEG.utils import mkvc + + +class TensorView(object): + """ + Provides viewing functions for TensorMesh + + This class is inherited by TensorMesh + """ + def __init__(self): + pass + + def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True,annotationColor='w',showIt=False): + """ + Mesh.plotImage(I) + + Plots scalar fields on the given mesh. + + Input: + + :param numpy.array I: scalar field + + Optional Input: + + :param str imageType: type of image ('CC','N','F','Fx','Fy','Fz','E','Ex','Ey','Ez') or combinations, e.g. ExEy or FxFz + :param int figNum: number of figure to plot to + :param matplotlib.axes.Axes ax: axis to plot to + :param str direction: slice dimensions, 3D only ('x', 'y', 'z') + :param bool numbering: show numbering of slices, 3D only + :param str annotationColor: color of annotation, e.g. 'w', 'k', 'b' + :param bool showIt: call plt.show() + + .. plot:: examples/mesh/plot_image_2D.py + :include-source: + + .. plot:: examples/mesh/plot_image_3D.py + :include-source: + """ + assert type(I) == np.ndarray, "I must be a numpy array" + assert type(numbering) == bool, "numbering must be a bool" + assert direction in ["x", "y","z"], "direction must be either x,y, or z" + + + if imageType == 'CC': + assert I.size == self.nC, "Incorrect dimensions for CC." + elif imageType == 'N': + assert I.size == self.nN, "Incorrect dimensions for N." + elif imageType == 'Fx': + if I.size != np.prod(self.nFx): I, fy, fz = self.r(I,'F','F','M') + elif imageType == 'Fy': + if I.size != np.prod(self.nFy): fx, I, fz = self.r(I,'F','F','M') + elif imageType == 'Fz': + if I.size != np.prod(self.nFz): fx, fy, I = self.r(I,'F','F','M') + elif imageType == 'Ex': + if I.size != np.prod(self.nEx): I, ey, ez = self.r(I,'E','E','M') + elif imageType == 'Ey': + if I.size != np.prod(self.nEy): ex, I, ez = self.r(I,'E','E','M') + elif imageType == 'Ez': + if I.size != np.prod(self.nEz): ex, ey, I = self.r(I,'E','E','M') + elif imageType[0] == 'E': + plotAll = len(imageType) == 1 + options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} + fig = plt.figure(figNum) + # Determine the subplot number: 131, 121 + numPlots = 130 if plotAll else len(imageType)/2*10+100 + pltNum = 1 + ex, ey, ez = self.r(I,'E','E','M') + if plotAll or 'Ex' in imageType: + ax_x = plt.subplot(numPlots+pltNum) + self.plotImage(ex, imageType='Ex', ax=ax_x, **options) + pltNum +=1 + if plotAll or 'Ey' in imageType: + ax_y = plt.subplot(numPlots+pltNum) + self.plotImage(ey, imageType='Ey', ax=ax_y, **options) + pltNum +=1 + if plotAll or 'Ez' in imageType: + ax_z = plt.subplot(numPlots+pltNum) + self.plotImage(ez, imageType='Ez', ax=ax_z, **options) + pltNum +=1 + return + elif imageType[0] == 'F': + plotAll = len(imageType) == 1 + options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} + fig = plt.figure(figNum) + # Determine the subplot number: 131, 121 + numPlots = 130 if plotAll else len(imageType)/2*10+100 + pltNum = 1 + fx, fy, fz = self.r(I,'F','F','M') + if plotAll or 'Fx' in imageType: + ax_x = plt.subplot(numPlots+pltNum) + self.plotImage(fx, imageType='Fx', ax=ax_x, **options) + pltNum +=1 + if plotAll or 'Fy' in imageType: + ax_y = plt.subplot(numPlots+pltNum) + self.plotImage(fy, imageType='Fy', ax=ax_y, **options) + pltNum +=1 + if plotAll or 'Fz' in imageType: + ax_z = plt.subplot(numPlots+pltNum) + self.plotImage(fz, imageType='Fz', ax=ax_z, **options) + pltNum +=1 + return + else: + raise Exception("imageType must be 'CC', 'N','Fx','Fy','Fz','Ex','Ey','Ez'") + + + if ax is None: + fig = plt.figure(figNum) + fig.clf() + ax = plt.subplot(111) + else: + assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!" + fig = ax.figure + + if self.dim == 1: + if imageType == 'CC': + ph = ax.plot(self.vectorCCx, I, '-ro') + elif imageType == 'N': + ph = ax.plot(self.vectorNx, I, '-bs') + ax.set_xlabel("x") + ax.axis('tight') + elif self.dim == 2: + if imageType == 'CC': + C = I[:].reshape(self.n, order='F') + elif imageType == 'N': + C = I[:].reshape(self.n+1, order='F') + C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) + elif imageType == 'Fx': + C = I[:].reshape(self.nFx, order='F') + C = 0.5*(C[:-1, :] + C[1:, :] ) + elif imageType == 'Fy': + C = I[:].reshape(self.nFy, order='F') + C = 0.5*(C[:, :-1] + C[:, 1:] ) + elif imageType == 'Ex': + C = I[:].reshape(self.nEx, order='F') + C = 0.5*(C[:,:-1] + C[:,1:] ) + elif imageType == 'Ey': + C = I[:].reshape(self.nEy, order='F') + C = 0.5*(C[:-1,:] + C[1:,:] ) + + ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) + ax.axis('tight') + ax.set_xlabel("x") + ax.set_ylabel("y") + + elif self.dim == 3: + if direction == 'z': + + # get copy of image and average to cell-centres is necessary + if imageType == 'CC': + Ic = I[:].reshape(self.n, order='F') + elif imageType == 'N': + Ic = I[:].reshape(self.n+1, order='F') + Ic = .125*(Ic[:-1,:-1,:-1]+Ic[1:,:-1,:-1] + Ic[:-1,1:,:-1]+ Ic[1:,1:,:-1]+ Ic[:-1,:-1,1:]+Ic[1:,:-1,1:] + Ic[:-1,1:,1:]+ Ic[1:,1:,1:] ) + elif imageType == 'Fx': + Ic = I[:].reshape(self.nFx, order='F') + Ic = .5*(Ic[:-1,:,:]+Ic[1:,:,:]) + elif imageType == 'Fy': + Ic = I[:].reshape(self.nFy, order='F') + Ic = .5*(Ic[:,:-1,:]+Ic[:,1:,:]) + elif imageType == 'Fz': + Ic = I[:].reshape(self.nFz, order='F') + Ic = .5*(Ic[:,:,:-1]+Ic[:,:,1:]) + elif imageType == 'Ex': + Ic = I[:].reshape(self.nEx, order='F') + Ic = .25*(Ic[:,:-1,:-1]+Ic[:,1:,:-1]+Ic[:,:-1,1:]+Ic[:,1:,:1]) + elif imageType == 'Ey': + Ic = I[:].reshape(self.nEy, order='F') + Ic = .25*(Ic[:-1,:,:-1]+Ic[1:,:,:-1]+Ic[:-1,:,1:]+Ic[1:,:,:1]) + elif imageType == 'Ez': + Ic = I[:].reshape(self.nEz, order='F') + Ic = .25*(Ic[:-1,:-1,:]+Ic[1:,:-1,:]+Ic[:-1,1:,:]+Ic[1:,:1,:]) + + # determine number oE slices in x and y dimension + nX = np.ceil(np.sqrt(self.nCz)) + nY = np.ceil(self.nCz/nX) + + # allocate space for montage + nCx = self.nCx + nCy = self.nCy + + C = np.zeros((nX*nCx,nY*nCy)) + + for iy in range(int(nY)): + for ix in range(int(nX)): + iz = ix + iy*nX + if iz < self.nCz: + C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = Ic[:, :, iz] + else: + C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = np.nan + + C = np.ma.masked_where(np.isnan(C), C) + xx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), self.hx).ravel())] + yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())] + # Plot the mesh + ph = ax.pcolormesh(xx, yy, C.T) + # Plot the lines + gx = np.arange(nX+1)*(self.vectorNx[-1]-self.x0[0]) + gy = np.arange(nY+1)*(self.vectorNy[-1]-self.x0[1]) + # Repeat and seperate with NaN + gxX = np.c_[gx, gx, gx+np.nan].ravel() + gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() + gyX = np.kron(np.ones((nY+1, 1)), np.array([0, sum(self.hx)*nX, np.nan])).ravel() + gyY = np.c_[gy, gy, gy+np.nan].ravel() + ax.plot(gxX, gxY, annotationColor+'-', linewidth=2) + ax.plot(gyX, gyY, annotationColor+'-', linewidth=2) + ax.axis('tight') + + if numbering: + pad = np.sum(self.hx)*0.04 + for iy in range(int(nY)): + for ix in range(int(nX)): + iz = ix + iy*nX + if iz < self.nCz: + ax.text((ix+1)*(self.vectorNx[-1]-self.x0[0])-pad,(iy)*(self.vectorNy[-1]-self.x0[1])+pad, + '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') + + ax.set_title(imageType) + if showIt: plt.show() + return ph + + def plotGrid(self, nodes=False, faces=False, centers=False, edges=False, lines=True, showIt=False): + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. + + :param bool nodes: plot nodes + :param bool faces: plot faces + :param bool centers: plot centers + :param bool edges: plot edges + :param bool lines: plot lines connecting nodes + :param bool showIt: call plt.show() + + .. plot:: examples/mesh/plot_grid_2D.py + :include-source: + + .. plot:: examples/mesh/plot_grid_3D.py + :include-source: + """ + if self.dim == 1: + fig = plt.figure(1) + fig.clf() + ax = plt.subplot(111) + xn = self.gridN + xc = self.gridCC + ax.hold(True) + ax.plot(xn, np.ones(np.shape(xn)), 'bs') + ax.plot(xc, np.ones(np.shape(xc)), 'ro') + ax.plot(xn, np.ones(np.shape(xn)), 'k--') + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + if showIt: plt.show() + elif self.dim == 2: + fig = plt.figure(2) + fig.clf() + ax = plt.subplot(111) + xn = self.gridN + xc = self.gridCC + xs1 = self.gridFx + xs2 = self.gridFy + + ax.hold(True) + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs') + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro') + if faces: + ax.plot(xs1[:, 0], xs1[:, 1], 'g>') + ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + + # Plot the grid lines + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() + X = np.r_[X1, X2] + Y = np.r_[Y1, Y2] + plt.plot(X, Y) + + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + if showIt: plt.show() + elif self.dim == 3: + fig = plt.figure(3) + fig.clf() + ax = fig.add_subplot(111, projection='3d') + xn = self.gridN + xc = self.gridCC + xfs1 = self.gridFx + xfs2 = self.gridFy + xfs3 = self.gridFz + + xes1 = self.gridEx + xes2 = self.gridEy + xes3 = self.gridEz + + ax.hold(True) + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) + if faces: + ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) + ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) + ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) + if edges: + ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) + ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) + ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) + + # Plot the grid lines + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() + Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() + Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() + X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() + Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() + Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() + X = np.r_[X1, X2, X3] + Y = np.r_[Y1, Y2, Y3] + Z = np.r_[Z1, Z2, Z3] + plt.plot(X, Y, 'b-', zs=Z) + + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + ax.set_zlabel('x3') + if showIt: plt.show() diff --git a/SimPEG/mesh/__init__.py b/SimPEG/mesh/__init__.py new file mode 100644 index 00000000..9179efca --- /dev/null +++ b/SimPEG/mesh/__init__.py @@ -0,0 +1,8 @@ +from TensorMesh import TensorMesh +from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh +from BaseMesh import BaseMesh +from TensorView import TensorView +from LomView import LomView +from InnerProducts import InnerProducts +from DiffOperators import DiffOperators + diff --git a/SimPEG/tests/TestUtils.py b/SimPEG/tests/TestUtils.py index 79340da7..9b2158c4 100644 --- a/SimPEG/tests/TestUtils.py +++ b/SimPEG/tests/TestUtils.py @@ -2,7 +2,8 @@ import numpy as np import matplotlib.pyplot as plt from pylab import norm from SimPEG.utils import mkvc -from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh +from SimPEG import utils +from SimPEG.mesh import TensorMesh, LogicallyOrthogonalMesh import numpy as np import unittest diff --git a/SimPEG/tests/test_LogicallyOrthogonalMesh.py b/SimPEG/tests/test_LogicallyOrthogonalMesh.py index 523b18d2..7f656aae 100644 --- a/SimPEG/tests/test_LogicallyOrthogonalMesh.py +++ b/SimPEG/tests/test_LogicallyOrthogonalMesh.py @@ -1,10 +1,7 @@ import numpy as np import unittest -import sys -sys.path.append('../') -from TensorMesh import TensorMesh -from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh -from utils import ndgrid +from SimPEG.mesh import TensorMesh, LogicallyOrthogonalMesh +from SimPEG.utils import ndgrid class BasicLOMTests(unittest.TestCase): diff --git a/SimPEG/tests/test_basemesh.py b/SimPEG/tests/test_basemesh.py index 60373011..5762de57 100644 --- a/SimPEG/tests/test_basemesh.py +++ b/SimPEG/tests/test_basemesh.py @@ -1,7 +1,6 @@ import unittest import sys -sys.path.append('../') -from BaseMesh import BaseMesh +from SimPEG.mesh import BaseMesh import numpy as np diff --git a/SimPEG/tests/test_forward_DCproblem.py b/SimPEG/tests/test_forward_DCproblem.py index b5e6d844..6ffa4650 100644 --- a/SimPEG/tests/test_forward_DCproblem.py +++ b/SimPEG/tests/test_forward_DCproblem.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh from SimPEG.utils import ModelBuilder, sdiag from SimPEG.forward import Problem, SyntheticProblem from SimPEG.forward.DCProblem import DCProblem, DCutils diff --git a/SimPEG/tests/test_forward_problem.py b/SimPEG/tests/test_forward_problem.py index b7180dca..d913a697 100644 --- a/SimPEG/tests/test_forward_problem.py +++ b/SimPEG/tests/test_forward_problem.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh from SimPEG.forward import Problem from TestUtils import checkDerivative from scipy.sparse.linalg import dsolve diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index 300e6634..9544dab6 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh from TestUtils import OrderTest from scipy.sparse.linalg import dsolve diff --git a/SimPEG/utils/ModelBuilder.py b/SimPEG/utils/ModelBuilder.py index 170da1bf..d0512680 100644 --- a/SimPEG/utils/ModelBuilder.py +++ b/SimPEG/utils/ModelBuilder.py @@ -15,6 +15,7 @@ def getIndecesBlock(p0,p1,ccMesh): ccMesh represents the cell-centered mesh The points p0 and p1 must live in the the same dimensional space as the mesh. + """ # Validation: p0 and p1 live in the same dimensional space @@ -131,7 +132,7 @@ def scalarConductivity(ccMesh,pFunction): if __name__ == '__main__': - from SimPEG import TensorMesh + from SimPEG.mesh import TensorMesh from matplotlib import pyplot as plt # Define the mesh diff --git a/docs/api_BaseMesh.rst b/docs/api_BaseMesh.rst index 66249953..e5f81299 100644 --- a/docs/api_BaseMesh.rst +++ b/docs/api_BaseMesh.rst @@ -3,6 +3,6 @@ Base Mesh ********* -.. automodule:: SimPEG.BaseMesh +.. automodule:: SimPEG.mesh.BaseMesh :members: :undoc-members: diff --git a/docs/api_DiffOperators.rst b/docs/api_DiffOperators.rst index 57763a33..022fe564 100644 --- a/docs/api_DiffOperators.rst +++ b/docs/api_DiffOperators.rst @@ -3,6 +3,6 @@ Differential Operators ********************** -.. automodule:: SimPEG.DiffOperators +.. automodule:: SimPEG.mesh.DiffOperators :members: :undoc-members: diff --git a/docs/api_InnerProducts.rst b/docs/api_InnerProducts.rst index 6dfd2a77..90642807 100644 --- a/docs/api_InnerProducts.rst +++ b/docs/api_InnerProducts.rst @@ -3,6 +3,6 @@ Inner Products ************** -.. automodule:: SimPEG.InnerProducts +.. automodule:: SimPEG.mesh.InnerProducts :members: :undoc-members: diff --git a/docs/api_LOMView.rst b/docs/api_LOMView.rst index 61630c26..cfbfa6fa 100644 --- a/docs/api_LOMView.rst +++ b/docs/api_LOMView.rst @@ -3,6 +3,6 @@ LOM View ******** -.. automodule:: SimPEG.LomView +.. automodule:: SimPEG.mesh.LomView :members: :undoc-members: diff --git a/docs/api_LogicallyOrthogonalMesh.rst b/docs/api_LogicallyOrthogonalMesh.rst index 3b8296d7..af9e73d0 100644 --- a/docs/api_LogicallyOrthogonalMesh.rst +++ b/docs/api_LogicallyOrthogonalMesh.rst @@ -3,6 +3,6 @@ Logically Orthogonal Mesh ************************* -.. automodule:: SimPEG.LogicallyOrthogonalMesh +.. automodule:: SimPEG.mesh.LogicallyOrthogonalMesh :members: :undoc-members: diff --git a/docs/api_TensorMesh.rst b/docs/api_TensorMesh.rst index 9eb346cb..36fb925d 100644 --- a/docs/api_TensorMesh.rst +++ b/docs/api_TensorMesh.rst @@ -3,6 +3,6 @@ Tensor Mesh *********** -.. automodule:: SimPEG.TensorMesh +.. automodule:: SimPEG.mesh.TensorMesh :members: :undoc-members: diff --git a/docs/api_TensorView.rst b/docs/api_TensorView.rst index 6ae80276..c6b5a9b8 100644 --- a/docs/api_TensorView.rst +++ b/docs/api_TensorView.rst @@ -3,6 +3,6 @@ Tensor View *********** -.. automodule:: SimPEG.TensorView +.. automodule:: SimPEG.mesh.TensorView :members: :undoc-members: From 17d52087f8a537a745abf0cb200166eb51dff7fb Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 18 Oct 2013 17:36:14 -0700 Subject: [PATCH 138/359] some updates for examples. --- SimPEG/DiffOperators.py | 336 -------------------------- SimPEG/TensorView.py | 335 ------------------------- docs/examples/mesh/plot_TensorMesh.py | 2 +- docs/examples/mesh/plot_grid_2D.py | 2 +- docs/examples/mesh/plot_grid_3D.py | 2 +- docs/examples/mesh/plot_image_2D.py | 2 +- docs/examples/mesh/plot_image_3D.py | 2 +- docs/examples/mesh/plot_nodes.py | 2 +- 8 files changed, 6 insertions(+), 677 deletions(-) delete mode 100644 SimPEG/DiffOperators.py delete mode 100644 SimPEG/TensorView.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py deleted file mode 100644 index 110fe9bd..00000000 --- a/SimPEG/DiffOperators.py +++ /dev/null @@ -1,336 +0,0 @@ -import numpy as np -from scipy import sparse as sp -from SimPEG.utils import mkvc, sdiag, speye, kron3, spzeros - - -def ddx(n): - """Define 1D derivatives, inner, this means we go from n+1 to n+1""" - return sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format="csr") - - -def checkBC(bc): - """ Checks if boundary condition 'bc' is valid. """ - if(type(bc) is str): - bc = [bc, bc] - assert type(bc) is list, 'bc must be a list' - assert len(bc) == 2, 'bc must have two elements' - - for bc_i in bc: - assert type(bc_i) is str, "each bc must be a string" - assert bc_i in ['dirichlet', 'neumann'], "each bc must be either, 'dirichlet' or 'neumann'" - return bc - - -def ddxCellGrad(n, bc): - """Create 1D derivative operator from cell-centres to nodes this means we go from n to n+1""" - bc = checkBC(bc) - - D = sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [-1, 0], n+1, n, format="csr") - # Set the first side - if(bc[0] == 'dirichlet'): - D[0, 0] = 2 - elif(bc[0] == 'neumann'): - D[0, 0] = 0 - # Set the second side - if(bc[1] == 'dirichlet'): - D[-1, -1] = -2 - elif(bc[1] == 'neumann'): - D[-1, -1] = 0 - return D - - -def av(n): - """Define 1D averaging operator from cell-centres to nodes.""" - return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr") - - -class DiffOperators(object): - """ - Class creates the differential operators that you need! - """ - def __init__(self): - raise Exception('DiffOperators is a base class providing differential operators on meshes and cannot run on its own. Inherit to your favorite Mesh class.') - - def faceDiv(): - doc = "Construct divergence operator (face-stg to cell-centres)." - - def fget(self): - if(self._faceDiv is None): - # The number of cell centers in each direction - n = self.n - # Compute faceDivergence operator on faces - if(self.dim == 1): - D = ddx(n[0]) - elif(self.dim == 2): - D1 = sp.kron(speye(n[1]), ddx(n[0])) - D2 = sp.kron(ddx(n[1]), speye(n[0])) - D = sp.hstack((D1, D2), format="csr") - elif(self.dim == 3): - D1 = kron3(speye(n[2]), speye(n[1]), ddx(n[0])) - D2 = kron3(speye(n[2]), ddx(n[1]), speye(n[0])) - D3 = kron3(ddx(n[2]), speye(n[1]), speye(n[0])) - D = sp.hstack((D1, D2, D3), format="csr") - # Compute areas of cell faces & volumes - S = self.area - V = self.vol - self._faceDiv = sdiag(1/V)*D*sdiag(S) - - return self._faceDiv - return locals() - _faceDiv = None - faceDiv = property(**faceDiv()) - - def nodalGrad(): - doc = "Construct gradient operator (nodes to edges)." - - def fget(self): - if(self._nodalGrad is None): - # The number of cell centers in each direction - n = self.n - # Compute divergence operator on faces - if(self.dim == 1): - G = ddx(n[0]) - elif(self.dim == 2): - D1 = sp.kron(speye(n[1]+1), ddx(n[0])) - D2 = sp.kron(ddx(n[1]), speye(n[0]+1)) - G = sp.vstack((D1, D2), format="csr") - elif(self.dim == 3): - D1 = kron3(speye(n[2]+1), speye(n[1]+1), ddx(n[0])) - D2 = kron3(speye(n[2]+1), ddx(n[1]), speye(n[0]+1)) - D3 = kron3(ddx(n[2]), speye(n[1]+1), speye(n[0]+1)) - G = sp.vstack((D1, D2, D3), format="csr") - # Compute lengths of cell edges - L = self.edge - self._nodalGrad = sdiag(1/L)*G - return self._nodalGrad - return locals() - _nodalGrad = None - nodalGrad = property(**nodalGrad()) - - def setCellGradBC(self, BC): - """ - Function that sets the boundary conditions for cell-centred derivative operators. - - Examples:: - - BC = 'neumann' # Neumann in all directions - BC = ['neumann', 'dirichlet', 'neumann'] # 3D, Dirichlet in y Neumann else - BC = [['neumann', 'dirichlet'], 'dirichlet', 'dirichlet'] # 3D, Neumann in x on bottom of domain, - # Dirichlet else - - """ - if(type(BC) is str): - BC = [BC for _ in self.n] # Repeat the str self.dim times - elif(type(BC) is list): - assert len(BC) == self.dim, 'BC list must be the size of your mesh' - else: - raise Exception("BC must be a str or a list.") - - for i, bc_i in enumerate(BC): - BC[i] = checkBC(bc_i) - - self._cellGrad = None # ensure we create a new gradient next time we call it - self._cellGradBC = BC - return BC - _cellGradBC = 'neumann' - - def cellGrad(): - doc = "The cell centered Gradient, takes you to cell faces." - - def fget(self): - if(self._cellGrad is None): - BC = self.setCellGradBC(self._cellGradBC) - n = self.n - if(self.dim == 1): - G = ddxCellGrad(n[0], BC[0]) - elif(self.dim == 2): - G1 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC[0])) - G2 = sp.kron(ddxCellGrad(n[1], BC[1]), speye(n[0])) - G = sp.vstack((G1, G2), format="csr") - elif(self.dim == 3): - G1 = kron3(speye(n[2]), speye(n[1]), ddxCellGrad(n[0], BC[0])) - G2 = kron3(speye(n[2]), ddxCellGrad(n[1], BC[1]), speye(n[0])) - G3 = kron3(ddxCellGrad(n[2], BC[2]), speye(n[1]), speye(n[0])) - G = sp.vstack((G1, G2, G3), format="csr") - # Compute areas of cell faces & volumes - S = self.area - V = self.vol - self._cellGrad = sdiag(S)*G*sdiag(1/V) - return self._cellGrad - return locals() - _cellGrad = None - cellGrad = property(**cellGrad()) - - def edgeCurl(): - doc = "Construct the 3D curl operator." - - def fget(self): - if(self._edgeCurl is None): - # The number of cell centers in each direction - n1 = self.nCx - n2 = self.nCy - n3 = self.nCz - - # Compute lengths of cell edges - L = self.edge - - # Compute areas of cell faces - S = self.area - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - - D32 = kron3(d3, speye(n2), speye(n1+1)) - D23 = kron3(speye(n3), d2, speye(n1+1)) - D31 = kron3(d3, speye(n2+1), speye(n1)) - D13 = kron3(speye(n3), speye(n2+1), d1) - D21 = kron3(speye(n3+1), d2, speye(n1)) - D12 = kron3(speye(n3+1), speye(n2), d1) - - O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) - O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) - O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) - - C = sp.vstack((sp.hstack((O1, -D32, D23)), - sp.hstack((D31, O2, -D13)), - sp.hstack((-D21, D12, O3))), format="csr") - - self._edgeCurl = sdiag(1/S)*(C*sdiag(L)) - return self._edgeCurl - return locals() - _edgeCurl = None - edgeCurl = property(**edgeCurl()) - - def aveF2CC(): - doc = "Construct the averaging operator on cell faces to cell centers." - - def fget(self): - if(self._aveF2CC is None): - n = self.n - if(self.dim == 1): - self._aveF2CC = av(n[0]) - elif(self.dim == 2): - self._aveF2CC = sp.hstack((sp.kron(speye(n[1]), av(n[0])), - sp.kron(av(n[1]), speye(n[0]))), format="csr") - elif(self.dim == 3): - self._aveF2CC = sp.hstack((kron3(speye(n[2]), speye(n[1]), av(n[0])), - kron3(speye(n[2]), av(n[1]), speye(n[0])), - kron3(av(n[2]), speye(n[1]), speye(n[0]))), format="csr") - return self._aveF2CC - return locals() - _aveF2CC = None - aveF2CC = property(**aveF2CC()) - - def aveE2CC(): - doc = "Construct the averaging operator on cell edges to cell centers." - - def fget(self): - if(self._aveE2CC is None): - # The number of cell centers in each direction - n = self.n - if(self.dim == 1): - raise Exception('Edge Averaging does not make sense in 1D: Use Identity?') - elif(self.dim == 2): - self._aveE2CC = sp.hstack((sp.kron(av(n[1]), speye(n[0])), - sp.kron(speye(n[1]), av(n[0]))), format="csr") - elif(self.dim == 3): - self._aveE2CC = sp.hstack((kron3(av(n[2]), av(n[1]), speye(n[0])), - kron3(av(n[2]), speye(n[1]), av(n[0])), - kron3(speye(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._aveE2CC - return locals() - _aveE2CC = None - aveE2CC = property(**aveE2CC()) - - def aveN2CC(): - doc = "Construct the averaging operator on cell nodes to cell centers." - - def fget(self): - if(self._aveN2CC is None): - # The number of cell centers in each direction - n = self.n - if(self.dim == 1): - self._aveN2CC = av(n[0]) - elif(self.dim == 2): - self._aveN2CC = sp.hstack((sp.kron(av(n[1]), av(n[0])), - sp.kron(av(n[1]), av(n[0]))), format="csr") - elif(self.dim == 3): - self._aveN2CC = sp.hstack((kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._aveN2CC - return locals() - _aveN2CC = None - aveN2CC = property(**aveN2CC()) - - def aveN2CCv(): - doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension separate." - - def fget(self): - if(self._aveN2CCv is None): - # The number of cell centers in each direction - n = self.n - if(self.dim == 1): - self._aveN2CCv = av(n[0]) - elif(self.dim == 2): - self._aveN2CCv = sp.block_diag((sp.kron(av(n[1]), av(n[0])), - sp.kron(av(n[1]), av(n[0]))), format="csr") - elif(self.dim == 3): - self._aveN2CCv = sp.block_diag((kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0])), - kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") - return self._aveN2CCv - return locals() - _aveN2CCv = None - aveN2CCv = property(**aveN2CCv()) - - def getMass(self, materialProp=None, loc='e'): - """ Produces mass matricies. - - :param str loc: Average to location: 'e'-edges, 'f'-faces - :param None,float,numpy.ndarray materialProp: property to be averaged (see below) - :rtype: scipy.sparse.csr.csr_matrix - :return: M, the mass matrix - - materialProp can be:: - - None -> takes materialProp = 1 (default) - float -> a constant value for entire domain - numpy.ndarray -> if materialProp.size == self.nC - 3D property model - if materialProp.size = self.nCz - 1D (layered eath) property model - """ - if materialProp is None: - materialProp = np.ones(self.nC) - elif type(materialProp) is float: - materialProp = np.ones(self.nC)*materialProp - elif materialProp.shape == (self.nCz,): - materialProp = materialProp.repeat(self.nCx*self.nCy) - materialProp = mkvc(materialProp) - assert materialProp.shape == (self.nC,), "materialProp incorrect shape" - - if loc=='e': - Av = self.aveE2CC - elif loc=='f': - Av = self.aveF2CC - else: - raise ValueError('Invalid loc') - - diag = Av.T * (self.vol * mkvc(materialProp)) - - return sdiag(diag) - - def getEdgeMass(self, materialProp=None): - """mass matrix for products of edge functions w'*M(materialProp)*e""" - return self.getMass(loc='e', materialProp=materialProp) - - def getFaceMass(self, materialProp=None): - """mass matrix for products of face functions w'*M(materialProp)*f""" - return self.getMass(loc='f', materialProp=materialProp) - - def getFaceMassDeriv(self): - Av = self.aveF2CC - return Av.T * sdiag(self.vol) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py deleted file mode 100644 index 687a520d..00000000 --- a/SimPEG/TensorView.py +++ /dev/null @@ -1,335 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -import matplotlib -from mpl_toolkits.mplot3d import Axes3D -from SimPEG.utils import mkvc - - -class TensorView(object): - """ - Provides viewing functions for TensorMesh - - This class is inherited by TensorMesh - """ - def __init__(self): - pass - - def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True,annotationColor='w',showIt=False): - """ - Mesh.plotImage(I) - - Plots scalar fields on the given mesh. - - Input: - - :param numpy.array I: scalar field - - Optional Input: - - :param str imageType: type of image ('CC','N','F','Fx','Fy','Fz','E','Ex','Ey','Ez') or combinations, e.g. ExEy or FxFz - :param int figNum: number of figure to plot to - :param matplotlib.axes.Axes ax: axis to plot to - :param str direction: slice dimensions, 3D only ('x', 'y', 'z') - :param bool numbering: show numbering of slices, 3D only - :param str annotationColor: color of annotation, e.g. 'w', 'k', 'b' - :param bool showIt: call plt.show() - - .. plot:: examples/mesh/plot_image_2D.py - :include-source: - - .. plot:: examples/mesh/plot_image_3D.py - :include-source: - """ - assert type(I) == np.ndarray, "I must be a numpy array" - assert type(numbering) == bool, "numbering must be a bool" - assert direction in ["x", "y","z"], "direction must be either x,y, or z" - - - if imageType == 'CC': - assert I.size == self.nC, "Incorrect dimensions for CC." - elif imageType == 'N': - assert I.size == self.nN, "Incorrect dimensions for N." - elif imageType == 'Fx': - if I.size != np.prod(self.nFx): I, fy, fz = self.r(I,'F','F','M') - elif imageType == 'Fy': - if I.size != np.prod(self.nFy): fx, I, fz = self.r(I,'F','F','M') - elif imageType == 'Fz': - if I.size != np.prod(self.nFz): fx, fy, I = self.r(I,'F','F','M') - elif imageType == 'Ex': - if I.size != np.prod(self.nEx): I, ey, ez = self.r(I,'E','E','M') - elif imageType == 'Ey': - if I.size != np.prod(self.nEy): ex, I, ez = self.r(I,'E','E','M') - elif imageType == 'Ez': - if I.size != np.prod(self.nEz): ex, ey, I = self.r(I,'E','E','M') - elif imageType[0] == 'E': - plotAll = len(imageType) == 1 - options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} - fig = plt.figure(figNum) - # Determine the subplot number: 131, 121 - numPlots = 130 if plotAll else len(imageType)/2*10+100 - pltNum = 1 - ex, ey, ez = self.r(I,'E','E','M') - if plotAll or 'Ex' in imageType: - ax_x = plt.subplot(numPlots+pltNum) - self.plotImage(ex, imageType='Ex', ax=ax_x, **options) - pltNum +=1 - if plotAll or 'Ey' in imageType: - ax_y = plt.subplot(numPlots+pltNum) - self.plotImage(ey, imageType='Ey', ax=ax_y, **options) - pltNum +=1 - if plotAll or 'Ez' in imageType: - ax_z = plt.subplot(numPlots+pltNum) - self.plotImage(ez, imageType='Ez', ax=ax_z, **options) - pltNum +=1 - return - elif imageType[0] == 'F': - plotAll = len(imageType) == 1 - options = {"direction":direction,"numbering":numbering,"annotationColor":annotationColor,"showIt":showIt} - fig = plt.figure(figNum) - # Determine the subplot number: 131, 121 - numPlots = 130 if plotAll else len(imageType)/2*10+100 - pltNum = 1 - fx, fy, fz = self.r(I,'F','F','M') - if plotAll or 'Fx' in imageType: - ax_x = plt.subplot(numPlots+pltNum) - self.plotImage(fx, imageType='Fx', ax=ax_x, **options) - pltNum +=1 - if plotAll or 'Fy' in imageType: - ax_y = plt.subplot(numPlots+pltNum) - self.plotImage(fy, imageType='Fy', ax=ax_y, **options) - pltNum +=1 - if plotAll or 'Fz' in imageType: - ax_z = plt.subplot(numPlots+pltNum) - self.plotImage(fz, imageType='Fz', ax=ax_z, **options) - pltNum +=1 - return - else: - raise Exception("imageType must be 'CC', 'N','Fx','Fy','Fz','Ex','Ey','Ez'") - - - if ax is None: - fig = plt.figure(figNum) - fig.clf() - ax = plt.subplot(111) - else: - assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!" - fig = ax.figure - - if self.dim == 1: - if imageType == 'CC': - ph = ax.plot(self.vectorCCx, I, '-ro') - elif imageType == 'N': - ph = ax.plot(self.vectorNx, I, '-bs') - ax.set_xlabel("x") - ax.axis('tight') - elif self.dim == 2: - if imageType == 'CC': - C = I[:].reshape(self.n, order='F') - elif imageType == 'N': - C = I[:].reshape(self.n+1, order='F') - C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) - elif imageType == 'Fx': - C = I[:].reshape(self.nFx, order='F') - C = 0.5*(C[:-1, :] + C[1:, :] ) - elif imageType == 'Fy': - C = I[:].reshape(self.nFy, order='F') - C = 0.5*(C[:, :-1] + C[:, 1:] ) - elif imageType == 'Ex': - C = I[:].reshape(self.nEx, order='F') - C = 0.5*(C[:,:-1] + C[:,1:] ) - elif imageType == 'Ey': - C = I[:].reshape(self.nEy, order='F') - C = 0.5*(C[:-1,:] + C[1:,:] ) - - ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) - ax.axis('tight') - ax.set_xlabel("x") - ax.set_ylabel("y") - - elif self.dim == 3: - if direction == 'z': - - # get copy of image and average to cell-centres is necessary - if imageType == 'CC': - Ic = I[:].reshape(self.n, order='F') - elif imageType == 'N': - Ic = I[:].reshape(self.n+1, order='F') - Ic = .125*(Ic[:-1,:-1,:-1]+Ic[1:,:-1,:-1] + Ic[:-1,1:,:-1]+ Ic[1:,1:,:-1]+ Ic[:-1,:-1,1:]+Ic[1:,:-1,1:] + Ic[:-1,1:,1:]+ Ic[1:,1:,1:] ) - elif imageType == 'Fx': - Ic = I[:].reshape(self.nFx, order='F') - Ic = .5*(Ic[:-1,:,:]+Ic[1:,:,:]) - elif imageType == 'Fy': - Ic = I[:].reshape(self.nFy, order='F') - Ic = .5*(Ic[:,:-1,:]+Ic[:,1:,:]) - elif imageType == 'Fz': - Ic = I[:].reshape(self.nFz, order='F') - Ic = .5*(Ic[:,:,:-1]+Ic[:,:,1:]) - elif imageType == 'Ex': - Ic = I[:].reshape(self.nEx, order='F') - Ic = .25*(Ic[:,:-1,:-1]+Ic[:,1:,:-1]+Ic[:,:-1,1:]+Ic[:,1:,:1]) - elif imageType == 'Ey': - Ic = I[:].reshape(self.nEy, order='F') - Ic = .25*(Ic[:-1,:,:-1]+Ic[1:,:,:-1]+Ic[:-1,:,1:]+Ic[1:,:,:1]) - elif imageType == 'Ez': - Ic = I[:].reshape(self.nEz, order='F') - Ic = .25*(Ic[:-1,:-1,:]+Ic[1:,:-1,:]+Ic[:-1,1:,:]+Ic[1:,:1,:]) - - # determine number oE slices in x and y dimension - nX = np.ceil(np.sqrt(self.nCz)) - nY = np.ceil(self.nCz/nX) - - # allocate space for montage - nCx = self.nCx - nCy = self.nCy - - C = np.zeros((nX*nCx,nY*nCy)) - - for iy in range(int(nY)): - for ix in range(int(nX)): - iz = ix + iy*nX - if iz < self.nCz: - C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = Ic[:, :, iz] - else: - C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = np.nan - - C = np.ma.masked_where(np.isnan(C), C) - xx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), self.hx).ravel())] - yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())] - # Plot the mesh - ph = ax.pcolormesh(xx, yy, C.T) - # Plot the lines - gx = np.arange(nX+1)*(self.vectorNx[-1]-self.x0[0]) - gy = np.arange(nY+1)*(self.vectorNy[-1]-self.x0[1]) - # Repeat and seperate with NaN - gxX = np.c_[gx, gx, gx+np.nan].ravel() - gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() - gyX = np.kron(np.ones((nY+1, 1)), np.array([0, sum(self.hx)*nX, np.nan])).ravel() - gyY = np.c_[gy, gy, gy+np.nan].ravel() - ax.plot(gxX, gxY, annotationColor+'-', linewidth=2) - ax.plot(gyX, gyY, annotationColor+'-', linewidth=2) - ax.axis('tight') - - if numbering: - pad = np.sum(self.hx)*0.04 - for iy in range(int(nY)): - for ix in range(int(nX)): - iz = ix + iy*nX - if iz < self.nCz: - ax.text((ix+1)*(self.vectorNx[-1]-self.x0[0])-pad,(iy)*(self.vectorNy[-1]-self.x0[1])+pad, - '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') - - ax.set_title(imageType) - if showIt: plt.show() - return ph - - def plotGrid(self, nodes=False, faces=False, centers=False, edges=False, lines=True, showIt=False): - """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. - - :param bool nodes: plot nodes - :param bool faces: plot faces - :param bool centers: plot centers - :param bool edges: plot edges - :param bool lines: plot lines connecting nodes - :param bool showIt: call plt.show() - - .. plot:: examples/mesh/plot_grid_2D.py - :include-source: - - .. plot:: examples/mesh/plot_grid_3D.py - :include-source: - """ - if self.dim == 1: - fig = plt.figure(1) - fig.clf() - ax = plt.subplot(111) - xn = self.gridN - xc = self.gridCC - ax.hold(True) - ax.plot(xn, np.ones(np.shape(xn)), 'bs') - ax.plot(xc, np.ones(np.shape(xc)), 'ro') - ax.plot(xn, np.ones(np.shape(xn)), 'k--') - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - if showIt: plt.show() - elif self.dim == 2: - fig = plt.figure(2) - fig.clf() - ax = plt.subplot(111) - xn = self.gridN - xc = self.gridCC - xs1 = self.gridFx - xs2 = self.gridFy - - ax.hold(True) - if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs') - if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro') - if faces: - ax.plot(xs1[:, 0], xs1[:, 1], 'g>') - ax.plot(xs2[:, 0], xs2[:, 1], 'g^') - - # Plot the grid lines - if lines: - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() - X = np.r_[X1, X2] - Y = np.r_[Y1, Y2] - plt.plot(X, Y) - - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - ax.set_ylabel('x2') - if showIt: plt.show() - elif self.dim == 3: - fig = plt.figure(3) - fig.clf() - ax = fig.add_subplot(111, projection='3d') - xn = self.gridN - xc = self.gridCC - xfs1 = self.gridFx - xfs2 = self.gridFy - xfs3 = self.gridFz - - xes1 = self.gridEx - xes2 = self.gridEy - xes3 = self.gridEz - - ax.hold(True) - if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) - if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) - if faces: - ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) - ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) - ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) - if edges: - ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) - ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) - ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) - - # Plot the grid lines - if lines: - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() - Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() - Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() - X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() - Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() - Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() - X = np.r_[X1, X2, X3] - Y = np.r_[Y1, Y2, Y3] - Z = np.r_[Z1, Z2, Z3] - plt.plot(X, Y, 'b-', zs=Z) - - ax.grid(True) - ax.hold(False) - ax.set_xlabel('x1') - ax.set_ylabel('x2') - ax.set_zlabel('x3') - if showIt: plt.show() diff --git a/docs/examples/mesh/plot_TensorMesh.py b/docs/examples/mesh/plot_TensorMesh.py index 94c627f8..e773ed13 100644 --- a/docs/examples/mesh/plot_TensorMesh.py +++ b/docs/examples/mesh/plot_TensorMesh.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh pad = 7 padfactor = 1.4 diff --git a/docs/examples/mesh/plot_grid_2D.py b/docs/examples/mesh/plot_grid_2D.py index 258fbdfc..4c6d5da5 100644 --- a/docs/examples/mesh/plot_grid_2D.py +++ b/docs/examples/mesh/plot_grid_2D.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) diff --git a/docs/examples/mesh/plot_grid_3D.py b/docs/examples/mesh/plot_grid_3D.py index caf8dbd2..6278802c 100644 --- a/docs/examples/mesh/plot_grid_3D.py +++ b/docs/examples/mesh/plot_grid_3D.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) diff --git a/docs/examples/mesh/plot_image_2D.py b/docs/examples/mesh/plot_image_2D.py index c7bcb0d5..9fef3f1b 100644 --- a/docs/examples/mesh/plot_image_2D.py +++ b/docs/examples/mesh/plot_image_2D.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh n = 20 h = np.ones(n)/n diff --git a/docs/examples/mesh/plot_image_3D.py b/docs/examples/mesh/plot_image_3D.py index d00756a1..c67b0d84 100644 --- a/docs/examples/mesh/plot_image_3D.py +++ b/docs/examples/mesh/plot_image_3D.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh n = 20 h = np.ones(n)/n diff --git a/docs/examples/mesh/plot_nodes.py b/docs/examples/mesh/plot_nodes.py index 5d2c912b..ef11b351 100644 --- a/docs/examples/mesh/plot_nodes.py +++ b/docs/examples/mesh/plot_nodes.py @@ -1,6 +1,6 @@ import numpy as np import matplotlib.pyplot as plt -from SimPEG import TensorMesh +from SimPEG.mesh import TensorMesh x0 = np.zeros(2) h1 = np.linspace(.1,.5,3) From ec42871640f6e508e158f90cd6c9dfdcebc9efc6 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Fri, 18 Oct 2013 17:43:11 -0700 Subject: [PATCH 139/359] Added 1D Cylindrical mesh. --- SimPEG/mesh/Cyl1DMesh.py | 330 +++++++++++++++++++++++++++++++++++++++ SimPEG/mesh/__init__.py | 2 +- docs/api_Cyl1DMesh.rst | 8 + docs/index.rst | 1 + 4 files changed, 340 insertions(+), 1 deletion(-) create mode 100644 SimPEG/mesh/Cyl1DMesh.py create mode 100644 docs/api_Cyl1DMesh.rst diff --git a/SimPEG/mesh/Cyl1DMesh.py b/SimPEG/mesh/Cyl1DMesh.py new file mode 100644 index 00000000..5fc4deb6 --- /dev/null +++ b/SimPEG/mesh/Cyl1DMesh.py @@ -0,0 +1,330 @@ +import numpy as np +import scipy.sparse as sp +from scipy.constants import pi +from SimPEG.utils import mkvc, ndgrid, sdiag + +class Cyl1DMesh(object): + """ + Cyl1DMesh is a mesh class for cylindrically symmetric 1D problems + """ + + _meshType = 'CYL1D' + + def __init__(self, h, z0=None): + assert len(h) == 2, "len(h) must equal 2" + if z0 is not None: + assert z0.size == 1, "z0.size must equal 1" + + for i, h_i in enumerate(h): + assert type(h_i) == np.ndarray, ("h[%i] is not a numpy array." % i) + assert len(h_i.shape) == 1, ("h[%i] must be a 1D numpy array." % i) + + # Ensure h contains 1D vectors + self._h = [mkvc(x) for x in h] + + if z0 is None: + z0 = 0 + self._z0 = z0 + + #################################################### + # Mesh properties + #################################################### + + def h(): + doc = "list containing the width of each cell" + def fget(self): + return self._h + return locals() + h = property(**h()) + + def z0(): + doc = "The z-origin" + def fget(self): + return self._z0 + return locals() + z0 = property(**z0()) + + def hr(): + doc = "Width of the cells in the r direction" + def fget(self): + return self._h[0] + return locals() + hr = property(**hr()) + + def hz(): + doc = "Width of the cells in the z direction" + def fget(self): + return self._h[1] + return locals() + hz = property(**hz()) + + #################################################### + # Counting + #################################################### + + def nCr(): + doc = "Number of cells in the radial direction" + fget = lambda self: self.hr.size + return locals() + nCr = property(**nCr()) + + def nCz(): + doc = "Number of cells in the z direction" + fget = lambda self: self.hz.size + return locals() + nCz = property(**nCz()) + + def nC(): + doc = "Total number of cells" + fget = lambda self: self.nCr * self.nCz + return locals() + nC = property(**nC()) + + def nNr(): + doc = "Number of nodes in the radial direction" + fget = lambda self: self.hr.size + return locals() + nNr = property(**nNr()) + + def nNz(): + doc = "Number of nodes in the radial direction" + fget = lambda self: self.hz.size + 1 + return locals() + nNz = property(**nNz()) + + def nN(): + doc = "Total number of nodes" + fget = lambda self: self.nNr * self.nNz + return locals() + nN = property(**nN()) + + def nFr(): + doc = "Number of r faces" + fget = lambda self: self.nNr * self.nCz + return locals() + nFr = property(**nFr()) + + def nFz(): + doc = "Number of z faces" + fget = lambda self: self.nNz * self.nCr + return locals() + nFz = property(**nFz()) + + def nF(): + doc = "Total number of faces" + fget = lambda self: self.nFr + self.nFz + return locals() + nF = property(**nF()) + + def nE(): + doc = "Number of edges" + fget = lambda self: self.nN + return locals() + nE = property(**nE()) + + #################################################### + # Vectors & Grids + #################################################### + + def vectorNr(): + doc = "Nodal grid vector (1D) in the r direction" + fget = lambda self: self.hr.cumsum() + return locals() + vectorNr = property(**vectorNr()) + + def vectorNz(): + doc = "Nodal grid vector (1D) in the z direction" + fget = lambda self: np.r_[0, self.hz.cumsum()] + self._z0 + return locals() + vectorNz = property(**vectorNz()) + + def vectorCCr(): + doc = "Cell centered grid vector (1D) in the r direction" + fget = lambda self: np.r_[0, self.hr.cumsum()[1:] - self.hr[1:]/2] + return locals() + vectorCCr = property(**vectorCCr()) + + def vectorCCz(): + doc = "Cell centered grid vector (1D) in the z direction" + fget = lambda self: self.hz.cumsum() - self.hz/2 + self._z0 + return locals() + vectorCCz = property(**vectorCCz()) + + def gridCC(): + doc = "Cell-centered grid" + def fget(self): + if self._gridCC is None: + self._gridCC = ndgrid([self.vectorCCr, self.vectorCCz]) + return self._gridCC + return locals() + _gridCC = None + gridCC = property(**gridCC()) + + def gridN(): + doc = "Nodal grid" + def fget(self): + if self._gridN is None: + self._gridN = ndgrid([self.vectorNr, self.vectorNz]) + return self._gridN + return locals() + _gridN = None + gridN = property(**gridN()) + + def gridFr(): + doc = "r face grid" + def fget(self): + if self._gridFr is None: + self._gridFr = ndgrid([self.vectorNr, self.vectorCCz]) + return self._gridFr + return locals() + _gridFr = None + gridFr = property(**gridFr()) + + def gridFz(): + doc = "z face grid" + def fget(self): + if self._gridFz is None: + self._gridFz = ndgrid([self.vectorCCr, self.vectorNz]) + return self._gridFz + return locals() + _gridFz = None + gridFz = property(**gridFz()) + + #################################################### + # Geometries + #################################################### + + def edge(): + doc = "Edge lengths" + def fget(self): + if self._edge is None: + self._edge = 2*pi*self.gridN[:,0] + return self._edge + return locals() + _edge = None + edge = property(**edge()) + + def area(): + doc = "Face areas" + def fget(self): + if self._area is None: + areaR = np.kron(self.hz, 2*pi*self.vectorNr) + areaZ = np.kron(np.ones_like(self.vectorNz),pi*(self.vectorNr**2 - np.r_[0, self.vectorNr[:-1]]**2)) + self._area = np.r_[areaR, areaZ] + return self._area + return locals() + _area = None + area = property(**area()) + + def vol(): + doc = "Volume of each cell" + def fget(self): + if self._vol is None: + az = pi*(self.vectorNr**2 - np.r_[0, self.vectorNr[:-1]]**2) + self._vol = np.kron(self.hz,az) + return self._vol + return locals() + _vol = None + vol = property(**vol()) + + #################################################### + # Operators + #################################################### + + def edgeCurl(): + doc = "The edgeCurl property." + def fget(self): + if self._edgeCurl is None: + #1D Difference matricies + dr = sp.spdiags((np.ones((self.nCr+1, 1))*[-1, 1]).T, [-1,0], self.nCr, self.nCr, format="csr") + dz = sp.spdiags((np.ones((self.nCz+1, 1))*[-1, 1]).T, [0,1], self.nCz, self.nCz+1, format="csr") + + #2D Difference matricies + Dr = sp.kron(sp.eye(self.nNz), dr) + Dz = -sp.kron(dz, sp.eye(self.nCr)) #Not sure about this negative + + #Edge curl operator + self._edgeCurl = sp.diags(1/self.area,0)*sp.vstack((Dz, Dr))*sp.diags(self.edge,0) + return self._edgeCurl + return locals() + _edgeCurl = None + edgeCurl = property(**edgeCurl()) + + def aveE2CC(): + doc = "Averaging operator from cell edges to cell centres" + def fget(self): + if self._aveE2CC is None: + az = sp.spdiags(0.5*np.ones((2, self.nNz)), [-1,0], self.nNz, self.nCz, format='csr') + ar = sp.spdiags(0.5*np.ones((2, self.nCr)), [0, 1], self.nCr, self.nCr, format='csr') + ar[0,0] = 1 + self._aveE2CC = sp.kron(az, ar).T + return self._aveE2CC + return locals() + _aveE2CC = None + aveE2CC = property(**aveE2CC()) + + def aveF2CC(): + doc = "Averaging operator from cell faces to cell centres" + def fget(self): + if self._aveF2CC is None: + az = sp.spdiags(0.5*np.ones((2, self.nNz)), [-1,0], self.nNz, self.nCz, format='csr') + ar = sp.spdiags(0.5*np.ones((2, self.nCr)), [0, 1], self.nCr, self.nCr, format='csr') + ar[0,0] = 1 + Afr = sp.kron(sp.eye(self.nCz),ar) + Afz = sp.kron(az,sp.eye(self.nCr)) + self._aveF2CC = sp.vstack((Afr,Afz)).T + return self._aveF2CC + return locals() + _aveF2CC = None + aveF2CC = property(**aveF2CC()) + + #################################################### + # Methods + #################################################### + + + def getMass(self, materialProp=None, loc='e'): + """ Produces mass matricies. + + :param str loc: Average to location: 'e'-edges, 'f'-faces + :param None,float,numpy.ndarray materialProp: property to be averaged (see below) + :rtype: scipy.sparse.csr.csr_matrix + :return: M, the mass matrix + + materialProp can be:: + + None -> takes materialProp = 1 (default) + float -> a constant value for entire domain + numpy.ndarray -> if materialProp.size == self.nC + 3D property model + if materialProp.size = self.nCz + 1D (layered eath) property model + """ + if materialProp is None: + materialProp = np.ones(self.nC) + elif type(materialProp) is float: + materialProp = np.ones(self.nC)*materialProp + elif materialProp.shape == (self.nCz,): + materialProp = materialProp.repeat(self.nCr) + materialProp = mkvc(materialProp) + assert materialProp.shape == (self.nC,), "materialProp incorrect shape" + + if loc=='e': + Av = self.aveE2CC + elif loc=='f': + Av = self.aveF2CC + else: + raise ValueError('Invalid loc') + + diag = Av.T * (self.vol * mkvc(materialProp)) + + return sdiag(diag) + + def getEdgeMass(self, materialProp=None): + """mass matrix for products of edge functions w'*M(materialProp)*e""" + return self.getMass(loc='e', materialProp=materialProp) + + def getFaceMass(self, materialProp=None): + """mass matrix for products of face functions w'*M(materialProp)*f""" + return self.getMass(loc='f', materialProp=materialProp) + diff --git a/SimPEG/mesh/__init__.py b/SimPEG/mesh/__init__.py index 9179efca..3b8e1eef 100644 --- a/SimPEG/mesh/__init__.py +++ b/SimPEG/mesh/__init__.py @@ -1,3 +1,4 @@ +from Cyl1DMesh import Cyl1DMesh from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh from BaseMesh import BaseMesh @@ -5,4 +6,3 @@ from TensorView import TensorView from LomView import LomView from InnerProducts import InnerProducts from DiffOperators import DiffOperators - diff --git a/docs/api_Cyl1DMesh.rst b/docs/api_Cyl1DMesh.rst new file mode 100644 index 00000000..f0109b0d --- /dev/null +++ b/docs/api_Cyl1DMesh.rst @@ -0,0 +1,8 @@ +.. _api_Cyl1DMesh: + +Cylindrical 1D Mesh +******************* + +.. automodule:: SimPEG.mesh.Cyl1DMesh + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 4c01c4cd..692363a2 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,6 +26,7 @@ Meshing & Operators api_TensorMesh api_TensorView api_LogicallyOrthogonalMesh + api_Cyl1DMesh api_LOMView api_DiffOperators api_InnerProducts From 40661af9ef8fca5e05686a5ee2fb0a1207e4ba1e Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Sun, 20 Oct 2013 13:13:24 -0700 Subject: [PATCH 140/359] Updated .gitinore to include Sublime project files and /docs/_bulild/ directory. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 0d20b648..bcfb3d73 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ *.pyc +SimPEG.sublime-project +SimPEG.sublime-workspace +docs/_build/ \ No newline at end of file From ac96b462c8863d99cdfb15a30dbcc641127a76ee Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Sun, 20 Oct 2013 15:06:32 -0700 Subject: [PATCH 141/359] Initial implementation of interpolation matrix generation for Cyl1D meshes --- SimPEG/mesh/Cyl1DMesh.py | 97 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/SimPEG/mesh/Cyl1DMesh.py b/SimPEG/mesh/Cyl1DMesh.py index 5fc4deb6..5307964b 100644 --- a/SimPEG/mesh/Cyl1DMesh.py +++ b/SimPEG/mesh/Cyl1DMesh.py @@ -286,8 +286,8 @@ class Cyl1DMesh(object): def getMass(self, materialProp=None, loc='e'): """ Produces mass matricies. - :param str loc: Average to location: 'e'-edges, 'f'-faces :param None,float,numpy.ndarray materialProp: property to be averaged (see below) + :param str loc: Average to location: 'e'-edges, 'f'-faces :rtype: scipy.sparse.csr.csr_matrix :return: M, the mass matrix @@ -328,3 +328,98 @@ class Cyl1DMesh(object): """mass matrix for products of face functions w'*M(materialProp)*f""" return self.getMass(loc='f', materialProp=materialProp) + def getInterpolationMat(self, loc, locType='fz'): + """ Produces intrpolation matrix + + :param numpy.ndarray loc: Location of points to interpolate to + :param str locType: What to interpolate (see below) + :rtype: scipy.sparse.csr.csr_matrix + :return: M, the intrpolation matrix + + locType can be:: + + 'fz' -> z-component of field defined on faces + 'fr' -> r-component of field defined on faces + 'et' -> theta-component of field defined on edges + """ + + loc = np.atleast_2d(loc) + + assert np.all(loc[:,0]<=self.vectorNr.max()) & \ + np.all(loc[:,1]>=self.vectorNz.min()) & \ + np.all(loc[:,1]<=self.vectorNz.max()), \ + "Points outside of mesh" + + + if locType=='fz': + Q = sp.lil_matrix((loc.shape[0], self.nF), dtype=float) + + for i, iloc in enumerate(loc): + # Point is on a z-interface + if np.any(np.abs(self.vectorNz-iloc[1])<0.001): + dFz = self.gridFz-iloc #Distance to z faces + dFz[dFz[:,0]>0,:] = np.inf #Looking for next face to the left... + indL = np.argmin(np.sum(dFz**2, axis=1)) #Closest one + if self.gridFz[indL,0] == self.vectorCCr.max(): #Point in outer half cell (linear extrapolation) + zFL = self.gridFz[indL,:] + zFLL = self.gridFz[indL-1,:] + Q[i, indL+self.nFr] = (iloc[0] - zFLL[0])/(zFL[0] - zFLL[0]) + Q[i, indL+self.nFr-1] = -(iloc[0] - zFL[0])/(zFL[0] - zFLL[0]) + else: + zFL = self.gridFz[indL,:] + zFR = self.gridFz[indL+1,:] + Q[i,indL+self.nFr] = (zFR[0] - iloc[0])/(zFR[0] - zFL[0]) + Q[i,indL+self.nFr+1] = (iloc[0] - zFL[0])/(zFR[0] - zFL[0]) + # Point is in a cell + else: + dFz = self.gridFz-iloc + dFz[dFz>0] = np.inf + dFz = np.sum(dFz**2, axis=1) + + indBL = np.argmin(dFz) # Face below and to the left + indAL = indBL + self.nCr # Face above and to the left + + zF_BL = self.gridFz[indBL,:] + zF_AL = self.gridFz[indAL,:] + + dzB = iloc[1] - zF_BL[1] # z-distance to face below + dzA = zF_AL[1] - iloc[1] # z-distance to face above + + if self.gridFz[indBL,0] == self.vectorCCr.max(): #Point in outer half cell (linear extrapolation) + zF_BLL = self.gridFz[indBL-1,:] + zF_ALL = self.gridFz[indAL-1,:] + + DZ = zF_AL[1] - zF_BL[1] + DR = zF_AL[0] - zF_ALL[0] + + drL = iloc[0] - zF_AL[0] + drLL = iloc[0] - zF_ALL[0] + + Q[i, indBL+self.nFr-1] = -(1 - dzB/DZ)*(drL/DR) + Q[i, indBL+self.nFr] = (1 - dzB/DZ)*(drLL/DR) + Q[i, indAL+self.nFr-1] = -(dzB/DZ)*(drL/DR) + Q[i, indAL+self.nFr] = (dzB/DZ)*(drLL/DR) + else: + indBR = indBL+1 # Face below and to the right + indAR = indAL + 1 # Face above and to the right + zF_BR = self.gridFz[indBR,:] + + drL = iloc[0] - zF_BL[0] # r-distance to face on left + drR = zF_BR[0] - iloc[0] # r-distance to face on right + + drz = (drL + drR)*(dzB + dzA) + Q[i,indBL+self.nFr] = drR*dzA/drz + Q[i,indBR+self.nFr] = drL*dzA/drz + Q[i,indAL+self.nFr] = drR*dzB/drz + Q[i,indAR+self.nFr] = drL*dzB/drz + + elif locType=='fr': + raise NotImplementedError('locType==fr') + elif locType=='et': + raise NotImplementedError('locType==et') + else: + raise ValueError('Invalid locType') + return Q.tocsr() + + + From 674de3421236dce9be34df18162e049ff0d8fa11 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Mon, 21 Oct 2013 12:48:56 -0700 Subject: [PATCH 142/359] Added method to return index of nearest face or edge to a given point. --- SimPEG/mesh/Cyl1DMesh.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/SimPEG/mesh/Cyl1DMesh.py b/SimPEG/mesh/Cyl1DMesh.py index 5307964b..915bf0ef 100644 --- a/SimPEG/mesh/Cyl1DMesh.py +++ b/SimPEG/mesh/Cyl1DMesh.py @@ -421,5 +421,32 @@ class Cyl1DMesh(object): raise ValueError('Invalid locType') return Q.tocsr() + def getNearest(self, loc, locType): + """ Returns the index of the closest face or edge to a given location + :param numpy.ndarray loc: Test point + :param str locType: Type of location desired (see below) + :rtype: int + :return: ind: + locType can be:: + + 'fz' -> location of nearest z-face + 'fr' -> location of nearest r-face + 'et' -> location of nearest edge + """ + + if locType=='et': + dr = self.gridN[:,0] - loc[0] + dz = self.gridN[:,1] - loc[1] + elif locType=='fz': + dr = self.gridFz[:,0] - loc[0] + dz = self.gridFz[:,1] - loc[1] + elif locType=='fr': + dr = self.gridFr[:,0] - loc[0] + dz = self.gridFr[:,1] - loc[1] + else: + raise ValueError('Invalid locType') + R = np.sqrt(dr**2 + dz**2) + ind = np.argmin(R) + return ind From 41b7dbe82b5415aa26bdda574fa20b2a046953bc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 14:40:52 -0700 Subject: [PATCH 143/359] bug fix --- docs/examples/mesh/plot_LogicallyOrthogonalMesh.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py index 55350946..bb49ae9a 100644 --- a/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py +++ b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py @@ -1,4 +1,5 @@ -from SimPEG import LogicallyOrthogonalMesh, utils +from SimPEG.mesh import LogicallyOrthogonalMesh +from SimPEG import utils import matplotlib.pyplot as plt X, Y = utils.exampleLomGird([3,3],'rotate') M = LogicallyOrthogonalMesh([X, Y]) From 13efdc12f90f6ab8723f3511ddd35a9118c65649 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 14:42:30 -0700 Subject: [PATCH 144/359] updates to view, and documentation of base mesh. --- SimPEG/mesh/BaseMesh.py | 25 +++++++++++++++++++++++++ SimPEG/mesh/TensorView.py | 3 +++ 2 files changed, 28 insertions(+) diff --git a/SimPEG/mesh/BaseMesh.py b/SimPEG/mesh/BaseMesh.py index 29c43dd1..6a9a8032 100644 --- a/SimPEG/mesh/BaseMesh.py +++ b/SimPEG/mesh/BaseMesh.py @@ -2,6 +2,7 @@ import numpy as np from SimPEG.utils import mkvc + class BaseMesh(object): """ BaseMesh does all the counting you don't want to do. @@ -216,6 +217,12 @@ class BaseMesh(object): :rtype: int :return: nC + + .. plot:: + + from SimPEG.mesh import TensorMesh + import numpy as np + TensorMesh([np.ones(n) for n in [2,3]]).plotGrid(centers=True,showIt=True) """ fget = lambda self: np.prod(self.n) return locals() @@ -270,6 +277,12 @@ class BaseMesh(object): :rtype: int :return: nN + + .. plot:: + + from SimPEG.mesh import TensorMesh + import numpy as np + TensorMesh([np.ones(n) for n in [2,3]]).plotGrid(nodes=True,showIt=True) """ fget = lambda self: np.prod(self.n + 1) return locals() @@ -324,6 +337,12 @@ class BaseMesh(object): :rtype: numpy.array (dim, ) :return: [prod(nEx), prod(nEy), prod(nEz)] + + .. plot:: + + from SimPEG.mesh import TensorMesh + import numpy as np + TensorMesh([np.ones(n) for n in [2,3]]).plotGrid(edges=True,showIt=True) """ fget = lambda self: np.array([np.prod(x) for x in [self.nEx, self.nEy, self.nEz] if not x is None]) return locals() @@ -378,6 +397,12 @@ class BaseMesh(object): :rtype: numpy.array (dim, ) :return: [prod(nFx), prod(nFy), prod(nFz)] + + .. plot:: + + from SimPEG.mesh import TensorMesh + import numpy as np + TensorMesh([np.ones(n) for n in [2,3]]).plotGrid(faces=True,showIt=True) """ fget = lambda self: np.array([np.prod(x) for x in [self.nFx, self.nFy, self.nFz] if not x is None]) return locals() diff --git a/SimPEG/mesh/TensorView.py b/SimPEG/mesh/TensorView.py index 687a520d..0b9ff7b3 100644 --- a/SimPEG/mesh/TensorView.py +++ b/SimPEG/mesh/TensorView.py @@ -267,6 +267,9 @@ class TensorView(object): if faces: ax.plot(xs1[:, 0], xs1[:, 1], 'g>') ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + if edges: + ax.plot(self.gridEx[:, 0], self.gridEx[:, 1], 'c>') + ax.plot(self.gridEy[:, 0], self.gridEy[:, 1], 'c^') # Plot the grid lines if lines: From 0cb9fa210acec6979ea9deb6134c4907486e5420 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 14:43:24 -0700 Subject: [PATCH 145/359] print statements now go to problem if they are implemented there. --- SimPEG/inverse/Optimize.py | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index eee18b16..965fb308 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -5,7 +5,12 @@ norm = np.linalg.norm class Minimize(object): - """docstring for Minimize""" + """ + + Minimize is a general class for derivative based optimization. + + + """ name = "GeneralOptimizationAlgorithm" @@ -59,12 +64,34 @@ class Minimize(object): self.xOld = x0 def printInit(self): - print "%s %s %s" % ('='*22, self.name, '='*22) - print "iter\tJc\t\tnorm(dJ)\tLS" - print "%s" % '-'*57 + """ + printIter is called at the beginning of the optimization routine. + + If the problem object has a printInit function it will be called here:: + + self.problem.printInit(self) + + """ + if hasattr(self.problem, 'printInit'): + self.problem.printInit(self) + else: + print "%s %s %s" % ('='*22, self.name, '='*22) + print "iter\tJc\t\tnorm(dJ)\tLS" + print "%s" % '-'*57 def printIter(self): - print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) + """ + printIter is called directly after function evaluations. + + If the problem object has a printIter function it will be called here:: + + self.problem.printIter(self) + + """ + if hasattr(self.problem, 'printIter'): + self.problem.printIter(self) + else: + print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) def printDone(self): print "%s STOP! %s" % ('-'*25,'-'*25) From 2a8f43aa1015cb27e242684ac51fd3efb3def9c3 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 19:42:38 -0700 Subject: [PATCH 146/359] Inversion Framework - a start.. --- SimPEG/forward/Problem.py | 139 +++--------------- SimPEG/inverse/Inversion.py | 179 ++++++++++++++++++++++++ SimPEG/inverse/Optimize.py | 54 ++++--- SimPEG/regularization/Regularization.py | 113 +++++++++++++++ SimPEG/tests/TestUtils.py | 10 +- 5 files changed, 341 insertions(+), 154 deletions(-) create mode 100644 SimPEG/inverse/Inversion.py create mode 100644 SimPEG/regularization/Regularization.py diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 5b716f1f..04f9771a 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -49,16 +49,6 @@ class Problem(object): def RHS(self, value): self._RHS = value - @property - def W(self): - """ - Standard deviation weighting matrix. - """ - return self._W - @W.setter - def W(self, value): - self._W = value - @property def P(self): """ @@ -83,16 +73,24 @@ class Problem(object): def dobs(self, value): self._dobs = value - def evalFunction(self, m, doDerivative=True): + def misfit(self, m, u=None): """ - :param numpy.array m: model - :param bool doDerivative: do you want to compute the derivative? - :rtype: numpy.array - :return: Jv - """ - f = self.misfit(m) + :param numpy.array m: geophysical model + :param numpy.array u: fields + :rtype: float + :return: data misfit - return f, g, H + The data misfit: + + .. math:: + + \mu_\\text{data} = \mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs} + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data. + """ + + return self.dpred(m, u=u) - self.dobs def J(self, m, v, u=None): """ @@ -201,112 +199,7 @@ class Problem(object): """ return sdiag(np.exp(mkvc(m))) - def misfit(self, m, u=None): - """ - :param numpy.array m: geophysical model - :param numpy.array u: fields - :rtype: float - :return: data misfit - The data misfit using an l_2 norm is: - - .. math:: - - \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 - - Where P is a projection matrix that brings the field on the full domain to the data measurement locations; - u is the field of interest; d_obs is the observed data; and W is the weighting matrix. - """ - - R = self.W*(self.dpred(m, u=u) - self.dobs) - R = mkvc(R) - return 0.5*R.dot(R) - - def misfitDeriv(self, m, u=None): - """ - :param numpy.array m: geophysical model - :param numpy.array u: fields - :rtype: numpy.array - :return: data misfit derivative - - The data misfit using an l_2 norm is: - - .. math:: - - \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 - - If the field, u, is provided, the calculation of the data is fast: - - .. math:: - - \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} - - \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) - - Where P is a projection matrix that brings the field on the full domain to the data measurement locations; - u is the field of interest; d_obs is the observed data; and W is the weighting matrix. - - The derivative of this, with respect to the model, is: - - .. math:: - - \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} - - """ - if u is None: - u = self.field(m) - - R = self.W*(self.dpred(m, u=u) - self.dobs) - - dmisfit = 0 - for i in range(self.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) - - return dmisfit - - def misfitDerivDeriv(self, m, u=None): - """ - :param numpy.array m: geophysical model - :param numpy.array u: fields - :rtype: numpy.array - :return: data misfit derivative - - The data misfit using an l_2 norm is: - - .. math:: - - \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 - - If the field, u, is provided, the calculation of the data is fast: - - .. math:: - - \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} - - \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) - - Where P is a projection matrix that brings the field on the full domain to the data measurement locations; - u is the field of interest; d_obs is the observed data; and W is the weighting matrix. - - The derivative of this, with respect to the model, is: - - .. math:: - - \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} - - \\frac{\partial^2 \mu_\\text{data}}{\partial^2 \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ W J} - - """ - if u is None: - u = self.field(m) - - R = self.W*(self.dpred(m, u=u) - self.dobs) - - dmisfit = 0 - for i in range(self.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) - - return dmisfit class SyntheticProblem(object): diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py new file mode 100644 index 00000000..99173af0 --- /dev/null +++ b/SimPEG/inverse/Inversion.py @@ -0,0 +1,179 @@ +import numpy as np + +class Inversion(object): + """docstring for Inversion""" + + maxIter = 10 + + def __init__(self, prob, reg, opt): + self.prob = prob + self.reg = reg + self.opt = opt + + @property + def W(self): + """ + Standard deviation weighting matrix. + """ + return self._W + @W.setter + def W(self, value): + self._W = value + + def run(self, m0): + self._iter = 0 + while True: + self._beta = self.getBeta() + self.opt.minimize(self.evalFunction,m) + if self.stoppingCriteria(): break + self._iter += 1 + + def getBeta(self): + return 1 + + def stoppingCriteria(self): + self._STOP = np.zeros(2,dtype=bool) + self._STOP[0] = self._iter >= maxIter + self._STOP[1] = self._phi_d_last <= self.phi_d_target + return np.any(self._STOP) + + + def evalFunction(self, m, return_g=True, return_H=True): + + u = self.prob.field(m) + phi_d = self.dataObj(m, u) + phi_m = self.modelObj(m) + + self._phi_d_last = phi_d + self._phi_m_last = phi_m + + f = phi_d + self._beta * phi_m + + out = (f,) + if return_g: + phi_dDeriv = self.dataObjDeriv(m, u) + phi_mDeriv = self.modelObjDeriv(m) + + g = phi_dDeriv + self._beta * phi_mDeriv + out += (g,) + + if return_H: + def H_fun(v): + phi_d2Deriv = self.dataObj2Deriv(m, u, v) + phi_m2Deriv = self.modelObj2Deriv(m)*v + + return phi_d2Deriv + self._beta * phi_m2Deriv + + out += (H_fun,) + return out + + + def modelObj(self, m, u=None): + self.reg.misfit(m) + + + def dataObj(self, m, u=None): + """ + :param numpy.array m: geophysical model + :param numpy.array u: fields + :rtype: float + :return: data misfit + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + """ + R = self.Wd*self.prob.misfit(u=u) + R = mkvc(R) + return 0.5*R.dot(R) + + def dataObjDeriv(self, m, u=None): + """ + :param numpy.array m: geophysical model + :param numpy.array u: fields + :rtype: numpy.array + :return: data misfit derivative + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + + If the field, u, is provided, the calculation of the data is fast: + + .. math:: + + \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} + + \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + + The derivative of this, with respect to the model, is: + + .. math:: + + \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} + + """ + if u is None: + u = self.field(m) + + R = self.W*(self.dpred(m, u=u) - self.dobs) + + dmisfit = 0 + for i in range(self.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) + + return dmisfit + + def dataObj2Deriv(self, m, u=None): + """ + :param numpy.array m: geophysical model + :param numpy.array u: fields + :rtype: numpy.array + :return: data misfit derivative + + The data misfit using an l_2 norm is: + + .. math:: + + \mu_\\text{data} = {1\over 2}\left| \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) \\right|_2^2 + + If the field, u, is provided, the calculation of the data is fast: + + .. math:: + + \mathbf{d}_\\text{pred} = \mathbf{Pu(m)} + + \mathbf{R} = \mathbf{W} \circ (\mathbf{d}_\\text{pred} - \mathbf{d}_\\text{obs}) + + Where P is a projection matrix that brings the field on the full domain to the data measurement locations; + u is the field of interest; d_obs is the observed data; and W is the weighting matrix. + + The derivative of this, with respect to the model, is: + + .. math:: + + \\frac{\partial \mu_\\text{data}}{\partial \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ R} + + \\frac{\partial^2 \mu_\\text{data}}{\partial^2 \mathbf{m}} = \mathbf{J}^\\top \mathbf{W \circ W J} + + """ + if u is None: + u = self.field(m) + + R = self.W*(self.dpred(m, u=u) - self.dobs) + + dmisfit = 0 + for i in range(self.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) + + return dmisfit diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 965fb308..c3ad8dd2 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -23,8 +23,9 @@ class Minimize(object): tolG = 1e-4 eps = 1e-16 - def __init__(self, problem, **kwargs): - self.problem = problem + printIter = [] # push to here if you want to print these on iter + + def __init__(self, **kwargs): self.setKwargs(**kwargs) def setKwargs(self, **kwargs): @@ -35,13 +36,20 @@ class Minimize(object): else: raise Exception('%s attr is not recognized' % attr) - def minimize(self, x0): + def minimize(self, evalFunction, x0): + """ + evalFunction is a function handle:: + + evalFunction(x, return_g=True, return_H=True ) + + """ + self.evalFunction = evalFunction self.startup(x0) self.printInit() while True: - self.f, self.g, self.H = self.evalFunction(self.xc) + self.f, self.g, self.H = evalFunction(self.xc, return_g=True, return_H=True) self.printIter() if self.stoppingCriteria(): break p = self.findSearchDirection() @@ -67,31 +75,17 @@ class Minimize(object): """ printIter is called at the beginning of the optimization routine. - If the problem object has a printInit function it will be called here:: - - self.problem.printInit(self) - """ - if hasattr(self.problem, 'printInit'): - self.problem.printInit(self) - else: - print "%s %s %s" % ('='*22, self.name, '='*22) - print "iter\tJc\t\tnorm(dJ)\tLS" - print "%s" % '-'*57 + print "%s %s %s" % ('='*22, self.name, '='*22) + print "iter\tJc\t\tnorm(dJ)\tLS" + print "%s" % '-'*57 def printIter(self): """ printIter is called directly after function evaluations. - If the problem object has a printIter function it will be called here:: - - self.problem.printIter(self) - """ - if hasattr(self.problem, 'printIter'): - self.problem.printIter(self) - else: - print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) + print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) def printDone(self): print "%s STOP! %s" % ('-'*25,'-'*25) @@ -102,10 +96,6 @@ class Minimize(object): print "%d : iter = %3d\t <= maxIter\t = %3d" % (self._STOP[4], self._iter, self.maxIter) print "%s DONE! %s\n" % ('='*25,'='*25) - def evalFunction(self, x, doDerivative=True): - f, g, H = self.problem(x) - return f, g, H - def findSearchDirection(self): return -self.g @@ -128,7 +118,7 @@ class Minimize(object): iterLS = 0 while iterLS < self.maxIterLS: xt = self.xc + t*p - ft, temp, temp = self.evalFunction(xt, doDerivative=False) + ft = self.evalFunction(xt, return_g=False, return_H=False) if ft < self.f + t*self.LSreduction*descent: break iterLS += 1 @@ -153,6 +143,12 @@ class GaussNewton(Minimize): return np.linalg.solve(self.H,-self.g) +class InexactGaussNewton(Minimize): + name = 'InexactGaussNewton' + def findSearchDirection(self): + return sparse.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) + + class SteepestDescent(Minimize): name = 'SteepestDescent' def findSearchDirection(self): @@ -162,9 +158,9 @@ if __name__ == '__main__': from SimPEG.tests import Rosenbrock, checkDerivative x0 = np.array([2.6, 3.7]) checkDerivative(Rosenbrock, x0, plotIt=False) - xOpt = GaussNewton(Rosenbrock, maxIter=20).minimize(x0) + xOpt = GaussNewton(maxIter=20).minimize(Rosenbrock,x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) - xOpt = SteepestDescent(Rosenbrock, maxIter=20, maxIterLS=15).minimize(x0) + xOpt = SteepestDescent(maxIter=20, maxIterLS=15).minimize(Rosenbrock, x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) def simplePass(x): diff --git a/SimPEG/regularization/Regularization.py b/SimPEG/regularization/Regularization.py new file mode 100644 index 00000000..f0239875 --- /dev/null +++ b/SimPEG/regularization/Regularization.py @@ -0,0 +1,113 @@ +from SimPEG.utils import sdiag + +class Regularization(object): + """docstring for Regularization""" + + @property + def mref(self): + return self._mref + @mref.setter + def mref(self, value): + self._mref = value + + @property + def Wx(self): + if self._Wx is None: + self._Wx = mesh.cellGradx + return self._Wx + + @property + def Wy(self): + if self._Wy is None: + self._Wy = mesh.cellGrady + return self._Wy + + @property + def Wz(self): + if self._Wz is None: + self._Wz = mesh.cellGradz + return self._Wz + + @property + def Ws(self): + if self._Ws is None: + self._Ws = sdiag(self.mesh.vol) + return self._Ws + + + def __init__(self, mesh): + self.mesh = mesh + self._Wx = None + self._Wy = None + self._Wz = None + self.alpha_s = 1e-6 + self.alpha_x = 1 + self.alpha_y = 1 + self.alpha_z = 1 + + def pnorm(self, r): + return 0.5*r.dot(r) + + def modelObj(self, m): + mresid = m - self.mref + + mobj = self.alpha_s * self.pnorm( self.Ws * mresid ) + + mobj += self.alpha_x * self.pnorm( self.Wx * mresid ) + + if self.mesh.dim > 1: + mobj += self.alpha_y * self.pnorm( self.Wy * mresid ) + if self.mesh.dim > 2: + mobj += self.alpha_z * self.pnorm( self.Wz * mresid ) + + return mobj + + def modelObjDeriv(self, m): + """ + + In 1D: + + .. math:: + + m_{\\text{obj}} = {1 \over 2}\\alpha_s \left\| W_s (m- m_{\\text{ref}})\\right\|^2_2 + + {1 \over 2}\\alpha_x \left\| W_x (m- m_{\\text{ref}})\\right\|^2_2 + + \\frac{ \partial m_{\\text{obj}} }{\partial m} = + \\alpha_s W_s^{\\top} W_s (m - m_{\\text{ref}}) + + \\alpha_x W_x^{\\top} W_x (m - m_{\\text{ref}}) + + + \\frac{ \partial^2 m_{\\text{obj}} }{\partial m^2} = + \\alpha_s W_s^{\\top} W_s + + \\alpha_x W_x^{\\top} W_x + + """ + + mresid = m - self.mref + + mobjDeriv = self.alpha_s * self.Ws.T * ( self.Ws * mresid) + + mobjDeriv += self.alpha_x * self.Wx.T * ( self.Wx * mresid) + + if self.mesh.dim > 1: + mobjDeriv += self.alpha_y * self.Wy.T * ( self.Wy * mresid) + if self.mesh.dim > 2: + mobjDeriv += self.alpha_z * self.Wz.T * ( self.Wz * mresid) + + return mobjDeriv + + + def modelObj2Deriv(self, m): + mresid = m - self.mref + + mobj2Deriv = self.alpha_s * self.Ws.T * self.Ws + + mobj2Deriv += self.alpha_x * self.Wx.T * self.Wx + + if self.mesh.dim > 1: + mobj2Deriv += self.alpha_y * self.Wy.T * self.Wy + if self.mesh.dim > 2: + mobj2Deriv += self.alpha_z * self.Wz.T * self.Wz + + return mobj2Deriv + diff --git a/SimPEG/tests/TestUtils.py b/SimPEG/tests/TestUtils.py index 9b2158c4..83738a75 100644 --- a/SimPEG/tests/TestUtils.py +++ b/SimPEG/tests/TestUtils.py @@ -163,13 +163,19 @@ class OrderTest(unittest.TestCase): print '' self.assertTrue(passTest) -def Rosenbrock(x): +def Rosenbrock(x, return_g=True, return_H=True): """Rosenbrock function for testing GaussNewton scheme""" f = 100*(x[1]-x[0]**2)**2+(1-x[0])**2 g = np.array([2*(200*x[0]**3-200*x[0]*x[1]+x[0]-1), 200*(x[1]-x[0]**2)]) H = np.array([[-400*x[1]+1200*x[0]**2+2, -400*x[0]], [-400*x[0], 200]]) - return f, g, H + + out = (f,) + if return_g: + out += (g,) + if return_H: + out += (H,) + return out def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): """ From 2bb20280bfe6110c18f69dba76cfdeb031eec7ba Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 20:11:30 -0700 Subject: [PATCH 147/359] to get working.. --- SimPEG/forward/DCProblem/DCProblem.py | 19 ++++++++++++++++--- SimPEG/forward/Problem.py | 9 +++++++++ SimPEG/inverse/Inversion.py | 11 +++++------ SimPEG/inverse/Optimize.py | 5 ++++- SimPEG/inverse/__init__.py | 1 + SimPEG/regularization/__init__.py | 1 + 6 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 SimPEG/regularization/__init__.py diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem/DCProblem.py index 1df8897b..45b8a2c1 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem/DCProblem.py @@ -105,6 +105,10 @@ class DCProblem(Problem): if __name__ == '__main__': + + from SimPEG.regularization import Regularization + from SimPEG import inverse + # Create the mesh h1 = np.ones(100) h2 = np.ones(100) @@ -143,7 +147,7 @@ if __name__ == '__main__': dobs, Wd = synthetic.createData(mSynth, std=0.05) u = synthetic.field(mSynth) - mesh.plotImage(u[:,10], showIt=True) + mesh.plotImage(u[:,10], showIt=False) # Now set up the problem to do some minimization problem = DCProblem(mesh) @@ -153,8 +157,15 @@ if __name__ == '__main__': problem.dobs = dobs m0 = mesh.gridCC[:,0]*0+sig1 - print problem.misfit(m0) - print problem.misfit(mSynth) + # print problem.misfit(m0) + # print problem.misfit(mSynth) + + opt = inverse.InexactGaussNewton() + reg = Regularization(mesh) + + inv = inverse.Inversion(problem, reg, opt) + + inv.run(m0) # Check Derivative derChk = lambda m: [problem.misfit(m), problem.misfitDeriv(m)] @@ -166,3 +177,5 @@ if __name__ == '__main__': w = np.random.rand(dobs.shape[0]) print w.dot(problem.J(mSynth, v, u=u)) print v.dot(problem.Jt(mSynth, w, u=u)) + + diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 04f9771a..0333b8b4 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -62,6 +62,15 @@ class Problem(object): def P(self, value): self._P = value + @property + def std(self): + """ + Estimated Standard Deviations. + """ + return self._std + @std.setter + def std(self, value): + self._std = value @property def dobs(self): diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 99173af0..8d92e15e 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -1,4 +1,5 @@ import numpy as np +from SimPEG.utils import sdiag class Inversion(object): """docstring for Inversion""" @@ -11,20 +12,18 @@ class Inversion(object): self.opt = opt @property - def W(self): + def Wd(self): """ Standard deviation weighting matrix. """ - return self._W - @W.setter - def W(self, value): - self._W = value + return sdiag(1/self.prob.std) def run(self, m0): + m = m0 self._iter = 0 while True: self._beta = self.getBeta() - self.opt.minimize(self.evalFunction,m) + m = self.opt.minimize(self.evalFunction,m) if self.stoppingCriteria(): break self._iter += 1 diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index c3ad8dd2..43776d33 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -111,13 +111,16 @@ class Minimize(object): self._STOP[4] = self._iter >= self.maxIter return all(self._STOP[0:3]) | any(self._STOP[3:]) + def projection(self, p): + return p + def linesearch(self, p): # Armijo linesearch descent = np.inner(self.g, p) t = 1 iterLS = 0 while iterLS < self.maxIterLS: - xt = self.xc + t*p + xt = self.projection(self.xc + t*p) ft = self.evalFunction(xt, return_g=False, return_H=False) if ft < self.f + t*self.LSreduction*descent: break diff --git a/SimPEG/inverse/__init__.py b/SimPEG/inverse/__init__.py index b2a5e506..c4ca335b 100644 --- a/SimPEG/inverse/__init__.py +++ b/SimPEG/inverse/__init__.py @@ -1 +1,2 @@ from Optimize import * +from Inversion import * diff --git a/SimPEG/regularization/__init__.py b/SimPEG/regularization/__init__.py new file mode 100644 index 00000000..0230f8c3 --- /dev/null +++ b/SimPEG/regularization/__init__.py @@ -0,0 +1 @@ +from Regularization import Regularization From 3de8ab47d925ec2fee558d9984b10fd90e3ce2ca Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 22 Oct 2013 20:25:49 -0700 Subject: [PATCH 148/359] moved DCProblem --- SimPEG/__init__.py | 2 ++ SimPEG/forward/{DCProblem => }/DCProblem.py | 33 +++++++++++++++++++-- SimPEG/forward/DCProblem/DCutils.py | 29 ------------------ SimPEG/forward/DCProblem/__init__.py | 2 -- SimPEG/forward/__init__.py | 2 +- 5 files changed, 34 insertions(+), 34 deletions(-) rename SimPEG/forward/{DCProblem => }/DCProblem.py (82%) delete mode 100644 SimPEG/forward/DCProblem/DCutils.py delete mode 100644 SimPEG/forward/DCProblem/__init__.py diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index e8946f88..a17eaa74 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,4 +1,6 @@ import mesh import utils import inverse +import forward +import regularization from Solver import Solver diff --git a/SimPEG/forward/DCProblem/DCProblem.py b/SimPEG/forward/DCProblem.py similarity index 82% rename from SimPEG/forward/DCProblem/DCProblem.py rename to SimPEG/forward/DCProblem.py index 45b8a2c1..5aad45bd 100644 --- a/SimPEG/forward/DCProblem/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -3,8 +3,8 @@ from SimPEG.forward import Problem, SyntheticProblem from SimPEG.tests import checkDerivative from SimPEG.utils import ModelBuilder, sdiag import numpy as np +import scipy as sp import scipy.sparse.linalg as linalg -import DCutils class DCProblem(Problem): """ @@ -134,7 +134,7 @@ if __name__ == '__main__': elecend = 0.5+spacelec*(nelec-1) elecLocR = np.linspace(elecini, elecend, nelec) rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 - q, Q, rxmidloc = DCutils.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) + q, Q, rxmidloc = genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) P = Q.T # Create some data @@ -179,3 +179,32 @@ if __name__ == '__main__': print v.dot(problem.Jt(mSynth, w, u=u)) + + + +def genTxRxmat(nelec, spacelec, surfloc, elecini, mesh): + """ Generate projection matrix (Q) and """ + elecend = 0.5+spacelec*(nelec-1) + elecLocR = np.linspace(elecini, elecend, nelec) + elecLocT = elecLocR+1 + nrx = nelec-1 + ntx = nelec-1 + q = np.zeros((mesh.nC, ntx)) + Q = np.zeros((mesh.nC, nrx)) + + for i in range(nrx): + + rxind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i])) + rxind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i+1])) + + txind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i])) + txind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i+1])) + + q[txind1,i] = 1 + q[txind2,i] = -1 + Q[rxind1,i] = 1 + Q[rxind2,i] = -1 + + Q = sp.csr_matrix(Q) + rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 + return q, Q, rxmidLoc diff --git a/SimPEG/forward/DCProblem/DCutils.py b/SimPEG/forward/DCProblem/DCutils.py deleted file mode 100644 index f3445096..00000000 --- a/SimPEG/forward/DCProblem/DCutils.py +++ /dev/null @@ -1,29 +0,0 @@ -import numpy as np -import scipy.sparse as sp - -def genTxRxmat(nelec, spacelec, surfloc, elecini, mesh): - """ Generate projection matrix (Q) and """ - elecend = 0.5+spacelec*(nelec-1) - elecLocR = np.linspace(elecini, elecend, nelec) - elecLocT = elecLocR+1 - nrx = nelec-1 - ntx = nelec-1 - q = np.zeros((mesh.nC, ntx)) - Q = np.zeros((mesh.nC, nrx)) - - for i in range(nrx): - - rxind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i])) - rxind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i+1])) - - txind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i])) - txind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i+1])) - - q[txind1,i] = 1 - q[txind2,i] = -1 - Q[rxind1,i] = 1 - Q[rxind2,i] = -1 - - Q = sp.csr_matrix(Q) - rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 - return q, Q, rxmidLoc diff --git a/SimPEG/forward/DCProblem/__init__.py b/SimPEG/forward/DCProblem/__init__.py deleted file mode 100644 index a868cf80..00000000 --- a/SimPEG/forward/DCProblem/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from DCProblem import * -from DCutils import * diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py index fe849d41..5e326a59 100644 --- a/SimPEG/forward/__init__.py +++ b/SimPEG/forward/__init__.py @@ -1,2 +1,2 @@ from Problem import * -import DCProblem +from DCProblem import DCProblem From 9cd6e7ed08782584c9c8e6bed3177853e96ff254 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 23 Oct 2013 16:44:33 -0700 Subject: [PATCH 149/359] Issue #9 Ensure that h is a float in all meshes. --- SimPEG/mesh/Cyl1DMesh.py | 24 ++++++++++++------------ SimPEG/mesh/LogicallyOrthogonalMesh.py | 2 +- SimPEG/mesh/TensorMesh.py | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/SimPEG/mesh/Cyl1DMesh.py b/SimPEG/mesh/Cyl1DMesh.py index 5307964b..e0d6529b 100644 --- a/SimPEG/mesh/Cyl1DMesh.py +++ b/SimPEG/mesh/Cyl1DMesh.py @@ -5,8 +5,8 @@ from SimPEG.utils import mkvc, ndgrid, sdiag class Cyl1DMesh(object): """ - Cyl1DMesh is a mesh class for cylindrically symmetric 1D problems - """ + Cyl1DMesh is a mesh class for cylindrically symmetric 1D problems + """ _meshType = 'CYL1D' @@ -20,7 +20,7 @@ class Cyl1DMesh(object): assert len(h_i.shape) == 1, ("h[%i] must be a 1D numpy array." % i) # Ensure h contains 1D vectors - self._h = [mkvc(x) for x in h] + self._h = [mkvc(x.astype(float)) for x in h] if z0 is None: z0 = 0 @@ -146,7 +146,7 @@ class Cyl1DMesh(object): def vectorCCz(): doc = "Cell centered grid vector (1D) in the z direction" - fget = lambda self: self.hz.cumsum() - self.hz/2 + self._z0 + fget = lambda self: self.hz.cumsum() - self.hz/2 + self._z0 return locals() vectorCCz = property(**vectorCCz()) @@ -177,7 +177,7 @@ class Cyl1DMesh(object): self._gridFr = ndgrid([self.vectorNr, self.vectorCCz]) return self._gridFr return locals() - _gridFr = None + _gridFr = None gridFr = property(**gridFr()) def gridFz(): @@ -187,7 +187,7 @@ class Cyl1DMesh(object): self._gridFz = ndgrid([self.vectorCCr, self.vectorNz]) return self._gridFz return locals() - _gridFz = None + _gridFz = None gridFz = property(**gridFz()) #################################################### @@ -350,23 +350,23 @@ class Cyl1DMesh(object): np.all(loc[:,1]<=self.vectorNz.max()), \ "Points outside of mesh" - + if locType=='fz': Q = sp.lil_matrix((loc.shape[0], self.nF), dtype=float) for i, iloc in enumerate(loc): # Point is on a z-interface - if np.any(np.abs(self.vectorNz-iloc[1])<0.001): + if np.any(np.abs(self.vectorNz-iloc[1])<0.001): dFz = self.gridFz-iloc #Distance to z faces dFz[dFz[:,0]>0,:] = np.inf #Looking for next face to the left... indL = np.argmin(np.sum(dFz**2, axis=1)) #Closest one if self.gridFz[indL,0] == self.vectorCCr.max(): #Point in outer half cell (linear extrapolation) - zFL = self.gridFz[indL,:] - zFLL = self.gridFz[indL-1,:] + zFL = self.gridFz[indL,:] + zFLL = self.gridFz[indL-1,:] Q[i, indL+self.nFr] = (iloc[0] - zFLL[0])/(zFL[0] - zFLL[0]) Q[i, indL+self.nFr-1] = -(iloc[0] - zFL[0])/(zFL[0] - zFLL[0]) else: - zFL = self.gridFz[indL,:] + zFL = self.gridFz[indL,:] zFR = self.gridFz[indL+1,:] Q[i,indL+self.nFr] = (zFR[0] - iloc[0])/(zFR[0] - zFL[0]) Q[i,indL+self.nFr+1] = (iloc[0] - zFL[0])/(zFR[0] - zFL[0]) @@ -400,7 +400,7 @@ class Cyl1DMesh(object): Q[i, indAL+self.nFr-1] = -(dzB/DZ)*(drL/DR) Q[i, indAL+self.nFr] = (dzB/DZ)*(drLL/DR) else: - indBR = indBL+1 # Face below and to the right + indBR = indBL+1 # Face below and to the right indAR = indAL + 1 # Face above and to the right zF_BR = self.gridFz[indBR,:] diff --git a/SimPEG/mesh/LogicallyOrthogonalMesh.py b/SimPEG/mesh/LogicallyOrthogonalMesh.py index 7b1e1bca..b510a754 100644 --- a/SimPEG/mesh/LogicallyOrthogonalMesh.py +++ b/SimPEG/mesh/LogicallyOrthogonalMesh.py @@ -38,7 +38,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): # Save nodes to private variable _gridN as vectors self._gridN = np.ones((nodes[0].size, self.dim)) for i, node_i in enumerate(nodes): - self._gridN[:, i] = mkvc(node_i) + self._gridN[:, i] = mkvc(node_i.astype(float)) def gridCC(): doc = "Cell-centered grid." diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index a3329c14..d5123c98 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -38,7 +38,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): assert len(h_i.shape) == 1, ("h[%i] must be a 1D numpy array." % i) # Ensure h contains 1D vectors - self._h = [mkvc(x) for x in h] + self._h = [mkvc(x.astype(float)) for x in h] def __str__(self): outStr = ' ---- {0:d}-D TensorMesh ---- '.format(self.dim) From 548ba9aa0a2d1c359aba28a99a06e539e7dfb065 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 23 Oct 2013 18:19:33 -0700 Subject: [PATCH 150/359] bug fixes to framework. --- SimPEG/forward/DCProblem.py | 67 +++++++++++++------------ SimPEG/inverse/Inversion.py | 45 +++++++++-------- SimPEG/inverse/Optimize.py | 4 +- SimPEG/mesh/DiffOperators.py | 62 +++++++++++++++++++++++ SimPEG/regularization/Regularization.py | 29 ++++++----- 5 files changed, 139 insertions(+), 68 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index 5aad45bd..5a011bb1 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -3,7 +3,7 @@ from SimPEG.forward import Problem, SyntheticProblem from SimPEG.tests import checkDerivative from SimPEG.utils import ModelBuilder, sdiag import numpy as np -import scipy as sp +import scipy.sparse as sp import scipy.sparse.linalg as linalg class DCProblem(Problem): @@ -104,14 +104,44 @@ class DCProblem(Problem): return Jtv + +def genTxRxmat(nelec, spacelec, surfloc, elecini, mesh): + """ Generate projection matrix (Q) and """ + elecend = 0.5+spacelec*(nelec-1) + elecLocR = np.linspace(elecini, elecend, nelec) + elecLocT = elecLocR+1 + nrx = nelec-1 + ntx = nelec-1 + q = np.zeros((mesh.nC, ntx)) + Q = np.zeros((mesh.nC, nrx)) + + for i in range(nrx): + + rxind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i])) + rxind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i+1])) + + txind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i])) + txind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i+1])) + + q[txind1,i] = 1 + q[txind2,i] = -1 + Q[rxind1,i] = 1 + Q[rxind2,i] = -1 + + Q = sp.csr_matrix(Q) + rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 + return q, Q, rxmidLoc + + + if __name__ == '__main__': from SimPEG.regularization import Regularization from SimPEG import inverse # Create the mesh - h1 = np.ones(100) - h2 = np.ones(100) + h1 = np.ones(10) + h2 = np.ones(10) mesh = TensorMesh([h1,h2]) # Create some parameters for the model @@ -153,14 +183,14 @@ if __name__ == '__main__': problem = DCProblem(mesh) problem.P = P problem.RHS = q - problem.W = Wd problem.dobs = dobs + problem.std = dobs*0 + 0.05 m0 = mesh.gridCC[:,0]*0+sig1 # print problem.misfit(m0) # print problem.misfit(mSynth) - opt = inverse.InexactGaussNewton() + opt = inverse.InexactGaussNewton(maxIterLS=20) reg = Regularization(mesh) inv = inverse.Inversion(problem, reg, opt) @@ -181,30 +211,3 @@ if __name__ == '__main__': - -def genTxRxmat(nelec, spacelec, surfloc, elecini, mesh): - """ Generate projection matrix (Q) and """ - elecend = 0.5+spacelec*(nelec-1) - elecLocR = np.linspace(elecini, elecend, nelec) - elecLocT = elecLocR+1 - nrx = nelec-1 - ntx = nelec-1 - q = np.zeros((mesh.nC, ntx)) - Q = np.zeros((mesh.nC, nrx)) - - for i in range(nrx): - - rxind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i])) - rxind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocR[i+1])) - - txind1 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i])) - txind2 = np.argwhere((mesh.gridCC[:,0]==surfloc) & (mesh.gridCC[:,1]==elecLocT[i+1])) - - q[txind1,i] = 1 - q[txind2,i] = -1 - Q[rxind1,i] = 1 - Q[rxind2,i] = -1 - - Q = sp.csr_matrix(Q) - rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 - return q, Q, rxmidLoc diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 8d92e15e..9fd10abd 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -1,5 +1,6 @@ import numpy as np -from SimPEG.utils import sdiag +import scipy.sparse as sp +from SimPEG.utils import sdiag, mkvc class Inversion(object): """docstring for Inversion""" @@ -16,7 +17,10 @@ class Inversion(object): """ Standard deviation weighting matrix. """ - return sdiag(1/self.prob.std) + if getattr(self,'_Wd',None) is None: + eps = np.linalg.norm(mkvc(self.prob.dobs),2)*1e-5 + self._Wd = 1/(abs(self.prob.dobs)*self.prob.std+eps) + return self._Wd def run(self, m0): m = m0 @@ -41,7 +45,7 @@ class Inversion(object): u = self.prob.field(m) phi_d = self.dataObj(m, u) - phi_m = self.modelObj(m) + phi_m = self.reg.modelObj(m) self._phi_d_last = phi_d self._phi_m_last = phi_m @@ -50,27 +54,24 @@ class Inversion(object): out = (f,) if return_g: - phi_dDeriv = self.dataObjDeriv(m, u) - phi_mDeriv = self.modelObjDeriv(m) + phi_dDeriv = self.dataObjDeriv(m, u=u) + phi_mDeriv = self.reg.modelObjDeriv(m) g = phi_dDeriv + self._beta * phi_mDeriv out += (g,) if return_H: def H_fun(v): - phi_d2Deriv = self.dataObj2Deriv(m, u, v) - phi_m2Deriv = self.modelObj2Deriv(m)*v + phi_d2Deriv = self.dataObj2Deriv(m, v, u=u) + phi_m2Deriv = self.reg.modelObj2Deriv(m)*v return phi_d2Deriv + self._beta * phi_m2Deriv - out += (H_fun,) + operator = sp.linalg.LinearOperator( (m.size, m.size), H_fun, dtype=float ) + out += (operator,) return out - def modelObj(self, m, u=None): - self.reg.misfit(m) - - def dataObj(self, m, u=None): """ :param numpy.array m: geophysical model @@ -87,7 +88,7 @@ class Inversion(object): Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. """ - R = self.Wd*self.prob.misfit(u=u) + R = self.Wd*self.prob.misfit(m, u=u) R = mkvc(R) return 0.5*R.dot(R) @@ -123,17 +124,17 @@ class Inversion(object): """ if u is None: - u = self.field(m) + u = self.prob.field(m) - R = self.W*(self.dpred(m, u=u) - self.dobs) + R = self.Wd*self.prob.misfit(m, u=u) dmisfit = 0 - for i in range(self.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) + for i in range(self.prob.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.prob.Jt(m, self.Wd[:,i]*R[:,i], u=u[:,i]) return dmisfit - def dataObj2Deriv(self, m, u=None): + def dataObj2Deriv(self, m, v, u=None): """ :param numpy.array m: geophysical model :param numpy.array u: fields @@ -167,12 +168,12 @@ class Inversion(object): """ if u is None: - u = self.field(m) + u = self.prob.field(m) - R = self.W*(self.dpred(m, u=u) - self.dobs) + R = self.Wd*self.prob.misfit(m, u=u) dmisfit = 0 - for i in range(self.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.Jt(m, self.W[:,i]*R[:,i], u=u[:,i]) + for i in range(self.prob.RHS.shape[1]): # Loop over each right hand side + dmisfit += self.prob.Jt(m, self.Wd[:,i] * self.Wd[:,i] * self.prob.J(m, v, u=u[:,i]), u=u[:,i]) return dmisfit diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 43776d33..1bfda72c 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -2,6 +2,7 @@ import numpy as np import matplotlib.pyplot as plt from SimPEG.utils import mkvc, sdiag norm = np.linalg.norm +import scipy.sparse as sp class Minimize(object): @@ -149,7 +150,8 @@ class GaussNewton(Minimize): class InexactGaussNewton(Minimize): name = 'InexactGaussNewton' def findSearchDirection(self): - return sparse.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) + p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) + return p class SteepestDescent(Minimize): diff --git a/SimPEG/mesh/DiffOperators.py b/SimPEG/mesh/DiffOperators.py index 110fe9bd..380e0d19 100644 --- a/SimPEG/mesh/DiffOperators.py +++ b/SimPEG/mesh/DiffOperators.py @@ -161,6 +161,68 @@ class DiffOperators(object): _cellGrad = None cellGrad = property(**cellGrad()) + def cellGradx(): + doc = "Cell centered Gradient in the x dimension. Has neumann boundary conditions." + + def fget(self): + if getattr(self, '_cellGradx', None) is None: + BC = ['neumann', 'neumann'] + n = self.n + if(self.dim == 1): + G1 = ddxCellGrad(n[0], BC) + elif(self.dim == 2): + G1 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC)) + elif(self.dim == 3): + G1 = kron3(speye(n[2]), speye(n[1]), ddxCellGrad(n[0], BC)) + # Compute areas of cell faces & volumes + S = self.r(self.area, 'F','Fx', 'V') + V = self.vol + self._cellGradx = sdiag(S)*G1*sdiag(1/V) + return self._cellGradx + return locals() + cellGradx = property(**cellGradx()) + + + def cellGrady(): + doc = "Cell centered Gradient in the x dimension. Has neumann boundary conditions." + def fget(self): + if self.dim < 2: + return None + if getattr(self, '_cellGrady', None) is None: + BC = ['neumann', 'neumann'] + n = self.n + if(self.dim == 2): + G2 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC)) + elif(self.dim == 3): + G2 = kron3(speye(n[2]), ddxCellGrad(n[1], BC), speye(n[0])) + # Compute areas of cell faces & volumes + S = self.r(self.area, 'F','Fy', 'V') + V = self.vol + self._cellGrady = sdiag(S)*G2*sdiag(1/V) + return self._cellGrady + return locals() + cellGrady = property(**cellGrady()) + + + + def cellGradz(): + doc = "Cell centered Gradient in the x dimension. Has neumann boundary conditions." + def fget(self): + if self.dim < 3: + return None + if getattr(self, '_cellGradz', None) is None: + BC = ['neumann', 'neumann'] + n = self.n + G3 = kron3(ddxCellGrad(n[2], BC), speye(n[1]), speye(n[0])) + # Compute areas of cell faces & volumes + S = self.r(self.area, 'F','Fz', 'V') + V = self.vol + self._cellGradz = sdiag(S)*G3*sdiag(1/V) + return self._cellGradz + return locals() + cellGradz = property(**cellGradz()) + + def edgeCurl(): doc = "Construct the 3D curl operator." diff --git a/SimPEG/regularization/Regularization.py b/SimPEG/regularization/Regularization.py index f0239875..7e211df6 100644 --- a/SimPEG/regularization/Regularization.py +++ b/SimPEG/regularization/Regularization.py @@ -1,10 +1,13 @@ from SimPEG.utils import sdiag +import numpy as np class Regularization(object): """docstring for Regularization""" @property def mref(self): + if getattr(self, '_mref', None) is None: + self._mref = np.zeros(self.mesh.nC); return self._mref @mref.setter def mref(self, value): @@ -12,25 +15,25 @@ class Regularization(object): @property def Wx(self): - if self._Wx is None: - self._Wx = mesh.cellGradx + if getattr(self, '_Wx', None) is None: + self._Wx = self.mesh.cellGradx return self._Wx @property def Wy(self): - if self._Wy is None: - self._Wy = mesh.cellGrady + if getattr(self, '_Wy', None) is None: + self._Wy = self.mesh.cellGrady return self._Wy @property def Wz(self): - if self._Wz is None: - self._Wz = mesh.cellGradz + if getattr(self, '_Wz', None) is None: + self._Wz = self.mesh.cellGradz return self._Wz @property def Ws(self): - if self._Ws is None: + if getattr(self,'_Ws', None) is None: self._Ws = sdiag(self.mesh.vol) return self._Ws @@ -87,12 +90,12 @@ class Regularization(object): mobjDeriv = self.alpha_s * self.Ws.T * ( self.Ws * mresid) - mobjDeriv += self.alpha_x * self.Wx.T * ( self.Wx * mresid) + mobjDeriv = mobjDeriv + self.alpha_x * self.Wx.T * ( self.Wx * mresid) if self.mesh.dim > 1: - mobjDeriv += self.alpha_y * self.Wy.T * ( self.Wy * mresid) + mobjDeriv = mobjDeriv + self.alpha_y * self.Wy.T * ( self.Wy * mresid) if self.mesh.dim > 2: - mobjDeriv += self.alpha_z * self.Wz.T * ( self.Wz * mresid) + mobjDeriv = mobjDeriv + self.alpha_z * self.Wz.T * ( self.Wz * mresid) return mobjDeriv @@ -102,12 +105,12 @@ class Regularization(object): mobj2Deriv = self.alpha_s * self.Ws.T * self.Ws - mobj2Deriv += self.alpha_x * self.Wx.T * self.Wx + mobj2Deriv = mobj2Deriv + self.alpha_x * self.Wx.T * self.Wx if self.mesh.dim > 1: - mobj2Deriv += self.alpha_y * self.Wy.T * self.Wy + mobj2Deriv = mobj2Deriv + self.alpha_y * self.Wy.T * self.Wy if self.mesh.dim > 2: - mobj2Deriv += self.alpha_z * self.Wz.T * self.Wz + mobj2Deriv = mobj2Deriv + self.alpha_z * self.Wz.T * self.Wz return mobj2Deriv From d94d3f7f374a69faa5752165f86b3a2e50c13bbc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 23 Oct 2013 18:35:37 -0700 Subject: [PATCH 151/359] =?UTF-8?q?fixes=20to=20inversion=20framework.=20D?= =?UTF-8?q?C=20problem=20is=20kinda=20working=E2=80=A6=3F!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SimPEG/forward/DCProblem.py | 24 +++++++++++++----------- SimPEG/inverse/Inversion.py | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index 5a011bb1..c2494daf 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -140,8 +140,8 @@ if __name__ == '__main__': from SimPEG import inverse # Create the mesh - h1 = np.ones(10) - h2 = np.ones(10) + h1 = np.ones(100) + h2 = np.ones(100) mesh = TensorMesh([h1,h2]) # Create some parameters for the model @@ -177,7 +177,7 @@ if __name__ == '__main__': dobs, Wd = synthetic.createData(mSynth, std=0.05) u = synthetic.field(mSynth) - mesh.plotImage(u[:,10], showIt=False) + # mesh.plotImage(u[:,10], showIt=False) # Now set up the problem to do some minimization problem = DCProblem(mesh) @@ -190,23 +190,25 @@ if __name__ == '__main__': # print problem.misfit(m0) # print problem.misfit(mSynth) - opt = inverse.InexactGaussNewton(maxIterLS=20) + opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=1) reg = Regularization(mesh) inv = inverse.Inversion(problem, reg, opt) - inv.run(m0) + m = inv.run(m0) + + mesh.plotImage(m,showIt=True) # Check Derivative - derChk = lambda m: [problem.misfit(m), problem.misfitDeriv(m)] + derChk = lambda m: [inv.dataObj(m), inv.dataObjDeriv(m)] checkDerivative(derChk, mSynth) # Adjoint Test - u = np.random.rand(mesh.nC) - v = np.random.rand(mesh.nC) - w = np.random.rand(dobs.shape[0]) - print w.dot(problem.J(mSynth, v, u=u)) - print v.dot(problem.Jt(mSynth, w, u=u)) + # u = np.random.rand(mesh.nC) + # v = np.random.rand(mesh.nC) + # w = np.random.rand(dobs.shape[0]) + # print w.dot(problem.J(mSynth, v, u=u)) + # print v.dot(problem.Jt(mSynth, w, u=u)) diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 9fd10abd..f217be83 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -22,6 +22,15 @@ class Inversion(object): self._Wd = 1/(abs(self.prob.dobs)*self.prob.std+eps) return self._Wd + @property + def phi_d_target(self): + if getattr(self, '_phi_d_target', None) is None: + return self.prob.dobs.size + return self._phi_d_target + @phi_d_target.setter + def phi_d_target(self, value): + self._phi_d_target = value + def run(self, m0): m = m0 self._iter = 0 @@ -30,13 +39,14 @@ class Inversion(object): m = self.opt.minimize(self.evalFunction,m) if self.stoppingCriteria(): break self._iter += 1 + return m def getBeta(self): - return 1 + return 1e3 def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) - self._STOP[0] = self._iter >= maxIter + self._STOP[0] = self._iter >= self.maxIter self._STOP[1] = self._phi_d_last <= self.phi_d_target return np.any(self._STOP) From f4c63d47a3ae58aae1a5a3520b16e86e8cc71de6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 24 Oct 2013 14:12:37 -0700 Subject: [PATCH 152/359] took for loop out of inversion framework. This has to be dealt with in the specific code, and is more flexible. --- SimPEG/forward/DCProblem.py | 91 +++++++++++++++++++++++++------------ SimPEG/inverse/Inversion.py | 11 ++--- SimPEG/inverse/Optimize.py | 10 +++- 3 files changed, 75 insertions(+), 37 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index c2494daf..48f25f12 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -1,7 +1,8 @@ from SimPEG.mesh import TensorMesh from SimPEG.forward import Problem, SyntheticProblem from SimPEG.tests import checkDerivative -from SimPEG.utils import ModelBuilder, sdiag +from SimPEG.utils import ModelBuilder, sdiag, mkvc +from SimPEG import Solver import numpy as np import scipy.sparse as sp import scipy.sparse.linalg as linalg @@ -48,7 +49,7 @@ class DCProblem(Problem): return phi - def J(self, m, v, u=None, solve=None): + def J(self, m, v, u=None): """ :param numpy.array m: model :param numpy.array v: vector to multiply @@ -70,6 +71,9 @@ class DCProblem(Problem): J(v) = - P ( A(m)^{-1} ( G\\text{sdiag}(Du)\\nabla_m(M(mT(m))) v ) ) """ + if u is None: + u = self.field(m) + P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad @@ -78,15 +82,19 @@ class DCProblem(Problem): mT_dm = self.modelTransformDeriv(m) dCdu = A - dCdm = D * ( sdiag( G * u ) * ( Av_dm * ( mT_dm * v ) ) ) - if solve is None: - solve = linalg.factorized(dCdu) + dCdm = np.empty_like(u) + for i, ui in enumerate(u.T): # loop over each column + dCdm[:, i] = D * ( sdiag( G * ui ) * ( Av_dm * ( mT_dm * v ) ) ) - Jv = - P * solve(dCdm) + solve = Solver(dCdu) + # solve = linalg.factorized(dCdu) + + Jv = - P * solve.solve(dCdm) return Jv - def Jt(self, m, v, u=None, solve=None): + def Jt(self, m, v, u=None): + """Takes data, turns it into a model..ish""" P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad @@ -95,12 +103,15 @@ class DCProblem(Problem): mT_dm = self.modelTransformDeriv(m) dCdu = A.T + solve = Solver(dCdu) - if solve is None: - solve = linalg.factorized(dCdu.tocsc()) - w = solve(P.T*v) + w = solve.solve(P.T*v) - Jtv = - mT_dm.T * ( Av_dm.T * ( sdiag( G * u ) * ( D.T * w ) ) ) + Jtv = 0 + for i, ui in enumerate(u.T): # loop over each column + Jtv += sdiag( G * ui ) * ( D.T * w[:,i] ) + + Jtv = - mT_dm.T * ( Av_dm.T * Jtv ) return Jtv @@ -138,6 +149,7 @@ if __name__ == '__main__': from SimPEG.regularization import Regularization from SimPEG import inverse + import matplotlib.pyplot as plt # Create the mesh h1 = np.ones(100) @@ -145,16 +157,16 @@ if __name__ == '__main__': mesh = TensorMesh([h1,h2]) # Create some parameters for the model - sig1 = 1 - sig2 = 0.01 + sig1 = np.log(1) + sig2 = np.log(0.01) # Create a synthetic model from a block in a half-space p0 = [20, 20] p1 = [50, 50] condVals = [sig1, sig2] mSynth = ModelBuilder.defineBlockConductivity(p0,p1,mesh.gridCC,condVals) - mesh.plotImage(mSynth, showIt=False) - + plt.colorbar(mesh.plotImage(mSynth)) + # plt.show() # Set up the projection nelec = 50 @@ -185,30 +197,51 @@ if __name__ == '__main__': problem.RHS = q problem.dobs = dobs problem.std = dobs*0 + 0.05 - m0 = mesh.gridCC[:,0]*0+sig1 + m0 = mesh.gridCC[:,0]*0+sig2 - # print problem.misfit(m0) - # print problem.misfit(mSynth) - opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=1) + + # Adjoint Test + u = np.random.rand(mesh.nC, problem.RHS.shape[1]) + v = np.random.rand(mesh.nC) + w = np.random.rand(*dobs.shape) + Jv = mkvc(problem.J(mSynth, v, u=u)) + print mkvc(w).dot(Jv) + print v.dot(problem.Jt(mSynth, w, u=u)) + + # Check Derivative + dm = np.random.randn(*m0.shape) + for alp in np.logspace(-2,-6, 5): + a = problem.dpred(m0) + b = problem.dpred(m0 + alp*dm) + c = problem.J(m0, alp*dm) + print np.linalg.norm(a-b), np.linalg.norm(a-b+c) + + + # derChk = lambda m: [problem.dpred(m), problem.J(mSynth,m)] + # checkDerivative(derChk, mSynth) + + + opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=3) reg = Regularization(mesh) inv = inverse.Inversion(problem, reg, opt) - m = inv.run(m0) - - mesh.plotImage(m,showIt=True) - # Check Derivative derChk = lambda m: [inv.dataObj(m), inv.dataObjDeriv(m)] checkDerivative(derChk, mSynth) - # Adjoint Test - # u = np.random.rand(mesh.nC) - # v = np.random.rand(mesh.nC) - # w = np.random.rand(dobs.shape[0]) - # print w.dot(problem.J(mSynth, v, u=u)) - # print v.dot(problem.Jt(mSynth, w, u=u)) + + print inv.dataObj(m0) + print inv.dataObj(mSynth) + + m = inv.run(m0) + + plt.colorbar(mesh.plotImage(m)) + print m + plt.show() + + diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index f217be83..fd166318 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -11,6 +11,7 @@ class Inversion(object): self.prob = prob self.reg = reg self.opt = opt + self.opt.parent = self @property def Wd(self): @@ -42,7 +43,7 @@ class Inversion(object): return m def getBeta(self): - return 1e3 + return 1e2 def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) @@ -138,9 +139,7 @@ class Inversion(object): R = self.Wd*self.prob.misfit(m, u=u) - dmisfit = 0 - for i in range(self.prob.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.prob.Jt(m, self.Wd[:,i]*R[:,i], u=u[:,i]) + dmisfit = self.prob.Jt(m, self.Wd * R, u=u) return dmisfit @@ -182,8 +181,6 @@ class Inversion(object): R = self.Wd*self.prob.misfit(m, u=u) - dmisfit = 0 - for i in range(self.prob.RHS.shape[1]): # Loop over each right hand side - dmisfit += self.prob.Jt(m, self.Wd[:,i] * self.Wd[:,i] * self.prob.J(m, v, u=u[:,i]), u=u[:,i]) + dmisfit = self.prob.Jt(m, self.Wd * self.Wd * self.prob.J(m, v, u=u), u=u) return dmisfit diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 1bfda72c..2545a381 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -63,6 +63,14 @@ class Minimize(object): return self.xc + @property + def parent(self): + """This is the parent of the optimization routine.""" + return getattr(self, '_parent', None) + @parent.setter + def parent(self, value): + self._parent = value + def startup(self, x0): self._iter = 0 self._iterLS = 0 @@ -150,7 +158,7 @@ class GaussNewton(Minimize): class InexactGaussNewton(Minimize): name = 'InexactGaussNewton' def findSearchDirection(self): - p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) + p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=5) return p From fc4294eb4dc6fe3f4f43c1c413ea5ccfc5011bcc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 24 Oct 2013 15:11:48 -0700 Subject: [PATCH 153/359] Added A sample Linear problem that runs! --- SimPEG/forward/LinearProblem.py | 91 +++++++++++++++++++++++++ SimPEG/forward/Problem.py | 22 +++--- SimPEG/inverse/Inversion.py | 11 ++- SimPEG/inverse/Optimize.py | 2 +- SimPEG/regularization/Regularization.py | 20 +++--- 5 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 SimPEG/forward/LinearProblem.py diff --git a/SimPEG/forward/LinearProblem.py b/SimPEG/forward/LinearProblem.py new file mode 100644 index 00000000..d8f3621e --- /dev/null +++ b/SimPEG/forward/LinearProblem.py @@ -0,0 +1,91 @@ +import numpy as np +from SimPEG.mesh import TensorMesh +from SimPEG.forward import Problem +from SimPEG.regularization import Regularization +from SimPEG.inverse import * +import matplotlib.pyplot as plt + +N = 100 +h = np.ones(N)/N +M = TensorMesh([h]) + +nk = 20 +jk = np.linspace(1.,20.,nk) +p = -0.25 +q = 0.25 + + + +g = lambda k: np.exp(p*jk[k]*M.vectorCCx)*np.cos(2*np.pi*q*jk[k]*M.vectorCCx) + +G = np.empty((nk, M.nC)) + +for i in range(nk): + G[i,:] = g(i) + + + +plt.figure(1) +for i in range(nk): + plt.plot(G[i,:]) + + +m_true = np.zeros(M.nC) +m_true[M.vectorCCx > 0.3] = 1. +m_true[M.vectorCCx > 0.45] = -0.5 +m_true[M.vectorCCx > 0.6] = 0 + + +d_true = G.dot(m_true) +noise = 0.1 * np.random.rand(d_true.size) + +d_obs = d_true + noise + +# plt.figure(3) +# plt.plot(d_true,'-o') +# plt.plot(d_obs,'r-o') + + + +class LinearProblem(Problem): + """docstring for LinearProblem""" + + def dpred(self, m, u=None): + return self.G.dot(m) + + def J(self, m, v, u=None): + return G.dot(v) + + def Jt(self, m, v, u=None): + return G.T.dot(v) + + def modelTransform(self, m): + return m + + def modelTransformDeriv(self, m): + return sp.eye(m.size) + +prob = LinearProblem(M) +prob.G = G +prob.dobs = d_obs +prob.std = np.ones_like(d_obs)*0.1 + +reg = Regularization(M) + +opt = InexactGaussNewton(maxIter=10) + +inv = Inversion(prob,reg,opt) + +m0 = np.zeros_like(m_true) + +mrec = inv.run(m0) + + +plt.figure(2) + +plt.plot(M.vectorCCx, m_true, 'b-') +plt.plot(M.vectorCCx, mrec, 'r-') + + + +plt.show() diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 0333b8b4..32dad675 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -82,6 +82,17 @@ class Problem(object): def dobs(self, value): self._dobs = value + def dpred(self, m, u=None): + """ + Predicted data. + + .. math:: + d_\\text{pred} = Pu(m) + """ + if u is None: + u = self.field(m) + return self.P*u + def misfit(self, m, u=None): """ :param numpy.array m: geophysical model @@ -152,17 +163,6 @@ class Problem(object): """ pass - def dpred(self, m, u=None): - """ - Predicted data. - - .. math:: - d_\\text{pred} = Pu(m) - """ - if u is None: - u = self.field(m) - return self.P*u - def modelTransform(self, m): """ :param numpy.array m: model diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index fd166318..cf96676f 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -25,8 +25,15 @@ class Inversion(object): @property def phi_d_target(self): + """ + target for phi_d + + By default this is the number of data. + + Note that we do not set the target if it is None, but we return the default value. + """ if getattr(self, '_phi_d_target', None) is None: - return self.prob.dobs.size + return self.prob.dobs.size # return self._phi_d_target @phi_d_target.setter def phi_d_target(self, value): @@ -43,7 +50,7 @@ class Inversion(object): return m def getBeta(self): - return 1e2 + return 1e-2 def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 2545a381..4ac96d6a 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -22,7 +22,7 @@ class Minimize(object): tolF = 1e-4 tolX = 1e-4 tolG = 1e-4 - eps = 1e-16 + eps = 1e-5 printIter = [] # push to here if you want to print these on iter diff --git a/SimPEG/regularization/Regularization.py b/SimPEG/regularization/Regularization.py index 7e211df6..6f5970e6 100644 --- a/SimPEG/regularization/Regularization.py +++ b/SimPEG/regularization/Regularization.py @@ -13,29 +13,33 @@ class Regularization(object): def mref(self, value): self._mref = value + @property + def Ws(self): + if getattr(self,'_Ws', None) is None: + self._Ws = sdiag(self.mesh.vol) + return self._Ws + @property def Wx(self): if getattr(self, '_Wx', None) is None: - self._Wx = self.mesh.cellGradx + a = self.mesh.r(self.mesh.area,'F','Fx','V') + self._Wx = sdiag(a)*self.mesh.cellGradx return self._Wx @property def Wy(self): if getattr(self, '_Wy', None) is None: - self._Wy = self.mesh.cellGrady + a = self.mesh.r(self.mesh.area,'F','Fy','V') + self._Wy = sdiag(a)*self.mesh.cellGrady return self._Wy @property def Wz(self): if getattr(self, '_Wz', None) is None: - self._Wz = self.mesh.cellGradz + a = self.mesh.r(self.mesh.area,'F','Fz','V') + self._Wz = sdiag(a)*self.mesh.cellGradz return self._Wz - @property - def Ws(self): - if getattr(self,'_Ws', None) is None: - self._Ws = sdiag(self.mesh.vol) - return self._Ws def __init__(self, mesh): From d974843d9871b66306f03b3b06b6838c21e9646b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 24 Oct 2013 15:33:07 -0700 Subject: [PATCH 154/359] Moved model transforms to different file. --- SimPEG/forward/DCProblem.py | 4 +-- SimPEG/forward/ModelTransforms.py | 49 +++++++++++++++++++++++++++++++ SimPEG/forward/Problem.py | 26 ++++------------ SimPEG/forward/__init__.py | 1 + 4 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 SimPEG/forward/ModelTransforms.py diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index 48f25f12..a2ab3967 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -1,5 +1,5 @@ from SimPEG.mesh import TensorMesh -from SimPEG.forward import Problem, SyntheticProblem +from SimPEG.forward import Problem, SyntheticProblem, ModelTransforms from SimPEG.tests import checkDerivative from SimPEG.utils import ModelBuilder, sdiag, mkvc from SimPEG import Solver @@ -7,7 +7,7 @@ import numpy as np import scipy.sparse as sp import scipy.sparse.linalg as linalg -class DCProblem(Problem): +class DCProblem(Problem, ModelTransforms.LogModel): """ **DCProblem** diff --git a/SimPEG/forward/ModelTransforms.py b/SimPEG/forward/ModelTransforms.py new file mode 100644 index 00000000..8b7dc65a --- /dev/null +++ b/SimPEG/forward/ModelTransforms.py @@ -0,0 +1,49 @@ +import numpy as np + + +class LogModel(object): + """docstring for LogModel""" + def modelTransform(self, m): + """ + :param numpy.array m: model + :rtype: numpy.array + :return: transformed model + + The modelTransform changes the model into the physical property. + + A common example of this is to invert for electrical conductivity + in log space. In this case, your model will be log(sigma) and to + get back to sigma, you can take the exponential: + + .. math:: + + m = \log{\sigma} + + \exp{m} = \exp{\log{\sigma}} = \sigma + """ + return np.exp(mkvc(m)) + + def modelTransformDeriv(self, m): + """ + :param numpy.array m: model + :rtype: scipy.csr_matrix + :return: derivative of transformed model + + The modelTransform changes the model into the physical property. + The modelTransformDeriv provides the derivative of the modelTransform. + + If the model transform is: + + .. math:: + + m = \log{\sigma} + + \exp{m} = \exp{\log{\sigma}} = \sigma + + Then the derivative is: + + .. math:: + + \\frac{\partial \exp{m}}{\partial m} = \\text{sdiag}(\exp{m}) + """ + return sdiag(np.exp(mkvc(m))) diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 32dad675..679e8686 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -175,13 +175,8 @@ class Problem(object): in log space. In this case, your model will be log(sigma) and to get back to sigma, you can take the exponential: - .. math:: - - m = \log{\sigma} - - \exp{m} = \exp{\log{\sigma}} = \sigma """ - return np.exp(mkvc(m)) + return m def modelTransformDeriv(self, m): """ @@ -191,22 +186,8 @@ class Problem(object): The modelTransform changes the model into the physical property. The modelTransformDeriv provides the derivative of the modelTransform. - - If the model transform is: - - .. math:: - - m = \log{\sigma} - - \exp{m} = \exp{\log{\sigma}} = \sigma - - Then the derivative is: - - .. math:: - - \\frac{\partial \exp{m}}{\partial m} = \\text{sdiag}(\exp{m}) """ - return sdiag(np.exp(mkvc(m))) + return sp.eye(m.size) @@ -239,3 +220,6 @@ class SyntheticProblem(object): eps = np.linalg.norm(mkvc(dobs),2)*1e-5 Wd = 1/(abs(dobs)*std+eps) return dobs, Wd + + + diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py index 5e326a59..5f9dafaf 100644 --- a/SimPEG/forward/__init__.py +++ b/SimPEG/forward/__init__.py @@ -1,2 +1,3 @@ from Problem import * from DCProblem import DCProblem +import ModelTransforms From 3bbe258eabab0d5f6022dd065c7841407d9a0fed Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 25 Oct 2013 11:14:21 -0700 Subject: [PATCH 155/359] beta schedualing --- SimPEG/inverse/BetaSchedual.py | 12 ++++++++++++ SimPEG/inverse/Inversion.py | 12 ++++++++++-- SimPEG/inverse/Optimize.py | 1 + SimPEG/inverse/__init__.py | 1 + 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 SimPEG/inverse/BetaSchedual.py diff --git a/SimPEG/inverse/BetaSchedual.py b/SimPEG/inverse/BetaSchedual.py new file mode 100644 index 00000000..62fe8416 --- /dev/null +++ b/SimPEG/inverse/BetaSchedual.py @@ -0,0 +1,12 @@ + + +class Cooling(object): + """Simple Beta Schedual""" + + beta0 = 1.e6 + beta_coolingFactor = 5. + + def getBeta(self): + if self._beta is None: + return beta0 + return self._beta * beta_coolingFactor diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index cf96676f..b30b666e 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -1,8 +1,9 @@ import numpy as np import scipy.sparse as sp from SimPEG.utils import sdiag, mkvc +from SimPEG.inverse import BS -class Inversion(object): +class Inversion(object, BetaSchedual.Cooling): """docstring for Inversion""" maxIter = 10 @@ -42,6 +43,7 @@ class Inversion(object): def run(self, m0): m = m0 self._iter = 0 + self._beta = None while True: self._beta = self.getBeta() m = self.opt.minimize(self.evalFunction,m) @@ -49,8 +51,13 @@ class Inversion(object): self._iter += 1 return m + beta0 = 1.e6 + beta_coolingFactor = 5. + def getBeta(self): - return 1e-2 + if self._beta is None: + return beta0 + return self._beta * beta_coolingFactor def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) @@ -191,3 +198,4 @@ class Inversion(object): dmisfit = self.prob.Jt(m, self.Wd * self.Wd * self.prob.J(m, v, u=u), u=u) return dmisfit + diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 4ac96d6a..ac0045c4 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -158,6 +158,7 @@ class GaussNewton(Minimize): class InexactGaussNewton(Minimize): name = 'InexactGaussNewton' def findSearchDirection(self): + # TODO: use BFGS as a preconditioner or gauss sidel of the WtW or solve WtW directly p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=5) return p diff --git a/SimPEG/inverse/__init__.py b/SimPEG/inverse/__init__.py index c4ca335b..2ca95fb5 100644 --- a/SimPEG/inverse/__init__.py +++ b/SimPEG/inverse/__init__.py @@ -1,2 +1,3 @@ from Optimize import * from Inversion import * +import BetaSchedual From dbd24b71c1276cb590570fdb0ed567d4c28d4259 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 14:16:50 -0700 Subject: [PATCH 156/359] Added kwargs to the inversion. can use these to initiate your inversion object. --- SimPEG/forward/LinearProblem.py | 10 ++-------- SimPEG/inverse/Inversion.py | 20 ++++++++++++++------ SimPEG/inverse/Optimize.py | 6 +++--- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/SimPEG/forward/LinearProblem.py b/SimPEG/forward/LinearProblem.py index d8f3621e..2260f8db 100644 --- a/SimPEG/forward/LinearProblem.py +++ b/SimPEG/forward/LinearProblem.py @@ -59,12 +59,6 @@ class LinearProblem(Problem): def Jt(self, m, v, u=None): return G.T.dot(v) - def modelTransform(self, m): - return m - - def modelTransformDeriv(self, m): - return sp.eye(m.size) - prob = LinearProblem(M) prob.G = G prob.dobs = d_obs @@ -72,9 +66,9 @@ prob.std = np.ones_like(d_obs)*0.1 reg = Regularization(M) -opt = InexactGaussNewton(maxIter=10) +opt = InexactGaussNewton(maxIter=20) -inv = Inversion(prob,reg,opt) +inv = Inversion(prob,reg,opt,beta0=1e-4) m0 = np.zeros_like(m_true) diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index b30b666e..02a81daa 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -1,18 +1,26 @@ import numpy as np import scipy.sparse as sp from SimPEG.utils import sdiag, mkvc -from SimPEG.inverse import BS -class Inversion(object, BetaSchedual.Cooling): +class Inversion(object): """docstring for Inversion""" maxIter = 10 - def __init__(self, prob, reg, opt): + def __init__(self, prob, reg, opt, **kwargs): self.prob = prob self.reg = reg self.opt = opt self.opt.parent = self + self.setKwargs(**kwargs) + + def setKwargs(self, **kwargs): + # Set the variables, throw an error if they don't exist. + for attr in kwargs: + if hasattr(self, attr): + setattr(self, attr, kwargs[attr]) + else: + raise Exception('%s attr is not recognized' % attr) @property def Wd(self): @@ -51,13 +59,13 @@ class Inversion(object, BetaSchedual.Cooling): self._iter += 1 return m - beta0 = 1.e6 + beta0 = 1.e2 beta_coolingFactor = 5. def getBeta(self): if self._beta is None: - return beta0 - return self._beta * beta_coolingFactor + return self.beta0 + return self._beta * self.beta_coolingFactor def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index ac0045c4..9e3b5463 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -19,9 +19,9 @@ class Minimize(object): maxIterLS = 10 LSreduction = 1e-4 LSshorten = 0.5 - tolF = 1e-4 - tolX = 1e-4 - tolG = 1e-4 + tolF = 1e-1 + tolX = 1e-1 + tolG = 1e-1 eps = 1e-5 printIter = [] # push to here if you want to print these on iter From 5cbc980b9c283bf2fbaef1c29245aa1a6786fc25 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 15:55:42 -0700 Subject: [PATCH 157/359] Mixins work differently than I thought, this fixes the DCProblem code. --- SimPEG/forward/DCProblem.py | 2 +- SimPEG/forward/ModelTransforms.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index a2ab3967..b8e8248d 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -7,7 +7,7 @@ import numpy as np import scipy.sparse as sp import scipy.sparse.linalg as linalg -class DCProblem(Problem, ModelTransforms.LogModel): +class DCProblem(ModelTransforms.LogModel, Problem): """ **DCProblem** diff --git a/SimPEG/forward/ModelTransforms.py b/SimPEG/forward/ModelTransforms.py index 8b7dc65a..ea89b974 100644 --- a/SimPEG/forward/ModelTransforms.py +++ b/SimPEG/forward/ModelTransforms.py @@ -1,5 +1,5 @@ import numpy as np - +from SimPEG.utils import mkvc, sdiag class LogModel(object): """docstring for LogModel""" From 1555caa7758aa46d5771a3221391c171fbfd645e Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 16:02:04 -0700 Subject: [PATCH 158/359] Changed to SimPEG solver for DC problem. --- SimPEG/forward/DCProblem.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index b8e8248d..c2a615ed 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -40,13 +40,8 @@ class DCProblem(ModelTransforms.LogModel, Problem): def field(self, m): A = self.createMatrix(m) - solve = linalg.factorized(A) - - nRHSs = self.RHS.shape[1] # Number of RHSs - phi = np.zeros((self.mesh.nC, nRHSs)) + np.nan - for ii in range(nRHSs): - phi[:,ii] = solve(self.RHS[:,ii]) - + solve = Solver(A) + phi = solve.solve(self.RHS) return phi def J(self, m, v, u=None): From 49d08f3245d3df883d18902a3cd5f15bb849bd83 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 16:05:17 -0700 Subject: [PATCH 159/359] add factorize option to SimPEG.Solver --- SimPEG/Solver.py | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/SimPEG/Solver.py b/SimPEG/Solver.py index 2087ef5f..cbd4a3ea 100644 --- a/SimPEG/Solver.py +++ b/SimPEG/Solver.py @@ -36,21 +36,27 @@ class Solver(object): del self.dsolve self.dsolve = None - def solveDirect(self, b, backend='scipy'): + def solveDirect(self, b, factorize=False, backend='scipy'): assert np.shape(self.A)[1] == np.shape(b)[0], 'Dimension mismatch' - if self.dsolve is None: + if factorize and self.dsolve is None: self.A = self.A.tocsc() # for efficiency self.dsolve = linalg.factorized(self.A) if len(b.shape) == 1 or b.shape[1] == 1: # Just one RHS - return self.dsolve(b) + if factorize: + return self.dsolve(b) + else: + return linalg.dsolve.spsolve(self.A, b) # Multiple RHSs X = np.empty_like(b) for i in range(b.shape[1]): - X[:,i] = self.dsolve(b[:,i]) + if factorize: + X[:,i] = self.dsolve(b[:,i]) + else: + X[:,i] = linalg.dsolve.spsolve(self.A,b[:,i]) return X @@ -73,3 +79,33 @@ class Solver(object): for i in range(b.shape[1]): X[:,i] = b[:,i]/diagA return X + + +if __name__ == '__main__': + from SimPEG.mesh import TensorMesh + from time import time + h1 = np.ones(20)*100. + h2 = np.ones(20)*100. + h3 = np.ones(20)*100. + + h = [h1,h2,h3] + + M = TensorMesh(h) + + D = M.faceDiv + G = M.cellGrad + Msig = M.getFaceMass() + A = D*Msig*G + + rhs = np.random.rand(M.nC) + + + tic = time() + solve = Solver(A, options={'factorize':True}) + x = solve.solve(rhs) + print 'Factorized', time() - tic + tic = time() + solve = Solver(A, options={'factorize':False}) + x = solve.solve(rhs) + print 'spsolve', time() - tic + From 86c1080631d2213ac8402a62fd131b5ae91bf2e3 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 16:19:02 -0700 Subject: [PATCH 160/359] Documentation updates. --- SimPEG/forward/LinearProblem.py | 126 +++++++++--------- SimPEG/forward/__init__.py | 1 + .../{BetaSchedual.py => BetaSchedule.py} | 2 +- SimPEG/inverse/__init__.py | 2 +- docs/api_Optimize.rst | 15 +++ docs/api_Problem.rst | 10 +- 6 files changed, 89 insertions(+), 67 deletions(-) rename SimPEG/inverse/{BetaSchedual.py => BetaSchedule.py} (86%) diff --git a/SimPEG/forward/LinearProblem.py b/SimPEG/forward/LinearProblem.py index 2260f8db..d30a5b4d 100644 --- a/SimPEG/forward/LinearProblem.py +++ b/SimPEG/forward/LinearProblem.py @@ -5,47 +5,6 @@ from SimPEG.regularization import Regularization from SimPEG.inverse import * import matplotlib.pyplot as plt -N = 100 -h = np.ones(N)/N -M = TensorMesh([h]) - -nk = 20 -jk = np.linspace(1.,20.,nk) -p = -0.25 -q = 0.25 - - - -g = lambda k: np.exp(p*jk[k]*M.vectorCCx)*np.cos(2*np.pi*q*jk[k]*M.vectorCCx) - -G = np.empty((nk, M.nC)) - -for i in range(nk): - G[i,:] = g(i) - - - -plt.figure(1) -for i in range(nk): - plt.plot(G[i,:]) - - -m_true = np.zeros(M.nC) -m_true[M.vectorCCx > 0.3] = 1. -m_true[M.vectorCCx > 0.45] = -0.5 -m_true[M.vectorCCx > 0.6] = 0 - - -d_true = G.dot(m_true) -noise = 0.1 * np.random.rand(d_true.size) - -d_obs = d_true + noise - -# plt.figure(3) -# plt.plot(d_true,'-o') -# plt.plot(d_obs,'r-o') - - class LinearProblem(Problem): """docstring for LinearProblem""" @@ -59,27 +18,72 @@ class LinearProblem(Problem): def Jt(self, m, v, u=None): return G.T.dot(v) -prob = LinearProblem(M) -prob.G = G -prob.dobs = d_obs -prob.std = np.ones_like(d_obs)*0.1 +if __name__ == '__main__': + N = 100 + h = np.ones(N)/N + M = TensorMesh([h]) -reg = Regularization(M) - -opt = InexactGaussNewton(maxIter=20) - -inv = Inversion(prob,reg,opt,beta0=1e-4) - -m0 = np.zeros_like(m_true) - -mrec = inv.run(m0) - - -plt.figure(2) - -plt.plot(M.vectorCCx, m_true, 'b-') -plt.plot(M.vectorCCx, mrec, 'r-') + nk = 20 + jk = np.linspace(1.,20.,nk) + p = -0.25 + q = 0.25 -plt.show() + g = lambda k: np.exp(p*jk[k]*M.vectorCCx)*np.cos(2*np.pi*q*jk[k]*M.vectorCCx) + + G = np.empty((nk, M.nC)) + + for i in range(nk): + G[i,:] = g(i) + + + + plt.figure(1) + for i in range(nk): + plt.plot(G[i,:]) + + + m_true = np.zeros(M.nC) + m_true[M.vectorCCx > 0.3] = 1. + m_true[M.vectorCCx > 0.45] = -0.5 + m_true[M.vectorCCx > 0.6] = 0 + + + d_true = G.dot(m_true) + noise = 0.1 * np.random.rand(d_true.size) + + d_obs = d_true + noise + + # plt.figure(3) + # plt.plot(d_true,'-o') + # plt.plot(d_obs,'r-o') + + + + + + prob = LinearProblem(M) + prob.G = G + prob.dobs = d_obs + prob.std = np.ones_like(d_obs)*0.1 + + reg = Regularization(M) + + opt = InexactGaussNewton(maxIter=20) + + inv = Inversion(prob,reg,opt,beta0=1e-4) + + m0 = np.zeros_like(m_true) + + mrec = inv.run(m0) + + + plt.figure(2) + + plt.plot(M.vectorCCx, m_true, 'b-') + plt.plot(M.vectorCCx, mrec, 'r-') + + + + plt.show() diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py index 5f9dafaf..a7c58967 100644 --- a/SimPEG/forward/__init__.py +++ b/SimPEG/forward/__init__.py @@ -1,3 +1,4 @@ from Problem import * from DCProblem import DCProblem +from LinearProblem import LinearProblem import ModelTransforms diff --git a/SimPEG/inverse/BetaSchedual.py b/SimPEG/inverse/BetaSchedule.py similarity index 86% rename from SimPEG/inverse/BetaSchedual.py rename to SimPEG/inverse/BetaSchedule.py index 62fe8416..2c633a6a 100644 --- a/SimPEG/inverse/BetaSchedual.py +++ b/SimPEG/inverse/BetaSchedule.py @@ -1,7 +1,7 @@ class Cooling(object): - """Simple Beta Schedual""" + """Simple Beta Schedule""" beta0 = 1.e6 beta_coolingFactor = 5. diff --git a/SimPEG/inverse/__init__.py b/SimPEG/inverse/__init__.py index 2ca95fb5..14bddce7 100644 --- a/SimPEG/inverse/__init__.py +++ b/SimPEG/inverse/__init__.py @@ -1,3 +1,3 @@ from Optimize import * from Inversion import * -import BetaSchedual +import BetaSchedule diff --git a/docs/api_Optimize.rst b/docs/api_Optimize.rst index 9765bd3b..d726b5f8 100644 --- a/docs/api_Optimize.rst +++ b/docs/api_Optimize.rst @@ -6,3 +6,18 @@ Optimize .. automodule:: SimPEG.inverse.Optimize :members: :undoc-members: + + +Inversion +********* + +.. automodule:: SimPEG.inverse.Inversion + :members: + :undoc-members: + +Beta Schedule +************* + +.. automodule:: SimPEG.inverse.BetaSchedule + :members: + :undoc-members: diff --git a/docs/api_Problem.rst b/docs/api_Problem.rst index 83250f3e..068e30da 100644 --- a/docs/api_Problem.rst +++ b/docs/api_Problem.rst @@ -13,14 +13,16 @@ Problem DCProblem ********* -.. automodule:: SimPEG.forward.DCProblem.DCProblem +.. automodule:: SimPEG.forward.DCProblem :members: :undoc-members: -DCutils -******* -.. automodule:: SimPEG.forward.DCProblem.DCutils +Linear Problem +************** + +.. automodule:: SimPEG.forward.LinearProblem :members: :undoc-members: + From c33c9bee55e65485f36b8c116ff38369342bd9cb Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 30 Oct 2013 22:42:25 -0600 Subject: [PATCH 161/359] Added forward and backwards solvers implemented in python. Added tests for direct solvers. --- SimPEG/Solver.py | 39 +++++++++++-- SimPEG/tests/test_Solver.py | 111 ++++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 SimPEG/tests/test_Solver.py diff --git a/SimPEG/Solver.py b/SimPEG/Solver.py index cbd4a3ea..a9105c84 100644 --- a/SimPEG/Solver.py +++ b/SimPEG/Solver.py @@ -1,4 +1,5 @@ import numpy as np +import scipy.sparse as sparse import scipy.sparse.linalg as linalg @@ -64,10 +65,36 @@ class Solver(object): pass def solveBackward(self, b): - pass + "Perform a backwards solve with upper triangular A in CSR format." + if type(self.A) is not sparse.csr.csr_matrix: + from scipy.sparse import csr_matrix + self.A = csr_matrix(self.A) + vals = self.A.data + rowptr = self.A.indptr + colind = self.A.indices + x = np.empty_like(b) # empty() is faster than zeros(). + for i in reversed(xrange(self.A.shape[0])): + ith_row = vals[rowptr[i] : rowptr[i+1]] + cols = colind[rowptr[i] : rowptr[i+1]] + x_vals = x[cols] + x[i] = (b[i] - np.dot(ith_row[1:], x_vals[1:])) / ith_row[0] + return x def solveForward(self, b): - pass + "Perform a forward solve with lower triangular A in CSR format." + if type(self.A) is not sparse.csr.csr_matrix: + from scipy.sparse import csr_matrix + self.A = csr_matrix(self.A) + vals = self.A.data + rowptr = self.A.indptr + colind = self.A.indices + x = np.empty_like(b) # empty() is faster than zeros(). + for i in xrange(self.A.shape[0]): + ith_row = vals[rowptr[i] : rowptr[i+1]] + cols = colind[rowptr[i] : rowptr[i+1]] + x_vals = x[cols] + x[i] = (b[i] - np.dot(ith_row[:-1], x_vals[:-1])) / ith_row[-1] + return x def solveDiagonal(self, b): diagA = self.A.diagonal() @@ -96,16 +123,20 @@ if __name__ == '__main__': G = M.cellGrad Msig = M.getFaceMass() A = D*Msig*G + A[0,0] *= 10 # remove the constant null space from the matrix - rhs = np.random.rand(M.nC) - + e = np.ones(M.nC) + rhs = A.dot(e) tic = time() solve = Solver(A, options={'factorize':True}) x = solve.solve(rhs) print 'Factorized', time() - tic + print np.linalg.norm(e-x,np.inf) tic = time() solve = Solver(A, options={'factorize':False}) x = solve.solve(rhs) print 'spsolve', time() - tic + print np.linalg.norm(e-x,np.inf) + diff --git a/SimPEG/tests/test_Solver.py b/SimPEG/tests/test_Solver.py new file mode 100644 index 00000000..9b5cc0e7 --- /dev/null +++ b/SimPEG/tests/test_Solver.py @@ -0,0 +1,111 @@ +import unittest +from SimPEG import Solver +from SimPEG.mesh import TensorMesh +from SimPEG.utils import sdiag +import numpy as np +import scipy.sparse as sparse + +TOL = 1e-10 +numRHS = 5 + + +class TestSolver(unittest.TestCase): + + def setUp(self): + h1 = np.ones(10)*100. + h2 = np.ones(10)*100. + h3 = np.ones(10)*100. + + h = [h1,h2,h3] + + M = TensorMesh(h) + + D = M.faceDiv + G = M.cellGrad + Msig = M.getFaceMass() + A = D*Msig*G + A[0,0] *= 10 # remove the constant null space from the matrix + + self.A = A + self.M = M + + def test_directFactored_1(self): + solve = Solver(self.A, doDirect=True, flag=None, options={'factorize':True,'backend':'scipy'}) + e = np.ones(self.M.nC) + rhs = self.A.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + + def test_directFactored_M(self): + solve = Solver(self.A, doDirect=True, flag=None, options={'factorize':True,'backend':'scipy'}) + e = np.ones((self.M.nC,numRHS)) + rhs = self.A.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directSpsolve_1(self): + solve = Solver(self.A, doDirect=True, flag=None, options={'factorize':False,'backend':'scipy'}) + e = np.ones(self.M.nC) + rhs = self.A.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directSpsolve_M(self): + solve = Solver(self.A, doDirect=True, flag=None, options={'factorize':False,'backend':'scipy'}) + e = np.ones((self.M.nC, numRHS)) + rhs = self.A.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directLower_1(self): + AL = sparse.tril(self.A) + solve = Solver(AL, doDirect=True, flag='L', options={}) + e = np.ones(self.M.nC) + rhs = AL.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directLower_M(self): + AL = sparse.tril(self.A) + solve = Solver(AL, doDirect=True, flag='L', options={}) + e = np.ones((self.M.nC,numRHS)) + rhs = AL.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directUpper_1(self): + AU = sparse.triu(self.A) + solve = Solver(AU, doDirect=True, flag='U', options={}) + e = np.ones(self.M.nC) + rhs = AU.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directUpper_M(self): + AU = sparse.triu(self.A) + solve = Solver(AU, doDirect=True, flag='U', options={}) + e = np.ones((self.M.nC,numRHS)) + rhs = AU.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directDiagonal_1(self): + AD = sdiag(self.A.diagonal()) + solve = Solver(AD, doDirect=True, flag='D', options={}) + e = np.ones(self.M.nC) + rhs = AD.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + def test_directDiagonal_M(self): + AD = sdiag(self.A.diagonal()) + solve = Solver(AD, doDirect=True, flag='D', options={}) + e = np.ones((self.M.nC,numRHS)) + rhs = AD.dot(e) + x = solve.solve(rhs) + self.assertTrue(np.linalg.norm(e-x,np.inf) < TOL, True) + + +if __name__ == '__main__': + unittest.main() From 3f843b28439849fe29f0318ce26fd4de53fcd2d1 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 30 Oct 2013 23:00:42 -0600 Subject: [PATCH 162/359] Added documentation for SimPEG.Solver --- SimPEG/Solver.py | 79 +++++++++++++++++++++++++++++++++++++++++---- docs/api_Solver.rst | 9 ++++++ docs/index.rst | 1 + 3 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 docs/api_Solver.rst diff --git a/SimPEG/Solver.py b/SimPEG/Solver.py index a9105c84..127a8c9f 100644 --- a/SimPEG/Solver.py +++ b/SimPEG/Solver.py @@ -4,9 +4,30 @@ import scipy.sparse.linalg as linalg class Solver(object): - """docstring for Solver""" - def __init__(self, A, doDirect=True, flag=None, options={}): + """ + Solver is a light wrapper on the various types of + linear solvers available in python. + :param scipy.sparse A: Matrix + :param bool doDirect: if you want a direct solver + :param string flag: Matrix type flag for special solves: [None, 'L', 'U', 'D'] + :param dict options: options which are passed to each sub solver, see each for details. + :rtype: Solver + :return: Solver + + To use for direct solvers:: + + solve = Solver(A, doDirect=True, flag=None, options={'factorize':True,'backend':'scipy'}) + x = solve.solve(rhs) + + Or in one line:: + + x = Solver(A).solve(rhs) + + The flag can be set to None, 'L', 'U', or 'D', for general, lower, upper, and diagonal matrices, respectively. + + """ + def __init__(self, A, doDirect=True, flag=None, options={}): assert type(doDirect) is bool, 'doDirect must be a boolean' assert flag in [None, 'L', 'U', 'D'], "flag must be set to None, 'L', 'U', or 'D'" @@ -18,6 +39,17 @@ class Solver(object): self.options = options def solve(self, b): + """ + Solves the linear system. + + .. math:: + + Ax=b + + :param numpy.ndarray b: the right hand side + :rtype: numpy.ndarray + :return: x + """ if self.flag is None and self.doDirect: return self.solveDirect(b, **self.options) elif self.flag is None and not self.doDirect: @@ -38,6 +70,14 @@ class Solver(object): self.dsolve = None def solveDirect(self, b, factorize=False, backend='scipy'): + """ + Use solve instead of this interface. + + :param bool factorize: if you want to factorize and store factors + :param str backend: which backend to use. Default is scipy + :rtype: numpy.ndarray + :return: x + """ assert np.shape(self.A)[1] == np.shape(b)[0], 'Dimension mismatch' if factorize and self.dsolve is None: @@ -64,8 +104,16 @@ class Solver(object): def solveIter(self, b, M=None, iterSolver='CG'): pass - def solveBackward(self, b): - "Perform a backwards solve with upper triangular A in CSR format." + def solveBackward(self, b, backend='python'): + """ + Use solve instead of this interface. + + Perform a backwards solve with upper triangular A in CSR format (best, if not, it will be converted). + + :param str backend: which backend to use. Default is python. + :rtype: numpy.ndarray + :return: x + """ if type(self.A) is not sparse.csr.csr_matrix: from scipy.sparse import csr_matrix self.A = csr_matrix(self.A) @@ -80,8 +128,16 @@ class Solver(object): x[i] = (b[i] - np.dot(ith_row[1:], x_vals[1:])) / ith_row[0] return x - def solveForward(self, b): - "Perform a forward solve with lower triangular A in CSR format." + def solveForward(self, backend='python'): + """ + Use solve instead of this interface. + + Perform a forward solve with lower triangular A in CSR format (best, if not, it will be converted). + + :param str backend: which backend to use. Default is python. + :rtype: numpy.ndarray + :return: x + """ if type(self.A) is not sparse.csr.csr_matrix: from scipy.sparse import csr_matrix self.A = csr_matrix(self.A) @@ -96,7 +152,16 @@ class Solver(object): x[i] = (b[i] - np.dot(ith_row[:-1], x_vals[:-1])) / ith_row[-1] return x - def solveDiagonal(self, b): + def solveDiagonal(self, backend='python'): + """ + Use solve instead of this interface. + + Perform a diagonal solve with diagonal matrix A. + + :param str backend: which backend to use. Default is python. + :rtype: numpy.ndarray + :return: x + """ diagA = self.A.diagonal() if len(b.shape) == 1 or b.shape[1] == 1: # Just one RHS diff --git a/docs/api_Solver.rst b/docs/api_Solver.rst new file mode 100644 index 00000000..74a81707 --- /dev/null +++ b/docs/api_Solver.rst @@ -0,0 +1,9 @@ +.. _api_Solver: + +Solver +****** + +.. automodule:: SimPEG.Solver + :members: + :undoc-members: + diff --git a/docs/index.rst b/docs/index.rst index 692363a2..fa127864 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -62,6 +62,7 @@ Utility Codes .. toctree:: :maxdepth: 2 + api_Solver api_Utils From 11128b2e9ba40ef89ff29487211b2da8ab843ba6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 30 Oct 2013 23:13:49 -0600 Subject: [PATCH 163/359] Bug Fixes. Test_DCproblem is still not working. --- SimPEG/Solver.py | 4 ++-- SimPEG/forward/Problem.py | 1 + SimPEG/forward/__init__.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SimPEG/Solver.py b/SimPEG/Solver.py index 127a8c9f..d9ac4a1d 100644 --- a/SimPEG/Solver.py +++ b/SimPEG/Solver.py @@ -128,7 +128,7 @@ class Solver(object): x[i] = (b[i] - np.dot(ith_row[1:], x_vals[1:])) / ith_row[0] return x - def solveForward(self, backend='python'): + def solveForward(self, b, backend='python'): """ Use solve instead of this interface. @@ -152,7 +152,7 @@ class Solver(object): x[i] = (b[i] - np.dot(ith_row[:-1], x_vals[:-1])) / ith_row[-1] return x - def solveDiagonal(self, backend='python'): + def solveDiagonal(self, b, backend='python'): """ Use solve instead of this interface. diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 679e8686..395156a2 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -1,5 +1,6 @@ import numpy as np from SimPEG.utils import mkvc, sdiag +import scipy.sparse as sp norm = np.linalg.norm diff --git a/SimPEG/forward/__init__.py b/SimPEG/forward/__init__.py index a7c58967..33c9a6b1 100644 --- a/SimPEG/forward/__init__.py +++ b/SimPEG/forward/__init__.py @@ -1,4 +1,4 @@ from Problem import * -from DCProblem import DCProblem +import DCProblem from LinearProblem import LinearProblem import ModelTransforms From 831eca50221accde729c3cb22c6d957f0b38804b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 30 Oct 2013 23:28:14 -0600 Subject: [PATCH 164/359] Some documentation. --- SimPEG/tests/TestUtils.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SimPEG/tests/TestUtils.py b/SimPEG/tests/TestUtils.py index 83738a75..ff7ee668 100644 --- a/SimPEG/tests/TestUtils.py +++ b/SimPEG/tests/TestUtils.py @@ -192,6 +192,16 @@ def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): :rtype: bool :return: did you pass the test?! + + .. plot:: + :include-source: + + from SimPEG.tests import checkDerivative + from SimPEG.utils import sdiag + import numpy as np + def simplePass(x): + return np.sin(x), sdiag(np.cos(x)) + checkDerivative(simplePass, np.random.randn(5)) """ print "%s checkDerivative %s" % ('='*20, '='*20) From f44a85766978b4b0101f7424dc6d30be6c74f622 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 1 Nov 2013 15:00:17 -0700 Subject: [PATCH 165/359] Moved solver to utilities. But it is still available as SimPEG.Solver (as defined in the main __init__.py file) --- SimPEG/__init__.py | 4 ++-- SimPEG/{ => utils}/Solver.py | 0 SimPEG/utils/__init__.py | 2 ++ docs/api_Solver.rst | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) rename SimPEG/{ => utils}/Solver.py (100%) diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index a17eaa74..7f059a74 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,6 +1,6 @@ -import mesh import utils +from utils import Solver +import mesh import inverse import forward import regularization -from Solver import Solver diff --git a/SimPEG/Solver.py b/SimPEG/utils/Solver.py similarity index 100% rename from SimPEG/Solver.py rename to SimPEG/utils/Solver.py diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py index 7c976ce3..d5918b0d 100644 --- a/SimPEG/utils/__init__.py +++ b/SimPEG/utils/__init__.py @@ -2,6 +2,8 @@ import matutils import sputils import lomutils import ModelBuilder +import Solver +from Solver import Solver from matutils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind from sputils import spzeros, kron3, speye, sdiag from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird diff --git a/docs/api_Solver.rst b/docs/api_Solver.rst index 74a81707..db75860b 100644 --- a/docs/api_Solver.rst +++ b/docs/api_Solver.rst @@ -3,7 +3,7 @@ Solver ****** -.. automodule:: SimPEG.Solver +.. automodule:: SimPEG.utils.Solver :members: :undoc-members: From 581f1b15f137e414fc3ed628ffaf56c2f082ec23 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 1 Nov 2013 15:02:37 -0700 Subject: [PATCH 166/359] renamed misfit to dataResidual in Problem class. fixed betaSchedule bug. Printing in the inversion. --- SimPEG/forward/Problem.py | 2 +- SimPEG/inverse/BetaSchedule.py | 2 +- SimPEG/inverse/Inversion.py | 22 +++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 395156a2..32ab663f 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -94,7 +94,7 @@ class Problem(object): u = self.field(m) return self.P*u - def misfit(self, m, u=None): + def dataResidual(self, m, u=None): """ :param numpy.array m: geophysical model :param numpy.array u: fields diff --git a/SimPEG/inverse/BetaSchedule.py b/SimPEG/inverse/BetaSchedule.py index 2c633a6a..fe197340 100644 --- a/SimPEG/inverse/BetaSchedule.py +++ b/SimPEG/inverse/BetaSchedule.py @@ -9,4 +9,4 @@ class Cooling(object): def getBeta(self): if self._beta is None: return beta0 - return self._beta * beta_coolingFactor + return self._beta / beta_coolingFactor diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 02a81daa..b58a8318 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -6,6 +6,7 @@ class Inversion(object): """docstring for Inversion""" maxIter = 10 + name = 'SimPEG Inversion' def __init__(self, prob, reg, opt, **kwargs): self.prob = prob @@ -22,6 +23,14 @@ class Inversion(object): else: raise Exception('%s attr is not recognized' % attr) + def printInit(self): + print "%s %s %s" % ('='*22, self.name, '='*22) + print " # beta phi_d phi_m f norm(dJ) #LS" + print "%s" % '-'*62 + + def printIter(self): + print "%3d %1.2e %1.2e %1.2e %1.2e %1.2e %3d" % (self.opt._iter, self._beta, self._phi_d_last, self._phi_m_last, self.opt.f, np.linalg.norm(self.opt.g), self.opt._iterLS) + @property def Wd(self): """ @@ -65,7 +74,7 @@ class Inversion(object): def getBeta(self): if self._beta is None: return self.beta0 - return self._beta * self.beta_coolingFactor + return self._beta / self.beta_coolingFactor def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) @@ -121,9 +130,10 @@ class Inversion(object): Where P is a projection matrix that brings the field on the full domain to the data measurement locations; u is the field of interest; d_obs is the observed data; and W is the weighting matrix. """ - R = self.Wd*self.prob.misfit(m, u=u) + # TODO: ensure that this is a data is vector and Wd is a matrix. + R = self.Wd*self.prob.dataResidual(m, u=u) R = mkvc(R) - return 0.5*R.dot(R) + return 0.5*np.vdot(R, R) def dataObjDeriv(self, m, u=None): """ @@ -159,7 +169,7 @@ class Inversion(object): if u is None: u = self.prob.field(m) - R = self.Wd*self.prob.misfit(m, u=u) + R = self.Wd*self.prob.dataResidual(m, u=u) dmisfit = self.prob.Jt(m, self.Wd * R, u=u) @@ -201,8 +211,10 @@ class Inversion(object): if u is None: u = self.prob.field(m) - R = self.Wd*self.prob.misfit(m, u=u) + R = self.Wd*self.prob.dataResidual(m, u=u) + # TODO: abstract to different norms a little cleaner. + # \/ it goes here. in l2 it is the identity. dmisfit = self.prob.Jt(m, self.Wd * self.Wd * self.prob.J(m, v, u=u), u=u) return dmisfit From 510ca4a54e8aa41fccb89d66a5d3285273fca312 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 1 Nov 2013 15:04:16 -0700 Subject: [PATCH 167/359] Issue #11 PubSub based communications in Minimize. --- SimPEG/inverse/Optimize.py | 50 ++++++++++++++++++++++++++++++-------- docs/requirements.txt | 1 + 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 9e3b5463..d75b64d7 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -3,6 +3,7 @@ import matplotlib.pyplot as plt from SimPEG.utils import mkvc, sdiag norm = np.linalg.norm import scipy.sparse as sp +from pubsub import pub class Minimize(object): @@ -24,9 +25,8 @@ class Minimize(object): tolG = 1e-1 eps = 1e-5 - printIter = [] # push to here if you want to print these on iter - def __init__(self, **kwargs): + self._id = int(np.random.rand()*1e6) # create a unique identifier to this program to be used in pubsub self.setKwargs(**kwargs) def setKwargs(self, **kwargs): @@ -51,13 +51,19 @@ class Minimize(object): while True: self.f, self.g, self.H = evalFunction(self.xc, return_g=True, return_H=True) + pub.sendMessage('Minimize.evalFunction', minimize=self, f=self.f, g=self.g, H=self.H) self.printIter() if self.stoppingCriteria(): break p = self.findSearchDirection() - xt, passLS = self.linesearch(p) + #TODO: Scale search direction + pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) + xt, passLS = self.linesearch(p) ## TODO: should be called modifyStep to be inclusive of trust region stuff etc. + pub.sendMessage('Minimize.linesearch', minimize=self, xt=xt) if not passLS: xt = self.linesearchBreak(p) + return self.xc self.doEndIteration(xt) + pub.sendMessage('Minimize.endIteration', minimize=self, xt=xt) self.printDone() @@ -65,7 +71,9 @@ class Minimize(object): @property def parent(self): - """This is the parent of the optimization routine.""" + """ + This is the parent of the optimization routine. + """ return getattr(self, '_parent', None) @parent.setter def parent(self, value): @@ -85,6 +93,10 @@ class Minimize(object): printIter is called at the beginning of the optimization routine. """ + pub.sendMessage('Minimize.printInit', minimize=self) + if self.parent is not None and hasattr(self.parent, 'printInit'): + self.parent.printInit() + return print "%s %s %s" % ('='*22, self.name, '='*22) print "iter\tJc\t\tnorm(dJ)\tLS" print "%s" % '-'*57 @@ -94,12 +106,22 @@ class Minimize(object): printIter is called directly after function evaluations. """ + pub.sendMessage('Minimize.printIter', minimize=self) + if self.parent is not None and hasattr(self.parent, 'printIter'): + self.parent.printIter() + return print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) def printDone(self): + pub.sendMessage('Minimize.printDone', minimize=self) + if self.parent is not None and hasattr(self.parent, 'printDone'): + self.parent.printDone() + return print "%s STOP! %s" % ('-'*25,'-'*25) - print "%d : |fc-fOld| = %1.4e <= tolF*(1+|fStop|) = %1.4e" % (self._STOP[0], abs(self.f-self.fOld), self.tolF*(1+abs(self.fStop))) - print "%d : |xc-xOld| = %1.4e <= tolX*(1+|x0|) = %1.4e" % (self._STOP[1], norm(self.xc-self.xOld), self.tolX*(1+norm(self.x0))) + # TODO: put controls on gradient value, min model update, and function value + if self._iter > 0: + print "%d : |fc-fOld| = %1.4e <= tolF*(1+|fStop|) = %1.4e" % (self._STOP[0], abs(self.f-self.fOld), self.tolF*(1+abs(self.fStop))) + print "%d : |xc-xOld| = %1.4e <= tolX*(1+|x0|) = %1.4e" % (self._STOP[1], norm(self.xc-self.xOld), self.tolX*(1+norm(self.x0))) print "%d : |g| = %1.4e <= tolG*(1+|fStop|) = %1.4e" % (self._STOP[2], norm(self.g), self.tolG*(1+abs(self.fStop))) print "%d : |g| = %1.4e <= 1e3*eps = %1.4e" % (self._STOP[3], norm(self.g), 1e3*self.eps) print "%d : iter = %3d\t <= maxIter\t = %3d" % (self._STOP[4], self._iter, self.maxIter) @@ -140,7 +162,7 @@ class Minimize(object): return xt, iterLS < self.maxIterLS def linesearchBreak(self, p): - raise Exception('The linesearch got broken. Boo.') + print 'The linesearch got broken. Boo.' def doEndIteration(self, xt): # store old values @@ -159,7 +181,7 @@ class InexactGaussNewton(Minimize): name = 'InexactGaussNewton' def findSearchDirection(self): # TODO: use BFGS as a preconditioner or gauss sidel of the WtW or solve WtW directly - p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=5) + p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) return p @@ -170,11 +192,19 @@ class SteepestDescent(Minimize): if __name__ == '__main__': from SimPEG.tests import Rosenbrock, checkDerivative + import matplotlib.pyplot as plt x0 = np.array([2.6, 3.7]) checkDerivative(Rosenbrock, x0, plotIt=False) - xOpt = GaussNewton(maxIter=20).minimize(Rosenbrock,x0) + + def listener1(minimize,p): + plt.plot(p) + plt.show() + print p + pub.subscribe(listener1, 'Minimize.searchDirection') + + xOpt = GaussNewton(maxIter=20,tolF=1e-10,tolX=1e-10,tolG=1e-10).minimize(Rosenbrock,x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) - xOpt = SteepestDescent(maxIter=20, maxIterLS=15).minimize(Rosenbrock, x0) + xOpt = SteepestDescent(maxIter=30, maxIterLS=15,tolF=1e-10,tolX=1e-10,tolG=1e-10).minimize(Rosenbrock, x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) def simplePass(x): diff --git a/docs/requirements.txt b/docs/requirements.txt index 24ce15ab..d7809121 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ numpy +pubsub From 187ba97112f97c9267373536ef011f1ef0e345de Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 1 Nov 2013 15:19:07 -0700 Subject: [PATCH 168/359] Bug fix in regularization. --- SimPEG/mesh/DiffOperators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimPEG/mesh/DiffOperators.py b/SimPEG/mesh/DiffOperators.py index 380e0d19..598b392a 100644 --- a/SimPEG/mesh/DiffOperators.py +++ b/SimPEG/mesh/DiffOperators.py @@ -192,7 +192,7 @@ class DiffOperators(object): BC = ['neumann', 'neumann'] n = self.n if(self.dim == 2): - G2 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC)) + G2 = sp.kron(ddxCellGrad(n[1], BC), speye(n[0])) elif(self.dim == 3): G2 = kron3(speye(n[2]), ddxCellGrad(n[1], BC), speye(n[0])) # Compute areas of cell faces & volumes From 912c39151f05dacc52d6d48fecb9437e0c980333 Mon Sep 17 00:00:00 2001 From: Gudni Karl Rosenkjaer Date: Sat, 2 Nov 2013 07:52:35 -0700 Subject: [PATCH 169/359] Added visulization folder and written some vtkTools. --- SimPEG/__init__.py | 1 + SimPEG/visulization/__init__.py | 1 + SimPEG/visulization/vtkTools.py | 171 ++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 SimPEG/visulization/__init__.py create mode 100644 SimPEG/visulization/vtkTools.py diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index e8946f88..863c8ca2 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -2,3 +2,4 @@ import mesh import utils import inverse from Solver import Solver +import visulization diff --git a/SimPEG/visulization/__init__.py b/SimPEG/visulization/__init__.py new file mode 100644 index 00000000..1bd4f40a --- /dev/null +++ b/SimPEG/visulization/__init__.py @@ -0,0 +1 @@ +from vtkTools import vtkTools \ No newline at end of file diff --git a/SimPEG/visulization/vtkTools.py b/SimPEG/visulization/vtkTools.py new file mode 100644 index 00000000..2b440d79 --- /dev/null +++ b/SimPEG/visulization/vtkTools.py @@ -0,0 +1,171 @@ +import numpy as np, vtk, vtk.util.numpy_support as npsup, pdb +from SimPEG.utils import mkvc + + +class vtkTools(object): + """ + Class that interacts with VTK visulization toolkit. + + """ + + def __init__(self): + """ Initializes the VTK vtkTools. + + """ + + pass + + @staticmethod + def makeCellVTKObject(mesh,model): + """ + Make and return a cell based VTK object for a simpeg mesh and model. + + Input: + :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK + :param model, dictionary of numpy.array - Name('s) and array('s). Match number of cells + + Output: + :rtype: vtkRecilinearGrid object + :return: vtkObj + """ + + # Use rectilinear VTK grid. + # Asign the spatial information. + vtkObj = vtk.vtkRectilinearGrid() + vtkObj.SetDimensions(mesh.nNx,mesh.nNy,mesh.nNz) + vtkObj.SetXCoordinates(npsup.numpy_to_vtk(mesh.vectorNx,deep=1)) + vtkObj.SetYCoordinates(npsup.numpy_to_vtk(mesh.vectorNy,deep=1)) + vtkObj.SetZCoordinates(npsup.numpy_to_vtk(mesh.vectorNz,deep=1)) + + # Assign the model('s) to the object + for item in model.iteritems(): + # Convert numpy array + vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) + vtkDoubleArr.SetName(item[0]) + vtkObj.GetCellData().AddArray(vtkDoubleArr) + + return vtkObj + + @staticmethod + def makeFaceVTKobject(mesh,model): + """ + Make and return a cell based VTK object for a simpeg mesh and model. + + Input: + :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK + :param model, dictionary of numpy.array - Name('s) and array('s). + Property array must be order hstack(Fx,Fy,Fz) + + Output: + :rtype: vtkUnstructuredGrid object + :return: vtkObj + """ + + ## Convert simpeg mesh to VTK properties + # Convert mesh nodes to vtkPoints + vtkPts = vtk.vtkPoints() + vtkPts.SetData(npsup.numpy_to_vtk(mesh.gridN,deep=1)) + + # Define the face "cells" + # Using VTK_QUAD cell for faces (see VTK file format) + nodeMat = mesh.r(np.arange(mesh.nN,dtype='int64'),'N','N','M') + def faceR(mat,length): + return mat.T.reshape((length,1)) + # First direction + nTFx = np.prod(mesh.nFx) + FxCellBlock = np.hstack([ 4*np.ones((nTFx,1),dtype='int64'),faceR(nodeMat[:,:-1,:-1],nTFx),faceR(nodeMat[:,1: ,:-1],nTFx),faceR(nodeMat[:,1: ,1: ],nTFx),faceR(nodeMat[:,:-1,1: ],nTFx)] ) + # Second direction + nTFy = np.prod(mesh.nFy) + FyCellBlock = np.hstack([ 4*np.ones((nTFy,1),dtype='int64'),faceR(nodeMat[:-1,:,:-1],nTFy),faceR(nodeMat[1: ,:,:-1],nTFy),faceR(nodeMat[1: ,:,1: ],nTFy),faceR(nodeMat[:-1,:,1: ],nTFy)] ) + # Third direction + nTFz = np.prod(mesh.nFz) + FzCellBlock = np.hstack([ 4*np.ones((nTFz,1),dtype='int64'),faceR(nodeMat[:-1,:-1,:],nTFz),faceR(nodeMat[1: ,:-1,:],nTFz),faceR(nodeMat[1: ,1: ,:],nTFz),faceR(nodeMat[:-1,1: ,:],nTFz)] ) + # Cells -cell array + FCellArr = vtk.vtkCellArray() + FCellArr.SetCells(np.prod(mesh.nF),npsup.numpy_to_vtkIdTypeArray(np.vstack([FxCellBlock,FyCellBlock,FzCellBlock]),deep=1)) + # Cell type + FCellType = npsup.numpy_to_vtk(vtk.VTK_QUAD*np.ones(np.sum(mesh.nF),dtype='uint8'),deep=1) + # Cell location + FCellLoc = npsup.numpy_to_vtkIdTypeArray(np.arange(0,np.sum(mesh.nF),5,dtype='int64'),deep=1) + + ## Make the object + vtkObj = vtk.vtkUnstructuredGrid() + # Set the objects properties + vtkObj.SetPoints(vtkPts) + vtkObj.SetCells(FCellType,FCellLoc,FCellArr) + + # Assign the model('s) to the object + for item in model.iteritems(): + # Convert numpy array + vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) + vtkDoubleArr.SetName(item[0]) + vtkObj.GetCellData().AddArray(vtkDoubleArr) + + return vtkObj + + + # Simple write model functions. + @staticmethod + def writeVTPFile(fileName,vtkPolyObject): + '''Function to write vtk polydata file (vtp).''' + polyWriter = vtk.vtkXMLPolyDataWriter() + polyWriter.SetInput(vtkPolyObject) + polyWriter.SetFileName(fileName) + polyWriter.Update() + + @staticmethod + def writeVTUFile(fileName,vtkUnstructuredGrid): + '''Function to write vtk unstructured grid (vtu).''' + Writer = vtk.vtkXMLUnstructuredGridWriter() + Writer.SetInput(vtkUnstructuredGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def writeVTRFile(fileName,vtkRectilinearGrid): + '''Function to write vtk rectilinear grid (vtr).''' + Writer = vtk.vtkXMLRectilinearGridWriter() + Writer.SetInput(vtkRectilinearGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def writeVTSFile(fileName,vtkStructuredGrid): + '''Function to write vtk structured grid (vts).''' + Writer = vtk.vtkXMLStructuredGridWriter() + Writer.SetInput(vtkStructuredGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def readVTSFile(fileName): + '''Function to read vtk structured grid (vts) and return a grid object.''' + Reader = vtk.vtkXMLStructuredGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTUFile(fileName): + '''Function to read vtk structured grid (vtu) and return a grid object.''' + Reader = vtk.vtkXMLUnstructuredGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTRFile(fileName): + '''Function to read vtk structured grid (vtr) and return a grid object.''' + Reader = vtk.vtkXMLRectilinearGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTPFile(fileName): + '''Function to read vtk structured grid (vtp) and return a grid object.''' + Reader = vtk.vtkXMLPolyDataReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + From a1a6e679257012e5360a1e684077fb4b6f62ed83 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Sun, 3 Nov 2013 10:36:22 -0800 Subject: [PATCH 170/359] Added max step size option to Optimize code. --- SimPEG/inverse/Optimize.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index d75b64d7..01a6f453 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -18,6 +18,7 @@ class Minimize(object): maxIter = 20 maxIterLS = 10 + maxStep = np.inf LSreduction = 1e-4 LSshorten = 0.5 tolF = 1e-1 @@ -55,7 +56,8 @@ class Minimize(object): self.printIter() if self.stoppingCriteria(): break p = self.findSearchDirection() - #TODO: Scale search direction + if self.maxStep < np.abs(p.max()): + p = self.maxStep*p/np.abs(p.max()) pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) xt, passLS = self.linesearch(p) ## TODO: should be called modifyStep to be inclusive of trust region stuff etc. pub.sendMessage('Minimize.linesearch', minimize=self, xt=xt) From 304ee3ae3278ce3772b29cfdd8541b765f14ae13 Mon Sep 17 00:00:00 2001 From: Gudni Karl Rosenkjaer Date: Mon, 4 Nov 2013 08:56:32 -0800 Subject: [PATCH 171/359] Renamed folder. Added vtkView Class that makes vtk figures of SimPEG mesh, models. --- SimPEG/__init__.py | 2 +- SimPEG/visulization/__init__.py | 1 - SimPEG/visulization/vtkTools.py | 171 -------------------------------- 3 files changed, 1 insertion(+), 173 deletions(-) delete mode 100644 SimPEG/visulization/__init__.py delete mode 100644 SimPEG/visulization/vtkTools.py diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index 863c8ca2..8107e847 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -2,4 +2,4 @@ import mesh import utils import inverse from Solver import Solver -import visulization +import visulize diff --git a/SimPEG/visulization/__init__.py b/SimPEG/visulization/__init__.py deleted file mode 100644 index 1bd4f40a..00000000 --- a/SimPEG/visulization/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from vtkTools import vtkTools \ No newline at end of file diff --git a/SimPEG/visulization/vtkTools.py b/SimPEG/visulization/vtkTools.py deleted file mode 100644 index 2b440d79..00000000 --- a/SimPEG/visulization/vtkTools.py +++ /dev/null @@ -1,171 +0,0 @@ -import numpy as np, vtk, vtk.util.numpy_support as npsup, pdb -from SimPEG.utils import mkvc - - -class vtkTools(object): - """ - Class that interacts with VTK visulization toolkit. - - """ - - def __init__(self): - """ Initializes the VTK vtkTools. - - """ - - pass - - @staticmethod - def makeCellVTKObject(mesh,model): - """ - Make and return a cell based VTK object for a simpeg mesh and model. - - Input: - :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK - :param model, dictionary of numpy.array - Name('s) and array('s). Match number of cells - - Output: - :rtype: vtkRecilinearGrid object - :return: vtkObj - """ - - # Use rectilinear VTK grid. - # Asign the spatial information. - vtkObj = vtk.vtkRectilinearGrid() - vtkObj.SetDimensions(mesh.nNx,mesh.nNy,mesh.nNz) - vtkObj.SetXCoordinates(npsup.numpy_to_vtk(mesh.vectorNx,deep=1)) - vtkObj.SetYCoordinates(npsup.numpy_to_vtk(mesh.vectorNy,deep=1)) - vtkObj.SetZCoordinates(npsup.numpy_to_vtk(mesh.vectorNz,deep=1)) - - # Assign the model('s) to the object - for item in model.iteritems(): - # Convert numpy array - vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) - vtkDoubleArr.SetName(item[0]) - vtkObj.GetCellData().AddArray(vtkDoubleArr) - - return vtkObj - - @staticmethod - def makeFaceVTKobject(mesh,model): - """ - Make and return a cell based VTK object for a simpeg mesh and model. - - Input: - :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK - :param model, dictionary of numpy.array - Name('s) and array('s). - Property array must be order hstack(Fx,Fy,Fz) - - Output: - :rtype: vtkUnstructuredGrid object - :return: vtkObj - """ - - ## Convert simpeg mesh to VTK properties - # Convert mesh nodes to vtkPoints - vtkPts = vtk.vtkPoints() - vtkPts.SetData(npsup.numpy_to_vtk(mesh.gridN,deep=1)) - - # Define the face "cells" - # Using VTK_QUAD cell for faces (see VTK file format) - nodeMat = mesh.r(np.arange(mesh.nN,dtype='int64'),'N','N','M') - def faceR(mat,length): - return mat.T.reshape((length,1)) - # First direction - nTFx = np.prod(mesh.nFx) - FxCellBlock = np.hstack([ 4*np.ones((nTFx,1),dtype='int64'),faceR(nodeMat[:,:-1,:-1],nTFx),faceR(nodeMat[:,1: ,:-1],nTFx),faceR(nodeMat[:,1: ,1: ],nTFx),faceR(nodeMat[:,:-1,1: ],nTFx)] ) - # Second direction - nTFy = np.prod(mesh.nFy) - FyCellBlock = np.hstack([ 4*np.ones((nTFy,1),dtype='int64'),faceR(nodeMat[:-1,:,:-1],nTFy),faceR(nodeMat[1: ,:,:-1],nTFy),faceR(nodeMat[1: ,:,1: ],nTFy),faceR(nodeMat[:-1,:,1: ],nTFy)] ) - # Third direction - nTFz = np.prod(mesh.nFz) - FzCellBlock = np.hstack([ 4*np.ones((nTFz,1),dtype='int64'),faceR(nodeMat[:-1,:-1,:],nTFz),faceR(nodeMat[1: ,:-1,:],nTFz),faceR(nodeMat[1: ,1: ,:],nTFz),faceR(nodeMat[:-1,1: ,:],nTFz)] ) - # Cells -cell array - FCellArr = vtk.vtkCellArray() - FCellArr.SetCells(np.prod(mesh.nF),npsup.numpy_to_vtkIdTypeArray(np.vstack([FxCellBlock,FyCellBlock,FzCellBlock]),deep=1)) - # Cell type - FCellType = npsup.numpy_to_vtk(vtk.VTK_QUAD*np.ones(np.sum(mesh.nF),dtype='uint8'),deep=1) - # Cell location - FCellLoc = npsup.numpy_to_vtkIdTypeArray(np.arange(0,np.sum(mesh.nF),5,dtype='int64'),deep=1) - - ## Make the object - vtkObj = vtk.vtkUnstructuredGrid() - # Set the objects properties - vtkObj.SetPoints(vtkPts) - vtkObj.SetCells(FCellType,FCellLoc,FCellArr) - - # Assign the model('s) to the object - for item in model.iteritems(): - # Convert numpy array - vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) - vtkDoubleArr.SetName(item[0]) - vtkObj.GetCellData().AddArray(vtkDoubleArr) - - return vtkObj - - - # Simple write model functions. - @staticmethod - def writeVTPFile(fileName,vtkPolyObject): - '''Function to write vtk polydata file (vtp).''' - polyWriter = vtk.vtkXMLPolyDataWriter() - polyWriter.SetInput(vtkPolyObject) - polyWriter.SetFileName(fileName) - polyWriter.Update() - - @staticmethod - def writeVTUFile(fileName,vtkUnstructuredGrid): - '''Function to write vtk unstructured grid (vtu).''' - Writer = vtk.vtkXMLUnstructuredGridWriter() - Writer.SetInput(vtkUnstructuredGrid) - Writer.SetFileName(fileName) - Writer.Update() - - @staticmethod - def writeVTRFile(fileName,vtkRectilinearGrid): - '''Function to write vtk rectilinear grid (vtr).''' - Writer = vtk.vtkXMLRectilinearGridWriter() - Writer.SetInput(vtkRectilinearGrid) - Writer.SetFileName(fileName) - Writer.Update() - - @staticmethod - def writeVTSFile(fileName,vtkStructuredGrid): - '''Function to write vtk structured grid (vts).''' - Writer = vtk.vtkXMLStructuredGridWriter() - Writer.SetInput(vtkStructuredGrid) - Writer.SetFileName(fileName) - Writer.Update() - - @staticmethod - def readVTSFile(fileName): - '''Function to read vtk structured grid (vts) and return a grid object.''' - Reader = vtk.vtkXMLStructuredGridReader() - Reader.SetFileName(fileName) - Reader.Update() - return Reader.GetOutput() - - @staticmethod - def readVTUFile(fileName): - '''Function to read vtk structured grid (vtu) and return a grid object.''' - Reader = vtk.vtkXMLUnstructuredGridReader() - Reader.SetFileName(fileName) - Reader.Update() - return Reader.GetOutput() - - @staticmethod - def readVTRFile(fileName): - '''Function to read vtk structured grid (vtr) and return a grid object.''' - Reader = vtk.vtkXMLRectilinearGridReader() - Reader.SetFileName(fileName) - Reader.Update() - return Reader.GetOutput() - - @staticmethod - def readVTPFile(fileName): - '''Function to read vtk structured grid (vtp) and return a grid object.''' - Reader = vtk.vtkXMLPolyDataReader() - Reader.SetFileName(fileName) - Reader.Update() - return Reader.GetOutput() - From 224b0cea9e2fbf65aec8b06f32398d9304f6a119 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 09:43:49 -0800 Subject: [PATCH 172/359] Issue #17 Scaled gradient. moved this to an overridable function. Changed linesearch to modifySearchDirection --- SimPEG/inverse/Optimize.py | 49 ++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 01a6f453..d4c46c69 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -18,7 +18,7 @@ class Minimize(object): maxIter = 20 maxIterLS = 10 - maxStep = np.inf + maxStep = np.inf LSreduction = 1e-4 LSshorten = 0.5 tolF = 1e-1 @@ -56,14 +56,14 @@ class Minimize(object): self.printIter() if self.stoppingCriteria(): break p = self.findSearchDirection() - if self.maxStep < np.abs(p.max()): - p = self.maxStep*p/np.abs(p.max()) pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) - xt, passLS = self.linesearch(p) ## TODO: should be called modifyStep to be inclusive of trust region stuff etc. - pub.sendMessage('Minimize.linesearch', minimize=self, xt=xt) + p = self.scaleSearchDirection(p) + pub.sendMessage('Minimize.scaleSearchDirection', minimize=self, p=p) + xt, passLS = self.modifySearchDirection(p) + pub.sendMessage('Minimize.modifySearchDirection', minimize=self, xt=xt) if not passLS: - xt = self.linesearchBreak(p) - return self.xc + xt, caught = self.modifySearchDirectionBreak(p) + if not caught: return self.xc self.doEndIteration(xt) pub.sendMessage('Minimize.endIteration', minimize=self, xt=xt) @@ -129,9 +129,6 @@ class Minimize(object): print "%d : iter = %3d\t <= maxIter\t = %3d" % (self._STOP[4], self._iter, self.maxIter) print "%s DONE! %s\n" % ('='*25,'='*25) - def findSearchDirection(self): - return -self.g - def stoppingCriteria(self): if self._iter == 0: self.fStop = self.f # Save this for stopping criteria @@ -147,7 +144,15 @@ class Minimize(object): def projection(self, p): return p - def linesearch(self, p): + def findSearchDirection(self): + return -self.g + + def scaleSearchDirection(self, p): + if self.maxStep < np.abs(p.max()): + p = self.maxStep*p/np.abs(p.max()) + return p + + def modifySearchDirection(self, p): # Armijo linesearch descent = np.inner(self.g, p) t = 1 @@ -163,8 +168,24 @@ class Minimize(object): self._iterLS = iterLS return xt, iterLS < self.maxIterLS - def linesearchBreak(self, p): + def modifySearchDirectionBreak(self, p): + """ + Code is called if modifySearchDirection fails + to find a descent direction. + + The search direction is passed as input and + this function must pass back both a new searchDirection, + and if the searchDirection break has been caught. + + By default, no additional work is done, and the + function returns a False indicating the break was not caught. + + :param numpy.ndarray p: searchDirection + :rtype: numpy.ndarray,bool + :return: (xt, breakCaught) + """ print 'The linesearch got broken. Boo.' + return p, False def doEndIteration(self, xt): # store old values @@ -199,9 +220,7 @@ if __name__ == '__main__': checkDerivative(Rosenbrock, x0, plotIt=False) def listener1(minimize,p): - plt.plot(p) - plt.show() - print p + print 'hi: ', p pub.subscribe(listener1, 'Minimize.searchDirection') xOpt = GaussNewton(maxIter=20,tolF=1e-10,tolX=1e-10,tolG=1e-10).minimize(Rosenbrock,x0) From 56bacc4a27b79841a6ed0a70992261f508f5ba7f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 09:53:38 -0800 Subject: [PATCH 173/359] Issue #15 Approximate Hessians. By default these are not implemented, and are the same as J and Jt --- SimPEG/forward/Problem.py | 30 +++++++++++++++++++++++++++++- SimPEG/inverse/Inversion.py | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/SimPEG/forward/Problem.py b/SimPEG/forward/Problem.py index 32ab663f..2e6831f7 100644 --- a/SimPEG/forward/Problem.py +++ b/SimPEG/forward/Problem.py @@ -150,10 +150,38 @@ class Problem(object): :rtype: numpy.array :return: JTv - Transpose of J + Effect of transpose of J on a vector v. """ pass + + def J_approx(self, m, v, u=None): + """ + + :param numpy.array m: model + :param numpy.array v: vector to multiply + :param numpy.array u: fields + :rtype: numpy.array + :return: Jv + + Approximate effect of J on a vector v + + """ + return self.J(m, v, u) + + def Jt_approx(self, m, v, u=None): + """ + :param numpy.array m: model + :param numpy.array v: vector to multiply + :param numpy.array u: fields + :rtype: numpy.array + :return: JTv + + Approximate transpose of J*v + + """ + return self.Jt(m, v, u) + def field(self, m): """ The field given the model. diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index b58a8318..827e12f8 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -215,7 +215,7 @@ class Inversion(object): # TODO: abstract to different norms a little cleaner. # \/ it goes here. in l2 it is the identity. - dmisfit = self.prob.Jt(m, self.Wd * self.Wd * self.prob.J(m, v, u=u), u=u) + dmisfit = self.prob.Jt_approx(m, self.Wd * self.Wd * self.prob.J_approx(m, v, u=u), u=u) return dmisfit From 61189d2e5b0b39ad61179dfbb52f95b71554b206 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 10:11:14 -0800 Subject: [PATCH 174/359] Documentation updates. --- docs/api_LOMView.rst | 8 -------- docs/api_LogicallyOrthogonalMesh.rst | 8 ++++++++ docs/api_TensorMesh.rst | 7 +++++++ docs/api_TensorView.rst | 8 -------- docs/index.rst | 7 ------- 5 files changed, 15 insertions(+), 23 deletions(-) delete mode 100644 docs/api_LOMView.rst delete mode 100644 docs/api_TensorView.rst diff --git a/docs/api_LOMView.rst b/docs/api_LOMView.rst deleted file mode 100644 index cfbfa6fa..00000000 --- a/docs/api_LOMView.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _api_LOMView: - -LOM View -******** - -.. automodule:: SimPEG.mesh.LomView - :members: - :undoc-members: diff --git a/docs/api_LogicallyOrthogonalMesh.rst b/docs/api_LogicallyOrthogonalMesh.rst index af9e73d0..9d7d516b 100644 --- a/docs/api_LogicallyOrthogonalMesh.rst +++ b/docs/api_LogicallyOrthogonalMesh.rst @@ -6,3 +6,11 @@ Logically Orthogonal Mesh .. automodule:: SimPEG.mesh.LogicallyOrthogonalMesh :members: :undoc-members: + + +LOM View +******** + +.. automodule:: SimPEG.mesh.LomView + :members: + :undoc-members: diff --git a/docs/api_TensorMesh.rst b/docs/api_TensorMesh.rst index 36fb925d..9de206f1 100644 --- a/docs/api_TensorMesh.rst +++ b/docs/api_TensorMesh.rst @@ -6,3 +6,10 @@ Tensor Mesh .. automodule:: SimPEG.mesh.TensorMesh :members: :undoc-members: + +Tensor View +*********** + +.. automodule:: SimPEG.mesh.TensorView + :members: + :undoc-members: diff --git a/docs/api_TensorView.rst b/docs/api_TensorView.rst deleted file mode 100644 index c6b5a9b8..00000000 --- a/docs/api_TensorView.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _api_TensorView: - -Tensor View -*********** - -.. automodule:: SimPEG.mesh.TensorView - :members: - :undoc-members: diff --git a/docs/index.rst b/docs/index.rst index fa127864..981e5ddc 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,8 +1,3 @@ -.. SimPEG documentation master file, created by - sphinx-quickstart on Fri Aug 30 18:42:44 2013. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - SimPEG ====== @@ -24,10 +19,8 @@ Meshing & Operators api_BaseMesh api_TensorMesh - api_TensorView api_LogicallyOrthogonalMesh api_Cyl1DMesh - api_LOMView api_DiffOperators api_InnerProducts From faa2be56a58f33396e2078afd99444d262dfd715 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 10:17:16 -0800 Subject: [PATCH 175/359] update requirements.txt for docs. --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index d7809121..dcecbe99 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ numpy -pubsub +pypubsub From ac099f08cd4f7171546c0cc8524834f04eba710b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 10:26:56 -0800 Subject: [PATCH 176/359] There are some compatibility issues with pypubsub installing on the documentation servers. and confusion when installing this on other peoples comps. I have put a warning in. Code should work regardless of if you have pypubsub installed or not. --- SimPEG/inverse/Optimize.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index d4c46c69..3e50e3df 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -3,7 +3,14 @@ import matplotlib.pyplot as plt from SimPEG.utils import mkvc, sdiag norm = np.linalg.norm import scipy.sparse as sp -from pubsub import pub + +try: + from pubsub import pub + doPub = True +except Exception, e: + print 'Warning: you may not have the required pubsub installed, use pypubsub. You will not be able to listen to events.' + doPub = False + class Minimize(object): @@ -52,20 +59,20 @@ class Minimize(object): while True: self.f, self.g, self.H = evalFunction(self.xc, return_g=True, return_H=True) - pub.sendMessage('Minimize.evalFunction', minimize=self, f=self.f, g=self.g, H=self.H) + if doPub: pub.sendMessage('Minimize.evalFunction', minimize=self, f=self.f, g=self.g, H=self.H) self.printIter() if self.stoppingCriteria(): break p = self.findSearchDirection() - pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) + if doPub: pub.sendMessage('Minimize.searchDirection', minimize=self, p=p) p = self.scaleSearchDirection(p) - pub.sendMessage('Minimize.scaleSearchDirection', minimize=self, p=p) + if doPub: pub.sendMessage('Minimize.scaleSearchDirection', minimize=self, p=p) xt, passLS = self.modifySearchDirection(p) - pub.sendMessage('Minimize.modifySearchDirection', minimize=self, xt=xt) + if doPub: pub.sendMessage('Minimize.modifySearchDirection', minimize=self, xt=xt) if not passLS: xt, caught = self.modifySearchDirectionBreak(p) if not caught: return self.xc self.doEndIteration(xt) - pub.sendMessage('Minimize.endIteration', minimize=self, xt=xt) + if doPub: pub.sendMessage('Minimize.endIteration', minimize=self, xt=xt) self.printDone() @@ -95,7 +102,7 @@ class Minimize(object): printIter is called at the beginning of the optimization routine. """ - pub.sendMessage('Minimize.printInit', minimize=self) + if doPub: pub.sendMessage('Minimize.printInit', minimize=self) if self.parent is not None and hasattr(self.parent, 'printInit'): self.parent.printInit() return @@ -108,14 +115,14 @@ class Minimize(object): printIter is called directly after function evaluations. """ - pub.sendMessage('Minimize.printIter', minimize=self) + if doPub: pub.sendMessage('Minimize.printIter', minimize=self) if self.parent is not None and hasattr(self.parent, 'printIter'): self.parent.printIter() return print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) def printDone(self): - pub.sendMessage('Minimize.printDone', minimize=self) + if doPub: pub.sendMessage('Minimize.printDone', minimize=self) if self.parent is not None and hasattr(self.parent, 'printDone'): self.parent.printDone() return @@ -221,7 +228,7 @@ if __name__ == '__main__': def listener1(minimize,p): print 'hi: ', p - pub.subscribe(listener1, 'Minimize.searchDirection') + if doPub: pub.subscribe(listener1, 'Minimize.searchDirection') xOpt = GaussNewton(maxIter=20,tolF=1e-10,tolX=1e-10,tolG=1e-10).minimize(Rosenbrock,x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) From f04f70c455aad435c54e1fdfe49cabb7c95a9a62 Mon Sep 17 00:00:00 2001 From: Gudni Karl Rosenkjaer Date: Mon, 4 Nov 2013 10:32:32 -0800 Subject: [PATCH 177/359] Committing visulize/vtk folder. Contains: vtkTools class that has abstract methods to deal with the interface between SimPEG and VTK. vtkView class that is s vtk rendering container for SimPEG --- SimPEG/visulize/__init__.py | 2 + SimPEG/visulize/vtk/__init__.py | 2 + SimPEG/visulize/vtk/vtkTools.py | 285 ++++++++++++++++++++++++++++++++ SimPEG/visulize/vtk/vtkView.py | 95 +++++++++++ 4 files changed, 384 insertions(+) create mode 100644 SimPEG/visulize/__init__.py create mode 100644 SimPEG/visulize/vtk/__init__.py create mode 100644 SimPEG/visulize/vtk/vtkTools.py create mode 100644 SimPEG/visulize/vtk/vtkView.py diff --git a/SimPEG/visulize/__init__.py b/SimPEG/visulize/__init__.py new file mode 100644 index 00000000..485f9782 --- /dev/null +++ b/SimPEG/visulize/__init__.py @@ -0,0 +1,2 @@ +import vtk +#import mpl diff --git a/SimPEG/visulize/vtk/__init__.py b/SimPEG/visulize/vtk/__init__.py new file mode 100644 index 00000000..6d60ed5c --- /dev/null +++ b/SimPEG/visulize/vtk/__init__.py @@ -0,0 +1,2 @@ +from vtkTools import vtkTools +from vtkView import vtkView \ No newline at end of file diff --git a/SimPEG/visulize/vtk/vtkTools.py b/SimPEG/visulize/vtk/vtkTools.py new file mode 100644 index 00000000..3840a1bc --- /dev/null +++ b/SimPEG/visulize/vtk/vtkTools.py @@ -0,0 +1,285 @@ +import numpy as np, vtk, vtk.util.numpy_support as npsup, pdb +from SimPEG.utils import mkvc + + +class vtkTools(object): + """ + Class that interacts with VTK visulization toolkit. + + """ + + def __init__(self): + """ Initializes the VTK vtkTools. + + """ + + pass + + @staticmethod + def makeCellVTKObject(mesh,model): + """ + Make and return a cell based VTK object for a simpeg mesh and model. + + Input: + :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK + :param model, dictionary of numpy.array - Name('s) and array('s). Match number of cells + + Output: + :rtype: vtkRecilinearGrid object + :return: vtkObj + """ + + # Deal with dimensionalities + if mesh.dim >= 1: + vX = mesh.vectorNx + xD = mesh.nNx + yD,zD = 1,1 + vY, vZ = np.array([0,0]) + if mesh.dim >= 2: + vY = mesh.vectorNy + yD = mesh.nNy + if mesh.dim == 3: + vZ = mesh.vectorNz + zD = mesh.nNz + # Use rectilinear VTK grid. + # Asaign the spatial information. + vtkObj = vtk.vtkRectilinearGrid() + vtkObj.SetDimensions(xD,yD,zD) + vtkObj.SetXCoordinates(npsup.numpy_to_vtk(vX,deep=1)) + vtkObj.SetYCoordinates(npsup.numpy_to_vtk(vY,deep=1)) + vtkObj.SetZCoordinates(npsup.numpy_to_vtk(vZ,deep=1)) + + # Assign the model('s) to the object + for item in model.iteritems(): + # Convert numpy array + vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) + vtkDoubleArr.SetName(item[0]) + vtkObj.GetCellData().AddArray(vtkDoubleArr) + + return vtkObj + + @staticmethod + def makeFaceVTKObject(mesh,model): + """ + Make and return a face based VTK object for a simpeg mesh and model. + + Input: + :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK + :param model, dictionary of numpy.array - Name('s) and array('s). + Property array must be order hstack(Fx,Fy,Fz) + + Output: + :rtype: vtkUnstructuredGrid object + :return: vtkObj + """ + + ## Convert simpeg mesh to VTK properties + # Convert mesh nodes to vtkPoints + vtkPts = vtk.vtkPoints() + vtkPts.SetData(npsup.numpy_to_vtk(mesh.gridN,deep=1)) + + # Define the face "cells" + # Using VTK_QUAD cell for faces (see VTK file format) + nodeMat = mesh.r(np.arange(mesh.nN,dtype='int64'),'N','N','M') + def faceR(mat,length): + return mat.T.reshape((length,1)) + # First direction + nTFx = np.prod(mesh.nFx) + FxCellBlock = np.hstack([ 4*np.ones((nTFx,1),dtype='int64'),faceR(nodeMat[:,:-1,:-1],nTFx),faceR(nodeMat[:,1: ,:-1],nTFx),faceR(nodeMat[:,1: ,1: ],nTFx),faceR(nodeMat[:,:-1,1: ],nTFx)] ) + FyCellBlock = np.array([],dtype='int64') + FzCellBlock = np.array([],dtype='int64') + # Second direction + if mesh.dim >= 2: + nTFy = np.prod(mesh.nFy) + FyCellBlock = np.hstack([ 4*np.ones((nTFy,1),dtype='int64'),faceR(nodeMat[:-1,:,:-1],nTFy),faceR(nodeMat[1: ,:,:-1],nTFy),faceR(nodeMat[1: ,:,1: ],nTFy),faceR(nodeMat[:-1,:,1: ],nTFy)] ) + # Third direction + if mesh.dim == 3: + nTFz = np.prod(mesh.nFz) + FzCellBlock = np.hstack([ 4*np.ones((nTFz,1),dtype='int64'),faceR(nodeMat[:-1,:-1,:],nTFz),faceR(nodeMat[1: ,:-1,:],nTFz),faceR(nodeMat[1: ,1: ,:],nTFz),faceR(nodeMat[:-1,1: ,:],nTFz)] ) + # Cells -cell array + FCellArr = vtk.vtkCellArray() + FCellArr.SetNumberOfCells(np.sum(mesh.nF)) + FCellArr.SetCells(np.sum(mesh.nF)*5,npsup.numpy_to_vtkIdTypeArray(np.vstack([FxCellBlock,FyCellBlock,FzCellBlock]),deep=1)) + # Cell type + FCellType = npsup.numpy_to_vtk(vtk.VTK_QUAD*np.ones(np.sum(mesh.nF),dtype='uint8'),deep=1) + # Cell location + FCellLoc = npsup.numpy_to_vtkIdTypeArray(np.arange(0,np.sum(mesh.nF)*5,5,dtype='int64'),deep=1) + + ## Make the object + vtkObj = vtk.vtkUnstructuredGrid() + # Set the objects properties + vtkObj.SetPoints(vtkPts) + vtkObj.SetCells(FCellType,FCellLoc,FCellArr) + + # Assign the model('s) to the object + for item in model.iteritems(): + # Convert numpy array + vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) + vtkDoubleArr.SetName(item[0]) + vtkObj.GetCellData().AddArray(vtkDoubleArr) + vtkObj.Update() + return vtkObj + + @staticmethod + def makeEdgeVTKObject(mesh,model): + """ + Make and return a edge based VTK object for a simpeg mesh and model. + + Input: + :param mesh, SimPEG TensorMesh object - mesh to be transfer to VTK + :param model, dictionary of numpy.array - Name('s) and array('s). + Property array must be order hstack(Ex,Ey,Ez) + + Output: + :rtype: vtkUnstructuredGrid object + :return: vtkObj + """ + + ## Convert simpeg mesh to VTK properties + # Convert mesh nodes to vtkPoints + vtkPts = vtk.vtkPoints() + vtkPts.SetData(npsup.numpy_to_vtk(mesh.gridN,deep=1)) + + # Define the face "cells" + # Using VTK_QUAD cell for faces (see VTK file format) + nodeMat = mesh.r(np.arange(mesh.nN,dtype='int64'),'N','N','M') + def edgeR(mat,length): + return mat.T.reshape((length,1)) + # First direction + nTEx = np.prod(mesh.nEx) + ExCellBlock = np.hstack([ 2*np.ones((nTEx,1),dtype='int64'),edgeR(nodeMat[:-1,:,:],nTEx),edgeR(nodeMat[1:,:,:],nTEx)]) + # Second direction + if mesh.dim >= 2: + nTEy = np.prod(mesh.nEy) + EyCellBlock = np.hstack([ 2*np.ones((nTEy,1),dtype='int64'),edgeR(nodeMat[:,:-1,:],nTEy),edgeR(nodeMat[:,1:,:],nTEy)]) + # Third direction + if mesh.dim == 3: + nTEz = np.prod(mesh.nEz) + EzCellBlock = np.hstack([ 2*np.ones((nTEz,1),dtype='int64'),edgeR(nodeMat[:,:,:-1],nTEz),edgeR(nodeMat[:,:,1:],nTEz)]) + # Cells -cell array + ECellArr = vtk.vtkCellArray() + ECellArr.SetNumberOfCells(np.sum(mesh.nE)) + ECellArr.SetCells(np.sum(mesh.nE)*3,npsup.numpy_to_vtkIdTypeArray(np.vstack([ExCellBlock,EyCellBlock,EzCellBlock]),deep=1)) + # Cell type + ECellType = npsup.numpy_to_vtk(vtk.VTK_LINE*np.ones(np.sum(mesh.nE),dtype='uint8'),deep=1) + # Cell location + ECellLoc = npsup.numpy_to_vtkIdTypeArray(np.arange(0,np.sum(mesh.nE)*3,3,dtype='int64'),deep=1) + + ## Make the object + vtkObj = vtk.vtkUnstructuredGrid() + # Set the objects properties + vtkObj.SetPoints(vtkPts) + vtkObj.SetCells(ECellType,ECellLoc,ECellArr) + + # Assign the model('s) to the object + for item in model.iteritems(): + # Convert numpy array + vtkDoubleArr = npsup.numpy_to_vtk(item[1],deep=1) + vtkDoubleArr.SetName(item[0]) + vtkObj.GetCellData().AddArray(vtkDoubleArr) + + return vtkObj + + @staticmethod + def makeRenderWindow(ren): + renWin = vtk.vtkRenderWindow() + renWin.AddRenderer(ren) + iren = vtk.vtkRenderWindowInteractor() + iren.SetRenderWindow(renWin) + + return iren + + + @staticmethod + def closeRenderWindow(iren): + renwin = iren.GetRenderWindow() + renwin.Finalize() + iren.TerminateApp() + del iren, renwin + + @staticmethod + def makeVTKActor(vtkObj): + """ Makes a vtk mapper and Actor""" + mapper = vtk.vtkDataSetMapper() + mapper.SetInput(vtkObj) + actor = vtk.vtkActor() + actor.SetMapper(mapper) + actor.GetProperty().SetColor(0,0,0) + actor.GetProperty().SetRepresentationToWireframe() + + return actor + + @staticmethod + def startRenderWindow(iren): + """ Start a vtk rendering window""" + iren.Initialize() + renwin = iren.GetRenderWindow() + renwin.Render() + iren.Start() + + + # Simple write/read VTK xml model functions. + @staticmethod + def writeVTPFile(fileName,vtkPolyObject): + '''Function to write vtk polydata file (vtp).''' + polyWriter = vtk.vtkXMLPolyDataWriter() + polyWriter.SetInput(vtkPolyObject) + polyWriter.SetFileName(fileName) + polyWriter.Update() + + @staticmethod + def writeVTUFile(fileName,vtkUnstructuredGrid): + '''Function to write vtk unstructured grid (vtu).''' + Writer = vtk.vtkXMLUnstructuredGridWriter() + Writer.SetInput(vtkUnstructuredGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def writeVTRFile(fileName,vtkRectilinearGrid): + '''Function to write vtk rectilinear grid (vtr).''' + Writer = vtk.vtkXMLRectilinearGridWriter() + Writer.SetInput(vtkRectilinearGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def writeVTSFile(fileName,vtkStructuredGrid): + '''Function to write vtk structured grid (vts).''' + Writer = vtk.vtkXMLStructuredGridWriter() + Writer.SetInput(vtkStructuredGrid) + Writer.SetFileName(fileName) + Writer.Update() + + @staticmethod + def readVTSFile(fileName): + '''Function to read vtk structured grid (vts) and return a grid object.''' + Reader = vtk.vtkXMLStructuredGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTUFile(fileName): + '''Function to read vtk structured grid (vtu) and return a grid object.''' + Reader = vtk.vtkXMLUnstructuredGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTRFile(fileName): + '''Function to read vtk structured grid (vtr) and return a grid object.''' + Reader = vtk.vtkXMLRectilinearGridReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + + @staticmethod + def readVTPFile(fileName): + '''Function to read vtk structured grid (vtp) and return a grid object.''' + Reader = vtk.vtkXMLPolyDataReader() + Reader.SetFileName(fileName) + Reader.Update() + return Reader.GetOutput() + diff --git a/SimPEG/visulize/vtk/vtkView.py b/SimPEG/visulize/vtk/vtkView.py new file mode 100644 index 00000000..f11fcfd8 --- /dev/null +++ b/SimPEG/visulize/vtk/vtkView.py @@ -0,0 +1,95 @@ +import numpy as np, vtk +import SimPEG as simpeg +#import SimPEG.visulize.vtk.vtkTools as vtkSP # Always get an error for this import + +class vtkView(object): + """ + Class for storing and view of SimPEG models in VTK (visulization toolkit). + + Inputs: + :param mesh, SimPEG mesh. + :param propdict, dictionary of property models. + Can have these dictionary names: + 'cell' - cell model; 'face' - face model; 'edge' - edge model + The dictionary properties are given as dictionaries with: + {'NameOfThePropertyModel': np.array of the properties}. + The property array has to be ordered in compliance with SimPEG standards. + + :: + Example of usages. + + ToDo + + """ + + def __init__(self,mesh,propdict): + """ + """ + + self.name = 'VTK figure of SimPEG model' + self._mesh = mesh + self._cell = None + self._faces = None + self._edges = None + + + + self._readPropertyDictionary(propdict) + + def _readPropertyDictionary(self,propdict): + """ + Reads the property and assigns to the object + """ + import SimPEG.visulize.vtk.vtkTools as vtkSP + + # Test the property dictionary + if len(propdict) > 3: + raise(Exception,'Too many input items in the property dictionary') + for propitem in propdict.iteritems(): + if propitem[0] in ['cell','face','edge']: + if propitem[0] == 'cell': + self._cell = vtkSP.makeCellVTKObject(self._mesh,propitem[1]) + if propitem[0] == 'face': + self._face = vtkSP.makeFaceVTKObject(self._mesh,propitem[1]) + if propitem[0] == 'edge': + self._edge = vtkSP.makeEdgeVTKObject(self._mesh,propitem[1]) + else: + raise(Exception,'{:s} is not allowed as a dictonary key. Can be \'cell\',\'face\',\'edge\'.'.format(propitem[0])) + + def Show(self,imageType='cell'): + """ + Open the VTK figure window + """ + #vtkSP = simpeg.visulize.vtk.vtkTools + import SimPEG.visulize.vtk.vtkTools as vtkSP + + # Make a renderer + ren = vtk.vtkRenderer() + # Make renderwindow. Returns the interactor. + iren = vtkSP.makeRenderWindow(ren) + + # Sort out the actor + if imageType == 'cell': + actor = vtkSP.makeVTKActor(self._cell) + elif imageType == 'face': + actor = vtkSP.makeVTKActor(self._face) + elif imageType == 'edge': + actor = vtkSP.makeVTKActor(self._edge) + actor.GetProperty().SetRepresentationToSurface() + else: + raise(Exception,"{:s} is not a vailid imageType. Has to be 'cell':'face':'edge'".format(imageType)) + + ren.AddActor(actor) + ren.SetBackground(.5,.5,.5) + + vtkSP.startRenderWindow(iren) + + vtkSP.closeRenderWindow(iren) + + + + + + + + From e5a3e8de7d1575123fe97803586fc751418c8b44 Mon Sep 17 00:00:00 2001 From: Gudni Karl Rosenkjaer Date: Mon, 4 Nov 2013 10:35:42 -0800 Subject: [PATCH 178/359] Added more help for vtkView. --- SimPEG/visulize/vtk/vtkView.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SimPEG/visulize/vtk/vtkView.py b/SimPEG/visulize/vtk/vtkView.py index f11fcfd8..20bcdaa8 100644 --- a/SimPEG/visulize/vtk/vtkView.py +++ b/SimPEG/visulize/vtk/vtkView.py @@ -58,7 +58,11 @@ class vtkView(object): def Show(self,imageType='cell'): """ - Open the VTK figure window + Open the VTK figure window and show the mesh. + + Inputs: + param: str imageType: type of image {'cell','face','edge'} + """ #vtkSP = simpeg.visulize.vtk.vtkTools import SimPEG.visulize.vtk.vtkTools as vtkSP From df51919d8135ab0d8a94da0ecca3e615246b2f62 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 11:49:55 -0800 Subject: [PATCH 179/359] Documentation Updates. Issue #11 --- SimPEG/inverse/Optimize.py | 166 +++++++++++++++++++++++++++++++++-- SimPEG/mesh/InnerProducts.py | 8 +- 2 files changed, 163 insertions(+), 11 deletions(-) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index 3e50e3df..d4829b7b 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -3,6 +3,7 @@ import matplotlib.pyplot as plt from SimPEG.utils import mkvc, sdiag norm = np.linalg.norm import scipy.sparse as sp +from SimPEG import Solver try: from pubsub import pub @@ -16,7 +17,7 @@ except Exception, e: class Minimize(object): """ - Minimize is a general class for derivative based optimization. + Minimize is a general class for derivative based optimization. """ @@ -38,6 +39,7 @@ class Minimize(object): self.setKwargs(**kwargs) def setKwargs(self, **kwargs): + """Sets key word arguments (kwargs) that are present in the object.""" # Set the variables, throw an error if they don't exist. for attr in kwargs: if hasattr(self, attr): @@ -47,11 +49,58 @@ class Minimize(object): def minimize(self, evalFunction, x0): """ + Minimizes the function (evalFunction) starting at the location x0. + + :param def evalFunction: function handle that evaluates: f, g, H = F(x) + :param numpy.ndarray x0: starting location + :rtype: numpy.ndarray + :return: x, the last iterate of the optimization algorithm evalFunction is a function handle:: - evalFunction(x, return_g=True, return_H=True ) + (f[, g][, H]) = evalFunction(x, return_g=False, return_H=False ) + + Events are fired with the following inputs via pypubsub:: + + Minimize.printInit (minimize) + Minimize.evalFunction (minimize, f, g, H) + Minimize.printIter (minimize) + Minimize.searchDirection (minimize, p) + Minimize.scaleSearchDirection (minimize, p) + Minimize.modifySearchDirection (minimize, xt, passLS) + Minimize.endIteration (minimize, xt) + Minimize.printDone (minimize) + + To hook into one of these events (must have pypubsub installed):: + + from pubsub import pub + def listener(minimize,p): + print 'The search direction is: ', p + pub.subscribe(listener, 'Minimize.searchDirection') + + You can use pubsub communication to debug your code, it is not used internally. + + + The algorithm for general minimization is as follows:: + + startup(x0) + printInit() + + while True: + f, g, H = evalFunction(xc) + printIter() + if stoppingCriteria(): break + p = findSearchDirection() + p = scaleSearchDirection(p) + xt, passLS = modifySearchDirection(p) + if not passLS: + xt, caught = modifySearchDirectionBreak(p) + if not caught: return xc + doEndIteration(xt) + + printDone() + return xc """ self.evalFunction = evalFunction self.startup(x0) @@ -67,7 +116,7 @@ class Minimize(object): p = self.scaleSearchDirection(p) if doPub: pub.sendMessage('Minimize.scaleSearchDirection', minimize=self, p=p) xt, passLS = self.modifySearchDirection(p) - if doPub: pub.sendMessage('Minimize.modifySearchDirection', minimize=self, xt=xt) + if doPub: pub.sendMessage('Minimize.modifySearchDirection', minimize=self, xt=xt, passLS=passLS) if not passLS: xt, caught = self.modifySearchDirectionBreak(p) if not caught: return self.xc @@ -89,6 +138,19 @@ class Minimize(object): self._parent = value def startup(self, x0): + """ + **startup** is called at the start of any new minimize call. + + This will set:: + + x0 = x0 + xc = x0 + _iter = _iterLS = 0 + + :param numpy.ndarray x0: initial x + :rtype: None + :return: None + """ self._iter = 0 self._iterLS = 0 self._STOP = np.zeros((5,1),dtype=bool) @@ -99,7 +161,10 @@ class Minimize(object): def printInit(self): """ - printIter is called at the beginning of the optimization routine. + printInit is called at the beginning of the optimization routine. + + If there is a parent object, printInit will check for a + parent.printInit function and call that. """ if doPub: pub.sendMessage('Minimize.printInit', minimize=self) @@ -114,6 +179,9 @@ class Minimize(object): """ printIter is called directly after function evaluations. + If there is a parent object, printIter will check for a + parent.printIter function and call that. + """ if doPub: pub.sendMessage('Minimize.printIter', minimize=self) if self.parent is not None and hasattr(self.parent, 'printIter'): @@ -122,6 +190,13 @@ class Minimize(object): print "%3d\t%1.2e\t%1.2e\t%d" % (self._iter, self.f, norm(self.g), self._iterLS) def printDone(self): + """ + printDone is called at the end of the optimization routine. + + If there is a parent object, printDone will check for a + parent.printDone function and call that. + + """ if doPub: pub.sendMessage('Minimize.printDone', minimize=self) if self.parent is not None and hasattr(self.parent, 'printDone'): self.parent.printDone() @@ -149,17 +224,79 @@ class Minimize(object): return all(self._STOP[0:3]) | any(self._STOP[3:]) def projection(self, p): + """ + projects the search direction. + + by default, no projection is applied. + + :param numpy.ndarray p: searchDirection + :rtype: numpy.ndarray + :return: p, projected search direction + """ return p def findSearchDirection(self): + """ + **findSearchDirection** should return an approximation of: + + .. math:: + + H p = - g + + Where you are solving for the search direction, p + + The default is: + + .. math:: + + H = I + + p = - g + + And corresponds to SteepestDescent. + + The latest function evaluations are present in:: + + self.f, self.g, self.H + + :rtype: numpy.ndarray + :return: p, Search Direction + """ return -self.g def scaleSearchDirection(self, p): + """ + **scaleSearchDirection** should scale the search direction if appropriate. + + Set the parameter **maxStep** in the minimize object, to scale back the gradient to a maximum size. + + :param numpy.ndarray p: searchDirection + :rtype: numpy.ndarray + :return: p, Scaled Search Direction + """ + if self.maxStep < np.abs(p.max()): p = self.maxStep*p/np.abs(p.max()) return p def modifySearchDirection(self, p): + """ + **modifySearchDirection** changes the search direction based on some sort of linesearch or trust-region criteria. + + By default, an Armijo backtracking linesearch is preformed with the following parameters: + + * maxIterLS, the maximum number of linesearch iterations + * LSreduction, the expected reduction expected, default: 1e-4 + * LSshorten, how much the step is reduced, default: 0.5 + + If the linesearch is completed, and a descent direction is found, passLS is returned as True. + + Else, a modifySearchDirectionBreak call is preformed. + + :param numpy.ndarray p: searchDirection + :rtype: numpy.ndarray,bool + :return: (xt, passLS) + """ # Armijo linesearch descent = np.inner(self.g, p) t = 1 @@ -185,7 +322,7 @@ class Minimize(object): and if the searchDirection break has been caught. By default, no additional work is done, and the - function returns a False indicating the break was not caught. + evalFunction returns a False indicating the break was not caught. :param numpy.ndarray p: searchDirection :rtype: numpy.ndarray,bool @@ -195,6 +332,17 @@ class Minimize(object): return p, False def doEndIteration(self, xt): + """ + **doEndIteration** is called at the end of each minimize iteration. + + By default, function values and x locations are shuffled to store 1 past iteration in memory. + + self.xc must be updated in this code. + + :param numpy.ndarray xt: tested new iterate that ensures a descent direction. + :rtype: None + :return: None + """ # store old values self.fOld = self.f self.xOld, self.xc = self.xc, xt @@ -204,14 +352,18 @@ class Minimize(object): class GaussNewton(Minimize): name = 'GaussNewton' def findSearchDirection(self): - return np.linalg.solve(self.H,-self.g) + return Solver(self.H).solve(-self.g) class InexactGaussNewton(Minimize): name = 'InexactGaussNewton' + + maxIterCG = 10 + tolCG = 1e-5 + def findSearchDirection(self): # TODO: use BFGS as a preconditioner or gauss sidel of the WtW or solve WtW directly - p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=10) + p, info = sp.linalg.cg(self.H, -self.g, tol=self.tolCG, maxiter=self.maxIterCG) return p diff --git a/SimPEG/mesh/InnerProducts.py b/SimPEG/mesh/InnerProducts.py index 9fe84ac3..f0ac4ab0 100644 --- a/SimPEG/mesh/InnerProducts.py +++ b/SimPEG/mesh/InnerProducts.py @@ -81,9 +81,9 @@ class InnerProducts(object): def getFaceInnerProduct(self, mu=None, returnP=False): """Wrapper function, - :py:func:`SimPEG.InnerProducts.getEdgeInnerProduct` + :py:func:`SimPEG.mesh.InnerProducts.InnerProducts.getEdgeInnerProduct` - :py:func:`SimPEG.InnerProducts.getEdgeInnerProduct2D` + :py:func:`SimPEG.mesh.InnerProducts.InnerProducts.getEdgeInnerProduct2D` """ if self.dim == 2: return getFaceInnerProduct2D(self, mu, returnP) @@ -93,9 +93,9 @@ class InnerProducts(object): def getEdgeInnerProduct(self, sigma=None, returnP=False): """Wrapper function, - :py:func:`SimPEG.InnerProducts.getFaceInnerProduct` + :py:func:`SimPEG.mesh.InnerProducts.InnerProducts.getFaceInnerProduct` - :py:func:`SimPEG.InnerProducts.getFaceInnerProduct2D` + :py:func:`SimPEG.mesh.InnerProducts.InnerProducts.getFaceInnerProduct2D` """ if self.dim == 2: return getEdgeInnerProduct2D(self, sigma, returnP) From 06cd641db3482022bafb2ad18171925e24d165ae Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Mon, 4 Nov 2013 14:07:16 -0800 Subject: [PATCH 180/359] Initial implementation of interpolation matrix generation for TensorMesh (3D ONLY) --- SimPEG/mesh/TensorMesh.py | 110 +++++++++++++++++++++++++++++++++++- SimPEG/utils/__init__.py | 2 + SimPEG/utils/interputils.py | 77 +++++++++++++++++++++++++ 3 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 SimPEG/utils/interputils.py diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index a3329c14..1dbd62a3 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -1,9 +1,10 @@ import numpy as np +import scipy.sparse as sp from BaseMesh import BaseMesh from TensorView import TensorView from DiffOperators import DiffOperators from InnerProducts import InnerProducts -from SimPEG.utils import ndgrid, mkvc +from SimPEG.utils import ndgrid, mkvc, spzeros, interpmat class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): @@ -312,6 +313,113 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): _edge = None edge = property(**edge()) + # --------------- Methods --------------------- + + def isInside(self, pts): + """ + Determines if a set of points are inside a mesh. + + :param numpy.ndarray pts: Location of points to test + :rtype numpy.ndarray + :return inside, numpy array of booleans + """ + + pts = np.atleast_2d(pts) + inside = (pts[:,0] >= self.vectorNx.min()) & (pts[:,0] <= self.vectorNx.max()) + if self.dim > 1: + inside = inside & ((pts[:,1] >= self.vectorNy.min()) & (pts[:,1] <= self.vectorNy.max())) + if self.dim > 2: + inside = inside & ((pts[:,2] >= self.vectorNz.min()) & (pts[:,2] <= self.vectorNz.max())) + return inside + + def getInterpolationMat(self, loc, locType): + """ Produces interpolation matrix + + :param numpy.ndarray loc: Location of points to interpolate to + :param str locType: What to interpolate (see below) + :rtype: scipy.sparse.csr.csr_matrix + :return: M, the interpolation matrix + + locType can be:: + + 'ex' -> x-component of field defined on edges + 'ey' -> y-component of field defined on edges + 'ez' -> z-component of field defined on edges + 'fx' -> x-component of field defined on edges + 'fy' -> y-component of field defined on edges + 'fz' -> z-component of field defined on edges + 'n' -> scalar field defined on nodes + 'cc' -> scalar field defined on cell centres + """ + + loc = np.atleast_2d(loc) + assert np.all(self.isInside(loc)), "Points outside of mesh" + + if self.dim == 3: + + if locType == 'fx': + Qx = interpmat(self.vectorNx, + self.vectorCCy, + self.vectorCCz, + loc[:,0], loc[:,1], loc[:,2]) + Qy = spzeros(loc.shape[0], self.nF[1]) + Qz = spzeros(loc.shape[0], self.nF[2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'fy': + Qx = spzeros(loc.shape[0], self.nF[0]) + Qy = interpmat(self.vectorCCx, + self.vectorNy, + self.vectorCCz, + loc[:,0], loc[:,1], loc[:,2]) + Qz = spzeros(loc.shape[0], self.nF[2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'fz': + Qx = spzeros(loc.shape[0], self.nF[0]) + Qy = spzeros(loc.shape[0], self.nF[1]) + Qz = interpmat(self.vectorCCx, + self.vectorCCy, + self.vectorNz, + loc[:,0], loc[:,1], loc[:,2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'ex': + Qx = interpmat(self.vectorCCx, + self.vectorNy, + self.vectorNz, + loc[:,0], loc[:,1], loc[:,2]) + Qy = spzeros(loc.shape[0], self.nF[1]) + Qz = spzeros(loc.shape[0], self.nF[2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'ey': + Qx = spzeros(loc.shape[0], self.nF[0]) + Qy = interpmat(self.vectorNx, + self.vectorCCy, + self.vectorNz, + loc[:,0], loc[:,1], loc[:,2]) + Qz = spzeros(loc.shape[0], self.nF[2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'ez': + Qx = spzeros(loc.shape[0], self.nF[0]) + Qy = spzeros(loc.shape[0], self.nF[1]) + Qz = interpmat(self.vectorNx, + self.vectorNy, + self.vectorCCz, + loc[:,0], loc[:,1], loc[:,2]) + Q = sp.hstack([Qx, Qy, Qz]) + elif locType == 'n': + Q = interpmat(self.vectorNx, + self.vectorNy, + self.vectorNz, + loc[:,0], loc[:,1], loc[:,2]) + elif locType == 'cc': + Q = interpmat(self.vectorCCx, + self.vectorCCy, + self.vectorCCz, + loc[:,0], loc[:,1], loc[:,2]) + else: + raise NotImplementedError('getInterpolationMat: locType=='+locType) + else: + raise NotImplementedError('getInterpolationMat: dim=='+str(m.dim)) + return Q if __name__ == '__main__': print('Welcome to tensor mesh!') diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py index 7c976ce3..9457df03 100644 --- a/SimPEG/utils/__init__.py +++ b/SimPEG/utils/__init__.py @@ -1,7 +1,9 @@ import matutils import sputils import lomutils +import interputils import ModelBuilder from matutils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind from sputils import spzeros, kron3, speye, sdiag from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird +from interputils import interpmat \ No newline at end of file diff --git a/SimPEG/utils/interputils.py b/SimPEG/utils/interputils.py new file mode 100644 index 00000000..0d528e93 --- /dev/null +++ b/SimPEG/utils/interputils.py @@ -0,0 +1,77 @@ +import numpy as np +import scipy.sparse as sp +from sputils import spzeros +from matutils import mkvc, sub2ind + +def interpmat(x,y,z,xr,yr,zr): + + """ Local interpolation computed for each receiver point in turn """ + + nx = max(x.shape) + ny = max(y.shape) + nz = max(z.shape) + npts = max(xr.shape) + + Q = sp.lil_matrix((npts, nx*ny*nz)) + + for i in range(npts): + # in x-direction + im = np.argmin(abs(x-xr[i])) + if xr[i] - x[im] >= 0: # Point on the left + ind_x1 = im + ind_x2 = im+1 + elif xr[i] - x[im] < 0: # Point on the right + ind_x1 = im-1 + ind_x2 = im + dx1 = xr[i] - x[ind_x1] + dx2 = x[ind_x2] - xr[i] + # in y-direction + im = np.argmin(abs(y-yr[i])) + if yr[i] - y[im] >= 0: # Point on the left + ind_y1 = im + ind_y2 = im+1 + elif yr[i] - y[im] < 0: # Point on the right + ind_y1 = im-1 + ind_y2 = im + dy1 = yr[i] - y[ind_y1] + dy2 = y[ind_y2] - yr[i] + # in z-direction + im = np.argmin(abs(z-zr[i])) + if zr[i] - z[im] >= 0: # Point on the left + ind_z1 = im + ind_z2 = im+1 + elif zr[i] - z[im] < 0: # Point on the right + ind_z1 = im-1 + ind_z2 = im + dz1 = zr[i] - z[ind_z1] + dz2 = z[ind_z2] - zr[i] + dv = (x[ind_x2] - x[ind_x1]) * (y[ind_y2] - y[ind_y1]) *(z[ind_z2] - z[ind_z1]) + + Dx = x[ind_x2] - x[ind_x1] + Dy = y[ind_y2] - y[ind_y1] + Dz = z[ind_z2] - z[ind_z1] + + # Get the row in the matrix + + inds = sub2ind((nx,ny,nz),[ + ( ind_x1, ind_y2, ind_z1), + ( ind_x1, ind_y1, ind_z1), + ( ind_x2, ind_y1, ind_z1), + ( ind_x2, ind_y2, ind_z1), + ( ind_x1, ind_y1, ind_z2), + ( ind_x1, ind_y2, ind_z2), + ( ind_x2, ind_y1, ind_z2), + ( ind_x2, ind_y2, ind_z2)]) + + vals = [(1-dx1/Dx)*(1-dy2/Dy)*(1-dz1/Dz), + (1-dx1/Dx)*(1-dy1/Dy)*(1-dz1/Dz), + (1-dx2/Dx)*(1-dy1/Dy)*(1-dz1/Dz), + (1-dx2/Dx)*(1-dy2/Dy)*(1-dz1/Dz), + (1-dx1/Dx)*(1-dy1/Dy)*(1-dz2/Dz), + (1-dx1/Dx)*(1-dy2/Dy)*(1-dz2/Dz), + (1-dx2/Dx)*(1-dy1/Dy)*(1-dz2/Dz), + (1-dx2/Dx)*(1-dy2/Dy)*(1-dz2/Dz)] + + Q[i, mkvc(inds)] = vals + Q = Q.tocsr() + return Q \ No newline at end of file From 6f141ecaf299e91d973244f173e97950996cf927 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 15:11:10 -0800 Subject: [PATCH 181/359] Updates to DCProblem and testing. --- SimPEG/forward/DCProblem.py | 76 ++++++++++++++------------ SimPEG/inverse/Inversion.py | 2 +- SimPEG/inverse/Optimize.py | 18 ++---- SimPEG/tests/TestUtils.py | 35 ++++++++++-- SimPEG/tests/test_forward_DCproblem.py | 26 +++++++-- SimPEG/tests/test_forward_problem.py | 10 +++- SimPEG/tests/test_utils.py | 23 ++++++++ 7 files changed, 129 insertions(+), 61 deletions(-) diff --git a/SimPEG/forward/DCProblem.py b/SimPEG/forward/DCProblem.py index c2a615ed..132966a8 100644 --- a/SimPEG/forward/DCProblem.py +++ b/SimPEG/forward/DCProblem.py @@ -7,6 +7,7 @@ import numpy as np import scipy.sparse as sp import scipy.sparse.linalg as linalg + class DCProblem(ModelTransforms.LogModel, Problem): """ **DCProblem** @@ -18,6 +19,11 @@ class DCProblem(ModelTransforms.LogModel, Problem): super(DCProblem, self).__init__(mesh) self.mesh.setCellGradBC('neumann') + def reshapeFields(self, u): + if len(u.shape) == 1: + u = u.reshape([-1, self.RHS.shape[1]], order='F') + return u + def createMatrix(self, m): """ Makes the matrix A(m) for the DC resistivity problem. @@ -38,11 +44,25 @@ class DCProblem(ModelTransforms.LogModel, Problem): A = D*Msig*G return A.tocsc() + def dpred(self, m, u=None): + """ + Predicted data. + + .. math:: + d_\\text{pred} = Pu(m) + """ + if u is None: + u = self.field(m) + + u = self.reshapeFields(u) + + return mkvc(self.P*u) + def field(self, m): A = self.createMatrix(m) solve = Solver(A) phi = solve.solve(self.RHS) - return phi + return mkvc(phi) def J(self, m, v, u=None): """ @@ -69,6 +89,8 @@ class DCProblem(ModelTransforms.LogModel, Problem): if u is None: u = self.field(m) + u = self.reshapeFields(u) + P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad @@ -83,13 +105,18 @@ class DCProblem(ModelTransforms.LogModel, Problem): dCdm[:, i] = D * ( sdiag( G * ui ) * ( Av_dm * ( mT_dm * v ) ) ) solve = Solver(dCdu) - # solve = linalg.factorized(dCdu) - Jv = - P * solve.solve(dCdm) - return Jv + return mkvc(Jv) def Jt(self, m, v, u=None): """Takes data, turns it into a model..ish""" + + if u is None: + u = self.field(m) + + u = self.reshapeFields(u) + v = self.reshapeFields(v) + P = self.P D = self.mesh.faceDiv G = self.mesh.cellGrad @@ -147,7 +174,7 @@ if __name__ == '__main__': import matplotlib.pyplot as plt # Create the mesh - h1 = np.ones(100) + h1 = np.ones(20) h2 = np.ones(100) mesh = TensorMesh([h1,h2]) @@ -156,12 +183,12 @@ if __name__ == '__main__': sig2 = np.log(0.01) # Create a synthetic model from a block in a half-space - p0 = [20, 20] - p1 = [50, 50] + p0 = [5, 10] + p1 = [15, 50] condVals = [sig1, sig2] mSynth = ModelBuilder.defineBlockConductivity(p0,p1,mesh.gridCC,condVals) plt.colorbar(mesh.plotImage(mSynth)) - # plt.show() + plt.show() # Set up the projection nelec = 50 @@ -184,7 +211,9 @@ if __name__ == '__main__': dobs, Wd = synthetic.createData(mSynth, std=0.05) u = synthetic.field(mSynth) - # mesh.plotImage(u[:,10], showIt=False) + u = synthetic.reshapeFields(u) + mesh.plotImage(u[:,10]) + # plt.show() # Now set up the problem to do some minimization problem = DCProblem(mesh) @@ -194,39 +223,16 @@ if __name__ == '__main__': problem.std = dobs*0 + 0.05 m0 = mesh.gridCC[:,0]*0+sig2 - - - # Adjoint Test - u = np.random.rand(mesh.nC, problem.RHS.shape[1]) - v = np.random.rand(mesh.nC) - w = np.random.rand(*dobs.shape) - Jv = mkvc(problem.J(mSynth, v, u=u)) - print mkvc(w).dot(Jv) - print v.dot(problem.Jt(mSynth, w, u=u)) - - # Check Derivative - dm = np.random.randn(*m0.shape) - for alp in np.logspace(-2,-6, 5): - a = problem.dpred(m0) - b = problem.dpred(m0 + alp*dm) - c = problem.J(m0, alp*dm) - print np.linalg.norm(a-b), np.linalg.norm(a-b+c) - - - # derChk = lambda m: [problem.dpred(m), problem.J(mSynth,m)] - # checkDerivative(derChk, mSynth) - - - opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=3) + opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=10, tolF=1e-6, tolX=1e-6, tolG=1e-6, maxIterCG=6) reg = Regularization(mesh) - - inv = inverse.Inversion(problem, reg, opt) + inv = inverse.Inversion(problem, reg, opt, beta0=1e4) # Check Derivative derChk = lambda m: [inv.dataObj(m), inv.dataObjDeriv(m)] checkDerivative(derChk, mSynth) + print inv.dataObj(m0) print inv.dataObj(mSynth) diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index 827e12f8..3aa8ce58 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -16,7 +16,7 @@ class Inversion(object): self.setKwargs(**kwargs) def setKwargs(self, **kwargs): - # Set the variables, throw an error if they don't exist. + """Sets key word arguments (kwargs) that are present in the object, throw an error if they don't exist.""" for attr in kwargs: if hasattr(self, attr): setattr(self, attr, kwargs[attr]) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index d4829b7b..6221246f 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -39,8 +39,7 @@ class Minimize(object): self.setKwargs(**kwargs) def setKwargs(self, **kwargs): - """Sets key word arguments (kwargs) that are present in the object.""" - # Set the variables, throw an error if they don't exist. + """Sets key word arguments (kwargs) that are present in the object, throw an error if they don't exist.""" for attr in kwargs: if hasattr(self, attr): setattr(self, attr, kwargs[attr]) @@ -161,7 +160,7 @@ class Minimize(object): def printInit(self): """ - printInit is called at the beginning of the optimization routine. + **printInit** is called at the beginning of the optimization routine. If there is a parent object, printInit will check for a parent.printInit function and call that. @@ -177,7 +176,7 @@ class Minimize(object): def printIter(self): """ - printIter is called directly after function evaluations. + **printIter** is called directly after function evaluations. If there is a parent object, printIter will check for a parent.printIter function and call that. @@ -191,7 +190,7 @@ class Minimize(object): def printDone(self): """ - printDone is called at the end of the optimization routine. + **printDone** is called at the end of the optimization routine. If there is a parent object, printDone will check for a parent.printDone function and call that. @@ -386,12 +385,3 @@ if __name__ == '__main__': print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) xOpt = SteepestDescent(maxIter=30, maxIterLS=15,tolF=1e-10,tolX=1e-10,tolG=1e-10).minimize(Rosenbrock, x0) print "xOpt=[%f, %f]" % (xOpt[0], xOpt[1]) - - def simplePass(x): - return np.sin(x), sdiag(np.cos(x)) - - def simpleFail(x): - return np.sin(x), -sdiag(np.cos(x)) - - checkDerivative(simplePass, np.random.randn(5), plotIt=False) - checkDerivative(simpleFail, np.random.randn(5), plotIt=False) diff --git a/SimPEG/tests/TestUtils.py b/SimPEG/tests/TestUtils.py index ff7ee668..29f9086f 100644 --- a/SimPEG/tests/TestUtils.py +++ b/SimPEG/tests/TestUtils.py @@ -1,12 +1,15 @@ import numpy as np import matplotlib.pyplot as plt from pylab import norm -from SimPEG.utils import mkvc +from SimPEG.utils import mkvc, sdiag from SimPEG import utils from SimPEG.mesh import TensorMesh, LogicallyOrthogonalMesh import numpy as np import unittest +import inspect +happiness = ['The test be workin!', 'You get a gold star!', 'Yay passed!', 'Happy little convergence test!', 'That was easy!', 'Testing is important.', 'You are awesome.', 'Go Test Go!', 'Once upon a time, a happy little test passed.', 'And then everyone was happy.'] +sadness = ['No gold star for you.','Try again soon.','Thankfully, persistence is a great substitute for talent.','It might be easier to call this a feature...','Coffee break?', 'Boooooooo :(', 'Testing is important. Do it again.'] class OrderTest(unittest.TestCase): """ @@ -157,9 +160,10 @@ class OrderTest(unittest.TestCase): print '---------------------------------------------' passTest = np.mean(np.array(order)) > self.tolerance*self._expectedOrder if passTest: - print ['The test be workin!', 'You get a gold star!', 'Yay passed!', 'Happy little convergence test!', 'That was easy!'][np.random.randint(5)] + print happiness[np.random.randint(len(happiness))] else: print 'Failed to pass test on ' + self._meshType + '.' + print sadness[np.random.randint(len(sadness))] print '' self.assertTrue(passTest) @@ -222,7 +226,11 @@ def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): for i in range(num): Jt = fctn(x0+t[i]*dx) E0[i] = l2norm(Jt[0]-Jc[0]) # 0th order Taylor - E1[i] = l2norm(Jt[0]-Jc[0]-t[i]*Jc[1].dot(dx)) # 1st order Taylor + if inspect.isfunction(Jc[1]): + E1[i] = l2norm(Jt[0]-Jc[0]-t[i]*Jc[1](dx)) # 1st order Taylor + else: + # We assume it is a numpy.ndarray + E1[i] = l2norm(Jt[0]-Jc[0]-t[i]*Jc[1].dot(dx)) # 1st order Taylor order0 = np.log10(E0[:-1]/E0[1:]) order1 = np.log10(E1[:-1]/E1[1:]) print "%d\t%1.2e\t%1.3e\t\t%1.3e\t\t%1.3f" % (i, t[i], E0[i], E1[i], np.nan if i == 0 else order1[i-1]) @@ -238,9 +246,12 @@ def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): passTest = belowTol or correctOrder if passTest: - print "%s PASS! %s\n" % ('='*25, '='*25) + print "%s PASS! %s" % ('='*25, '='*25) + print happiness[np.random.randint(len(happiness))]+'\n' else: print "%s\n%s FAIL! %s\n%s" % ('*'*57, '<'*25, '>'*25, '*'*57) + print sadness[np.random.randint(len(sadness))]+'\n' + if plotIt: plt.figure() @@ -254,3 +265,19 @@ def checkDerivative(fctn, x0, num=7, plotIt=True, dx=None): plt.show() return passTest + + +if __name__ == '__main__': + + def simplePass(x): + return np.sin(x), sdiag(np.cos(x)) + + def simpleFunction(x): + return np.sin(x), lambda xi: sdiag(np.cos(x))*xi + + def simpleFail(x): + return np.sin(x), -sdiag(np.cos(x)) + + checkDerivative(simplePass, np.random.randn(5), plotIt=False) + checkDerivative(simpleFunction, np.random.randn(5), plotIt=False) + checkDerivative(simpleFail, np.random.randn(5), plotIt=False) diff --git a/SimPEG/tests/test_forward_DCproblem.py b/SimPEG/tests/test_forward_DCproblem.py index 6ffa4650..c6e6f9c2 100644 --- a/SimPEG/tests/test_forward_DCproblem.py +++ b/SimPEG/tests/test_forward_DCproblem.py @@ -3,9 +3,11 @@ import unittest from SimPEG.mesh import TensorMesh from SimPEG.utils import ModelBuilder, sdiag from SimPEG.forward import Problem, SyntheticProblem -from SimPEG.forward.DCProblem import DCProblem, DCutils +from SimPEG.forward.DCProblem import * from TestUtils import checkDerivative from scipy.sparse.linalg import dsolve +from SimPEG.regularization import Regularization +from SimPEG import inverse class DCProblemTests(unittest.TestCase): @@ -34,7 +36,7 @@ class DCProblemTests(unittest.TestCase): elecend = 0.5+spacelec*(nelec-1) elecLocR = np.linspace(elecini, elecend, nelec) rxmidLoc = (elecLocR[0:nelec-1]+elecLocR[1:nelec])*0.5 - q, Q, rxmidloc = DCutils.genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) + q, Q, rxmidloc = genTxRxmat(nelec, spacelec, surfloc, elecini, mesh) P = Q.T # Create some data @@ -52,22 +54,27 @@ class DCProblemTests(unittest.TestCase): problem.RHS = q problem.W = Wd problem.dobs = dobs + problem.std = dobs*0 + 0.05 + opt = inverse.InexactGaussNewton(maxIterLS=20, maxIter=10, tolF=1e-6, tolX=1e-6, tolG=1e-6, maxIterCG=6) + reg = Regularization(mesh) + inv = inverse.Inversion(problem, reg, opt, beta0=1e4) + + self.inv = inv + self.reg = reg self.p = problem self.mesh = mesh self.m0 = mSynth self.dobs = dobs - def test_misfit(self): - print 'SimPEG.forward.DCProblem: Testing Misfit' - derChk = lambda m: [self.p.misfit(m), self.p.misfitDeriv(m)] + derChk = lambda m: [self.p.dpred(m), lambda mx: self.p.J(self.m0, mx)] passed = checkDerivative(derChk, self.m0, plotIt=False) self.assertTrue(passed) def test_adjoint(self): # Adjoint Test - u = np.random.rand(self.mesh.nC) + u = np.random.rand(self.mesh.nC*self.p.RHS.shape[1]) v = np.random.rand(self.mesh.nC) w = np.random.rand(self.dobs.shape[0]) wtJv = w.dot(self.p.J(self.m0, v, u=u)) @@ -75,6 +82,13 @@ class DCProblemTests(unittest.TestCase): passed = (wtJv - vtJtw) < 1e-10 self.assertTrue(passed) + def test_dataObj(self): + derChk = lambda m: [self.inv.dataObj(m), self.inv.dataObjDeriv(m)] + checkDerivative(derChk, self.m0, plotIt=False) + + def test_modelObj(self): + derChk = lambda m: [self.reg.modelObj(m), self.reg.modelObjDeriv(m)] + checkDerivative(derChk, self.m0, plotIt=False) if __name__ == '__main__': diff --git a/SimPEG/tests/test_forward_problem.py b/SimPEG/tests/test_forward_problem.py index d913a697..ba49efd8 100644 --- a/SimPEG/tests/test_forward_problem.py +++ b/SimPEG/tests/test_forward_problem.py @@ -2,6 +2,7 @@ import numpy as np import unittest from SimPEG.mesh import TensorMesh from SimPEG.forward import Problem +from SimPEG.regularization import Regularization from TestUtils import checkDerivative from scipy.sparse.linalg import dsolve @@ -15,7 +16,7 @@ class ProblemTests(unittest.TestCase): c = np.array([1, 4]) self.mesh2 = TensorMesh([a, b], np.array([3, 5])) self.p2 = Problem(self.mesh2) - + self.reg = Regularization(self.mesh2) def test_modelTransform(self): print 'SimPEG.forward.Problem: Testing Model Transform' @@ -23,6 +24,13 @@ class ProblemTests(unittest.TestCase): passed = checkDerivative(lambda m : [self.p2.modelTransform(m), self.p2.modelTransformDeriv(m)], m, plotIt=False) self.assertTrue(passed) + def test_regularization(self): + derChk = lambda m: [self.reg.modelObj(m), self.reg.modelObjDeriv(m)] + mSynth = np.random.randn(self.mesh2.nC) + checkDerivative(derChk, mSynth, plotIt=False) + + + if __name__ == '__main__': unittest.main() diff --git a/SimPEG/tests/test_utils.py b/SimPEG/tests/test_utils.py index f0b867ec..058dba56 100644 --- a/SimPEG/tests/test_utils.py +++ b/SimPEG/tests/test_utils.py @@ -1,6 +1,28 @@ import numpy as np import unittest from SimPEG.utils import mkvc, ndgrid, indexCube, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal +from SimPEG.tests import checkDerivative + + +class TestCheckDerivative(unittest.TestCase): + + def test_simplePass(self): + def simplePass(x): + return np.sin(x), sdiag(np.cos(x)) + passed = checkDerivative(simplePass, np.random.randn(5), plotIt=False) + self.assertTrue(passed, True) + + def test_simpleFunction(self): + def simpleFunction(x): + return np.sin(x), lambda xi: sdiag(np.cos(x))*xi + passed = checkDerivative(simpleFunction, np.random.randn(5), plotIt=False) + self.assertTrue(passed, True) + + def test_simpleFail(self): + def simpleFail(x): + return np.sin(x), -sdiag(np.cos(x)) + passed = checkDerivative(simpleFail, np.random.randn(5), plotIt=False) + self.assertTrue(not passed, True) class TestSequenceFunctions(unittest.TestCase): @@ -85,5 +107,6 @@ class TestSequenceFunctions(unittest.TestCase): self.assertTrue(np.linalg.norm(Z3.todense().ravel(), 2) < 1e-12) + if __name__ == '__main__': unittest.main() From 4dbfc77aba4018dfb2652cbc67807b9eda898208 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 15:24:35 -0800 Subject: [PATCH 182/359] changed these to be consistent with other places in the code. --- SimPEG/mesh/TensorMesh.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index 1dbd62a3..4a37d7de 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -342,22 +342,22 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): locType can be:: - 'ex' -> x-component of field defined on edges - 'ey' -> y-component of field defined on edges - 'ez' -> z-component of field defined on edges - 'fx' -> x-component of field defined on edges - 'fy' -> y-component of field defined on edges - 'fz' -> z-component of field defined on edges - 'n' -> scalar field defined on nodes - 'cc' -> scalar field defined on cell centres + 'Ex' -> x-component of field defined on edges + 'Ey' -> y-component of field defined on edges + 'Ez' -> z-component of field defined on edges + 'Fx' -> x-component of field defined on edges + 'Fy' -> y-component of field defined on edges + 'Fz' -> z-component of field defined on edges + 'N' -> scalar field defined on nodes + 'CC' -> scalar field defined on cell centers """ loc = np.atleast_2d(loc) assert np.all(self.isInside(loc)), "Points outside of mesh" if self.dim == 3: - - if locType == 'fx': + + if locType == 'Fx': Qx = interpmat(self.vectorNx, self.vectorCCy, self.vectorCCz, @@ -365,7 +365,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): Qy = spzeros(loc.shape[0], self.nF[1]) Qz = spzeros(loc.shape[0], self.nF[2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'fy': + elif locType == 'Fy': Qx = spzeros(loc.shape[0], self.nF[0]) Qy = interpmat(self.vectorCCx, self.vectorNy, @@ -373,7 +373,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): loc[:,0], loc[:,1], loc[:,2]) Qz = spzeros(loc.shape[0], self.nF[2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'fz': + elif locType == 'Fz': Qx = spzeros(loc.shape[0], self.nF[0]) Qy = spzeros(loc.shape[0], self.nF[1]) Qz = interpmat(self.vectorCCx, @@ -381,7 +381,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): self.vectorNz, loc[:,0], loc[:,1], loc[:,2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'ex': + elif locType == 'Ex': Qx = interpmat(self.vectorCCx, self.vectorNy, self.vectorNz, @@ -389,15 +389,15 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): Qy = spzeros(loc.shape[0], self.nF[1]) Qz = spzeros(loc.shape[0], self.nF[2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'ey': + elif locType == 'Ey': Qx = spzeros(loc.shape[0], self.nF[0]) Qy = interpmat(self.vectorNx, self.vectorCCy, self.vectorNz, loc[:,0], loc[:,1], loc[:,2]) - Qz = spzeros(loc.shape[0], self.nF[2]) + Qz = spzeros(loc.shape[0], self.nF[2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'ez': + elif locType == 'Ez': Qx = spzeros(loc.shape[0], self.nF[0]) Qy = spzeros(loc.shape[0], self.nF[1]) Qz = interpmat(self.vectorNx, @@ -405,12 +405,12 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): self.vectorCCz, loc[:,0], loc[:,1], loc[:,2]) Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'n': + elif locType == 'N': Q = interpmat(self.vectorNx, self.vectorNy, self.vectorNz, loc[:,0], loc[:,1], loc[:,2]) - elif locType == 'cc': + elif locType == 'CC': Q = interpmat(self.vectorCCx, self.vectorCCy, self.vectorCCz, From df329c49550c47ae12fdc508b0edc5764651398a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 15:33:52 -0800 Subject: [PATCH 183/359] Bug fix for the Edge vars. --- SimPEG/mesh/TensorMesh.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index 4a37d7de..cee23f7e 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -386,20 +386,20 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): self.vectorNy, self.vectorNz, loc[:,0], loc[:,1], loc[:,2]) - Qy = spzeros(loc.shape[0], self.nF[1]) - Qz = spzeros(loc.shape[0], self.nF[2]) + Qy = spzeros(loc.shape[0], self.nE[1]) + Qz = spzeros(loc.shape[0], self.nE[2]) Q = sp.hstack([Qx, Qy, Qz]) elif locType == 'Ey': - Qx = spzeros(loc.shape[0], self.nF[0]) + Qx = spzeros(loc.shape[0], self.nE[0]) Qy = interpmat(self.vectorNx, self.vectorCCy, self.vectorNz, loc[:,0], loc[:,1], loc[:,2]) - Qz = spzeros(loc.shape[0], self.nF[2]) + Qz = spzeros(loc.shape[0], self.nE[2]) Q = sp.hstack([Qx, Qy, Qz]) elif locType == 'Ez': - Qx = spzeros(loc.shape[0], self.nF[0]) - Qy = spzeros(loc.shape[0], self.nF[1]) + Qx = spzeros(loc.shape[0], self.nE[0]) + Qy = spzeros(loc.shape[0], self.nE[1]) Qz = interpmat(self.vectorNx, self.vectorNy, self.vectorCCz, From 592490844d1b4344a7587028e12cfc777c808bd4 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 16:05:16 -0800 Subject: [PATCH 184/359] Testing Functions for interpolation. --- SimPEG/tests/test_interpolation.py | 81 ++++++++++++++++++++++++++++++ SimPEG/utils/interputils.py | 26 +++++----- 2 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 SimPEG/tests/test_interpolation.py diff --git a/SimPEG/tests/test_interpolation.py b/SimPEG/tests/test_interpolation.py new file mode 100644 index 00000000..d98d58d6 --- /dev/null +++ b/SimPEG/tests/test_interpolation.py @@ -0,0 +1,81 @@ +import numpy as np +import unittest +from TestUtils import OrderTest + +MESHTYPES = ['uniformTensorMesh'] +call2 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1]) +call3 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) +cart_row2 = lambda g, xfun, yfun: np.c_[call2(xfun, g), call2(yfun, g)] +cart_row3 = lambda g, xfun, yfun, zfun: np.c_[call3(xfun, g), call3(yfun, g), call3(zfun, g)] +cartF2 = lambda M, fx, fy: np.vstack((cart_row2(M.gridFx, fx, fy), cart_row2(M.gridFy, fx, fy))) +cartE2 = lambda M, ex, ey: np.vstack((cart_row2(M.gridEx, ex, ey), cart_row2(M.gridEy, ex, ey))) +cartF3 = lambda M, fx, fy, fz: np.vstack((cart_row3(M.gridFx, fx, fy, fz), cart_row3(M.gridFy, fx, fy, fz), cart_row3(M.gridFz, fx, fy, fz))) +cartE3 = lambda M, ex, ey, ez: np.vstack((cart_row3(M.gridEx, ex, ey, ez), cart_row3(M.gridEy, ex, ey, ez), cart_row3(M.gridEz, ex, ey, ez))) + + +LOCS = np.random.rand(50,3)*0.6+0.2 + +class TestInterpolation(OrderTest): + name = "Interpolation" + meshTypes = MESHTYPES + meshDimension = 3 + + def getError(self): + funX = lambda x, y, z: np.cos(2*np.pi*y) + funY = lambda x, y, z: np.cos(2*np.pi*z) + funZ = lambda x, y, z: np.cos(2*np.pi*x) + + if 'x' in self.type: + anal = call3(funX, LOCS) + elif 'y' in self.type: + anal = call3(funY, LOCS) + elif 'z' in self.type: + anal = call3(funZ, LOCS) + + if 'F' in self.type: + Fc = cartF3(self.M, funX, funY, funZ) + grid = self.M.projectFaceVector(Fc) + elif 'E' in self.type: + Ec = cartE3(self.M, funX, funY, funZ) + grid = self.M.projectEdgeVector(Ec) + + comp = self.M.getInterpolationMat(LOCS, self.type)*grid + + err = np.linalg.norm((comp - anal), np.inf) + return err + + def test_orderFx(self): + self.type = 'Fx' + self.name = 'Interpolation Fx' + self.orderTest() + + def test_orderFy(self): + self.type = 'Fy' + self.name = 'Interpolation Fy' + self.orderTest() + + def test_orderFz(self): + self.type = 'Fz' + self.name = 'Interpolation Fz' + self.orderTest() + + def test_orderEx(self): + self.type = 'Ex' + self.name = 'Interpolation Ex' + self.orderTest() + + def test_orderEy(self): + self.type = 'Ey' + self.name = 'Interpolation Ey' + self.orderTest() + + def test_orderEz(self): + self.type = 'Ez' + self.name = 'Interpolation Ez' + self.orderTest() + + + + +if __name__ == '__main__': + unittest.main() diff --git a/SimPEG/utils/interputils.py b/SimPEG/utils/interputils.py index 0d528e93..12eb8c47 100644 --- a/SimPEG/utils/interputils.py +++ b/SimPEG/utils/interputils.py @@ -7,22 +7,22 @@ def interpmat(x,y,z,xr,yr,zr): """ Local interpolation computed for each receiver point in turn """ - nx = max(x.shape) - ny = max(y.shape) - nz = max(z.shape) - npts = max(xr.shape) + nx = x.size + ny = y.size + nz = z.size + npts = xr.shape[0] Q = sp.lil_matrix((npts, nx*ny*nz)) for i in range(npts): - # in x-direction + # in x-direction im = np.argmin(abs(x-xr[i])) if xr[i] - x[im] >= 0: # Point on the left ind_x1 = im ind_x2 = im+1 elif xr[i] - x[im] < 0: # Point on the right ind_x1 = im-1 - ind_x2 = im + ind_x2 = im dx1 = xr[i] - x[ind_x1] dx2 = x[ind_x2] - xr[i] # in y-direction @@ -32,9 +32,9 @@ def interpmat(x,y,z,xr,yr,zr): ind_y2 = im+1 elif yr[i] - y[im] < 0: # Point on the right ind_y1 = im-1 - ind_y2 = im + ind_y2 = im dy1 = yr[i] - y[ind_y1] - dy2 = y[ind_y2] - yr[i] + dy2 = y[ind_y2] - yr[i] # in z-direction im = np.argmin(abs(z-zr[i])) if zr[i] - z[im] >= 0: # Point on the left @@ -42,9 +42,9 @@ def interpmat(x,y,z,xr,yr,zr): ind_z2 = im+1 elif zr[i] - z[im] < 0: # Point on the right ind_z1 = im-1 - ind_z2 = im + ind_z2 = im dz1 = zr[i] - z[ind_z1] - dz2 = z[ind_z2] - zr[i] + dz2 = z[ind_z2] - zr[i] dv = (x[ind_x2] - x[ind_x1]) * (y[ind_y2] - y[ind_y1]) *(z[ind_z2] - z[ind_z1]) Dx = x[ind_x2] - x[ind_x1] @@ -53,7 +53,7 @@ def interpmat(x,y,z,xr,yr,zr): # Get the row in the matrix - inds = sub2ind((nx,ny,nz),[ + inds = sub2ind((nx,ny,nz),[ ( ind_x1, ind_y2, ind_z1), ( ind_x1, ind_y1, ind_z1), ( ind_x2, ind_y1, ind_z1), @@ -62,7 +62,7 @@ def interpmat(x,y,z,xr,yr,zr): ( ind_x1, ind_y2, ind_z2), ( ind_x2, ind_y1, ind_z2), ( ind_x2, ind_y2, ind_z2)]) - + vals = [(1-dx1/Dx)*(1-dy2/Dy)*(1-dz1/Dz), (1-dx1/Dx)*(1-dy1/Dy)*(1-dz1/Dz), (1-dx2/Dx)*(1-dy1/Dy)*(1-dz1/Dz), @@ -74,4 +74,4 @@ def interpmat(x,y,z,xr,yr,zr): Q[i, mkvc(inds)] = vals Q = Q.tocsr() - return Q \ No newline at end of file + return Q From 967eb1216ffa63fad3df8740e83ab2a8ed1c2149 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 16:25:57 -0800 Subject: [PATCH 185/359] Testing N and CC as well. Updates to TestOrder --- SimPEG/tests/TestUtils.py | 10 ++++++---- SimPEG/tests/test_interpolation.py | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SimPEG/tests/TestUtils.py b/SimPEG/tests/TestUtils.py index 9b2158c4..ee8f90e4 100644 --- a/SimPEG/tests/TestUtils.py +++ b/SimPEG/tests/TestUtils.py @@ -67,8 +67,7 @@ class OrderTest(unittest.TestCase): name = "Order Test" expectedOrders = 2. # This can be a list of orders, must be the same length as meshTypes - _expectedOrder = 2. - tolerance = 0.85 + tolerance = 0.85 # This can also be a list, must be the same length as meshTypes meshSizes = [4, 8, 16, 32] meshTypes = ['uniformTensorMesh'] _meshType = meshTypes[0] @@ -124,6 +123,8 @@ class OrderTest(unittest.TestCase): """ assert type(self.meshTypes) == list, 'meshTypes must be a list' + if type(self.tolerance) is not list: + self.tolerance = np.ones(len(self.meshTypes))*self.tolerance # if we just provide one expected order, repeat it for each mesh type if type(self.expectedOrders) == float or type(self.expectedOrders) == int: @@ -134,6 +135,7 @@ class OrderTest(unittest.TestCase): for ii_meshType, meshType in enumerate(self.meshTypes): self._meshType = meshType + self._tolerance = self.tolerance[ii_meshType] self._expectedOrder = self.expectedOrders[ii_meshType] order = [] @@ -144,7 +146,7 @@ class OrderTest(unittest.TestCase): err = self.getError() if ii == 0: print '' - print 'Testing convergence on ' + self.M._meshType + ' of: ' + self.name + print self._meshType + ': ' + self.name print '_____________________________________________' print ' h | error | e(i-1)/e(i) | order' print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' @@ -155,7 +157,7 @@ class OrderTest(unittest.TestCase): err_old = err max_h_old = max_h print '---------------------------------------------' - passTest = np.mean(np.array(order)) > self.tolerance*self._expectedOrder + passTest = np.mean(np.array(order)) > self._tolerance*self._expectedOrder if passTest: print ['The test be workin!', 'You get a gold star!', 'Yay passed!', 'Happy little convergence test!', 'That was easy!'][np.random.randint(5)] else: diff --git a/SimPEG/tests/test_interpolation.py b/SimPEG/tests/test_interpolation.py index d98d58d6..a068c441 100644 --- a/SimPEG/tests/test_interpolation.py +++ b/SimPEG/tests/test_interpolation.py @@ -2,7 +2,8 @@ import numpy as np import unittest from TestUtils import OrderTest -MESHTYPES = ['uniformTensorMesh'] +MESHTYPES = ['uniformTensorMesh', 'randomTensorMesh'] +TOLERANCES = [0.9, 0.6] call2 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1]) call3 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) cart_row2 = lambda g, xfun, yfun: np.c_[call2(xfun, g), call2(yfun, g)] @@ -18,7 +19,9 @@ LOCS = np.random.rand(50,3)*0.6+0.2 class TestInterpolation(OrderTest): name = "Interpolation" meshTypes = MESHTYPES + tolerance = TOLERANCES meshDimension = 3 + meshSizes = [8, 16, 32] def getError(self): funX = lambda x, y, z: np.cos(2*np.pi*y) @@ -31,6 +34,8 @@ class TestInterpolation(OrderTest): anal = call3(funY, LOCS) elif 'z' in self.type: anal = call3(funZ, LOCS) + else: + anal = call3(funX, LOCS) if 'F' in self.type: Fc = cartF3(self.M, funX, funY, funZ) @@ -38,12 +43,26 @@ class TestInterpolation(OrderTest): elif 'E' in self.type: Ec = cartE3(self.M, funX, funY, funZ) grid = self.M.projectEdgeVector(Ec) + elif 'CC' == self.type: + grid = call3(funX, self.M.gridCC) + elif 'N' == self.type: + grid = call3(funX, self.M.gridN) comp = self.M.getInterpolationMat(LOCS, self.type)*grid err = np.linalg.norm((comp - anal), np.inf) return err + def test_orderCC(self): + self.type = 'CC' + self.name = 'Interpolation CC' + self.orderTest() + + def test_orderN(self): + self.type = 'N' + self.name = 'Interpolation N' + self.orderTest() + def test_orderFx(self): self.type = 'Fx' self.name = 'Interpolation Fx' From 4784224a84838d85ea7d91f9c3330f16a05c785a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 16:35:11 -0800 Subject: [PATCH 186/359] Put repetitive code in a function. --- SimPEG/utils/interputils.py | 42 +++++++++++++------------------------ 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/SimPEG/utils/interputils.py b/SimPEG/utils/interputils.py index 12eb8c47..0a544532 100644 --- a/SimPEG/utils/interputils.py +++ b/SimPEG/utils/interputils.py @@ -14,37 +14,25 @@ def interpmat(x,y,z,xr,yr,zr): Q = sp.lil_matrix((npts, nx*ny*nz)) - for i in range(npts): - # in x-direction - im = np.argmin(abs(x-xr[i])) - if xr[i] - x[im] >= 0: # Point on the left + + def inter1D(x, xr_i): + im = np.argmin(abs(x-xr_i)) + if xr_i - x[im] >= 0: # Point on the left ind_x1 = im ind_x2 = im+1 - elif xr[i] - x[im] < 0: # Point on the right + elif xr_i - x[im] < 0: # Point on the right ind_x1 = im-1 ind_x2 = im - dx1 = xr[i] - x[ind_x1] - dx2 = x[ind_x2] - xr[i] - # in y-direction - im = np.argmin(abs(y-yr[i])) - if yr[i] - y[im] >= 0: # Point on the left - ind_y1 = im - ind_y2 = im+1 - elif yr[i] - y[im] < 0: # Point on the right - ind_y1 = im-1 - ind_y2 = im - dy1 = yr[i] - y[ind_y1] - dy2 = y[ind_y2] - yr[i] - # in z-direction - im = np.argmin(abs(z-zr[i])) - if zr[i] - z[im] >= 0: # Point on the left - ind_z1 = im - ind_z2 = im+1 - elif zr[i] - z[im] < 0: # Point on the right - ind_z1 = im-1 - ind_z2 = im - dz1 = zr[i] - z[ind_z1] - dz2 = z[ind_z2] - zr[i] + dx1 = xr_i - x[ind_x1] + dx2 = x[ind_x2] - xr_i + return ind_x1, ind_x2, dx1, dx2 + + for i in range(npts): + # in x-direction + ind_x1, ind_x2, dx1, dx2 = inter1D(x, xr[i]) + ind_y1, ind_y2, dy1, dy2 = inter1D(y, yr[i]) + ind_z1, ind_z2, dz1, dz2 = inter1D(z, zr[i]) + dv = (x[ind_x2] - x[ind_x1]) * (y[ind_y2] - y[ind_y1]) *(z[ind_z2] - z[ind_z1]) Dx = x[ind_x2] - x[ind_x1] From 51a539a291181a78e5d7cf48a1e2efdaa08e3695 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 4 Nov 2013 18:17:01 -0800 Subject: [PATCH 187/359] Generalized to any dimension. Tested. --- SimPEG/mesh/TensorMesh.py | 117 ++++++++++++--------------- SimPEG/tests/test_interpolation.py | 122 ++++++++++++++++++++++++++--- SimPEG/utils/interputils.py | 102 +++++++++++++++++++----- 3 files changed, 244 insertions(+), 97 deletions(-) diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index ea3a0200..87b81303 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -315,6 +315,45 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): # --------------- Methods --------------------- + def getTensor(self, locType): + """ Returns a tensor list. + + :param str locType: What tensor (see below) + :rtype: list + :return: list of the tensors that make up the mesh. + + locType can be:: + + 'Ex' -> x-component of field defined on edges + 'Ey' -> y-component of field defined on edges + 'Ez' -> z-component of field defined on edges + 'Fx' -> x-component of field defined on faces + 'Fy' -> y-component of field defined on faces + 'Fz' -> z-component of field defined on faces + 'N' -> scalar field defined on nodes + 'CC' -> scalar field defined on cell centers + """ + + if locType is 'Fx': + ten = [self.vectorNx , self.vectorCCy, self.vectorCCz] + elif locType is 'Fy': + ten = [self.vectorCCx, self.vectorNy , self.vectorCCz] + elif locType is 'Fz': + ten = [self.vectorCCx, self.vectorCCy, self.vectorNz ] + elif locType is 'Ex': + ten = [self.vectorCCx, self.vectorNy , self.vectorNz ] + elif locType is 'Ey': + ten = [self.vectorNx , self.vectorCCy, self.vectorNz ] + elif locType is 'Ez': + ten = [self.vectorNx , self.vectorNy , self.vectorCCz] + elif locType is 'CC': + ten = [self.vectorCCx, self.vectorCCy, self.vectorCCz] + elif locType is 'N': + ten = [self.vectorNx , self.vectorNy , self.vectorNz ] + + return [t for t in ten if t is not None] + + def isInside(self, pts): """ Determines if a set of points are inside a mesh. @@ -345,9 +384,9 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): 'Ex' -> x-component of field defined on edges 'Ey' -> y-component of field defined on edges 'Ez' -> z-component of field defined on edges - 'Fx' -> x-component of field defined on edges - 'Fy' -> y-component of field defined on edges - 'Fz' -> z-component of field defined on edges + 'Fx' -> x-component of field defined on faces + 'Fy' -> y-component of field defined on faces + 'Fz' -> z-component of field defined on faces 'N' -> scalar field defined on nodes 'CC' -> scalar field defined on cell centers """ @@ -355,70 +394,16 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): loc = np.atleast_2d(loc) assert np.all(self.isInside(loc)), "Points outside of mesh" - if self.dim == 3: - - if locType == 'Fx': - Qx = interpmat(self.vectorNx, - self.vectorCCy, - self.vectorCCz, - loc[:,0], loc[:,1], loc[:,2]) - Qy = spzeros(loc.shape[0], self.nF[1]) - Qz = spzeros(loc.shape[0], self.nF[2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'Fy': - Qx = spzeros(loc.shape[0], self.nF[0]) - Qy = interpmat(self.vectorCCx, - self.vectorNy, - self.vectorCCz, - loc[:,0], loc[:,1], loc[:,2]) - Qz = spzeros(loc.shape[0], self.nF[2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'Fz': - Qx = spzeros(loc.shape[0], self.nF[0]) - Qy = spzeros(loc.shape[0], self.nF[1]) - Qz = interpmat(self.vectorCCx, - self.vectorCCy, - self.vectorNz, - loc[:,0], loc[:,1], loc[:,2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'Ex': - Qx = interpmat(self.vectorCCx, - self.vectorNy, - self.vectorNz, - loc[:,0], loc[:,1], loc[:,2]) - Qy = spzeros(loc.shape[0], self.nE[1]) - Qz = spzeros(loc.shape[0], self.nE[2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'Ey': - Qx = spzeros(loc.shape[0], self.nE[0]) - Qy = interpmat(self.vectorNx, - self.vectorCCy, - self.vectorNz, - loc[:,0], loc[:,1], loc[:,2]) - Qz = spzeros(loc.shape[0], self.nE[2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'Ez': - Qx = spzeros(loc.shape[0], self.nE[0]) - Qy = spzeros(loc.shape[0], self.nE[1]) - Qz = interpmat(self.vectorNx, - self.vectorNy, - self.vectorCCz, - loc[:,0], loc[:,1], loc[:,2]) - Q = sp.hstack([Qx, Qy, Qz]) - elif locType == 'N': - Q = interpmat(self.vectorNx, - self.vectorNy, - self.vectorNz, - loc[:,0], loc[:,1], loc[:,2]) - elif locType == 'CC': - Q = interpmat(self.vectorCCx, - self.vectorCCy, - self.vectorCCz, - loc[:,0], loc[:,1], loc[:,2]) - else: - raise NotImplementedError('getInterpolationMat: locType=='+locType) + ind = 0 if 'x' in locType else 1 if 'y' in locType else 2 if 'z' in locType else -1 + if locType in ['Fx','Fy','Fz','Ex','Ey','Ez'] and self.dim >= ind: + nF_nE = self.nF if 'F' in locType else self.nE + components = [spzeros(loc.shape[0], n) for n in nF_nE] + components[ind] = interpmat(loc, *self.getTensor(locType)) + Q = sp.hstack(components) + elif locType in ['CC', 'N']: + Q = interpmat(loc, *self.getTensor(locType)) else: - raise NotImplementedError('getInterpolationMat: dim=='+str(m.dim)) + raise NotImplementedError('getInterpolationMat: locType=='+locType+' and mesh.dim=='+str(self.dim)) return Q if __name__ == '__main__': diff --git a/SimPEG/tests/test_interpolation.py b/SimPEG/tests/test_interpolation.py index a068c441..6931aa42 100644 --- a/SimPEG/tests/test_interpolation.py +++ b/SimPEG/tests/test_interpolation.py @@ -1,9 +1,11 @@ import numpy as np import unittest from TestUtils import OrderTest +from SimPEG.utils import mkvc MESHTYPES = ['uniformTensorMesh', 'randomTensorMesh'] -TOLERANCES = [0.9, 0.6] +TOLERANCES = [0.9, 0.55] +call1 = lambda fun, xyz: fun(xyz) call2 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1]) call3 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) cart_row2 = lambda g, xfun, yfun: np.c_[call2(xfun, g), call2(yfun, g)] @@ -14,14 +16,114 @@ cartF3 = lambda M, fx, fy, fz: np.vstack((cart_row3(M.gridFx, fx, fy, fz), cart_ cartE3 = lambda M, ex, ey, ez: np.vstack((cart_row3(M.gridEx, ex, ey, ez), cart_row3(M.gridEy, ex, ey, ez), cart_row3(M.gridEz, ex, ey, ez))) -LOCS = np.random.rand(50,3)*0.6+0.2 -class TestInterpolation(OrderTest): +class TestInterpolation1D(OrderTest): + LOCS = np.random.rand(50,1)*0.6+0.2 + name = "Interpolation 1D" + meshTypes = MESHTYPES + tolerance = TOLERANCES + meshDimension = 1 + meshSizes = [8, 16, 32] + + def getError(self): + funX = lambda x: np.cos(2*np.pi*x) + + anal = mkvc(call1(funX, self.LOCS)) + + if 'CC' == self.type: + grid = call1(funX, self.M.gridCC) + elif 'N' == self.type: + grid = call1(funX, self.M.gridN) + + comp = self.M.getInterpolationMat(self.LOCS, self.type)*grid + + err = np.linalg.norm((comp - anal), 2) + return err + + def test_orderCC(self): + self.type = 'CC' + self.name = 'Interpolation 1D: CC' + self.orderTest() + + def test_orderN(self): + self.type = 'N' + self.name = 'Interpolation 1D: N' + self.orderTest() + +class TestInterpolation2d(OrderTest): + name = "Interpolation 2D" + LOCS = np.random.rand(50,2)*0.6+0.2 + meshTypes = MESHTYPES + tolerance = TOLERANCES + meshDimension = 2 + meshSizes = [8, 16, 32, 64] + + def getError(self): + funX = lambda x, y: np.cos(2*np.pi*y) + funY = lambda x, y: np.cos(2*np.pi*x) + + if 'x' in self.type: + anal = call2(funX, self.LOCS) + elif 'y' in self.type: + anal = call2(funY, self.LOCS) + else: + anal = call2(funX, self.LOCS) + + if 'F' in self.type: + Fc = cartF2(self.M, funX, funY) + grid = self.M.projectFaceVector(Fc) + elif 'E' in self.type: + Ec = cartE2(self.M, funX, funY) + grid = self.M.projectEdgeVector(Ec) + elif 'CC' == self.type: + grid = call2(funX, self.M.gridCC) + elif 'N' == self.type: + grid = call2(funX, self.M.gridN) + + comp = self.M.getInterpolationMat(self.LOCS, self.type)*grid + + err = np.linalg.norm((comp - anal), np.inf) + return err + + def test_orderCC(self): + self.type = 'CC' + self.name = 'Interpolation 2D: CC' + self.orderTest() + + def test_orderN(self): + self.type = 'N' + self.name = 'Interpolation 2D: N' + self.orderTest() + + def test_orderFx(self): + self.type = 'Fx' + self.name = 'Interpolation 2D: Fx' + self.orderTest() + + def test_orderFy(self): + self.type = 'Fy' + self.name = 'Interpolation 2D: Fy' + self.orderTest() + + def test_orderEx(self): + self.type = 'Ex' + self.name = 'Interpolation 2D: Ex' + self.orderTest() + + def test_orderEy(self): + self.type = 'Ey' + self.name = 'Interpolation 2D: Ey' + self.orderTest() + + + +class TestInterpolation3D(OrderTest): name = "Interpolation" + LOCS = np.random.rand(50,3)*0.6+0.2 meshTypes = MESHTYPES tolerance = TOLERANCES meshDimension = 3 - meshSizes = [8, 16, 32] + meshSizes = [8, 16, 32, 64] def getError(self): funX = lambda x, y, z: np.cos(2*np.pi*y) @@ -29,13 +131,13 @@ class TestInterpolation(OrderTest): funZ = lambda x, y, z: np.cos(2*np.pi*x) if 'x' in self.type: - anal = call3(funX, LOCS) + anal = call3(funX, self.LOCS) elif 'y' in self.type: - anal = call3(funY, LOCS) + anal = call3(funY, self.LOCS) elif 'z' in self.type: - anal = call3(funZ, LOCS) + anal = call3(funZ, self.LOCS) else: - anal = call3(funX, LOCS) + anal = call3(funX, self.LOCS) if 'F' in self.type: Fc = cartF3(self.M, funX, funY, funZ) @@ -48,7 +150,7 @@ class TestInterpolation(OrderTest): elif 'N' == self.type: grid = call3(funX, self.M.gridN) - comp = self.M.getInterpolationMat(LOCS, self.type)*grid + comp = self.M.getInterpolationMat(self.LOCS, self.type)*grid err = np.linalg.norm((comp - anal), np.inf) return err @@ -94,7 +196,5 @@ class TestInterpolation(OrderTest): self.orderTest() - - if __name__ == '__main__': unittest.main() diff --git a/SimPEG/utils/interputils.py b/SimPEG/utils/interputils.py index 0a544532..0ece29c7 100644 --- a/SimPEG/utils/interputils.py +++ b/SimPEG/utils/interputils.py @@ -3,35 +3,97 @@ import scipy.sparse as sp from sputils import spzeros from matutils import mkvc, sub2ind -def interpmat(x,y,z,xr,yr,zr): +def _interp_point_1D(x, xr_i): + im = np.argmin(abs(x-xr_i)) + if xr_i - x[im] >= 0: # Point on the left + ind_x1 = im + ind_x2 = im+1 + elif xr_i - x[im] < 0: # Point on the right + ind_x1 = im-1 + ind_x2 = im + dx1 = xr_i - x[ind_x1] + dx2 = x[ind_x2] - xr_i + return ind_x1, ind_x2, dx1, dx2 + +def interpmat(locs, x, y=None, z=None): """ Local interpolation computed for each receiver point in turn """ + if y is None and z is None: + return interpmat1D(locs, x) + elif z is None: + return interpmat2D(locs, x, y) + else: + return interpmat3D(locs, x, y, z) + +def interpmat1D(locs, x): + nx = x.size + locs = mkvc(locs) + npts = locs.shape[0] + + Q = sp.lil_matrix((npts, nx)) + + for i in range(npts): + ind_x1, ind_x2, dx1, dx2 = _interp_point_1D(x, locs[i]) + dv = (x[ind_x2] - x[ind_x1]) + Dx = x[ind_x2] - x[ind_x1] + # Get the row in the matrix + inds = [ind_x1, ind_x2] + vals = [(1-dx1/Dx),(1-dx2/Dx)] + Q[i, inds] = vals + return Q.tocsr() + + + +def interpmat2D(locs, x, y): + nx = x.size + ny = y.size + npts = locs.shape[0] + + Q = sp.lil_matrix((npts, nx*ny)) + + + for i in range(npts): + ind_x1, ind_x2, dx1, dx2 = _interp_point_1D(x, locs[i, 0]) + ind_y1, ind_y2, dy1, dy2 = _interp_point_1D(y, locs[i, 1]) + + dv = (x[ind_x2] - x[ind_x1]) * (y[ind_y2] - y[ind_y1]) + + Dx = x[ind_x2] - x[ind_x1] + Dy = y[ind_y2] - y[ind_y1] + + # Get the row in the matrix + + inds = sub2ind((nx,ny),[ + ( ind_x1, ind_y2), + ( ind_x1, ind_y1), + ( ind_x2, ind_y1), + ( ind_x2, ind_y2)]) + + vals = [(1-dx1/Dx)*(1-dy2/Dy), + (1-dx1/Dx)*(1-dy1/Dy), + (1-dx2/Dx)*(1-dy1/Dy), + (1-dx2/Dx)*(1-dy2/Dy)] + + Q[i, mkvc(inds)] = vals + + return Q.tocsr() + + + +def interpmat3D(locs, x, y, z): nx = x.size ny = y.size nz = z.size - npts = xr.shape[0] + npts = locs.shape[0] Q = sp.lil_matrix((npts, nx*ny*nz)) - def inter1D(x, xr_i): - im = np.argmin(abs(x-xr_i)) - if xr_i - x[im] >= 0: # Point on the left - ind_x1 = im - ind_x2 = im+1 - elif xr_i - x[im] < 0: # Point on the right - ind_x1 = im-1 - ind_x2 = im - dx1 = xr_i - x[ind_x1] - dx2 = x[ind_x2] - xr_i - return ind_x1, ind_x2, dx1, dx2 - for i in range(npts): - # in x-direction - ind_x1, ind_x2, dx1, dx2 = inter1D(x, xr[i]) - ind_y1, ind_y2, dy1, dy2 = inter1D(y, yr[i]) - ind_z1, ind_z2, dz1, dz2 = inter1D(z, zr[i]) + ind_x1, ind_x2, dx1, dx2 = _interp_point_1D(x, locs[i, 0]) + ind_y1, ind_y2, dy1, dy2 = _interp_point_1D(y, locs[i, 1]) + ind_z1, ind_z2, dz1, dz2 = _interp_point_1D(z, locs[i, 2]) dv = (x[ind_x2] - x[ind_x1]) * (y[ind_y2] - y[ind_y1]) *(z[ind_z2] - z[ind_z1]) @@ -61,5 +123,5 @@ def interpmat(x,y,z,xr,yr,zr): (1-dx2/Dx)*(1-dy2/Dy)*(1-dz2/Dz)] Q[i, mkvc(inds)] = vals - Q = Q.tocsr() - return Q + + return Q.tocsr() From 9b00617e3fcb9e9401f03b6a6c9b899a271e546f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 5 Nov 2013 10:32:43 -0800 Subject: [PATCH 188/359] Documentation updates. --- SimPEG/tests/test_interpolation.py | 4 +- SimPEG/utils/interputils.py | 68 +++++++++++++++++++++++++++--- docs/api_Utils.rst | 4 ++ 3 files changed, 67 insertions(+), 9 deletions(-) diff --git a/SimPEG/tests/test_interpolation.py b/SimPEG/tests/test_interpolation.py index 6931aa42..3d751dde 100644 --- a/SimPEG/tests/test_interpolation.py +++ b/SimPEG/tests/test_interpolation.py @@ -18,7 +18,7 @@ cartE3 = lambda M, ex, ey, ez: np.vstack((cart_row3(M.gridEx, ex, ey, ez), cart_ class TestInterpolation1D(OrderTest): - LOCS = np.random.rand(50,1)*0.6+0.2 + LOCS = np.random.rand(50)*0.6+0.2 name = "Interpolation 1D" meshTypes = MESHTYPES tolerance = TOLERANCES @@ -28,7 +28,7 @@ class TestInterpolation1D(OrderTest): def getError(self): funX = lambda x: np.cos(2*np.pi*x) - anal = mkvc(call1(funX, self.LOCS)) + anal = call1(funX, self.LOCS) if 'CC' == self.type: grid = call1(funX, self.M.gridCC) diff --git a/SimPEG/utils/interputils.py b/SimPEG/utils/interputils.py index 0ece29c7..c8bcb4ec 100644 --- a/SimPEG/utils/interputils.py +++ b/SimPEG/utils/interputils.py @@ -4,6 +4,15 @@ from sputils import spzeros from matutils import mkvc, sub2ind def _interp_point_1D(x, xr_i): + """ + given a point, xr_i, this will find which two integers it lies between. + + :param numpy.ndarray x: Tensor vector of 1st dimension of grid. + :param float xr_i: Location of a point + :rtype: int,int,float,float + :return: index1, index2, portion1, portion2 + """ + # TODO: This fails if the point is on the outside of the mesh. We may want to replace this by extrapolation? im = np.argmin(abs(x-xr_i)) if xr_i - x[im] >= 0: # Point on the left ind_x1 = im @@ -17,16 +26,43 @@ def _interp_point_1D(x, xr_i): def interpmat(locs, x, y=None, z=None): - """ Local interpolation computed for each receiver point in turn """ + """ + Local interpolation computed for each receiver point in turn + + :param numpy.ndarray loc: Location of points to interpolate to + :param numpy.ndarray x: Tensor vector of 1st dimension of grid. + :param numpy.ndarray y: Tensor vector of 2nd dimension of grid. None by default. + :param numpy.ndarray z: Tensor vector of 3rd dimension of grid. None by default. + :rtype: scipy.sparse.csr.csr_matrix + :return: Interpolation matrix + + .. plot:: + + import SimPEG + import numpy as np + import matplotlib.pyplot as plt + locs = np.random.rand(50)*0.8+0.1 + x = np.linspace(0,1,7) + dense = np.linspace(0,1,200) + fun = lambda x: np.cos(2*np.pi*x) + Q = SimPEG.utils.interpmat(locs, x) + plt.plot(x, fun(x), 'bs-') + plt.plot(dense, fun(dense), 'y:') + plt.plot(locs, Q*fun(x), 'mo') + plt.plot(locs, fun(locs), 'rx') + plt.show() + + """ if y is None and z is None: - return interpmat1D(locs, x) + return _interpmat1D(locs, x) elif z is None: - return interpmat2D(locs, x, y) + return _interpmat2D(locs, x, y) else: - return interpmat3D(locs, x, y, z) + return _interpmat3D(locs, x, y, z) -def interpmat1D(locs, x): +def _interpmat1D(locs, x): + """Use interpmat with only x component provided.""" nx = x.size locs = mkvc(locs) npts = locs.shape[0] @@ -45,7 +81,8 @@ def interpmat1D(locs, x): -def interpmat2D(locs, x, y): +def _interpmat2D(locs, x, y): + """Use interpmat with only x and y components provided.""" nx = x.size ny = y.size npts = locs.shape[0] @@ -81,7 +118,8 @@ def interpmat2D(locs, x, y): -def interpmat3D(locs, x, y, z): +def _interpmat3D(locs, x, y, z): + """Use interpmat.""" nx = x.size ny = y.size nz = z.size @@ -125,3 +163,19 @@ def interpmat3D(locs, x, y, z): Q[i, mkvc(inds)] = vals return Q.tocsr() + + +if __name__ == '__main__': + import SimPEG + import numpy as np + import matplotlib.pyplot as plt + locs = np.random.rand(50)*0.8+0.1 + x = np.linspace(0,1,7) + dense = np.linspace(0,1,200) + fun = lambda x: np.cos(2*np.pi*x) + Q = SimPEG.utils.interpmat(locs, x) + plt.plot(x, fun(x), 'bs-') + plt.plot(dense, fun(dense), 'y:') + plt.plot(locs, Q*fun(x), 'mo') + plt.plot(locs, fun(locs), 'rx') + plt.show() diff --git a/docs/api_Utils.rst b/docs/api_Utils.rst index e952010b..91d87d29 100644 --- a/docs/api_Utils.rst +++ b/docs/api_Utils.rst @@ -19,3 +19,7 @@ Utilities :members: :undoc-members: +.. automodule:: SimPEG.utils.interputils + :members: + :undoc-members: + From 37e10cabaa00a0b90e8ab7b2138c3ab3f8a5e857 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 5 Nov 2013 11:12:00 -0800 Subject: [PATCH 189/359] Minor changes to how grids are calculated. Duplicate code has been removed. --- SimPEG/mesh/TensorMesh.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/SimPEG/mesh/TensorMesh.py b/SimPEG/mesh/TensorMesh.py index 87b81303..6cc5d8a6 100644 --- a/SimPEG/mesh/TensorMesh.py +++ b/SimPEG/mesh/TensorMesh.py @@ -157,7 +157,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridCC is None: - self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) + self._gridCC = ndgrid(self.getTensor('CC')) return self._gridCC return locals() _gridCC = None # Store grid by default @@ -168,7 +168,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridN is None: - self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) + self._gridN = ndgrid(self.getTensor('N')) return self._gridN return locals() _gridN = None # Store grid by default @@ -179,7 +179,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridFx is None: - self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) + self._gridFx = ndgrid(self.getTensor('Fx')) return self._gridFx return locals() _gridFx = None # Store grid by default @@ -190,7 +190,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridFy is None and self.dim > 1: - self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) + self._gridFy = ndgrid(self.getTensor('Fy')) return self._gridFy return locals() _gridFy = None # Store grid by default @@ -201,7 +201,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridFz is None and self.dim > 2: - self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) + self._gridFz = ndgrid(self.getTensor('Fz')) return self._gridFz return locals() _gridFz = None # Store grid by default @@ -212,7 +212,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridEx is None: - self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) + self._gridEx = ndgrid(self.getTensor('Ex')) return self._gridEx return locals() _gridEx = None # Store grid by default @@ -223,7 +223,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridEy is None and self.dim > 1: - self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) + self._gridEy = ndgrid(self.getTensor('Ey')) return self._gridEy return locals() _gridEy = None # Store grid by default @@ -234,7 +234,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): def fget(self): if self._gridEz is None and self.dim > 2: - self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) + self._gridEz = ndgrid(self.getTensor('Ez')) return self._gridEz return locals() _gridEz = None # Store grid by default @@ -420,5 +420,6 @@ if __name__ == '__main__': h = h[:testDim] M = TensorMesh(h) + print M xn = M.plotGrid() From ebf8f23abcd16b9a671dd5bfa6c54ec511f1b82d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 5 Nov 2013 15:43:16 -0800 Subject: [PATCH 190/359] Document the Test results --- SimPEG/tests/HTMLTestRunner.py | 824 +++++++++ SimPEG/tests/api_TestResults.rst | 355 ++++ SimPEG/tests/report.html | 2870 ++++++++++++++++++++++++++++++ SimPEG/tests/runTests.py | 38 +- docs/api_TestResults.rst | 2862 +++++++++++++++++++++++++++++ docs/index.rst | 1 + 6 files changed, 6949 insertions(+), 1 deletion(-) create mode 100644 SimPEG/tests/HTMLTestRunner.py create mode 100644 SimPEG/tests/api_TestResults.rst create mode 100644 SimPEG/tests/report.html create mode 100644 docs/api_TestResults.rst diff --git a/SimPEG/tests/HTMLTestRunner.py b/SimPEG/tests/HTMLTestRunner.py new file mode 100644 index 00000000..af384971 --- /dev/null +++ b/SimPEG/tests/HTMLTestRunner.py @@ -0,0 +1,824 @@ +""" +A TestRunner for use with the Python unit testing framework. It +generates a HTML report to show the result at a glance. + +The simplest way to use this is to invoke its main method. E.g. + + import unittest + import HTMLTestRunner + + ... define your tests ... + + if __name__ == '__main__': + HTMLTestRunner.main() + + +For more customization options, instantiates a HTMLTestRunner object. +HTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g. + + # output to a file + fp = file('my_report.html', 'wb') + runner = HTMLTestRunner.HTMLTestRunner( + stream=fp, + title='My unit test', + description='This demonstrates the report output by HTMLTestRunner.' + ) + + # Use an external stylesheet. + # See the Template_mixin class for more customizable options + runner.STYLESHEET_TMPL = '' + + # run the test + runner.run(my_test_suite) + + +------------------------------------------------------------------------ +Copyright (c) 2004-2007, Wai Yip Tung +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name Wai Yip Tung nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" + +# URL: http://tungwaiyip.info/software/HTMLTestRunner.html + +__author__ = "Wai Yip Tung" +__version__ = "0.8.2" + + +""" +Change History + +Version 0.8.2 +* Show output inline instead of popup window (Viorel Lupu). + +Version in 0.8.1 +* Validated XHTML (Wolfgang Borgert). +* Added description of test classes and test cases. + +Version in 0.8.0 +* Define Template_mixin class for customization. +* Workaround a IE 6 bug that it does not treat + +%(heading)s +%(report)s +%(ending)s + + + +""" + # variables: (title, generator, stylesheet, heading, report, ending) + + + # ------------------------------------------------------------------------ + # Stylesheet + # + # alternatively use a for external style sheet, e.g. + # + + STYLESHEET_TMPL = """ + +""" + + + + # ------------------------------------------------------------------------ + # Heading + # + + HEADING_TMPL = """

+ +""" # variables: (title, parameters, description) + + HEADING_ATTRIBUTE_TMPL = """

%(name)s: %(value)s

+""" # variables: (name, value) + + + + # ------------------------------------------------------------------------ + # Report + # + + REPORT_TMPL = """ +

Show +Summary +Failed +All +

+ ++++++++ + + + + + + + + +%(test_list)s + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
Total%(count)s%(Pass)s%(fail)s%(error)s 
+""" # variables: (test_list, count, Pass, fail, error) + + REPORT_CLASS_TMPL = r""" + + %(desc)s + %(count)s + %(Pass)s + %(fail)s + %(error)s + Detail + +""" # variables: (style, desc, count, Pass, fail, error, cid) + + + REPORT_TEST_WITH_OUTPUT_TMPL = r""" + +
%(desc)s
+ + + + + %(status)s + + + + + + +""" # variables: (tid, Class, style, desc, status) + + + REPORT_TEST_NO_OUTPUT_TMPL = r""" + +
%(desc)s
+ %(status)s + +""" # variables: (tid, Class, style, desc, status) + + + REPORT_TEST_OUTPUT_TMPL = r""" +%(id)s: %(output)s +""" # variables: (id, output) + + + + # ------------------------------------------------------------------------ + # ENDING + # + + ENDING_TMPL = """
 
""" + +# -------------------- The end of the Template class ------------------- + + +TestResult = unittest.TestResult + +class _TestResult(TestResult): + # note: _TestResult is a pure representation of results. + # It lacks the output and reporting ability compares to unittest._TextTestResult. + + def __init__(self, verbosity=1): + TestResult.__init__(self) + self.stdout0 = None + self.stderr0 = None + self.success_count = 0 + self.failure_count = 0 + self.error_count = 0 + self.verbosity = verbosity + + # result is a list of result in 4 tuple + # ( + # result code (0: success; 1: fail; 2: error), + # TestCase object, + # Test output (byte string), + # stack trace, + # ) + self.result = [] + + + def startTest(self, test): + TestResult.startTest(self, test) + # just one buffer for both stdout and stderr + self.outputBuffer = StringIO.StringIO() + stdout_redirector.fp = self.outputBuffer + stderr_redirector.fp = self.outputBuffer + self.stdout0 = sys.stdout + self.stderr0 = sys.stderr + sys.stdout = stdout_redirector + sys.stderr = stderr_redirector + + + def complete_output(self): + """ + Disconnect output redirection and return buffer. + Safe to call multiple times. + """ + if self.stdout0: + sys.stdout = self.stdout0 + sys.stderr = self.stderr0 + self.stdout0 = None + self.stderr0 = None + return self.outputBuffer.getvalue() + + + def stopTest(self, test): + # Usually one of addSuccess, addError or addFailure would have been called. + # But there are some path in unittest that would bypass this. + # We must disconnect stdout in stopTest(), which is guaranteed to be called. + self.complete_output() + + + def addSuccess(self, test): + self.success_count += 1 + TestResult.addSuccess(self, test) + output = self.complete_output() + self.result.append((0, test, output, '')) + if self.verbosity > 1: + sys.stderr.write('ok ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('.') + + def addError(self, test, err): + self.error_count += 1 + TestResult.addError(self, test, err) + _, _exc_str = self.errors[-1] + output = self.complete_output() + self.result.append((2, test, output, _exc_str)) + if self.verbosity > 1: + sys.stderr.write('E ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('E') + + def addFailure(self, test, err): + self.failure_count += 1 + TestResult.addFailure(self, test, err) + _, _exc_str = self.failures[-1] + output = self.complete_output() + self.result.append((1, test, output, _exc_str)) + if self.verbosity > 1: + sys.stderr.write('F ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('F') + + +class HTMLTestRunner(Template_mixin): + """ + """ + def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None): + self.stream = stream + self.verbosity = verbosity + if title is None: + self.title = self.DEFAULT_TITLE + else: + self.title = title + if description is None: + self.description = self.DEFAULT_DESCRIPTION + else: + self.description = description + + self.startTime = datetime.datetime.now() + + + def run(self, test): + "Run the given test case or test suite." + result = _TestResult(self.verbosity) + test(result) + self.stopTime = datetime.datetime.now() + self.generateReport(test, result) + print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) + return result + + + def sortResult(self, result_list): + # unittest does not seems to run in any particular order. + # Here at least we want to group them together by class. + rmap = {} + classes = [] + for n,t,o,e in result_list: + cls = t.__class__ + if not rmap.has_key(cls): + rmap[cls] = [] + classes.append(cls) + rmap[cls].append((n,t,o,e)) + r = [(cls, rmap[cls]) for cls in classes] + return r + + + def getReportAttributes(self, result): + """ + Return report attributes as a list of (name, value). + Override this to add custom attributes. + """ + startTime = str(self.startTime)[:19] + duration = str(self.stopTime - self.startTime) + status = [] + if result.success_count: status.append('Pass %s' % result.success_count) + if result.failure_count: status.append('Failure %s' % result.failure_count) + if result.error_count: status.append('Error %s' % result.error_count ) + if status: + status = ' '.join(status) + else: + status = 'none' + return [ + ('Start Time', startTime), + ('Duration', duration), + ('Status', status), + ] + + + def generateReport(self, test, result): + report_attrs = self.getReportAttributes(result) + generator = 'HTMLTestRunner %s' % __version__ + stylesheet = self._generate_stylesheet() + heading = self._generate_heading(report_attrs) + report = self._generate_report(result) + ending = self._generate_ending() + output = self.HTML_TMPL % dict( + title = saxutils.escape(self.title), + generator = generator, + stylesheet = stylesheet, + heading = heading, + report = report, + ending = ending, + ) + self.stream.write(output.encode('utf8')) + + + def _generate_stylesheet(self): + return self.STYLESHEET_TMPL + + + def _generate_heading(self, report_attrs): + a_lines = [] + for name, value in report_attrs: + line = self.HEADING_ATTRIBUTE_TMPL % dict( + name = saxutils.escape(name), + value = saxutils.escape(value), + ) + a_lines.append(line) + heading = self.HEADING_TMPL % dict( + title = saxutils.escape(self.title), + parameters = ''.join(a_lines), + description = saxutils.escape(self.description), + ) + return heading + + + def _generate_report(self, result): + rows = [] + sortedResult = self.sortResult(result.result) + for cid, (cls, cls_results) in enumerate(sortedResult): + # subtotal for a class + np = nf = ne = 0 + for n,t,o,e in cls_results: + if n == 0: np += 1 + elif n == 1: nf += 1 + else: ne += 1 + + # format class description + if cls.__module__ == "__main__": + name = cls.__name__ + else: + name = "%s.%s" % (cls.__module__, cls.__name__) + doc = cls.__doc__ and cls.__doc__.split("\n")[0] or "" + desc = doc and '%s: %s' % (name, doc) or name + + row = self.REPORT_CLASS_TMPL % dict( + style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or 'passClass', + desc = desc, + count = np+nf+ne, + Pass = np, + fail = nf, + error = ne, + cid = 'c%s' % (cid+1), + ) + rows.append(row) + + for tid, (n,t,o,e) in enumerate(cls_results): + self._generate_report_test(rows, cid, tid, n, t, o, e) + + report = self.REPORT_TMPL % dict( + test_list = ''.join(rows), + count = str(result.success_count+result.failure_count+result.error_count), + Pass = str(result.success_count), + fail = str(result.failure_count), + error = str(result.error_count), + ) + return report + + + def _generate_report_test(self, rows, cid, tid, n, t, o, e): + # e.g. 'pt1.1', 'ft1.1', etc + has_output = bool(o or e) + tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1) + name = t.id().split('.')[-1] + doc = t.shortDescription() or "" + desc = doc and ('%s: %s' % (name, doc)) or name + tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL + + # o and e should be byte string because they are collected from stdout and stderr? + if isinstance(o,str): + # TODO: some problem with 'string_escape': it escape \n and mess up formating + # uo = unicode(o.encode('string_escape')) + uo = o.decode('latin-1') + else: + uo = o + if isinstance(e,str): + # TODO: some problem with 'string_escape': it escape \n and mess up formating + # ue = unicode(e.encode('string_escape')) + ue = e.decode('latin-1') + else: + ue = e + + script = self.REPORT_TEST_OUTPUT_TMPL % dict( + id = tid, + output = saxutils.escape(uo+ue), + ) + + row = tmpl % dict( + tid = tid, + Class = (n == 0 and 'hiddenRow' or 'none'), + style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'), + desc = desc, + script = script, + status = self.STATUS[n], + ) + rows.append(row) + if not has_output: + return + + def _generate_ending(self): + return self.ENDING_TMPL + + +############################################################################## +# Facilities for running tests from the command line +############################################################################## + +# Note: Reuse unittest.TestProgram to launch test. In the future we may +# build our own launcher to support more specific command line +# parameters like test title, CSS, etc. +class TestProgram(unittest.TestProgram): + """ + A variation of the unittest.TestProgram. Please refer to the base + class for command line parameters. + """ + def runTests(self): + # Pick HTMLTestRunner as the default test runner. + # base class's testRunner parameter is not useful because it means + # we have to instantiate HTMLTestRunner before we know self.verbosity. + if self.testRunner is None: + self.testRunner = HTMLTestRunner(verbosity=self.verbosity) + unittest.TestProgram.runTests(self) + +main = TestProgram + +############################################################################## +# Executing this module from the command line +############################################################################## + +if __name__ == "__main__": + main(module=None) diff --git a/SimPEG/tests/api_TestResults.rst b/SimPEG/tests/api_TestResults.rst new file mode 100644 index 00000000..0d63a328 --- /dev/null +++ b/SimPEG/tests/api_TestResults.rst @@ -0,0 +1,355 @@ +.. _api_TestResults: + +.. raw:: html + + + + + +
+

Test Report

+

Start Time: 2013-11-05 15:24:44

+

Duration: 0:00:00.007500

+

Status: Pass 22

+ +

This demonstrates the report output by Prasanna.Yelsangikar.

+
+ + + +

Show + Summary + Failed + All +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
Total222200 
+ diff --git a/SimPEG/tests/report.html b/SimPEG/tests/report.html new file mode 100644 index 00000000..be98c935 --- /dev/null +++ b/SimPEG/tests/report.html @@ -0,0 +1,2870 @@ + + + + + Test Results + + + + + + + + + +
+

Test Results

+

Start Time: 2013-11-05 15:38:27

+

Duration: 0:00:32.112639

+

Status: Pass 96 Error 3

+ +

SimPEG Test Report was automatically generated.

+
+ + + +

Show +Summary +Failed +All +

+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_forward_DCproblem.DCProblemTests4103Detail
test_adjoint
+ + + + error + + + + +
test_dataObj
+ + + + error + + + + +
test_misfit
+ + + + error + + + + +
test_modelObj
+ + + + pass + + + + +
test_forward_problem.ProblemTests2200Detail
test_modelTransform
+ + + + pass + + + + +
test_regularization
+ + + + pass + + + + +
test_interpolation.TestInterpolation1D2200Detail
test_orderCC
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation2d6600Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation3D8800Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderEz
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderFz
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_LogicallyOrthogonalMesh.BasicLOMTests8800Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_grid
pass
test_normals
pass
test_tangents
pass
test_vol_2D
pass
test_vol_3D
pass
test_massMatrices.TestInnerProducts: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_order6_faces
+ + + + pass + + + + +
test_massMatrices.TestInnerProducts2D: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order2_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_operators.TestCurl1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv2D1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad2D1100Detail
test_order
+ + + + pass + + + + +
test_Solver.TestSolver101000Detail
test_directDiagonal_1
pass
test_directDiagonal_M
pass
test_directFactored_1
pass
test_directFactored_M
pass
test_directLower_1
pass
test_directLower_M
pass
test_directSpsolve_1
pass
test_directSpsolve_M
pass
test_directUpper_1
pass
test_directUpper_M
pass
test_tensorMesh.BasicTensorMeshTests7700Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_vectorCC_2D
pass
test_vectorN_2D
pass
test_vol_2D
pass
test_vol_3D
pass
test_tensorMesh.TestPoissonEqn2200Detail
test_orderBackward
+ + + + pass + + + + +
test_orderForward
+ + + + pass + + + + +
test_utils.TestCheckDerivative3300Detail
test_simpleFail
+ + + + pass + + + + +
test_simpleFunction
+ + + + pass + + + + +
test_simplePass
+ + + + pass + + + + +
test_utils.TestSequenceFunctions8800Detail
test_indexCube_2D
pass
test_indexCube_3D
pass
test_invXXXBlockDiagonal
pass
test_mkvc1
pass
test_mkvc2
pass
test_mkvc3
pass
test_ndgrid_2D
pass
test_ndgrid_3D
pass
Total999603 
+ +
 
+ + + diff --git a/SimPEG/tests/runTests.py b/SimPEG/tests/runTests.py index b6662f00..d671324e 100644 --- a/SimPEG/tests/runTests.py +++ b/SimPEG/tests/runTests.py @@ -1,11 +1,47 @@ import glob import unittest +import HTMLTestRunner # This code will run all tests in directory named test_*.py +TITLE = 'Test Results' test_file_strings = glob.glob('test_*.py') module_strings = [str[0:len(str)-3] for str in test_file_strings] suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str in module_strings] testSuite = unittest.TestSuite(suites) -text_runner = unittest.TextTestRunner().run(testSuite) +unittest.TextTestRunner(verbosity=2).run(testSuite) + + +outfile = open("report.html", "w") +runner = HTMLTestRunner.HTMLTestRunner( + stream=outfile, + title=TITLE, + description='SimPEG Test Report was automatically generated.' + ) + +runner.run(testSuite) +outfile.close() + +reader = open("report.html", "r") +writer = open("../../docs/api_TestResults.rst", "w") + +writer.write('.. _api_TestResults:\n\nTest Results\n============\n\n.. raw:: html\n\n') + +go = False +for line in reader: + skip = False + if line == ' + + + +
+

Start Time: 2013-11-05 15:38:27

+

Duration: 0:00:32.112639

+

Status: Pass 96 Error 3

+ +

SimPEG Test Report was automatically generated.

+
+ + + +

Show + Summary + Failed + All +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_forward_DCproblem.DCProblemTests4103Detail
test_adjoint
+ + + + error + + + + +
test_dataObj
+ + + + error + + + + +
test_misfit
+ + + + error + + + + +
test_modelObj
+ + + + pass + + + + +
test_forward_problem.ProblemTests2200Detail
test_modelTransform
+ + + + pass + + + + +
test_regularization
+ + + + pass + + + + +
test_interpolation.TestInterpolation1D2200Detail
test_orderCC
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation2d6600Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation3D8800Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderEz
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderFz
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_LogicallyOrthogonalMesh.BasicLOMTests8800Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_grid
pass
test_normals
pass
test_tangents
pass
test_vol_2D
pass
test_vol_3D
pass
test_massMatrices.TestInnerProducts: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_order6_faces
+ + + + pass + + + + +
test_massMatrices.TestInnerProducts2D: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order2_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_operators.TestCurl1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv2D1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad2D1100Detail
test_order
+ + + + pass + + + + +
test_Solver.TestSolver101000Detail
test_directDiagonal_1
pass
test_directDiagonal_M
pass
test_directFactored_1
pass
test_directFactored_M
pass
test_directLower_1
pass
test_directLower_M
pass
test_directSpsolve_1
pass
test_directSpsolve_M
pass
test_directUpper_1
pass
test_directUpper_M
pass
test_tensorMesh.BasicTensorMeshTests7700Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_vectorCC_2D
pass
test_vectorN_2D
pass
test_vol_2D
pass
test_vol_3D
pass
test_tensorMesh.TestPoissonEqn2200Detail
test_orderBackward
+ + + + pass + + + + +
test_orderForward
+ + + + pass + + + + +
test_utils.TestCheckDerivative3300Detail
test_simpleFail
+ + + + pass + + + + +
test_simpleFunction
+ + + + pass + + + + +
test_simplePass
+ + + + pass + + + + +
test_utils.TestSequenceFunctions8800Detail
test_indexCube_2D
pass
test_indexCube_3D
pass
test_invXXXBlockDiagonal
pass
test_mkvc1
pass
test_mkvc2
pass
test_mkvc3
pass
test_ndgrid_2D
pass
test_ndgrid_3D
pass
Total999603 
+ diff --git a/docs/index.rst b/docs/index.rst index 981e5ddc..12db6f97 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -47,6 +47,7 @@ Testing SimPEG :maxdepth: 2 api_Tests + api_TestResults Utility Codes From a241f14e2af556894331074d7b7d0f03da945e54 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 5 Nov 2013 16:11:49 -0800 Subject: [PATCH 191/359] updates to runTests.py --- SimPEG/tests/report.html | 2870 -------------------------------------- SimPEG/tests/runTests.py | 3 + docs/api_TestResults.rst | 611 ++++---- 3 files changed, 297 insertions(+), 3187 deletions(-) delete mode 100644 SimPEG/tests/report.html diff --git a/SimPEG/tests/report.html b/SimPEG/tests/report.html deleted file mode 100644 index be98c935..00000000 --- a/SimPEG/tests/report.html +++ /dev/null @@ -1,2870 +0,0 @@ - - - - - Test Results - - - - - - - - - -
-

Test Results

-

Start Time: 2013-11-05 15:38:27

-

Duration: 0:00:32.112639

-

Status: Pass 96 Error 3

- -

SimPEG Test Report was automatically generated.

-
- - - -

Show -Summary -Failed -All -

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_forward_DCproblem.DCProblemTests4103Detail
test_adjoint
- - - - error - - - - -
test_dataObj
- - - - error - - - - -
test_misfit
- - - - error - - - - -
test_modelObj
- - - - pass - - - - -
test_forward_problem.ProblemTests2200Detail
test_modelTransform
- - - - pass - - - - -
test_regularization
- - - - pass - - - - -
test_interpolation.TestInterpolation1D2200Detail
test_orderCC
- - - - pass - - - - -
test_orderN
- - - - pass - - - - -
test_interpolation.TestInterpolation2d6600Detail
test_orderCC
- - - - pass - - - - -
test_orderEx
- - - - pass - - - - -
test_orderEy
- - - - pass - - - - -
test_orderFx
- - - - pass - - - - -
test_orderFy
- - - - pass - - - - -
test_orderN
- - - - pass - - - - -
test_interpolation.TestInterpolation3D8800Detail
test_orderCC
- - - - pass - - - - -
test_orderEx
- - - - pass - - - - -
test_orderEy
- - - - pass - - - - -
test_orderEz
- - - - pass - - - - -
test_orderFx
- - - - pass - - - - -
test_orderFy
- - - - pass - - - - -
test_orderFz
- - - - pass - - - - -
test_orderN
- - - - pass - - - - -
test_LogicallyOrthogonalMesh.BasicLOMTests8800Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_grid
pass
test_normals
pass
test_tangents
pass
test_vol_2D
pass
test_vol_3D
pass
test_massMatrices.TestInnerProducts: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
- - - - pass - - - - -
test_order1_faces
- - - - pass - - - - -
test_order3_edges
- - - - pass - - - - -
test_order3_faces
- - - - pass - - - - -
test_order6_edges
- - - - pass - - - - -
test_order6_faces
- - - - pass - - - - -
test_massMatrices.TestInnerProducts2D: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
- - - - pass - - - - -
test_order1_faces
- - - - pass - - - - -
test_order2_faces
- - - - pass - - - - -
test_order3_edges
- - - - pass - - - - -
test_order3_faces
- - - - pass - - - - -
test_order6_edges
- - - - pass - - - - -
test_operators.TestCurl1100Detail
test_order
- - - - pass - - - - -
test_operators.TestFaceDiv1100Detail
test_order
- - - - pass - - - - -
test_operators.TestFaceDiv2D1100Detail
test_order
- - - - pass - - - - -
test_operators.TestNodalGrad1100Detail
test_order
- - - - pass - - - - -
test_operators.TestNodalGrad2D1100Detail
test_order
- - - - pass - - - - -
test_Solver.TestSolver101000Detail
test_directDiagonal_1
pass
test_directDiagonal_M
pass
test_directFactored_1
pass
test_directFactored_M
pass
test_directLower_1
pass
test_directLower_M
pass
test_directSpsolve_1
pass
test_directSpsolve_M
pass
test_directUpper_1
pass
test_directUpper_M
pass
test_tensorMesh.BasicTensorMeshTests7700Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_vectorCC_2D
pass
test_vectorN_2D
pass
test_vol_2D
pass
test_vol_3D
pass
test_tensorMesh.TestPoissonEqn2200Detail
test_orderBackward
- - - - pass - - - - -
test_orderForward
- - - - pass - - - - -
test_utils.TestCheckDerivative3300Detail
test_simpleFail
- - - - pass - - - - -
test_simpleFunction
- - - - pass - - - - -
test_simplePass
- - - - pass - - - - -
test_utils.TestSequenceFunctions8800Detail
test_indexCube_2D
pass
test_indexCube_3D
pass
test_invXXXBlockDiagonal
pass
test_mkvc1
pass
test_mkvc2
pass
test_mkvc3
pass
test_ndgrid_2D
pass
test_ndgrid_3D
pass
Total999603 
- -
 
- - - diff --git a/SimPEG/tests/runTests.py b/SimPEG/tests/runTests.py index d671324e..c44f9a1e 100644 --- a/SimPEG/tests/runTests.py +++ b/SimPEG/tests/runTests.py @@ -1,3 +1,4 @@ +import os import glob import unittest import HTMLTestRunner @@ -45,3 +46,5 @@ for line in reader: writer.write(' '+line) writer.close() +reader.close() +os.remove("report.html") diff --git a/docs/api_TestResults.rst b/docs/api_TestResults.rst index 667ad91d..7b276006 100644 --- a/docs/api_TestResults.rst +++ b/docs/api_TestResults.rst @@ -185,9 +185,9 @@ Test Results -->
-

Start Time: 2013-11-05 15:38:27

-

Duration: 0:00:32.112639

-

Status: Pass 96 Error 3

+

Start Time: 2013-11-05 16:10:07

+

Duration: 0:00:31.280082

+

Status: Pass 99

SimPEG Test Report was automatically generated.

@@ -345,37 +345,48 @@ Test Results pass - + test_forward_DCproblem.DCProblemTests 4 - 1 + 4 + 0 0 - 3 Detail - -
test_adjoint
+ +
test_adjoint
+ pass + + + +
test_dataObj
- - error + + pass -

I^c4cQx-_hj#B)Q~sD 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ℜ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 CjSfQq diff --git a/ minutes/2013-07-11.doc b/ minutes/2013-07-11.doc deleted file mode 100644 index 74c294de889ddac0b09fa459ec333c147661a8e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138752 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ⅅzpI|=(({KWU`@gg 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 literal 0 HcmV?d00001 From e629c3b8977cdb7996cc21e22c59ff38b8dc5875 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 12 Jul 2013 10:41:45 -0700 Subject: [PATCH 019/359] Bug fix. --- code/TensorMesh.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/TensorMesh.py b/code/TensorMesh.py index d45856a3..9e116f70 100644 --- a/code/TensorMesh.py +++ b/code/TensorMesh.py @@ -1,11 +1,10 @@ import numpy as np from BaseMesh import BaseMesh -from TensorGrid import TensorGrid from TensorView import TensorView from utils import ndgrid -class TensorMesh(BaseMesh, TensorGrid, TensorView): +class TensorMesh(BaseMesh, TensorView): """ TensorMesh is a mesh class that deals with tensor product meshes. From d0de9afacbfccfe512d85276b6fff82122531e7c Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Fri, 12 Jul 2013 11:43:31 -0700 Subject: [PATCH 020/359] 1D/2D plotting works! --- .gitignore | 1 + code/TensorView.py | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0d20b648 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/code/TensorView.py b/code/TensorView.py index 18a7bd00..41e4b6b1 100644 --- a/code/TensorView.py +++ b/code/TensorView.py @@ -14,20 +14,28 @@ class TensorView(object): def plotImage(self, I): + fig = plt.figure(1) + fig.clf() + ax = plt.subplot(111) if self.dim == 1: - fig = plt.figure(1) - fig.clf() - ax = plt.subplot(111) if np.size(I) == self.n[0]: print 'cell-centered image' xx = self.gridCC - ax.plot(xx[0], I, 'ro') + ax.plot(xx, I, 'ro') elif np.size(I) == self.n[0]+1: print 'nodal image' xx = self.gridN - ax.plot(xx[0], I, 'bs') + ax.plot(xx, I, 'bs') + elif self.dim == 2: + print "assume cell-centered image" + x = self.vectorNx + y = self.vectorNy + fh = ax.pcolormesh(x,y,I.reshape(self.n,order='F').T) + lx = plt.xlabel("x") + ly = plt.xlabel("y") + fig.colorbar(fh) + fig.show() - fig.show() def plotGrid(self): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" @@ -37,7 +45,6 @@ class TensorView(object): ax = plt.subplot(111) xn = self.gridN xc = self.gridCC - print xn ax.hold(True) ax.plot(xn, np.ones(np.shape(xn)), 'bs') ax.plot(xc, np.ones(np.shape(xc)), 'ro') From 200d0df157fac34a19f13d5210ba4286491f2518 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 12 Jul 2013 12:08:17 -0700 Subject: [PATCH 021/359] Two bug fixes, and better visualizations! --- code/BaseMesh.py | 2 +- code/TensorMesh.py | 2 +- code/TensorView.py | 40 ++++++++++++++++++++++++---------------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/code/BaseMesh.py b/code/BaseMesh.py index 2b72ee80..a197b8a4 100644 --- a/code/BaseMesh.py +++ b/code/BaseMesh.py @@ -128,7 +128,7 @@ class BaseMesh(object): def nN(): doc = "Total number of nodes" - fget = lambda self: self.n + 1 + fget = lambda self: np.prod(self.n + 1) return locals() nN = property(**nN()) diff --git a/code/TensorMesh.py b/code/TensorMesh.py index 9e116f70..5f5e44b3 100644 --- a/code/TensorMesh.py +++ b/code/TensorMesh.py @@ -23,7 +23,7 @@ class TensorMesh(BaseMesh, TensorView): def __init__(self, h, x0=None): super(TensorMesh, self).__init__(np.array([len(x) for x in h]), x0) - assert len(h) == len(x0), "Dimension mismatch. x0 != len(h)" + assert len(h) == len(self.x0), "Dimension mismatch. x0 != len(h)" for i, h_i in enumerate(h): assert type(h_i) == np.ndarray, ("h[%i] is not a numpy array." % i) diff --git a/code/TensorView.py b/code/TensorView.py index 41e4b6b1..ab5c09cf 100644 --- a/code/TensorView.py +++ b/code/TensorView.py @@ -12,28 +12,36 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I): + def plotImage(self, I, imageType='CC', figNum=1): - fig = plt.figure(1) + assert type(I) == np.ndarray, "I must be a numpy array" + assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'" + + if imageType == 'CC': + assert I.size == self.nC, "Incorrect dimensions for CC." + elif imageType == 'N': + assert I.size == self.nN, "Incorrect dimensions for N." + + fig = plt.figure(figNum) fig.clf() ax = plt.subplot(111) if self.dim == 1: - if np.size(I) == self.n[0]: - print 'cell-centered image' - xx = self.gridCC - ax.plot(xx, I, 'ro') - elif np.size(I) == self.n[0]+1: - print 'nodal image' - xx = self.gridN - ax.plot(xx, I, 'bs') + if imageType == 'CC': + ax.plot(self.vectorCCx, I, 'ro') + elif imageType == 'N': + ax.plot(self.vectorNx, I, 'bs') elif self.dim == 2: - print "assume cell-centered image" - x = self.vectorNx - y = self.vectorNy - fh = ax.pcolormesh(x,y,I.reshape(self.n,order='F').T) - lx = plt.xlabel("x") - ly = plt.xlabel("y") + if imageType == 'CC': + C = I[:].reshape(self.n, order='F') + elif imageType == 'N': + C = I[:].reshape(self.n+1, order='F') + C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) + + fh = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) + plt.xlabel("x") + plt.ylabel("y") fig.colorbar(fh) + fig.show() From 09b12ca52d0e97ffdb5e2b9af6cab163d9e002f8 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Fri, 12 Jul 2013 14:21:58 -0700 Subject: [PATCH 022/359] renamed folder 'code' to 'SimPEG' new folder for ipython notebooks improved 2D plots --- {code => SimPEG}/BaseMesh.py | 0 {code => SimPEG}/EldadsCode/GaussNewton.py | 0 {code => SimPEG}/EldadsCode/MFDdriver.py | 0 {code => SimPEG}/EldadsCode/getCellVolume.py | 0 {code => SimPEG}/EldadsCode/getDiffOps.py | 0 .../EldadsCode/getEdgeInnerProduct.py | 0 {code => SimPEG}/EldadsCode/getEdgeTangent.py | 0 .../EldadsCode/getFaceInnerProduct.py | 0 {code => SimPEG}/EldadsCode/getFaceNormals.py | 0 {code => SimPEG}/EldadsCode/getVolume.py | 0 .../EldadsCode/inv3X3BlockDiagonal.py | 0 {code => SimPEG}/EldadsCode/meshUtils.py | 0 {code => SimPEG}/EldadsCode/sputils.py | 0 {code => SimPEG}/EldadsCode/tools.py | 0 {code => SimPEG}/EldadsCode/utils.py | 0 {code => SimPEG}/EldadsCode/zevel.py | 0 {code => SimPEG}/TensorMesh.py | 0 {code => SimPEG}/TensorView.py | 33 +++- SimPEG/__init__.py | 1 + {code => SimPEG}/getDIV.py | 0 {code => SimPEG}/sputils.py | 0 {code => SimPEG}/tests/runTests.py | 0 {code => SimPEG}/tests/runTests.sh | 0 {code => SimPEG}/tests/test_basemesh.py | 0 {code => SimPEG}/tests/test_div.py | 0 {code => SimPEG}/tests/test_tensorMesh.py | 0 {code => SimPEG}/tests/test_utils.py | 0 {code => SimPEG}/utils.py | 0 notebooks/exPlotImage2D.ipynb | 173 ++++++++++++++++++ 29 files changed, 197 insertions(+), 10 deletions(-) rename {code => SimPEG}/BaseMesh.py (100%) rename {code => SimPEG}/EldadsCode/GaussNewton.py (100%) rename {code => SimPEG}/EldadsCode/MFDdriver.py (100%) rename {code => SimPEG}/EldadsCode/getCellVolume.py (100%) rename {code => SimPEG}/EldadsCode/getDiffOps.py (100%) rename {code => SimPEG}/EldadsCode/getEdgeInnerProduct.py (100%) rename {code => SimPEG}/EldadsCode/getEdgeTangent.py (100%) rename {code => SimPEG}/EldadsCode/getFaceInnerProduct.py (100%) rename {code => SimPEG}/EldadsCode/getFaceNormals.py (100%) rename {code => SimPEG}/EldadsCode/getVolume.py (100%) rename {code => SimPEG}/EldadsCode/inv3X3BlockDiagonal.py (100%) rename {code => SimPEG}/EldadsCode/meshUtils.py (100%) rename {code => SimPEG}/EldadsCode/sputils.py (100%) rename {code => SimPEG}/EldadsCode/tools.py (100%) rename {code => SimPEG}/EldadsCode/utils.py (100%) rename {code => SimPEG}/EldadsCode/zevel.py (100%) rename {code => SimPEG}/TensorMesh.py (100%) rename {code => SimPEG}/TensorView.py (80%) create mode 100644 SimPEG/__init__.py rename {code => SimPEG}/getDIV.py (100%) rename {code => SimPEG}/sputils.py (100%) rename {code => SimPEG}/tests/runTests.py (100%) rename {code => SimPEG}/tests/runTests.sh (100%) rename {code => SimPEG}/tests/test_basemesh.py (100%) rename {code => SimPEG}/tests/test_div.py (100%) rename {code => SimPEG}/tests/test_tensorMesh.py (100%) rename {code => SimPEG}/tests/test_utils.py (100%) rename {code => SimPEG}/utils.py (100%) create mode 100644 notebooks/exPlotImage2D.ipynb diff --git a/code/BaseMesh.py b/SimPEG/BaseMesh.py similarity index 100% rename from code/BaseMesh.py rename to SimPEG/BaseMesh.py diff --git a/code/EldadsCode/GaussNewton.py b/SimPEG/EldadsCode/GaussNewton.py similarity index 100% rename from code/EldadsCode/GaussNewton.py rename to SimPEG/EldadsCode/GaussNewton.py diff --git a/code/EldadsCode/MFDdriver.py b/SimPEG/EldadsCode/MFDdriver.py similarity index 100% rename from code/EldadsCode/MFDdriver.py rename to SimPEG/EldadsCode/MFDdriver.py diff --git a/code/EldadsCode/getCellVolume.py b/SimPEG/EldadsCode/getCellVolume.py similarity index 100% rename from code/EldadsCode/getCellVolume.py rename to SimPEG/EldadsCode/getCellVolume.py diff --git a/code/EldadsCode/getDiffOps.py b/SimPEG/EldadsCode/getDiffOps.py similarity index 100% rename from code/EldadsCode/getDiffOps.py rename to SimPEG/EldadsCode/getDiffOps.py diff --git a/code/EldadsCode/getEdgeInnerProduct.py b/SimPEG/EldadsCode/getEdgeInnerProduct.py similarity index 100% rename from code/EldadsCode/getEdgeInnerProduct.py rename to SimPEG/EldadsCode/getEdgeInnerProduct.py diff --git a/code/EldadsCode/getEdgeTangent.py b/SimPEG/EldadsCode/getEdgeTangent.py similarity index 100% rename from code/EldadsCode/getEdgeTangent.py rename to SimPEG/EldadsCode/getEdgeTangent.py diff --git a/code/EldadsCode/getFaceInnerProduct.py b/SimPEG/EldadsCode/getFaceInnerProduct.py similarity index 100% rename from code/EldadsCode/getFaceInnerProduct.py rename to SimPEG/EldadsCode/getFaceInnerProduct.py diff --git a/code/EldadsCode/getFaceNormals.py b/SimPEG/EldadsCode/getFaceNormals.py similarity index 100% rename from code/EldadsCode/getFaceNormals.py rename to SimPEG/EldadsCode/getFaceNormals.py diff --git a/code/EldadsCode/getVolume.py b/SimPEG/EldadsCode/getVolume.py similarity index 100% rename from code/EldadsCode/getVolume.py rename to SimPEG/EldadsCode/getVolume.py diff --git a/code/EldadsCode/inv3X3BlockDiagonal.py b/SimPEG/EldadsCode/inv3X3BlockDiagonal.py similarity index 100% rename from code/EldadsCode/inv3X3BlockDiagonal.py rename to SimPEG/EldadsCode/inv3X3BlockDiagonal.py diff --git a/code/EldadsCode/meshUtils.py b/SimPEG/EldadsCode/meshUtils.py similarity index 100% rename from code/EldadsCode/meshUtils.py rename to SimPEG/EldadsCode/meshUtils.py diff --git a/code/EldadsCode/sputils.py b/SimPEG/EldadsCode/sputils.py similarity index 100% rename from code/EldadsCode/sputils.py rename to SimPEG/EldadsCode/sputils.py diff --git a/code/EldadsCode/tools.py b/SimPEG/EldadsCode/tools.py similarity index 100% rename from code/EldadsCode/tools.py rename to SimPEG/EldadsCode/tools.py diff --git a/code/EldadsCode/utils.py b/SimPEG/EldadsCode/utils.py similarity index 100% rename from code/EldadsCode/utils.py rename to SimPEG/EldadsCode/utils.py diff --git a/code/EldadsCode/zevel.py b/SimPEG/EldadsCode/zevel.py similarity index 100% rename from code/EldadsCode/zevel.py rename to SimPEG/EldadsCode/zevel.py diff --git a/code/TensorMesh.py b/SimPEG/TensorMesh.py similarity index 100% rename from code/TensorMesh.py rename to SimPEG/TensorMesh.py diff --git a/code/TensorView.py b/SimPEG/TensorView.py similarity index 80% rename from code/TensorView.py rename to SimPEG/TensorView.py index ab5c09cf..155733e8 100644 --- a/code/TensorView.py +++ b/SimPEG/TensorView.py @@ -1,5 +1,6 @@ import numpy as np import matplotlib.pyplot as plt +import matplotlib from mpl_toolkits.mplot3d import Axes3D @@ -12,7 +13,7 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I, imageType='CC', figNum=1): + def plotImage(self, I, imageType='CC', figNum=1,ax=None): assert type(I) == np.ndarray, "I must be a numpy array" assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'" @@ -22,14 +23,22 @@ class TensorView(object): elif imageType == 'N': assert I.size == self.nN, "Incorrect dimensions for N." - fig = plt.figure(figNum) - fig.clf() - ax = plt.subplot(111) + if ax is None: + fig = plt.figure(figNum) + fig.clf() + ax = plt.subplot(111) + else: + assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!" + fig = ax.figure + if self.dim == 1: if imageType == 'CC': - ax.plot(self.vectorCCx, I, 'ro') + ph = ax.plot(self.vectorCCx, I, '-ro') elif imageType == 'N': - ax.plot(self.vectorNx, I, 'bs') + ph = ax.plot(self.vectorNx, I, '-bs') + ax.set_xticks(self.vectorNx) + ax.set_xlabel("x") + ax.axis('tight') elif self.dim == 2: if imageType == 'CC': C = I[:].reshape(self.n, order='F') @@ -37,12 +46,16 @@ class TensorView(object): C = I[:].reshape(self.n+1, order='F') C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) - fh = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) - plt.xlabel("x") - plt.ylabel("y") - fig.colorbar(fh) + ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) + ax.axis('tight') + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_xticks(self.vectorNx) + ax.set_yticks(self.vectorNy) + fig.show() + return ph def plotGrid(self): diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py new file mode 100644 index 00000000..2d1b1e99 --- /dev/null +++ b/SimPEG/__init__.py @@ -0,0 +1 @@ +from TensorMesh import TensorMesh diff --git a/code/getDIV.py b/SimPEG/getDIV.py similarity index 100% rename from code/getDIV.py rename to SimPEG/getDIV.py diff --git a/code/sputils.py b/SimPEG/sputils.py similarity index 100% rename from code/sputils.py rename to SimPEG/sputils.py diff --git a/code/tests/runTests.py b/SimPEG/tests/runTests.py similarity index 100% rename from code/tests/runTests.py rename to SimPEG/tests/runTests.py diff --git a/code/tests/runTests.sh b/SimPEG/tests/runTests.sh similarity index 100% rename from code/tests/runTests.sh rename to SimPEG/tests/runTests.sh diff --git a/code/tests/test_basemesh.py b/SimPEG/tests/test_basemesh.py similarity index 100% rename from code/tests/test_basemesh.py rename to SimPEG/tests/test_basemesh.py diff --git a/code/tests/test_div.py b/SimPEG/tests/test_div.py similarity index 100% rename from code/tests/test_div.py rename to SimPEG/tests/test_div.py diff --git a/code/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py similarity index 100% rename from code/tests/test_tensorMesh.py rename to SimPEG/tests/test_tensorMesh.py diff --git a/code/tests/test_utils.py b/SimPEG/tests/test_utils.py similarity index 100% rename from code/tests/test_utils.py rename to SimPEG/tests/test_utils.py diff --git a/code/utils.py b/SimPEG/utils.py similarity index 100% rename from code/utils.py rename to SimPEG/utils.py diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb new file mode 100644 index 00000000..efcebc7e --- /dev/null +++ b/notebooks/exPlotImage2D.ipynb @@ -0,0 +1,173 @@ +{ + "metadata": { + "name": "exPlotImage2D" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "sys.path.append('../')\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from SimPEG import TensorMesh" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 1D Plots\n", + "\n", + "For 1D nodal or cell-centered plots are supported.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x0 = np.zeros(1)\n", + "h = np.random.rand(51)\n", + "mesh = TensorMesh([h],x0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'module' object is not callable", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m51\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmesh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTensorMesh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: 'module' object is not callable" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "sin = lambda x: np.sin(x)\n", + "xc = mesh.gridCC\n", + "xn = mesh.gridN\n", + "\n", + "fig = plt.figure(1)\n", + "fig.clf()\n", + "ph1 = mesh.plotImage(sin(xc),ax=subplot(111))\n", + "ph2 = mesh.plotImage(sin(xn),ax=subplot(111),imageType='N')\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'mesh' is not defined", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msin\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridCC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mxn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'mesh' is not defined" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 2D Plots\n", + "\n", + "Plot x and y coordinates of cell-centred points" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x0 = np.zeros(2)\n", + "h1 = np.linspace(.1,.5,3)\n", + "h2 = np.linspace(.1,.5,5)\n", + "mesh = TensorMesh([h1,h2],x0)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "fig = plt.figure(1)\n", + "fig.clf()\n", + "ax1 = subplot(121)\n", + "ax2 = subplot(122)\n", + "mesh.plotImage(mesh.gridCC[:,0],ax = ax1)\n", + "ax1.set_title('x coordinates') \n", + "mesh.plotImage(mesh.gridCC[:,1],ax = ax2)\n", + "ax2.set_title('y coordinates') " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "pyout", + "prompt_number": 3, + "text": [ + "" + ] + }, + { + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGVVJREFUeJzt3XtwVOX9x/HPRlIMoCEkEeyAidFIEiABciNcYytgJ5VL\ny4jRosLghLZyLYxFy7A4SjuiAqYKkbGtlMvQAgW8VApNkyhIEm4/IMAgkZUKFAhikHAxDM/vD44L\nkQSScE422bxfMzvuyXnynO/ufA+f3SdnV5cxxggA0OwF+LoAAEDjQCAAACQRCAAAC4EAAJBEIAAA\nLAQCAEASgeCXIiMjlZubK0maPXu2nnnmGR9XBNw6+tp5LXxdAOzncrm8959//nnb5g0ICNDBgwcV\nFRVl25xAbdHXzuMdQhN26dKlBj8mn2OE0+hr3yEQ6qC0tFShoaHasWOHJOno0aMKDw9XQUFBtePL\nysr0+uuvq1u3bgoLC9P48eO9+9atW6eBAweqW7duWrhwoc6dO+fdt337dj399NOKjIzUjBkzdPTo\nUe++yMhIvfXWW+rdu7fatm2ry5cv69NPP9WgQYMUGRmp7OzsKjW43W6NGjVKkuTxeBQQEKDVq1cr\nNjZW8fHxWrJkiXdsUVGR0tLSFBISorS0NP3xj3/0npz9+/eXJCUkJOiOO+7Q3//+d0nSrl27NG7c\nON1zzz36zW9+o8OHD3vne+edd5SWlqbg4GDFxMR43+6jcZkzZ45GjBhR5WcTJkzQpEmTqh1PX/tx\nXxvUyaJFi0xcXJw5d+6cGTRokJk2bVqNY4cMGWJGjRplPvvsM3Px4kXzySefGGOMyc3NNffcc4/Z\nsGGDOXDggPnxj39sZs6caYwxpqKiwrRp08YsWrTInDhxwkyYMMEMGDDAO2dkZKSJi4szBQUF5sKF\nC+b06dOmVatW5t133zVHjhwxTzzxhAkMDDT//ve/jTHGuN1u84tf/MIYY8yhQ4eMy+UyI0eONIcP\nHzbr1683LVu2NOfPnzfGGLNt2zZTWFhoLl26ZDZt2mQiIiLMhg0bvMd2uVymtLTUu11WVmZCQkLM\nmjVrTHl5uZk9e7bp3bu3McaYkydPmo4dO5oDBw4YY4z54osvqvwuGo9jx46Z1q1bm6+//toYY0xl\nZaW56667zPbt26sdT1/7b18TCPUwZMgQ07VrV5OQkGC+/fbbasd8/fXXplWrVqasrOy6fRMmTDDT\np0/3bm/YsMHEx8cbY4xZvXq1SUtL8+6rqKioMk9kZKR58cUXvftXrFhh+vXr590uLS01LpfLe+LM\nnDnzuhNn27Zt3vGdO3c2//znP6t9DC+88IJ59tlnvdvfP3Hefvtt88wzz3i3L126ZO666y5z/Phx\nU1ZWZkJDQ837779f43OExuPhhx82ixYtMsYY895775kuXbpUO46+9u++ZsmoHsaOHauSkhKNHz9e\ngYGB1Y7ZtGmTIiIiFBoaet2+zZs3KzEx0budmJio3bt368yZM9q0aZN69uzp3deqVStFR0dr8+bN\n3p+lpqZ67xcVFSkhIcG7HRUVpeDg4BvW3717d+/9u+++2/vW/ciRIxo3bpzi4+N15513au7cudq1\na1eN82zcuFFLly5VSEiIQkJCFBYWpoqKChUUFCg0NFR//etfNXfuXN19992aNGmSTp48ecO64DtP\nPfWUd5llyZIl3uWY76Ov/buvCYQ6Onv2rCZNmqSxY8dq5syZOn36dLXjevfurS+++EKnTp26bl+f\nPn20detW7/bWrVu9zdq3b19t27bNu6+iokKfffaZevfu7f1ZixZXLw5LSUnRzp07vdulpaUqLy+v\n12N76aWXVFlZqQ8//FDl5eWaPHmyLl++7N0fEBBQ5Y9vP/rRj/Tkk0/q9OnT3tvZs2e969E/+clP\ntHHjRu3du1eHDh3SK6+8Uq+64LyhQ4dq165d2rNnjz744AM98cQT1Y6jr/27rwmEOpo4caJSUlL0\n9ttvKyMjQ+PGjat2XNu2bTVw4EBNmTJFBw8e1IULF7yvhoYOHarly5crNzdXBw8e1Jw5czRs2DBJ\n0sCBA1VSUqI//elPOnHihH73u98pOTm52ldkkjRo0CBt375dS5cu1dGjRzVr1qwqJ1ZdHD16VO3a\ntVNoaKjy8vK0ePHiKvsTExOrnPAjR47U6tWrtWbNGlVUVKiiokIffPCBzp49qwMHDig3N1cXL17U\nD37wA7Vs2VJ33HFHveqC84KCgvTzn/9cjz/+uFJTU9WxY8dqx9HX/t3XBEIdrF27Vv/617+0YMEC\nSdLrr7+u7du3a/ny5dWOf+edd9S1a1f99Kc/VadOnfS3v/1NkpSenq65c+dq9uzZGjZsmIYOHapp\n06ZJklq3bq3c3Fzl5+crOTlZQUFBWrp0aY01tW3bVuvXr9ef//xnpaWlKSUlpcrJ7HK5qly/fe39\n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\nIAfeIdTmGyFTU1O1d+9e7/bJkycVFRV13VzfnVzcuDl1o7e5+eutPmwPhNp8I2RqaqpWrVqlU6dO\nadmyZYqNjbW7DMB29Db8nSNLRjf7RsiUlBT17dtXSUlJateunZYsWeJEGYDt6G34NdMI5Ofnm5iY\nGHP//febN954o9oxv/3tb829995revbsafbt21fnOfbt22d69eplWrZsaV599VXbH4NdavNcGGNM\nUVGRue2228yqVasasLqm6WbP6ZkzZ8yUKVNMQkKC6dWrlzl48GCDHNeY5tPXxtDbdnOirxtFIHTv\n3t3k5+cbj8djOnfubE6ePFllf2FhoenTp485deqUWbZsmcnIyKjzHCdOnDDFxcXmhRdeaNQnzs0e\nhzHGXLp0yTz44IMmIyPDrFy50gdVNi03e05zcnLM+PHjjTHGbN682fzsZz9rkOM2p742ht62mxN9\n7fOvrrDj2u7azBEeHq6kpCQFBgY6+GhuTW0ehyRlZ2drxIgRCg8Pb+gSm5zaPKe5ubnKyMiQJKWl\npengwYMNctzm0tcSvW03p/ra54Fgx7XdtZmjKajN4zhy5IjWrl2rX/7yl5JudEkjpNo9p4MHD9by\n5ct1/vx5rVu3Trt379ahQ4ccP25z6WuJ3rabU33tk88h1JWp5jKq5toskyZN0h/+8Ae5XK5burwM\nV40cOVJffvmlBgwYoM6dOys6OlotW7Z0/Lj0dVX0tr3q09c+f4dgx7XdtZmjKajN49i2bZsee+wx\n3XvvvVq1apV+9atfad26dQ1dapNRm+e0VatWmjFjhoqKirRgwQIFBQXphz/8oePHbS59LdHbdnOq\nr30eCHZc212bOb7TmF911OZxfP755zp06JAOHTqkESNGaMGCBRoyZIgvym0SavOclpeX69tvv9W5\nc+f0+9//XgMHDmyQ4zaXvpbobbs51tc2/tG73vLy8kxMTIy57777zPz5840xxixcuNAsXLjQO+a5\n554zkZGRpmfPnmbv3r11nuPYsWOmY8eO5s477zRt27Y1nTp1Mt98800DPLq6qc1z8Z2nn36aS/Nq\n4WbP6ebNm80DDzxg7r//fjNq1ChTUVHRIMc1pvn0tTH0tt2c6GuXMY38pQUAoEH4fMkIANA4EAgA\nAEkEAgDAQiAAACQRCE1ecXGxEhISdPHiRVVUVKhr165Vrm0Hmip6u+FxlZEfmDFjhi5cuKDz58+r\nU6dOeu6553xdEmALerthEQh+oLKyUklJSQoKCtKnn37arL/+AP6F3m5YLBn5gbKyMlVUVOjs2bM6\nf/68r8sBbENvNyzeIfiBIUOG6PHHH9fnn3+uY8eOKTs729clAbagtxtWk/i2U9Rs8eLFatmypR57\n7DFdvnxZvXv3Vl5entLT031dGnBL6O2GxzsEAIAk/oYAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkCT9PxL88fDsDe+RAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 2)", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m type(ax)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 3a08d40e5c7e977dfbce228162844c54c8c15198 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Fri, 12 Jul 2013 15:56:00 -0700 Subject: [PATCH 023/359] 3D plots working! --- SimPEG/TensorView.py | 50 +++++++++++++-- notebooks/exPlotImage2D.ipynb | 112 +++++++++++++++++++++------------- 2 files changed, 116 insertions(+), 46 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 155733e8..d78753ed 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -13,10 +13,13 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I, imageType='CC', figNum=1,ax=None): + def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True): assert type(I) == np.ndarray, "I must be a numpy array" + assert type(numbering) == bool, "numbering must be a bool" assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'" + assert direction in ["x", "y","z"], "direction must be either x,y, or z" + if imageType == 'CC': assert I.size == self.nC, "Incorrect dimensions for CC." @@ -30,7 +33,7 @@ class TensorView(object): else: assert isinstance(ax,matplotlib.axes.Axes), "ax must be an Axes!" fig = ax.figure - + if self.dim == 1: if imageType == 'CC': ph = ax.plot(self.vectorCCx, I, '-ro') @@ -52,12 +55,51 @@ class TensorView(object): ax.set_ylabel("y") ax.set_xticks(self.vectorNx) ax.set_yticks(self.vectorNy) - + + elif self.dim == 3: + if direction == 'z': + nX = np.ceil(np.sqrt(self.nCz)) + nY = np.ceil(self.nCz/nX) + C = np.zeros((nX*self.nCx, nY*self.nCy)) + + Ic = I[:].reshape(self.n, order='F') + + nCx = self.nCx + nCy = self.nCy + for iy in range(int(nY)): + for ix in range(int(nX)): + iz = ix + iy*nX + if iz < self.nCz: + C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = Ic[:, :, iz] + else: + C[ix*nCx:(ix+1)*nCx, iy*nCy:(iy+1)*nCy] = np.nan + + C = np.ma.masked_where(np.isnan(C), C) + xx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), self.hx).ravel())] + yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())] + ph = ax.pcolormesh(xx, yy, C.T) + # Plot the lines + gx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), np.sum(self.hy)).ravel())] + gy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), np.sum(self.hx)).ravel())] + # Repeat and seperate with NaN + gxX = np.c_[gx, gx, gx+np.nan].ravel() + gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() + gyX = np.kron(np.ones((nY+1, 1)), np.array([0, sum(self.hx)*nX, np.nan])).ravel() + gyY = np.c_[gy, gy, gy+np.nan].ravel() + ax.plot(gxX, gxY, 'w-', linewidth=2) + ax.plot(gyX, gyY, 'w-', linewidth=2) + + if numbering: + pad = np.sum(self.hx)*0.04 + for iy in range(int(nY)): + for ix in range(int(nX)): + iz = ix + iy*nX + ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, + '#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large') fig.show() return ph - def plotGrid(self): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" if self.dim == 1: diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb index efcebc7e..f75e96d5 100644 --- a/notebooks/exPlotImage2D.ipynb +++ b/notebooks/exPlotImage2D.ipynb @@ -21,7 +21,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -42,19 +42,8 @@ ], "language": "python", "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'module' object is not callable", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m51\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmesh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTensorMesh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: 'module' object is not callable" - ] - } - ], - "prompt_number": 6 + "outputs": [], + "prompt_number": 9 }, { "cell_type": "code", @@ -73,17 +62,14 @@ "metadata": {}, "outputs": [ { - "ename": "NameError", - "evalue": "name 'mesh' is not defined", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msin\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridCC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mxn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'mesh' is not defined" + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEECAYAAADHzyg1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8G+Wd8L+S5fs+40uXLee2c5NAwTYUYloXWrr0oGe2\ndJdueUl2t+3u20KKKLBlt+XdktCltNtu2mW33Ra6peAWEg7bIZCLHHYcJ7FkjUa+7fi+ZMvS+4cj\nRzZ2YseSZsbR9/PJJ/b48Tw/j2bm9zy/U+XxeDyECBEiRIgQgFpqAUKECBEihHwIKYUQIUKECDFF\nSCmECBEiRIgpQkohRIgQIUJMEVIKIUKECBFiipBSCBEiRIgQU2ikFsCLSqWSWoQQIUKEUBz+ziqQ\n1U7B4/Hw6KOP4vF4PvD1lY6VlDwKeC79u/z1+sL/w8Pbt/NoSQkPb99O1auvXvE8V5prPuOvJudC\nxgVqPt+x3v8f3r596ur5/nukrGxR12I+v7NQua82/lquw0LHVr366gfuK13yPT733qPT7sOSkkc/\ncI6Zn8G1XNsrXdPFXu8rjZvvz+YaN/vz+iiJfJwSSkiMWklJyaOUlDzKl7989bn88Tddy9+xmPNf\nizyPlpTwKHALt/pcP/8jm51CIOhusPBE7f6p7x+2WgEoLi+XSiRZsn3nTh5+912eHBycOvadvDzu\nfOghCaWSJ9UVFby+axdPXrqXAB4+dgx33wYJpVoa9PEHqgBGzVRVmS8dNc85/nphxw4zlZWVePpT\nUKGnhayAzrcklILBAGfOmMnIgKamSlJSzHj6a7i1p37auCetVnbv3RtSCjMoNhggLIzdH/4wYS4X\nE2fOcOenPhW6TrOwf8+eaQoB4MmeHn4WFjJ/hggMggB2eymTCtJ86aiZRE7RF4D5ZKcUSktLZ/36\nSsd++lMz6elQXQ2vvlrJt79dylezNvB4j/0DY8NGR+c8z0Jlme/vXsu4QM3nO3bqd3bvpnj3boq/\n8Y3J7/ftg5dfnvP81/K3+ePvXOhnFoixGqdz1p9HRbtRDTZe2tDPft7ZrsdMGRZ73yzmZ/4+/1zj\nDAZ47z0z6zmJUxdBUo6ZU6cE+qbecAuT0R9/05XGBuL8Cx9f6vP/5NdJyZ+kr2dBU84Pj0xYjChv\nv+3xbN586ZumJs+t6TWeT0R82eOBD/x7pKzMH+IuHY4c8Xhycjye4eHLx3p7PZ6EBI+nu1s6uWTK\nw9u3z3pfrcl8y5OT9c3ZfuQpKXlUarFlhcXi8WTH93ncn/r01LGSkkdD124OrnRtAvEKl91OYb5U\nV1Swf88eNE4nB8SvsWrLRvjxATCbebB0L4+deZqHx9+ZttX/Tn7+dW8n37HDjCD4HKg5DekfxfA3\n/8y+febJY4mJcMcd8Pvfw/33SyClfNm+cycPW63T7quH9DciXvwQd91dRXOzGYBDVS62rBokIiMJ\ng0EaWeVK1cs9FDvfQvXPT0ktiiLo674Y1PkUqRRmOvte4Wk8TX9D9Zk2iquq+Pjy1ewyQP4//oLd\nf3iMsKoqJm6/nTsfeui6t5MLAj5OvEv0AFkzjn3+8/DssyGlMIPi8nIYH2f3Jz9J2M03MxETQ3/y\nXr6UGsGzz5qnxt29xsLnM9/kM28+IJ2wMqXqubOUlKrAaJw6ZjAA7u/ifvcwhzw3cfPNoFJx3SvU\n6ooKuhssQZ1TkUrB19nXQTpW8jk8Xs33tB+mePVqNMADD8CRM8U8/+aboNdPvuBMJmkFVxIf+cik\nQmhuhpwcqaWRFcV5eRQvXw7V1Tidk7dXZeX0MSX3pFD1w3A+Mz4O4eGSyClLTp2iqlHH//2vommH\np3apH/84q9//O/bsSWTduuCLJzf279nDraPnqeZLjBGBiUkFISSnYDAUUVXl/zlllacwX3ydfQe4\ng1t5m3BcU05kgL/6K/jtb6G3F1i/Hk6dkkBS+THvrWhUFNxzD/zP/wRWICVSWwtFky+1//mfydtr\n5crpQ0rvSeHPnlt4ZNs2zKWlPFJWRnVFhQTCSk91RQWPlJVhLi3loZIv0R+ZyMot8bMP/tjHKAqr\no6YmuDLKFY3TyT7saLmfn9FMJVVUUsWOou7LitTfcwbkrAHGFRk59fXrlLGdyVyEiaioqeOZmXDn\nnfDLX8Iur1K4996gyyonrrQVfe89+Pu/h/vug82bJ7fuO5o0CL99G/7YP22swUDAbkhFUFsLhYV4\nPLBnD3zvex8c0t9cQev4zew84SCDTuD6zJOZaer9T77AG7HvcPBPntmvQ3k5hTt/Qe3prfDFsCBL\nKz9ckZH0kcAJNlLC5W2B77vO3yhyp7B9504ezs/HjYr9bKeM1/lOfj53zHAiP/gg/Nu/gbsotFOA\nya2ocXRk1p+tWwdxcfC5z8Hy5fDd78LZ7kyqBl+hqso87d80R/X1SE0NFBby3nvQ1ze5+JjJmz/e\nw4c971BN8dSxJ61WDuzdG0RBpWdmXkcVJTw49Ke5r0N2NkU5F6k5GIgIfGWxY4eZitblmDQfJZyH\n+Sg3UEoJRfGFH3jX+RNF7hSKy8uho4MH/vrfGA938R/Fy2d1In/oQ5NWkDeHt3HHqVDUUeWRaEbp\nI5zPocFFBGNEMUpUYhSrV6/ne9+Dxx6D48fh17+G0zWhhKxZubRT2PMwPPQQqGdZWmmcTkqooooS\n7uWlqeO+Js7rgZl5HVWUsItneGk0dc7fKfqYjtqfh3YJggCnai8rT+8+Yb0hsAEzilQKAMVpabxn\n/Br3bc/l8Wdfm3WMSjW5W/jxS5ncMTgInZ2Qnh5kSeWBIIC97w9T348DI8B6SrllGzx+yRykUsGW\nLZP/TpwgII4sRdPTA729NIUb2b8ffvrT2Ye5IiMppZKv8u/Tjgdy2y9HfE29LWTRQzJrqOO3Udvn\n/B3dF4oZ3Kvm4kVInVt3XLckpgT2oijSfATA6dO87iyhrOzKwz7/eTh4UIW4cjucPh0c2RSELSo6\noFvRJceZM7BmDT/5qZrPfx4SEmYftn3nTv43rw87ei6SAjCriXOp4zX1wuQu4RYO8kh+3hWvg2rj\nBgrD6qn9c1OwxAzhg2J3CkMnznOsQ8+tt155XGwsfPGL8JNDf8U/nToFt98eHAEVQkqB6bpyfC6a\n2lpGV23gZz+bLKsyF95r+tvP1fF1150sv+XidZkn4/17d3/mM/w55l5SUtq58+lnrnwd1GoKTcPU\nvNRA6RdygyRpCC+KVQqVR6LZXOgkLu7qMeBf/zrc8h838+jxF4i86ujriyttRScTh8wwMkzd8RHS\nV6SSkXGdJxTV1PCbsb9g40ZYseLKQ4vLy/nqQ4O0/+BmHv/z1yZtc9chxbffTvHEBC+m3MPPfq1m\nwzwKyhaVJPP+y82BFy7EB1CmUhge5vX2dZR9PXpew5cvh3Wrx/ndwUy+EGDRlhK+Yad/lfo0Z7rT\nKc34Ba7WSKorKq67VS+Ap6aWPV0/4Mln5je+tDyOr//LLWCzQV5eYIWTKxcu0J67ibZ2tTe946oU\nfnI5+346PhnelZgYWPlkisEA9nP/gLtvEOPWjGnHA4kylcKZM7yuKefXH5l/hMKD34zmqU99ki+M\njED0/JTJUsK76q95d4jcZWOk5Cf7HL8y1RUVDIwfJab7rzG3T3qer8eYezweDp2OYzAr5qq+LC+b\nN4PVk0fPwTdIvl6VwpkzVKfdw80rIWyej2zhDdHUqdbg/vMrqD/76cDKJ1P27TPzpQ213Lr+LH/5\n2meCNq8iHc3CW430qpJZv37+v/OxT4TTotFy4sXGwAkmY/btM1NZaSZJtYuXnvkqlZWT388nCW3/\nnj08M1DJSTZM9Xq6HmPuEUX2uB/koV1hs4ahzkZ4OGzVtnDwT/1XH7xUOXOGKvctFBdffaiXxERI\nTXTR+JujgZNLATQ4IinYEtydkiKVwuv74Y7VLfN+MGFyhfK1wkP820+v3/jnsWEXzWPp6G9d2IpV\n43SyjA6iGMWOfur49RZz73irgTdcpXz5ywv7vZJtTqqOxQZGKCVw5gxVbSsoKVnYrxVtCKPmrS6Y\nmAiMXAqgoTedgtt0QZ1TmUqhJpuyOxZ+o9z/iW5eOqajJxCNKRSA/aBIjqadiOSFvaC8seYbOcEJ\nNk4dv95i7p/7ZTRfLDw9ZxjqXJR+IpmqpuvUdAR0nW7GfjGOjRuvPtaXoq0x1MZshcOHAyOYzOlu\nGmZsIoyMm4JbyFNxPoXxMQ9vda/juS+OL/h3/+HQSSLcdWzZkkKuT6Tb9VLLx/pOK/lJscDCVh7e\nHgIbrSc4yQY+yf9ed70pRkbg3w+v5dD33lrw7265O4vz4/H0WbtIzE8LgHQyZmiIg6353FSqQrPA\nt01hIfwuqRhe+c/J8gTXGQ37bRREq1BFrg7qvIpTCkde6cAY1sGyNYUL/l1hMI2O8SfosML0Nrtm\nf4knaywn+8nPXfhH7nUm7/0/b3C65aNwa9l1F3P/61/DlvBTFNxhWNDveZsaaTSD3HI7pOjjgOtn\nIcLZs1Qn3kVJ6cKNEkVF8K2LWTzy7LNoDh/GFRnJ9p07r5v7ruFQBwXLYoI+ryKUgm+3MKF+BLdm\ngNLSjIU/WAtdqiwxrBfcmDZf2zUoLi9Hr9Kz7ePLePy12cuKLDV877vjxyF/uJbSXWsw5L087/vO\nt6lRrwAI3p/M7/cVz5kzVE3cyrML9CcAtDX8ibaLt/Jtj4fYqusv6q2hdoTlBcGPlFTEW3K2bmGO\nKrhuHiw/YW2LoXhT8jX97o4dZgTrBF0uNzfdFE5ExOTxpbzinXnf1QAcBNTmWceH+CC9xy00DH6e\nzZsX/rtv/dszrPVkcZbVbOE4MBn1tnvv3utDKQjhfOT+OfpOBBBFKIUQfmB8HMtgJqbi7Gv6dUGA\nqnceByZ7L1zGvFjJQixh3nlPzdbV/URELNyXonE6KaSWGoqmlAJcJ1FvbjcNF1PZWRr8Mh+KjD4K\nsXDc5xuwYSRv9fUVMRRCWqouZFPy4Wtbe7oiIymihlqm+w+vh6g3j02gwZNPwebgZ3NfVzsFgwFw\n/l+G3z/HGc16brjB5/gSp/lgI0kRmcTGLv0HKoRM6O6mauQGfnjXtb3Ytu/cyXO1L9Le+tGpY9dL\n1FvnwXrUmmJJSodfV0ph3z4zeDwMJ+eQMvq/vPWWakEJcErGeqQLU0Y/XCrjHCI4TBUVBBqPd6OJ\n0qBbm3BdLEQGjp3jLOu5Yeu1FQIsLi/n4j9H8vn7N/GoW4O7+Bbu/MY3rg9/QnUbBWm9QMinMCtT\ndXuOOcmN6CBlndbn+AJRqYjZsIKUGictLVHT8hWWMtYzI+Qb3VKLoSgMBujqMtPW6mFt3ztw8y1T\nx+eLrxP+H0v/kz8fi6KUH18XRQUPvdLN5mUOoqKuUk72CnziC7cT83fwNe0dZD3xCNx0kx8llC8N\np4coyJcmk1sRSsH7YOUldvH7r72M6fv3L+6E69eTJ3TR2Jh73SgFiy0M033XHvM8teIdHqH6WCQ3\n36JGrV7aprd9+8w8/TQ4Djfxo6b9UGm+5nNVV1TQWvcS0cPfxnydhFdWvRdOcVHvos6hUk3mK9RQ\nTJbFcv0oBWsYy78UJ8ncilAKAGNj0DyQgL7EsPiTrV9P3h9sNDbmLqhIl2JxOrH2pnLPDdduoJxa\n8Y6PsyLSxk/2GFi9PsI/8skYQQCTxzaZXrsI9u/Zw792HcfIr/AAKpZ+eGWVJYfH71t45YGZFBVB\nbd0GyiyH/CCVAujvp2Ewi3u2SmPqVYxSsDV60KqaCN+4uIcTmFQKg+/Q2HjL4s+lBC5cwBK+ivyV\nV29IdFXCwzFGt2E7HM3q9drFn0/m2Gxwu6sWShZ332mcTlLpJopRWskim1Zg6YVXehP+3BNwpH+C\nx1508/irLy8qn6WwEKqOm8DyS3+KKl9qamiIXEPBCmkcnopRCpbDXZg0dsi4Sv/N+bBqFXl9e9nf\n4EJBl+Ca8ZypwzpxFyY/1dUypg1iO9EDLH2lIAhg0ByBwr9c1Hm8RQVXco5zrJxSCkstvHJmwt/B\nI96vzB8cPE+KiuDZjkwYsyxCMuXgOXWahrH7KSiQZn7FxN5Y3m2nYJmfatJHRJBvmKCxbsQ/55M5\nXcdsqDVqUvy0GzXqJrCdc/rnZDLG4wFB8GCwvrlo85G3gf0q6qlnFTAZXnmlBvYhJlmzBs45Yhhv\nEKQWJSi0vicQE+WWrOGcYpbJltpRv610AfI2JmH90/XRW8F6og9T9gjgnzoqxlVRHD6w9K9dVxdE\naNwkxnpYbMC412/wxFdqODW0ibabr7+igtdKTAxotdDQYmB1dzd+W93IlIYTAxQYXJLNr5idQoOg\nwbTRfzG7mTcaGRjRMDjot1PKFuu5cfKX++8lbtiQjNApTWREMBEEMKYNLHqX4OUXvztGW0wXF5xn\nOTi6je/+4BilpWZ27DD75fxLmcJCFTXpH55Z3njpMTFBQ2MYBUXSmRWVs1O4mIyp2H8VA1Ub1mMM\nb8Jmy/PXMy9PRkexXEwif53/XuLGm3OwDS/9Ptc2Gxii2vymFAQBaoWnAbgUlXoJs1/Ov5QpKoLa\n+i181mKBLVukFidwWCw0RBeyfI10kX2KUArj/SM4xjMx3nZtmZGzsm4deWOHaLToKSxcwqaQc+ew\nxq7j1hX++xtT12Ti8gzSK/aRpJPI8BkEBAEMLsvkGynEvDAYYHTEzKmjTrbdHAZhmqnji6GwEP7j\nhVVgeXHRMsqa06dpiFnHfRI5mUEhSsH+poWciGQi4vyYaZaYSF5sO41HL8I9Gf47r9yoq8Oi2cxX\n8/13SpVahTGqFdvBcTZ8fmkrhdV9p6DwY1KLohj27TNz4FetfP90I28d9F+3tKIiqO3JBcvSjECq\nrqhg/549aM6d452u/ZS3HQSkCZmXvU+huqKC3X/7LCosPFJWRnVFhd/Onad303hycRmXsqeuDuto\njl+d9ADGlD5sxy/696Qyw2Z1Y7h4AlatkloURWF5r4P89AG/njMvD7qGY+g71+rX88qB6ooKXt+1\niyf27+e7ooOBcR3n/vVBv77rFoKslYL3Yt0kRlA2dpYn9u/n9V27/Hax8gpjaLQs7XpAA6etDIxH\nkZXl3/Mac13YlnhIr9AwhiHXBZdyDELMD+uZEUx5/n2u1GpYs3KC2gtL77PYv2cPT15yoDeRSzI9\n/MBWy4G9eyWRR9ZKwXuxLJgwMbltfNJq9dvFyrsxk8a24PdADSbWmmHy9S5UfnTHABgKwhEEj39P\nKiM8HrA3azBsuLZOdbNhMEBJiZmC9L8lK+bvKCkxU1JiXjL1o6orKnikrIyKo90ctb3h95Vu0aZw\naofyoN9P+UoyQeO8nPPTQAEFNADSZbvL2qfgvVgWTHyYN6eO++tiGe8wITyUhtvN0iyhPTyMtT2O\n/I/4P5LBuC6BN15ZujuF9naIDRslbuNyv53TW+Zh//ff56l/UfNW5Qa/nVtqvLv6J61WXuaHPOJ4\nmxd3/RHwX8G/wkIVNfE3TYalblg6187lsxP1VQpSZbvL+lXovVgWTFMXCvx3sWKW55Kk6qP1dIdf\nzic76uuxpG4l3+T/j9l4Yya2wbTJJfUSRBDAGNHst3BUXy6qGnm/NwVzaanf/WRS4d3Ve4BG8sjH\n6tddPVxyNlO05JzN3mx3mFQKy7kgaba7rHcK23fu5Nv1DdgdeozYAD93XlKpyEvoovHNIXI2LMEI\npLo6rLGFbPCzkxkmdwqCOwxPaxuqbD87LGSAzQaGsQt+VwrVFRWc/tluRjnNd6reJYLxJVFC27ur\nbyOTWIZIYNLR7E8TSGEh1A4a8DT8AT9bQyXF+7nv/ta3eLWxkKJVQzz0xDOS3Q+y3ikUl5ez7pO7\niFJ38lTJNnaXlXHnM/69WHnZozQe6fTb+WRFXR1WTx75fgxH9RIfD9GacTqO2Px/chkg1I9gcFlB\nr/freffv2cNTjefJpQkBA+BfP5lU+O7q87mcdexPE0hqKsTFuBFP9/jtnHKhuLycx++6C3XCRh79\nz+9KukCQ9U4BIGUij02Zg5grKwNy/rwV4TTWL63yxVMxz8ePc3xgF92Ot4Db/D6PMakH29FOlt3j\n91NLjnCql/W54353NnlX1PlYsZLPcomdiv5i+86dPGy1UmDNnwoKCUQ/5cKCUWrqwvCvqpYHLqEJ\nW29yQBZxC0HWOwUAy3kXppzAPTD5m1NodPihz4BM8I15/nb3IKPjqZz+p78JiN3amOXEVuvfeHS5\nYGsYx7DC/+GP3hV1Ho1Yufz0K72EdnF5OWXPPMPPkzbhSOoOyK4eoGhjOLXi0kyYFBucZCSPEy1x\nBRn5KwUhPKB1xfM+lIV1cBkMDQVukiDiG/Nsw4gWB99vvBAQ84QhX41gXZp5HkJrJIZNi6uMOhte\np6J3pwBLp4R2cXk5uQmbuP8zm3n8tdcCYgIp+lAcNUP5MDzs93NLTYMYSUEA/H8LRf5KoSMBU1Hg\ncgk6xEpqPEbMt9yyJCJBfGOerVzeygfCPGEsjMPWuvSSidxuEPuTMBTr/H5u74r6qMHNn8JXBWxF\nLRXW7iRM6wNXQbewSE2tZgM0NgZsDkkYH6ehJ40CCQvheVm0UqiurmbVqlUUFBSwd5bVaGVlJYmJ\niWzYsIENGzbwxBNPLOj8DYOZmLb5f8UGk6aW44/9DROeBL518rzfM6alwDfm2Ur+lNMvEOYJ4+Y0\nbP1p4JKu9nsgaG3xkEQv0ZvXBOT8xeXlPPL9r6JRFwRsRS0V1qFM8relB+z8K1dCo0uLs36JKYWm\nJhpi17F8pfTr9EU7mnft2sXzzz+PXq+nrKyM++67j7S0tGljSkpK+OMf/7jgc0/0DWKb0JG3OTCr\n0f179vBPjRb+gA0bRtZSp/hm6l6Hn28meCAcfgDGFRHYwvIvdbeXwb7XTwiH2zBoWiFlY0DOv2OH\nGet5F+ecakpLL78EFtPHWA70tDkZ84STvjZwNv/ISMhP7qb+3R7Wfypg0wQfUaRBs4rbJayO6mVR\nSqGvrw+A4uJiALZv386RI0con/FC9VxjglPT4SbSNEnExGYuRsw58Zpa8mikkTzWUgcoOxJkKuZ5\n505ea13LhpXdPPh4YMwTej04JrKZqH+DsKWkFN5rmWyuE6jzC/DO4ckd81Loq7BjhxlBgIEuJ6hc\n3Hp7LBA4JVdkHKDmtJv1fj+zhIgiF8bvkKwvsy+LUgrHjh1j5cqVU9+vXr2aw4cPT1MKKpWKd999\nl/Xr13Pbbbfx4IMPkj9HzJXZbJ76urS0lIljkRQkjAGBUQq+kSCN5E0dXwqRIMW/+Q2/fWMT3/3P\n21gTGCsIUVGQFjNM87EWdHcFZg4psNUMYNAtTQd6IBAEqKoyT31/WdGZPzjYDxQWQs2bsQE5t1SM\nNzpwjKSRl3flcZWVlVQGKDzfS8DzFDZu3IjD4SA8PJxf/vKX7Nq1i1dffXXWsb5KAeAnz72FaVng\nHk6vqSXPelkpBMrUEmwm7E3YL8Zd9SZbLIaMEYTTffjfJSsdgtXNDbcu7UKJSqbopnj2/HqZ1GL4\nFdvZYXKSh4mISLjiuNLSUkpLS6e+f+yxx/wuy6K8Glu2bOHcuXNT39fV1bFt27ZpY+Lj44mJiSE8\nPJz777+fY8eO4fSJkLkSFosKkzFwTkxvJMh7G5J4TWVid0nJkokEabKNk5bqCXjMs9HowdawtBzN\ntvYYDFsC5ywNsTgKb0unZnQ5zPM9ogQaLCoKdPL4exalFBITJx1K1dXVCILAgQMH2Lp167Qx7e3t\nUz6FV155haKiIiLnWZ/e0hKDaXVgQ7SKy8vZ/SszmqhVPP7EE0tCITAxgaUtDtPywEcyhMV08PML\n40unuJvTiTCSgeFmrdSShJgDrVHDiDqWzvdFqUXxGw1NMRSskD7yCPxgPvrRj37EAw88wPj4ODt3\n7iQtLY3nn38egAceeIAXX3yR5557Do1GQ1FREU8//fS8z23pTcW0aXyxIl4VoxFsYzm4hfdQ3xzw\n6QJPezvWmMKAVEf1pbqigotHDmKcWIX5kiFZ6cXdJs7U08Rq9AWBW4xM9k8w0y3009SipuimOJ/j\nIa6GSgWFiSK1bw9w200y8MwuFo+Hhu4UVqyXh59k0UqhpKSE+vr6acceeOCBqa8ffPBBHnzwwXmf\nzxvJAFA/6uahZ9yof6IJaLhebCwkRjppO9tNdkBmCDKiiCWmKOA1VPbv2cM3Osd4lI9OHVN6SG/z\nQStpUToiI1MCNof3Pj77+3o++bkoKiuNAZsrGHiV3MEqNzdtGScsJtLnuH/xvh8ax/p44Ececg68\nPjWXYsN5u7tpoICPFcojwEV2BfFmRjIcPOz9yvzBwX4kb9kgjWdHl4xSsIYV8JkAR4lqnE6MCNiY\n/lJTckivcKQDQ/oQEDil4EV3QxaiMwKP24NKrdxi0Pv2melqGWN5ziAH300ATeBeK9PeD0NgCXCk\nU1Cw27mgWimLcFRQQJmLYJGnc9FoU+6DOQ1RxDqmDfhOwRUZSS5NdJDBGJeLCio5pFeoG8JoDM59\nEJebRLRqlK4G5ZeCFo93oAtvC6hCWKqMWppom0iTjfkwpBQukbciHGvr0ghD9NhFLH3pAVcK23fu\n5NF8A9m0IF4KSlVqcTdvf+FfnB1GsL0VNIe5LqoD+9H2oMwVSMTTPejila/cpKDxVD+6+F7Z6FOZ\niCE9+evieeM//NekXUo6GvqIivSQlBTYebx+g//6bCePqddjuNHEnQ89pDh/gm9/4b/ks9wsVvH6\nrkm7RKD/Fn1SH2LNBJsDOkvgEc8NoUtfuj27A0lD3RgFWQOAPLo/hnYKl8hbG0PjhB56e6UWZdFY\nGtXk64KTO1BcXs6HbzVwS/IGxRZ3m1lu3IAQtG5oumVO7OflEZ++GETbBLpc6bLA+7ovSjb3Ymmw\naSgIYD7WQpHdTsEbyXD60BD63AmS9Ak+xwNHXr6KRrUJRJGAL7EDjLU1GlNZWNDmM66KxvZm4Mol\nBxrfcuMCBgwIQHAc5nq9CvsS6GjqaNWwaXvgyz4bDNDX/RDdDRYGRgvIpZkULtItdFNdUaHIRUlD\nWzzryuR33oW/AAAgAElEQVTT6Et2SsEbVpYX4eDFZ4cxla8IyrxZWdDrTmC44RgxRUVBmTMgDA1h\nHckhf3Xw+hwYC2N5ZTQLRkcnCyIpDG8NLBdhtJKFFgcQHIe5fkUUh44EPhcn0IjdcejWBP51sm+f\nmUfKyniidj9f4+MU4eLr/B4GUGwodENvOvdukk83OVmajyZcHprHM8jdmhO0OdVqMCR0YzvZF7Q5\nA4LDgSWmEJMpeJFUxjw1QngBNDUFbU5/4u2G5kDLMtqJYDxoDnNdURL2Xvm8EK4VcSgV3cbA9D2Z\niXdnp8eO3adbsyJDoUdHuTBuoOAG+fgzZbdTAGg700WKyk1UWnCLXuVlDNF4zkmAiooGB1HEqjIF\ntfm3wQA2tx7EU4rsq+BdXX73s8+j8nSy++ayoDnM9VszEUdHweOZTNVVIGPDLjonUsgKTPuJD+Dd\n2emxc5p1U8eVGAo93NDMRVUOWr181ueyVArisXZ0MQBBVgp6F42NynwwpxBFLM4bg/puzsyEfncc\nQw0txN4WvHn9SXF5OdbIt1GXLOfxl14L2rzpefEMomHI3kWsQZlF+FpOtpEVBpqY3KDMt33nTore\na0UzMISVo5RSgi0qmpQWE44dZkVlNlsOd2GMDiMszCC1KFPIRz1dorqign954lcMuqxBL7CWtzyc\nxrYAlxUNML0XOnB6IsgIYnSbWj0ZWimcCVxjmoAzMYGtJxnDquB+/mo1aCM7EI+2BXVefyKeuIg2\npjto8xWXlxNmKOEkL9PP/6OKSsTRP3Oqdu9UiRyl0HBqiILU4F27+SArpeCNF79RhI84G4LeMzlv\nXTyNPfKx7V0L1noneRlDQbdEGDNHsF2QT1jdgmlrQ4hYjtEU3M1zdUUF4247T35rr2KrzIp1/ehS\nBoM6Z2JKcPwXgabhgpuCnGGpxZiGrJSCN17cjh49doCgxYsD5G1OpnE0B8aVGw1itakxGYIvv1Hv\nwSbK6nZaGKKITVMQ1FID3kXQbeMNFIsEfRHkL0TLOLpsBS8IJKTBHsFy07W1Kw4UsnqKvVEFIjp0\nXK6VHqyoAmNBODaVEU9Tc1DmCwTW1ljyVwY/5tm4MhJbuzxK/14TDgfCRG5QlYJ3EaTHPlUmJJiL\nIH8hNqnRGWX1KlEMFzqSKSiSl4NcVp+kN6rAd6cAwYsqiIuDeM0IbacUat91u7H0pmFaF/xEMkNR\nAkJ/8mQUjQIZa2yiYyyJ3OD4SoHLiyAdoqJDKx1dUehWKnhBICENg5kUbJGXyVpW0Ufensmi9fJO\nIdg9k/MSLtJ4so+se4I2pf/o7MQaVsDnVgU+s3QmxjUx2DxG6OmBlMCXnfY3Yv0Q2YlDaDTByxnw\nDa0UfbpcKy20UhxIRrsueMmScLnyge1ED2qNGn1Ros9xZdDf52FgIobsTfIqxCkrpVBcXs5g2wg/\n/GoYzxQX4Y6OCnqBtbxlg1jrnXwoaDP6EVHEQnBzFLwYjWDDAGKjIpWCYHFhyApuDSLvIugr1ss7\nhWAvghbNxATiWCa6LcFVCt6w05986k1O1Efx00rlPbGWo93kh7WhjpdXZpSslAKANmEtpsh2Hquq\nlGT+PN0EjTZZWdXmzUhDE10T69BK0F44JQXcag099W0krw/+/ItFaNJgXBfckC3vYuffn/kJjgPZ\nPHzbdu78+52KKtXQd74NtyqRpExpdjfa5dG8XB1cheQvGo71UhDfBjJLl5Xd289e04c+Qbq67Pkr\nNDS2Kmv77sV2uh99Qi9hwauFN4VKBcbEbmynlVkmxNYVh2Fl8HNUisvL+f7+V1gW1sPXHvmxohQC\nXGquE9UhWTK2bm0CYr8yC1g21I6yPF1+VZllpxTEC6Po0qVztOWtj6exR3nmDwBL/TimrODGi/ti\nzBjCdm5MsvmvmZERhNFMjGuls+3qY7uwn1JekxpHbS+6pH7J5tduTEd0LlNkfEODBQr08nteZGc+\nsgse9LkTks2fd0M6jaMxiqxFYxXCyDdId+2MOjeCqKxrBkyGo0YsxyBhWKUuZRCxXnlNasQLI2gz\npFOmiaZ0VJ5B+tpGSMqSfzWCHTvMU1nXJ2tGqUnr51el5zEYkE15DlkphdJSM/Wn+0hNhddLKyW5\nUNkrE+j2RDDc0ktMjrxCxa6GpS2O5bdLV5fdsDychtPyfzA/gMOBzb1O0sgVfdYY9kbpFPq1Ioqg\n00m3EFCFqdGGt+E4HkHSXQbJ5JgvggBVVeap70+1AC0A5lnHS4GszEdVVWY6nP9Kfcu/UlVllqSO\niVoNhohWhCPKy1Ww9qVi2pAg2fzGwnhsvcqz745am7noSiQ7WzoZ9AYV9iYJnEGLRGyLRLdcWh+c\nLr4HsUZ+tnmlIiulIBfyErtoPCmdnfSaGBnBOqYjf5N0L2XjphRso1ngUlbJA/uZAbSJ/ZI46L3o\nlkchdskrXv1KVFdU8EhZGQc7Ijnw+s8kLc2hTR3GcUF5pje5ElIKs5C3bIjGemX1zXUJTYhoMeZL\n95Eal4cjqIx4Wlolk+FaEC6MYVgmbRaxvigJ+4AyzJXemk1P7N+P2p3DY2cqJK3ZpMtyIdqUtRCR\nMyGlMAt5ugkaBWU5TMX3O8iM7CFSwpDtuDiIDRul/ZTClIKowmiQruk8gG5zBuJYJh63/MNovDWb\nJlDTQjY5NEtas0mXF4ajVVbuUUUTupKzkLcinMpTynKYWk4Okp/cDWRKKocx/iLC6T4y75ZUjAVh\na4/FcIe0CVBJugTU9NEj9JGSJ2+/jLdmUxuZpNBNJJNhlVLVbNKuiEF8WRmmN295DkvdKFFD3eTe\nkO1zXB7ISimsyvl7uro8rN4mXR2THTvM1B0Z5GxbGKWlr04dl1PI2GxYz7swZQ1JLQaG9EFs9aNs\nk1qQ+eLxIPQlcXdRvNSSoItsRzyO7JWCt2bTzGrGUtVs0q1LQRxUhlLwvkPu2Sjw+aQK7n3rQWkF\nmgVZKYUvF91NVyf8oLJUMhkEAY6f+yEAVVW+PzFLIM38sdo15C+X1gQCYMx1YbPJ3wQyRXc3Aoag\nd1ybDX1CD/baMNZ/WmpJroy3ZlORhIUrfcndtIyW8SgmXB7CNMow+9pbI9BvDn7hyvkgK6XgaFKx\nvEBqKZSJpT2OGz8hfQ0YY0EY7/9ZejnmjcOBTZUni+27Pn0Y+3np8kzmi7cUx/e+cIphTz+7t5UF\nvXClL5EZiSSr2mm/EEn2annvsrzYuxPQrwl+ifv5IC+l0BnFhz+ioFWmjLD2pZO/QfqP07g2jhf/\nS36p+3Mx3NBMv3sVmRK6YrxZro7WHv7oUPP70jcAeZssi8vLWZ0KeTdn87f77pdaHLSRnThOKkMp\nDA7CiEtD+pogNlJfANK/RXw42hFJ2p+eIbX4ouIKg0mJx+3BOpZL/o0yMB9tSsE2LKvb6ooIp3rR\nxfeiVi+TTgZhepZr05TZ0vzBwTJCvBhL6Qp52PJ1ib2ItdFslVqQeWC3gy6sGZVBf9WxUiCrkFSX\nO4d/OvMnRfaplZLWsz3EqwaJz5J+O6rfkEKTO5uJfumd3vNBOO/EkKEMWeWGOJiCbp08ciu06U4c\nFmV0rLPbJtC7rAS1zd8CkNWSboB40unkSWsHu/fulWS34A0Zc5zuZsytIf9S2Qg52Jznwnqkk/zo\nUUD67WhklIq0sF6ajw+gu80ktThXRRDAqFVezSHJGRvD4cpCt0EeFYV1uW5E+9XHyQHxzAC6qA6Q\naYc9WSmFHJpRM+lTkCrm2WvD/fX9b/C/byfx28rNksixECynhjClyKf2izGuA9uJUXS3SS3J1bG1\nRmHYLKvHQBEMW1oYIJP0THnUa9LmhXOoTv5OegD72SH0KdKVuL8asjIfaXFMfS11n1rtqjgc3fKw\nl14N6wUX+Vnyqf1iTB3AVjcstRjzQuhJwLg21HR+oThOdKKN6pRNdXndmjjEHumKQS4Ee6MLffa4\n1GLMiayWSHKIefaiXZdC05D0CU1Xwhu1cvboIKlxTt4uPQZIH7VizB3D1ijZ9PPH5UIYzcQgsQnE\na7IEOPXOAIa8MJKyY2RtshTP9KNLjAYk6P06C9p1qThGpPepzQd7kwb9Vlmtx6chK6UgJPSx+0Zp\nY569ZG/MpN0VhWvcgyZcJsuhGfhGrXSOwDmZRK0Y81S8fVBWt9bstLZO5iiYpJXVV4F/Ufs2Hy6L\nZ8deeZstxYZRdOny2Z1mbsiiZ0KFc8RNZLR8X7gA9q4Y9Kvka4WQ1ZP7ufJ1fO2/pd0heAlPTSBd\n1UJrfTTaInlEWCiBHTvMnDo4gGBXU1p6YOq41LuX2Rg418QwG8iQ3j8/hX6ZE9EqTwekLw5x0rkr\nF9QxUeSo7TSdiib/Rhl9oDMYG4OO4ThyCuXhoJ8NWSkFrcTNOmaSG30Rx4nIkFJYAIIApxufBuRf\nJkQ40YMhrguVSj6hgTq9iqMX5L3SBRDbI7jpBnmVadDGdCGelLdSaGqCLE0nGqM8zG6zIau7z/y7\nlygtNbNjh1lqUQDQJvbjONMntRghAoRQP4IhdUBqMaahK4hE7JTX4mg2xJ54dKvlZcPXJQ/gqJdv\nVA9MJq7p3QLodFKLMiey2ikcP/vPl74ySynGFNoMJ00W+WyRQ/gXodGNMUdeUSC6tfHY++RfqkEc\nTpNNjoIX7bIxRKu8w1Lt50bQI0DqjVKLMieyUgpyQ5sLokO+tZgMBmi2/CPDnUMU3Jg27XiIq2Nr\nDsdwi6w2y2g3pCOOZuDxIJtwz5l4hoZxuHPQFslrR6PTqzhxXl6f50zEugF0Sf3y/XAJKYU5qa6o\n4FDt29S3lfJIWRnbd+6UPCJqJvv2mfnmR+pIb6vlHys/K7U4ikO4GM9Nq+UVBRK/PItoBuhq05Ce\nJc/Hs6umhVh1CrFx0pcb90VriuLld+Rdodd+wclWiVu/Xg153nUS4+1B+y0xjZ18mif27+dhqxVA\ndorB7lCzxSSf3Yw35r7x/R40kWp0a6VrmHQ1hME0DBtkFkQQHo5O04p4wkl6eZbU0syKeKILbYwH\nkJf5SLc2AbFP3rlFdoeKTxukluLKyFIp9HVflHR+bw/aJkZxXErOedJqlawe05UQOqLRf1Q+qyNv\n2Omej7/BeXs0P678kLQCzcXQELYJHYb18rPf6+K6EU+r2SRXpVA/hC5ZXpFHANqN6YjOBFmb3uzt\nUei3y+d5nQ1ZGeBKKKWEUtwXT0gqh7cHbRatXCSVMSadV1LVY7oS9r4kDOvkl96vNUXi6JDvzd9b\n14xLFU5qmvzeHvq0QcTz8kkMm4loHUe3zCm1GB8gcfkyVB43fR3ykw3A7QZHXwK6tfJ7Xn1ZtFKo\nrq5m1apVFBQUsHfv3lnHfPvb3yYvL49NmzZx7ty5q55TNSFt1UpvD9ow3GTSRguTzbWlrsc0k6Eh\nGBiPIqNQwg4xc6BdHU9Tn7xCFn2xn+jCENMhyxWlLsuFaJNv5VaxSYVOL78Lp9KEoQ1vw3GiQ2pR\nZqW9HRLChohZLp+8mNlYtFLYtWsXzz//PG+88QY//vGP6erqmvbzo0ePcvDgQY4fP843v/lNvvnN\nb855rioqqaKS3rHsxYq1KLbv3MnD+fnAZJE+B1q+k5/PHRLXY5qJaPegQ0Stl18ijHZDOo7RdKnF\nmBPbmSEMKf1SizErOmMYYqssLbvAZIdEXYE8d4GTpjf5VAz2xW4HvUqUdY4CLFIp9PVNJnYVFxej\n1+vZvn07R44cmTbmyJEj3HvvvaSkpHDfffdRX19/1fMm5+YsRqxFU1xeTtkzz7C7rIy+yE7+X+5N\n3PnMM/LzJ9QNolc3QWKi1KJ8gPS1y+h3xzHSJ8/WnEKDC2OW/MyBALoV0di75LvLEvuS0K6RpwlE\nmzKE47w8mybZGyfQj1sgR9r329VY1HLk2LFjrFy5cur71atXc/jwYcp9Xp5Hjx7li1/84tT36enp\nWK1W8i+txKdjBqCnv5bKykpKS0sXI96iKC4vp7i8nJEb3yE97g6Ky2+XTJa5sJ/uw5AgrVN+LtQR\nGnLCmml6X03BbfLZyXgry1qO9RAVG0ZN6WuAvGoz6YqSEAdlFhXlxeNBdGag2yjPcuO6bPma3uxn\n+tHHdkHEtTvpKysrqays9J9QsxDwParH48HjmR4yqZrTkGsGwGAwS6oQfNHq1TTUyM9+CiCcG0Gf\nLs++BdUVFUyQyBN//Su0+XbZ5HlM64c8DFaZVJb1JXN9Jt2uBEZH5decy9nRR5cnlawV8os+AtAZ\nwjhwWJ6mN/H8CAVpi3teS0tLp70bH3vssUVK9UEWZT7asmXLNMdxXV0d27ZtmzZm69atnD17dur7\nzs5O8vLyFjNtUNEuj6apS2ZP5iXsggeDDFtJevM8bpkQuM3q5In9+0N9txdAWPYycmimySq/KJrm\n99vIDu8kTB4N1z6AdkUM4kV5JSR6sdvc6HPk97zOZFFKIfGSLbu6uhpBEDhw4ABbt26dNmbr1q28\n9NJLXLx4kf/+7/9m1apVc56vpMRMSYlZVolO2sJkHP3ys9kDCK2R6PPlV+vFm+ehxUETk5EWT1qt\nHJgjOi3EDNRq9FHtiCe6rj42yDhqetDFdUstxpy0jTVQ0xOHuXSyEoGcFiL21gj0Jvk9rzNZ9D7r\nRz/6EQ888ADj4+Ps3LmTtLQ0nn/+eQAeeOABbrjhBm6++WY2b95MSkoKL7zwwpznqqw0L1Ycv6Pd\nlIHDGYMcM2Ls3QkYZNhK0pvnkUsTtRROHZdjnodc0SX0IZ5JBOTllBTPD6NNkddz4KW6ooJTv/o+\nw57PsrvqIGG4ZVWJwN4dj361/J7XmSxaKZSUlHwgouiBBx6Y9v1TTz3FU089tdipJCHDEEMfYYw6\nOonSyadO++goXHTGklUov7BPb56HFgd/4qNTx+WW5yFndBkjiA3yMR95HfTiqR4mUFMqQwf9/j17\n+GfhPL+kh3aWkU2rbCoR9PaCe8JD8splksoxH+TpkZERajVkR3TRdPwiJhkpBYcDctUthBnlF/O8\nfedOHrZaudfqmCoTIoe+2zD5Euts/AYd7R7W3Jgw7bic0OW6OSrKp6bVNAc9IMrQQe/doXpzi7Jp\nBeSxQ7XbQa9pRmXQSy3KVQkphXmgje/FUduL6ZNSS3IZweJC77ZB9s1Si/IBvKuyF576dxre0bK7\nTB59t2FyVfsvH3+HdtHJ05UfllqcOdHlh/O72tDOaiF4d6g6RER0bOUoII8dql3woHdZQbft6oMl\nRla1j+SKNm2EpgvyCv201/RhiO6AcHk6rorLy/lh1e9REck//vx/ZKEQvNjsagw6+azCZ0O3Kg6x\nV94VP+WGtxKBd6cAyKYSgf3cCHq1Q5aJpjMJ7RTmgTbHjUNwSS3GNISzQ+hl1kpyJiq1ityIDppO\njLEyRz4Pg9AeTfl2eX2eM9GuT0UcTpNjfINs8S48Hv/LWg4Pr6bnZvnsUO1nB9GnDCriwwwphSvg\nda61nB9kqHeM/aXHAXk41+zWCW7PlmcJCV9y43px1DhZeZfUklzG1puMsUjeO4X4lTlEM0JXVxTp\n8oslkC3F5eX89ZfT+c0LLh5/7TWpxZlCtLrYnCX/5xVCSuGKzHSutcjIuSY0a9Bvk2kGkQ/a1GEc\n5+UTReN2g310GYYtMr/1U1LQU4NYH0F6uvRhjAYDDHZ8i3PnVWy+JWbacbmhW5eM+Kx87jkAe5Ma\n3QZlWOtl/mSEmAt7VyyGldI70K6GNmsCh4xq0bQ5xkmgn9h8+ZUbn4ZKhS62C/FUCpuKpVcK+/aZ\n+cP/Pcwv9qn4Y+XWq/+ChGi3ZOJwDssqt8jeGYt+pbzal86FMlRXiGmMj0PbUDw5hfJqhzgbWqMG\nh4zKQNuOdWGMaAaNfGSaC13SAGL9oNRiTGFvcKLLkD6882pkFsTT40nC2dQptSjAZE5Rz2gUWWvk\n/7xCSCkokqYmyNJ0Ep4nn+qjc6FdEYOjWz61aGyn+zDKtLLsTHSZY4hW+TjE7XYV+ly31GJcFbUa\nciI6aTraIrUoAIgi5Ia3ozbIL6doNuS/XArxAQSByRwF3dx1pOTAjh1m6t53crbXTWnpn6aOS+mo\nt9U7MabLs97+THR6OHJWPus2sT2CbTfJR0ldCW1CH+KpbvL/QmpJLiWueQTQyz9xDUJK4YpMOtHM\nAJw70k9ykptlK5Ikd67Zzw1jUNkh+SZpBbkKggDHz3wfgKoq35+YJZBmEkGArTKsLDsbuoIoxCr5\n2KHtvYno18jLgTsXuoxRHOfkofztVhf6cStkyT9xDUJK4Yr4rmYfu7USlwseryyVTB4vQu0g+qQ+\n2TjRlIStLYrP3qiM2163NgGxP0lqMaawD6ej3zgitRjzQqtVyabZjv3MAPqEbkX4sSDkU5g3+QUq\nLE3yiPaxNzgxLJO/w0+O2LoTMcqwsuxsZK1fRs94HDIo3cNwv4t+dxwZRTKP2rqEbnmkbAIc7A1O\n9Apw0HsJKYV5YiqMwXJRHqs2QVSj18s7+UqOuFzQMpqCbqMyssHUeu1ksx2H9J+1+H4n2rAW1JHy\nLKsyE+3aJMQeefS5FkXQy7ysii8hpTBPTFtTaRjKxiODz9beEY1heaTUYigOhwOW0U5EvvyjtgCI\ni0MX1oxY1y+1JIinuyf7CysE3aZ0xNEMmJDehGRvi0Rnkmf70tmQx/5KAaQWZoN7lO7OCVIzpMsk\nnpiA5v54tGvlU0toLryOeseZPsacHvI3JfkcDz62umGMKgGS5VdZdi50cd2INX3wCWk/b/vZYfQp\n8q615Ys2PwIRHR5HE1KWq56YgJb+OLRrEq4+WCaElMI8UUVHYdKcw3I0m9SPSddXoaUF0jS9RObn\nSibDfPE66n/3jff49a/h95U3SiqP7WQvxvguxTjoqysqaHRacPxYxHLoFbbv3ClZcTd7owu9Qmr3\nwGQxUpVaRd8ZB0kSKoWWFkgN7yfSpJDdKSHz0YIwJXRgOd4nqQyCAHqVCDplJMIAGAoTEHql98fY\nzo5gTFPGare6ooLXd+3iSyPnyOuI5on9+3l91y7Jeg7bmzTo9Mp5XahUoI3rwXFSWpOX3a6851U5\nn7IMMGUMYKmTNk7bbnNjGG+AHHn17r0Shi1pCKPSR60IjW4MOeNSizEv9u/Zw5NW61TDGIAnrVYO\n7N0riTz2rhj0K+QRfTdfdOkjiHXSLgLsggf9uCWkFJYqJv0YFqu0pgfhzCD66E6IVI6jOW1lOk5P\nBH1t0sa421oiMObLv7IsXG4t6asUQLrWkuJAMvoi+fuxfNHmeHDYpFsEVFdU8O/f/TlNboFH7r1X\nsl3eQgkphQVgWqnB0iJtHR/7+REM6fIpkjYfVGFqDOHN2I+1SyqH7WICxjXyyRC+EjNbS3qD3qRo\nLelyQetYKrkb5dOjfD7oTBGIzdK4Tb3mv+W2CT7nsUlu/lsIIaWwAEzr4rD0SFvpULB5FFGUbCaG\n+G6EU9L5Y0ZGoNsZS3ZhmmQyLARva8k4hohhmC7SJGst2WJzkk4nEdplQZ97MejWxktWjNFr/rOj\nR48dkNb8txBC0UcLYFnRMkZc4fT1Sddq1d4agWGT8j42Q/ogwjnp5rfbQRvWQphRGbZdb5TR7r17\niXhd5NtbP82Xdn9Ukugj+/td6CLbIUz+EW++aAuTJnMVRkYgOrg7RK/5T0Q3pRRAOvPfQgjtFBaA\nyqDHpLJitUozv9sNYk88utXyyNRcCMbccQSbdJl/Nqsbo8sCucp5sRWXl/P4a69xQ+xFyr/wHenC\nUWv70Sf0SDL3YtAZwnCEGSZXBEHGFRmJB7CjR4c4dVwK899CCSmFhZCSggkLltphSaZvb4dEzRAx\npmxJ5l8MhnwNQot0WZ222gGMkc1BXzH6A13yoKRZzeKFUfTp0tzziyE3F5onMnFbGoM+9/adO/l7\nw2YiGCOByQgoqcx/C0V5dggpUakwJXZhOdEPXw6+rVIQQB/WpKjwNi+GNbEIv5Yuq9NWN4xBQRm5\nvuiyx7E3SBdFY7d7WJ8rfbmIhRIZCclRI7TXtJP1seDOXVxeznlLApF/K2K+8UYmEhK486GHJNvt\nLYSQUlggpqxB3q2X5gG128HgsoDuQ5LMvxgMm1IRhqQrRCdYJ9iUrYxeADPRGcM4ckq6UGh7ayQf\n36zMV4U2dRixboAsCeZOTdnI1rC3MR86pJgsegiZjxZMvsGNxSZNrLtwwYl+wgZpyoig8SW1MJsx\nt4a+Xmn8CramcIx5ynkwfdGvikHslM7sZe9JQLdKeX4sAF32BKJFmvIc9hNdk/WiFKQQIKQUFoxp\nVTiWNmkeEPvZYQyp/Yq7yQBUCfEY1CLCqV5J5rd1xmFcpZyEP19061MQB5KDPm91RQUPby/DOpTC\nL194UhEx9jPR5mlwNEvzvNjPDqPPUZ7ZLaQUFkjO2mR6RqIYCnKnv+qKCg78+SyHhup5pKxMkQ+o\nIbYT4WTwo1j6+8E5riZ9lTL6KMwkc2NO0JvteJOv/u7A+8Th5AdH31RM8pUvutVxiF3S5CrYBQ/6\nAuWUzPYSUgoLRG3QkRfRHNSwVO8DGtGfzHeGzigqO9IXQ8oAQl3w++babGCIaEGlV56DHkCdk0UO\nLTRZgqcVlJx85Yt2RSwOVzb0BH8xYu+IQl+onJLZXkJKYaHodJg8DVgswZty/549PLEEHlBDthPB\n6gr6vDYbGN1W0CqnfPE01Gp00R2I73cGbUpv8pXvPQfKSL7yRadXIUbkT94EQUYcSEa/TQoX9+II\nKYWFkpuLaawOy4Xg2Qo1TiddpBHFKPFcrnuktAfUYFQjNAe/naOtwYVxvAEypa/Ueq3oEvsRa4Pn\nj/HWXlJi8pUvWi043DlBVwpDA26GJyJJ35oX1Hn9QUgpLJTwcEzxHVhqgpfM44qMRMCAAWHacaU9\noIZV0QidsUGf13ZmCENiD4Qpo0LqbOgyndjPBy+k1lt7yXenoJTkK18yM6HHFY+zQbz6YD9iP9KG\nNsS0zfsAACAASURBVKwVVUJ8UOf1B8oMPpYYU84IvzsfvJ3C9p07+f7pP6Nvv7yN/05+Pncq7AE1\nrEtEGEgN+ryCZZxbM6Ut271YdHo1R4JYJsSbZPXX96ooSm5kd1GZYpKvfFGrISdpiKYzveQHcV77\nkTb0CRMQ1Fn9Q0gpXAOmPDeW94JnBikuL+c3JRmcePFdzLeUMBEVpcgHNLUwm3F3GL29kBTERmw2\nMQxjoXR1l/yBfkUUvzsc3JDa4vJyYsPO863vfpktX9sU1Ln9iTbThdjgDK5SqO1Dvyz4plJ/EFIK\n14B2ZSwdr0UyOgrBsuCEjWVyn1HFrsrK4EwYAFQ52Rg8F7Bbl5O0KTgPjMcDto5YjCuVmaPgRVeU\nhNgX/NK89uE09DcqL4LGF50xDMf7wV0U2C3j6I3KC0eFkE/hmtAYtehju4LquxKsExjyFP5xhYdj\niGpFOBG88MCuLohQjZNYoKwGMTPRbslEHM3AE8R321BLH0OeGNILleugB9CuuJQR7g5eHxJ7swb9\nquD7z/yBwt8yEqHTYYoQgxqWam+NQL9GmaUGvFRXVNDutvLcY/uCloBns4ExskWRRQR9iTNlTjbb\ncQTPN2J/x4Eush2VWnkZ9L7oTBE4NHnQ1ha0Oe09Ceg3Ka8cDYSUwrWh02GaOB80peDxgNCbhGGL\nMjNy4XIC3mfHLrCqOTxoCXg2GxixKTdHwYtajS6iHfFY8F5s4vud6JOk65bnL7RaECNNwQtLHRnB\n7sxEv1WZO6yQUrgW9HpMg6exWIKzl+/tBZV7gqQNyot59uLNkDUgIGAAAp+AV11RwfO7f07rQA2P\n/N3fKS4DfCa6hF7E08EzvdnPDqHPkqaYnL/YscOM2WymevAVSr/6AqWlZkpLzezYYQ7YnONnG+gg\ngxy9Ml22ypRaahITMWlsvFrvAgLvMBUs4xg8NshbEfC5AoU3Q9ZXKUDgEvC8O5MC67cowsaDb73F\nw5c6cCktasuLLmMUe33wnAr2xgn0q5T9ihAEOH7cDEDVOWCqJaw5YHM2HW4iKzoTjUaZfqzQTuEa\nyc9xYmkIjuPKfrQDfXTHZNcQheLNkJ2pFAKVgOfdmQgYJs1HKLM0iC96nRtRCKKztC1Cka1fpcZ+\n8iK61ODX+PIXIaVwjRhMGpraNIwFYXctnOrBkK7cmwwuZ8im0I0LDb0kBjRD1rszsWGcUgqgvNIg\nvuhMkYhtQYp993iw9yWh36zM1a6U2OtH0CuwU52XkFK4RiIM2eQkDgalJ7j9vBO9TtnJV8Xl5ZQ9\n8wzfLSsjBoF/2HIvdz7zTMBMOa7ISNyoENFNKw+itNIgvugKExB7glQ2obMT0aNFXxT83AilY7eD\nvkC5u/qQUrhWdDpMcW1BiUASHGoMK5T7MvNSXF7O46+9xg3J/Xz0rl0Bte1v37mTXfqbSKaHaCZ3\nB0qs3eOLblMG4khwItDGzzbQ7skgJyco0y0dPB7sndHo1wUxZd/PKNuLJCV6PSaNHYsl8M5fe1cs\n+g3B77wVKAzZToTTgQ11LC4vp6YuGc237Zg3bmYiNVWRpUF8yVy3jB73OKM9I0QlB7Y9Z/OxFpZF\nDxAeHvxaVf7EYAAw09cH1tODbLwhDKKiLx0PAJ2d2N1aPq3gnKJrVgoDAwN84Qtf4OTJk2zcuJEX\nXniBuLgPXgiDwUBCQgJhYWGEh4dz9OjRRQksG3Q6TOPHsVi2B3wqYSgdw03SdI8KBIZ8DULDeMDn\nSUjdQjEvYn7nHUU76b2oNWpyNO00HR3HVBbYSj72Uz3o0oYAZSuFffvMwGT3veyUEd587BBhZbcH\nbsLz57Fr8tEblJvwd83mo+eeew6dTkdDQwO5ubn85Cc/mXWcSqWisrKSkydPLh2FAJNKYeBkwM1H\n/S2DOD0RpBZmB3aiIGIoSkBoCbzD1PZ+N4akviWhELzo4nsQT14M+Dz286OK92P5kpAAGdGDWI52\nB3Qe97kLOMaWKTqB/pqVwtGjR7n//vuJjIzkK1/5CkeOHJlzrCeYBVuCRXb2pFIIcFiq/aCIIbIV\nVdjScf8YtmUi9Abe5mqrG8aoD14IZzDQpQ5jPxv4SDTRoUK/fOkoU4B12oucPhHYqKCOU80kRI8T\no+CN/TWbj44dO8bKlSsBWLly5Zy7AJVKxW233YbRaOQrX/kKd99995znNJvNU1+XlpZSWlp6reIF\nnrAw8rJHsdvB5QJNgLwz9ve70Ccp1z45G4atyxBcUZN9c5MD5ysR7PDFWxT8dM6CPteF2BjglqZu\nN/aLsWxWsLN0NtatHOP0uSg+HcA57LUD6DOdQGCK4VVWVlIZ4ErJV3yV3XHHHbTNUkTqySefnPfq\n/9ChQ2RlZVFfX89dd93FDTfcQOYcbRF9lYISiNIvI2N0DIcjCqMxMHMIdUMYcpRZgncuUlJVTKjD\n6T16hqSyrQGbx9YRi3GLMouSzYUuP5zDbwVYKTQ1Ydfk8xfLlR/x5su6LRH8/O3ARm/ZrS50qwPX\n4W/mYvmxxx7z+xxXtEkcOHCA2traD/y7++672bJlC/X19QDU19ezZcuWWc+RlTXZuHrVqlXcfffd\nvPLKK37+EyREr8eU2hNQv4Ld5kafr8xmHXOhUoEhoRvhUHPA5hgfh7bRJLS3GAI2hxT8//bePC7K\nqv//f83GzDAMOwz7zMCwLwOCIiqKKy64ZqWlZlmf28o26y5NLWzz12KmlnZX2vLN+y7r4wdLUdQM\nl6RUVNRcQRYXRGQRZFPg9fuDuG7JzG1QGa/n4zEPhus651xnruuc633O+/0+7+MXbo+isnYOyXzk\nCAqlxg6tF/8rzL2dkVPVTqM3AGhsRGGJCvrQjj07vWFFdXx8PJYuXYq6ujosXboUXbt2vSxNbW0t\nqqurAQClpaXIyMjAwIEDb7y2dxCbV6/GzF9+wbnjmZj3zIJ2C7ZWcFoJQ2TH2+f1ahg969vVLbXo\naAM8WQxFeFC7XeN24NfJFUU1zu16DR45iqILHtDr2/UytxxDZzeca9aivOh8+1wgPx+FtiEdfhB3\nw5rwxx9/HOPGjUNwcDA6deqEt99+GwBw6tQpPPbYY1i9ejVOnz6NUaNGAQBcXFzw/PPPw7ejhzDG\nf4OtvZmfD3vsxpmD7sh45hkAFg62RqKwygn6LjrLlXmHYAiQoeBI+8UIyd9yAkbbs4CN9bzZJk5M\nRV4ekNvUjKSeaNmAGC2++K2ul5agNOcUNMpGaDTWpbaUyiSIUh9FzgZn9H6kHex0hw+jUBWMfh28\nyd2wUNBqtVi5cuVlx728vLD6j1Gzv78/9uzZc+O1u0NpDbYGACbkYhu6IS0vD7MWLrSsUCgtRUGz\nHwxm6ws1YIiyR8Gm9ls7mb/jLIzuHTte1J8pKAC2bk0FAGzacumZVIuUP3FiKgoKgOrd+WhofgtJ\nSS3Px9JC53ZidjuFnCwlej/SDoUfOYLC5pgOP8MSVzTfAK3B1oAWoZALEwDLB1urzTmKasTB3Qpj\nkhlinLC5xh04fx74i0WPN0v+wToYOvACottBQQGwaVOq8P+mTa3fUi9P3EExG6uRtbed2sXhwyis\nce3wQsF6nN9vIY2XLIbyxzEcgz+aIbF4sLXC34rhpy1v1RJYFQZ/GQpsgoBDh66e+AbIL5TCGNGx\nDX4ilscc1YycfPt2Kbvy95Nolsja08v6lmCFr5v2pzUMNADYoQYOOIen9d0sHmytMOcc9O63bk/e\nW4nBABQ0+QB/eLBZmoIyLYzxVjjFErkpIrpqcajcHRfbIcpK0eE66H2bIengE1RRfXQDtNoNZi1c\nCNnhw1AUH0fg5HfRc0iCRa9TcPRi+wXuus04OQHNUjkqdx2D43gLF15Xh/x6Txh7dOy4PSKWRxPq\nB19ZMQ4fNiAiwoIFV1X94RTSsT2PAFEo3DA9hwxpEQ7r16Nw/FloXAdb/BqFJ2TQW9mK3FYkEsCg\nq0fB7gpEW7js2t2HcU4SAk+/jt9BL6U14ufJo2dw/JQKHg7HQKkUann7uqhaFUYjzM0bkbNHj4gI\nCw7pjxxBoVss9PoOPk2AKBRuni5dYCr/ALlHkgFYcCVjUxMKKhyQYkUhs/+MwV+KgsMXLC4UCrYc\nh5+dO6RS6wkiCLR4AG1evRrfT34d32IlCs61RAaYURCAzatX37Tnm8EAnNn7D5RecER4nLrNcavB\n0RFm+e/I+W0gHhxnwQHX4cMotAu3igV/olC4WRwcYNJV47vscwAsOGIrKkKh3N/qgpJdiiHMFvlb\nNEB9PWBBI33+zjIYdbUWK+9OYt2CBZh/4jcsgR2qoIU9qvGmhdyhv/giFc/4roD3qHC8+Fn77xNy\nuzB7ncXCHRY2Khw5gkLpaHTq4J5HgGhotgimOAfkHrZw9MUjR1AAg3WN0v6EIUCGAvso4OhRi5ab\nf7gBRv+OP43/K+QNDZAACECe4AoNWM4d+tczRnTtb30r6C/FHFSHnEMWXph3+DAKL3h2eHdUQJwp\nWISAvkbkrtKChMU8Dxp+z0VZYx/8ETrKqmhdJHX2LHC6pho5Y7IAN3eLLZLKL5LDMMA6X2yt7tCB\nOIpcmNAJuwFYZu/p+vJa7L8QhLjB1hUI78/4hDvgwiagpATQWSpYwOHDKKxwEIWCSAuOfTpB3VyD\nkhIVrhAA9rop2nUWPk41kMmsK3wx8BeLpA60fku9PPH1UluL/GoXxMdap+fRgKefxoy8PJjycnEU\ngQBa9p4eaAF36OwfTyFUVQ9brSXdcu48JP5GmB2LkJMTjAGW2DiRRP2RIlQ0yq1iECeqjyxBSAhM\nkjyL7upUeLAWeu/23RDEKjl0CAU2QTCa2i988e1k6Xc7kG47CJ8pD+L/k1TA4DQSa2wHYel3O266\n7KyNtUjwLLRALe9wjEZEK/YjJ8dC5Z08iSJ1MHx8JFax0FScKVgCqRQm92rk/lSAHsMsY2wuKAAM\nfazLpfKW8PvvyG8a2W77W9xuCgqAPfsWCv+frwAKKwAH59SbLjsr2wb3hLVf5No7BqMR5vrPsSHn\nnpsuauLEVBTsqUBFfQDKm1LRutVBR44XJQoFC2EKliFvZ4VlCqurQ+E5B+jD2jluvhVSmZ2HRokC\nLtapPWo3SCDrmA7vjbOCoe7VMBhgrsjE3BwCuDkjYEEBsClnvvC/NcSLugtawK3B1MUZuUcttBd1\nXh4KNOEw+FunCqQ9yd9VAaNnfYcPNXCrKSoCmhoJQ1crUIpfDZUKYS4lyMslLoltKfIH4kzBQpj6\nG5H73sWWLb8UN6b2afXKwdmz2FOrxr55u/H55x17KvpXtK7MBYCmJiBrazO6hZbDYLj5rTPzD1+A\nMUIUptfLr78CCZJfIQmOud1VuSUo/b0RUFyLAwfsEHN3/ORrRhQKFsIUo8VRBIJ790ES2+mGyviz\nV85/DWGplyfuwPxZwCX65mNG/K9I/nzszRVcU4P8cgcYwq0zNEh7kpXZgARkAR6DbndVbg3+/jCz\nBDk5olD4M6JQsBDOzgDkcpT/tAsuNygU7laSO1dg7a+OSL7Zgg4eRL5DNEz+1qsVvXSWdTbvHIrP\nyBCZYHfTixyztlzEu/pTlltoc6djNMJ8Ohd79gTcXDlstkx97iBEoWAhJBLA5FmD3I3H4fLi7a5N\nx2LgcBtMWGOBsAq//458ZRT6W6nnEdB2llW05nd0GabDzz+73tS7vL4e2J+rQlxKO8STvlMxGmHe\nloP0nJsbihicqpAnnwy5T9s9rTtyJAJRKFgQU6gNcrOrEH+7K9LB6DRCj9KJ9SgqaIaf4SZG+b//\njoLGwVbrjvpnfHv5o6nxPE4WXISP8cbdl7OzgVDnEtiGGSxXuTsdoxHm6v9DztEXbyoSwRcTeiL8\npzh8sdwPnTtbtoq3C+udZ98GTJ3skVvlDpw5c7ur0qGQOmjRX/0LMv5zc4v/uP93FJxzumuEgsRW\njVjbg8hOL7mpcrKygAS7fUBgoIVq1gEwGqE7kQ0bG+DEiRsv5vhvp1DS6IJOVqQxFoWCBTEFSpDr\n3LnFleMGMBiAXp2mQi2Zhri4VPTq1fLpyFPRa2VgwBFkrL459cWZfSVQ20qgtc6wR39JrPdpZG+q\nvqkysrKArhe3AkFBFqpVB8DHBzh7FubIppta2bxuqy36RZyGzIoc3kT1kQUxmYB/yYKBrEXAsGHX\nnf+LL1JxdtFyBDybgl9/tbWqhnY1BnStxjPLnNDYCMivs1VOnJiKgrwmVJ30wQW7161iVem1EhfZ\ngM9ybrwbk0BWFvFu1Q9A4FQL1uwORyYDfHxg1p9DTo4zUlJurJiMw3oMerTRsnW7zYhCwYKYTEBu\nta5l6HWD/LqpAfG+xZDJbtIrooPh0dkXhhUl+O03Pbp3v768BQXApq2vt/xTbR2rSq+V2ERbPJ7u\ndsN68ePHgaaLzTCqiv9wobs72Lx6NdZVViJ33Ts4dGEQEqPPX/d+FE1NwIbyTpg3xrqEgqg+siA6\nHVDXqEDlzlyg8cYayra9GnSLts4NYv6WsDAkqzYhI+N2V6Rj4dvDgKaLzTh16sbyZ2UBCSEVkATd\nPfaEzatXI+OZZ/BGeTleO74KTSUeyHjmGWxevfq6ytmx4Ry8Jafgbb75RZd3EqJQsCASCWAySZDn\n1hXYt++Gyth23A/d+ljvbmtXJDQUyZXLsXathUKF3CVIQkMQy53I3nFjEXWzsoAEXf5dZU9Yt2AB\n3szLAwAE4zCOwxcv5xVj/cKFV8nZlozvziHZfbfVre0QhYKFMZmAXEPfG1IhXWxoRnZNMOKHWWhT\nho6Eiwu6a/bg8CHi7NnbXZkOhEaDWO0R7NxwY9FNs7KABJvsu0ooyC8JeKRAI0JwCPsRcd2712Vk\nqpAcfhOuS3coolCwMCYTkOsYd0MeSDkbSmGQn4CDr3071OzOxyY8EL3Cy7Bhw+2uScciNqAS2b9e\nv+dWfT2wfz8Qe37TXeWO2rp7XStm5CAH5uvava6iAth33AGJ3axvRbMoFCyMyQTk0nRDM4Vta86h\nm6tl9yvuUISGItnnd6xde33ZDN4X4YYpCA7+rxvv3eLKu3n1avxcsgab9kgxY0DydenFs7OBkBBA\nc2zfXTVTGPD005gR8F9HDjNy8C/7nuh/HbvX/fQT0MPpd6giTFdP3MEQvY8sjMkEfFXu2LKArbQU\ncHO75rzbfpViUNBdrDsJC8PAbT/hzXVJ1+VN869/DIPu2zBs2qS13J67HYBWg+mCk3n4BsAT6/dj\n0bFnAOCaPGmysoCErgSW5rU03LuE1nsza+FCyIqKkHeqEBe9X0HPIdfufZWRASRjHRBsfQEExZmC\nhTGZgNxcCdCly3WrkLYdcUG3rnfxFpyhoQg4uRm2ttdnp9+UVoEw59N3lUAA/mswlQCIRTayEYs3\n8/Ku2WD6669AQlAZ4OICaO6uDZ16DhmC19euReqWLZjftAsFx53QfI2aIBLIyCCSy/9jlWo3UShY\nGC+vFn1jTWzP6xIKx48DdQ1SmBLc27F2dzhhYcDBg0hOxnWpkH78WYNhsTfok9mBudRg2ioUAFyT\nwbRl0RqQ4HTorlIdXYaLC5yj/eCgrG/Zy+QaOHQIQGMTQnQVgK31hWkXhYKFkUoBf38gz6/3ddkV\nsrKAboodkIRYIFpoR8XDA7h4EQO7VV3zegUS+OFQ0I0sIO/wXGowvVQoXIvB9PhxoK62AUveegyp\nhw5hZvL12SOsipQUmDV51xzuIiMDSI4qttq+KgqFdsBkAnLtzMCOHde0iG3z6tV474UVqKnZgJlP\nPXX3dk6JBAgNRW/Xfdi+HTh//upZ9u4F5BfrEDpQf/XEVsalBtNYZGMn4jDdP+CaDKZLP9oF1wtb\n8ObhQ0gtLsYb69bd0AIuq2DIEJgrMpGTc21rZDIygGTPHCDYOoWCaGi2IK3baebltbj6LWhKBLpO\ngyHC7ooxeFqNhTj+b7yKeUjcsBUz8vMBXJux0OoIC4NdwX507twdmZm4akyaH5bXYZh0FST6J25J\n9e4kLjWYSk+eQtXvCsS9+jF6Dul31bzp3xTikdrf2hx7My8PsxYuvPvaXXg4zDaL8Z8t1QD+3h28\nvh7YuhX4970/W63aTRQKFuTP22keA4BsAHapf5keaDEWzsg7hQ8QjjjsBHAXd06gxa5w4ACSk1tG\nZFcVCisa8Y7/7y16u7uQnkOGtLSTc+fwq8sOKOx6XVO+UxXBSMAHlx2/3gVcVoFEAvMAHaatubql\necsWIDIScCrcA9w/4BZU7tZzd/akOwh5QwN2Ig4R2A81/tsh78rOCQChoYKx+Wp2hZMngbwiBXrE\n30U7hl0JBwfEuhYhe1XxVZPW1wNnav2FQcilXM8CLmvC9EAXnDlng6qqv0+XkQEkJwM4fNhq1Uei\nULjNNCqV2IZu6IZtbY7frZ2zdaZgNgPV1cCxY1dOumoVMMh3PxSRIbeufncwcZ0lyN7WcNV0u3YB\nRrcyvGXT1t71csC12SOsEVnfJIRLDmDvlr8PF5KRASQn1gJlZYCf3y2q3a1FFAq3gotXHskOeOwx\nLEX3NkLhbu6cm/fuxcziYszumQg3yXp8OPfKCxZ+/BEYplgLhIffwhreucQO9UJ2/tUXYGX90oz+\nDZuQPH06ZiUnI7VXL8xKTsbA+fPvTpUlAKhUMPuUIee7I1dMcvIkUFR4AT/MGIBUmQwzBw2ySsO8\naFO4BRQXXLjiucScvTgjfx5bu3+L39ELTSoVBj711F3ZOTevXo2M557Dm83NwNatCMLnmP3Fwxgx\nuOiy+1FTA2zeDCyz/X9A+ITbVOM7C79Rcbg4GThVeBFe+ivv2Zz13XGMdD2Knq++ip5WFuHzZjB3\nt0PO1ivrjxa+mwOv5pN469dfWg6sW4cZf0Rbtab+KgoFC9ISaye1zbH6oyew74w7Pv8cePjhP2U4\nfhxHF66Fg+4VzM/8+tZU8g7m0pDGANAf6/F47WKsnf/gZZ3ugzk74SKXYN7ZPDQ+9hgGPP20VXXM\nG0Hi6oJYzS/Y+Z0rhr3w1/puXriIrF1KvP3lAKsL+XyzmO8NxlffFuBK2//9+G0FXqj53zbHrNEp\nRBQKFuQv3U5Xr8bh15ejz0xAoQDGjbvk3PTp2NZzGrppxMcAtF2hCwBuOIsgHMGpM213odu8ejWW\nL6jFc9Vb8DSarHbEdj20ukMfbCzFhOkX4PhGKSiVIqyTM9Zs+ExId/z973BROgj+DyTcvsreoUT1\nccXvtEXTlm2Q9e7Z5lxTE5B/NgbJGHdZPmtzChFtCu1N164IPvB/WLemCf/8J7B8+R/Ht28Hfv4Z\n21yGolu321rDO4Y/hzQGgGRk4GhV2xu0dv6HKK7uhaH4UTh2PTF/rJEWd2jgTL0bzjV6o/BcNIoq\novDzz+UY1O/RlkT19ch6bysSulKcJPwF9vaAu309cpf9dtm57GxAo6yAD05eds7anEJEodDeuLgA\nnp4IR0tI6KeeAtL+j8BzzwFvvIFtOxSiUPiDP4c0BoBC990olQ5sc6yk1B8eOA0jCtoct7YR242R\n2ubT0LwCB3eVt5z65BNk2ScjYfDdsxfz9WI2S5Cz9vI4WhkZQG/XXZhhZ9fmuDU6hYh6i1tBQgKQ\nlQXzP6KQng70SHgFgTID7JcU4NChVEyd2qLeNRiuoIK6S2gT0ri+Hk3FxXjYvhirch1QUgIhCurB\nyp4Yhh8uy29tIzaL0dzcYpmfMwe/uuXibVFz9JdMnJiK3QXAruJqLOr6EqBSA2jpl7nbn8Ks+pVQ\nL1mCWUuXtrRPK3UKEYXCraBr15aId//4B2LD6xEmOYhd9d8DfzgxbN7cmjD1NlXwzkFYoQsADQ1A\neDh6h5Vg3Todxo9vOVx8MRknJfOAS0LVvBwQgIFWNmKzGFIpsHAh6rv3xb41GsTF3e4K3ZkUFACF\nhakAgKJLNEhNdS8j55ASPTdMhrpPAnred99tqd+tQhQKt4KEBOCDP0IKzJsHrT2Au3gvnWtGqQTm\nzcPA//kIGWtSMX68FLm5QH2lFA8NdMWs5mSrHrFZCidPT2DuXOxasBPBx+66rRNumooDxehmLIa6\nz90xxbrjbAqZmZl/+f3vjl3P+etJd7W6XGvezUVFmJmbi9QuXTDzlVdwztnl0pQ3XL8bTd+a9kby\nXE++a8lz1bJSUpAcVIB1P9Zj48ZMzHvtB6Q0piFp6Wctm6RkZuL1tWsFgXCjv8nSaa/Wdq/0DK7n\n3l6a1mAAHBwKWs/i0na1/2Ae9FWxuHfqRygqmoikpFQkJaVi4sTUvy3/Zs9dbx+7nnyXprNkn78k\ntfDteG05kif7W7j89u+zN4ooFG6iLteSt3VB1htNTUjdsQNvNDaivKjo0pQ3XL8bTd+RhMLEh2cj\n/vdynD0/GQP6TcHi/zcTX15YBZfQ5/7ypXa3CoUvvkjFiBEG9OqVCr0+FR7uL8FP2gc90BdSOqHo\nwlqcOv0OysoM2LQpFZs2pf7tpjKiUEgVPlXNBfj00+dvSpDebPpbKRRE9VE78+cFWQBgrK9D0RXS\ni7SloAAoKYsDkIompgIALjIV5ZVAzi7RhnAprU4Kqamp2Pj119h8ZjsAoBeSsPlv8olciVTh26Gj\nqTh0tO0xa0UUCu3MnxdkAYABBShwGAFDdDQKCjJhMKS2HDfc2rp1dCpOXO4zLtKC9JLNnSS4ts1j\n7nYMBqBgzwgYzlXiV5zG1UMLWicSkndEi5GIq2lERERErhtLv8LvmJnCHSKbRERERO5q7jhDs4iI\niIjI7UMUCiIiIiIi/4XtzKZNm+jn50eFQkEHBwfqdDqaTCY+/fTTDAkJoclkYr9+/ejg4ECpVEqJ\nREKFQsHY2Fh+/fXX9PPzI1rWrlIikdDBwYHe3t7s2bMnjUYjU1JSSJJ6vZ56vZ4AaGNjw169enHZ\nsmUkycbGRkZHRzMlJYXz58+nRqOhUqmku7s758yZwy5dutBsNrNz586Mi4tjQEAAnZ2dGRgYc1CZ\nFAAAIABJREFUyK5du3Lu3LmMiopiVFQU7733Xo4YMYImk4lKpZJKpZKRkZGMjo5m586dSZJff/01\no6KiGBkZSScnJ/bu3Vu4Hw8//DClUimVSiXd3NyoVqvZtWtX5ubmCmmef/55ymQyqtVqurq6Mjo6\nmoGBgQwNDeWiRYuE+7ZgwQKmpaUxKiqKZrOZPXv2pMFgoFqtplqtpkQioVQqpU6n46effkqSbdJ3\n69aNMpmMkydPZmxsLO3s7IQ8SqWSPXv2vCxPfHw8lUolNRoNVSoVY2JiqNPpaGNjQ4VCQblcToVC\nQR8fH5rNZsbFxVEmkwnPf+bMmWxsbKSzszMlEgkBUKVSMSwsjPb29pTL5QRAqVTKYcOG0d3dnRER\nEXzvvfcokUi4dOlSGgwGAqBcLqebmxvj4+Pp7u7OsLAwenl5UaFQ0MbGhhKJhBKJhE5OTszMzCRJ\njho1iiqVikqlkvfffz/9/Pzo5uZGlUpFtVrNcePG8ezZs8Kzaq1PaGhom7bk4OAgtEu1Wk2pVEq5\nXE4XFxf27t1bONf68fb25po1a3jvvfdSKpW2adOt32UyGSMiItirV6/L8gPg1KlTSZJLly6lQqEQ\njms0Gr733nt0dHSkvb09o6KiaGtrK9Sp9Rqtv6Fbt25t6qBWq3ngwAEuX76cAQEBBMCgoCB6enpS\nLpdTKpVSoVDQ19eXhw4dYkpKipC/tewxY8YwKSlJ6Ds2NjZCe2r92Nracvr06fT09BTOqdVqDho0\niF26dKFKpaJUKqWNjQ0DAgKo1+vp7e3d5h798ssvXLRoEW1tbQmAsbGxXLZsGfV6PV1cXIR3SOsz\nLyoqYlJSEnU6nVBGcHCw8E6yt7dnREQEw8PDaTabOW7cOE6dOlW4B1qtln5+foyPj6eTkxMjIyPp\n5eVFAAwMDGRMTAwnTJjAoUOH0tbWlvb29m3yJCcn09vbm9HR0QwNDWXXrl1pa2tLOzs74V2WmJjI\ngIAAenp6UiqVCs/N29ubkyZN4pAhQ+jr60s7OztqtVqhf7f2x/fff59r1qyhk5OT0A+lUiljYmJY\nW1srvFda+1BZWdnfvrPbXShER0fTZDLx22+/pY2NDb29vblr1y4qlUr+8MMPTEtLo1KpZKdOneju\n7k5/f3/27t2bnp6etLe3p7u7Oz08POjs7EwPDw9OnDiR4eHhfOKJJ2hnZ9dGKMTHx7NHjx78/vvv\nWVpaSqPRyKqqKs6dO5cPPPAAhw4dyh9//JFbtmwhSS5cuJB2dnY8ffo0SfKZZ56hm5sbX331VT75\n5JOsrKzktm3b2KtXL1ZWVpIkBw4cyMjISL799tscO3Ys1Wr1ZTd527ZtrKys5Ny5c9m1a1f6+PgI\n5zZv3kwvLy96eHjwqaeeEtKPGjWKJFlWVkYPDw8OHjyYTU1NNBqNHDt2LOvq6njx4kVGRkZy06ZN\nLCgoYHBwMAsKCoSyMzMzmZiYSJIsLy+nVCqlq6srDx48yM6dO7OyspLnz58n2fJyi4mJoaOjI93d\n3ZmXl8eNGzdSrVbzyy+/pF6vp0aj4dKlS4U8JDlnzhxKpVKWl5fzxIkTlMlknDJlCvPy8mhjY8Nv\nv/2WISEhwvWGDh1KpVLJ+vp6Pvnkk3z33Xc5d+5c9urViwqFgkajkREREYyPj+fMmTOp1+vZpUsX\nxsXF8bPPPuOuXbsYHBzM5ORkGgwGZmVlMSQkhGq1mnPmzKG/vz+9vb25ceNGenh4cMqUKayvr2dA\nQAB9fX05a9YsTpo0iQsXLiRJ9u3bl2+//TYjIiI4Z84cOjs7t7mHs2fP5qxZs0iS33//PcPDwymX\ny4UX6ty5czl8+HBqtVoqlUrKZDK+++67NBqN3LlzJx0cHOjm5kYnJyfed999fPrpp6lUKhkYGMij\nR4/y0UcfpVwuZ0hICIOCgujl5UWj0UiZTEaj0cjg4GCGhYURADt37kylUsnhw4dTLpfzrbfe4r59\n+xgUFESlUsl58+YxNDSUe/bsoU6n49ChQzl06FC+/fbbDA8Pp1Qq5ciRI4WXmMlkIkmOHz+eXl5e\njIiIoIeHB52cnDhmzBgePHiQgwcPZlhYGLOzszl16lQmJCTQaDRy48aNVCgUvPfee7l8+XJGRkYy\nJiaG8+fPp52dHV944QXu3r2b999/Pz/99FMaDAa+//77lMvldHR05NatW2lvb88+ffowJSWFgYGB\nXLZsGZ988kn26dOHTzzxBNevX8+NGzfSz8+Pvr6+NBgMTE5O5rRp06hQKOjh4cF//vOf3Lx5M9PS\n0piUlMQNGzbQaDTSz8+Pw4YN44wZM1hTUyM88+LiYq5Zs4Y9e/akUqmkVCplQUEBX375ZWo0Gg4a\nNIgvv/yy8MynTp1KPz8/enl5saysjIWFhTQajSwtLaVCoeCqVauYnJxMnU7H0tJSNjU1MSAggBMm\nTODu3bs5Z84czp49W8jj5ubG6dOnkyTHjh3LTz75hLt37+bLL7/MKVOm0Gg0Mj8/n15eXoyOjub7\n779PtVrNJUuW0Gg0cvDgwXz33XfZtWtXvv/+++zbty9/+uknhoWFkSTr6+sZHh7OlJQULl++nGPH\njuXYsWNpb2/Pl156iQsWLCBJFhUVCX3oakKhXdVH586dQ1NTE+zs7JCcnAx7e3t06tQJR48ehVar\nhVQqRVFREXx8fBAZGQkvLy8AQGFhIfr374/q6mooFAr0798fkZGRaGxsRE1NDWpra7Ft2za4ubkJ\n16qursY999wDk8kEAHB1dUV4eDjWrFmD9PR0PProoyCJlJQU9OjRAwAwZswYNDY24sCBAwCADRs2\nwMnJCbt27cLQoUPh4OCAhIQEVFRUwMHBAQBw/PhxlJaWYt26dXjssccAXG4kT0hIQHV1NdLT0/HS\nSy/h7Nn/xrRITEyEVCpFTU0NhvyxCjchIQG5ubkAALVaDZK4cOEC6urqcObMGUyePBkqlQo1NTWQ\nyWTo2bMn9Ho9BgwYgP3797e536o/gsItWrQIdnZ2CA4ORkhICHr37o2srCxo/ohxsHDhQnTp0kW4\nnkqlQmRkJJqbm+Hi4oKAgAA0NjbC1dVVyAMABw8ehFwuh5OTE/bu3Qu5XI5+/frh8OHD8Pf3R11d\nHeRyuXC9Y8eOQa1WQ6lU4pFHHkFmZibS09Mxbdo0SKVSSKVSNDc3Q6VSITY2FlqtFra2tgCAmJgY\nODk5obi4GO+88w4AwMPDAwqFAjKZDAMGDMCQIUPQqVMn5Ofno7a2FpMmTYJSqYRMJkNpaSkeeugh\nDBw4ENu3t/jsHzhwAMOHDwcADBs2DA0NDbD7I/Jla/tqvYfffPMN3n33XeG3nzhxAunp6aisrIRS\nqYSDgwOkUin69esHjUYDFxcXXLhwAU5OTgAAo9EIqVQKkmhuboZSqYROp4NUKkVdXR1IwtbWFkFB\nQdBqtbhw4QKKi4uRnJwMqVSKAwcOYPz48airq4NUKkVOTg7WrFkDpVKJ+++/HyNGjIBMJoNUKkV1\ndTUefPBBkMRvv/2GwsJC6HQ6VFdXIywsDAqFAufOtew/7ObmhvPnz6Nfv35wcXFBfX09nJycEBIS\nAh8fH1y8eBHNzc0wGo3w9/eHRqOB0WiESqXCxo0bMXToUBQUFCApKQkrVqxAYGAgjh8/jujoaDg4\nOODixYuIiIhAfn4+SEKr1cLPzw9msxl5eXkoLCxERUUFRo0ahUceeQRyuRxlZWXo168fevfujaio\nKPj4+MDT0xM7duxA9+7doVar4eLigpycHCQmJgrP0MnJCeHh4WhoaMCxY8cwY8YM2NraCs/cw8MD\nS5YsgVKphIuLC5RKJX766Sf89ttviIqKQnl5ORobG6FSqdDY2IjVq1dj+PDhsLGxAQD4+fkhPDwc\nv/zSEqhs/vz5eOedd6BWq4X221pGdHQ0hg0bhgMHDiA8PBxbt25Fc3MzZDIZgJaFZ+PHj0d0dDQe\nfPBBlJaWIjw8HMeOHYODgwP69u2Lqqoq2Nvbo3///ggPD4dEIsG2bdvwyCOPQKFQICgoCP7+/pBK\nW17d58+fR2NjI7Zv346hQ4ciMzMTPXr0gI2NDSZMmCDUe+rUqUIfuip/KzJukvXr1zMpKYljxozh\n+vXrGRcXx0GDBvHBBx9kXFwcZ86cyXHjxjE4OJh9+vThmDFjGB8fz+joaEZERFAmkzEoKEiYkrZO\nDaVSKVUqFT/77DOmpKTwxIkTVKlUjIyMpK+vL6dNm8ajR4/SaDRyxIgR3LVrFzMzM4VZRStTp06l\nvb09q6qqGBoaSgDs0qULjUYjY2NjWV5ezpUrV1IikfDYsWM8fvw4XV1daWdnx/DwcP7P//wP1Wo1\no6KiOHz4cK5cuVIoe/To0dy1axcfffRR6vX6Ntf19fWlXC6nr68vv/vuuzbXIMm3335bmJqrVCqO\nGjWKXbp04aOPPsp7771XKGfx4sWcOXMmV6xYIUyfW0e948ePp1Kp5GuvvcZTp04xIiJCGA19+umn\nVCqVdHZ25ujRozljxgwqFAra2dnxvvvuE6bZffv2Fa7Veg2tVkupVMqQkBDef//9BMCQkBBGRUVR\nJpPxwQcfZEhICP38/Ojg4CCo/MxmM6dMmUKVSiU8D7PZLKiKXn75Zebn5zMiIoJJSUmMi4tjdnY2\nP/nkE7q4uJAkDQYDV6xYwaSkJLq7uzM7O5uLFy/moEGDOGXKFCoUCtbV1fH48eP08fGhVCplly5d\nGBgYyK+//pokOWHCBL7xxhsMDw/niy++SJlMxqioKAYGBlKr1bJbt25saGhgWloan332Webn5wsz\nhdGjR/P9999nt27daDQa6ePjQ4VCwd27dzMiIoKffPKJMJqWy+WC6gkAhw0bxqqqKqamptLNzU04\n7uzszH379lGn09HOzo4uLi7s16+foDKRSCS0t7enRCKhh4cH+/XrR6VSKaisWst58cUXhTbu7u4u\nPI+RI0fSw8ODAGhra0uSDAsLE1R++EMNV1VVRZI8d+6coN4ICQnhvn37GBERwZ9//pkKhYIPPPAA\nFy9ezKioKKpUKkokEppMJmE2fO7cORqNRkokEqF8T09P9u3bl+7u7rS3t6dMJqOLiwtHjBjBwsJC\n2tvb09fXlyR59OhR+vj40NvbmwaDgWPHjmVCQgJNJhN1Oh11Op3QJpOSkpiWlkaj0Uhvb28qlUr6\n+voyKChIeOZpaWkcOnQon332WXp7e1Mmk3Hw4MFcuXIl7ezsKJfL2a1bN7700kvUarX09PRkQ0OD\nMKI+fPgwbWxsKJVKqdVq6erqyuHDh9Pd3V0YcXt6evLRRx9lfX09X3zxRXp4eAh5Bg8eLGgxOnXq\nxHnz5rVJZzQauWfPHqpUKrq4uBAAPTw8aDKZqNVq+fPPP9PW1pY2NjZUqVScMGEC161bx/DwcOEZ\nL1y4kBMmTODixYs5btw4enl50dHRkS+++CJ9fX2Fttzah27rTOFa4B+jbF4y2q6ursahQ4eg0+lw\n9OhR6PV69OnTB1KpFP7+/rC3t8e//vUvTJ8+HSTx7LPP4vvvv8fevXsRGxuLJUuW4J577sEDDzwA\nLy8vxMTEXDaa/+GHH7Bo0SIsXrwYWq0WP/zQEoq5uLgYS5YsQWNjI2JjY/Hdd98hMDBQGGGcPXsW\nCQkJ2LFjB/Lz8+Hv74+cnBzMmTMHU6dOxenTp7Fq1Sq4u7ujrKwM69atQ0hISJtrf//99wgKCsKI\nESMwbtw4fPXVV8I1SktL8eGHH2Lv3r345ZdfUF9fj3379iEzMxMFBQUoKrp8LfTIkSNRUFCAjz76\nCCNGjMCFCxeQnp4OGxsbbNq0CaNHj0ZkZKQwAs7IyMCmTZuwaNEibNiwAZ988gkOHDiAnTt3YuXK\nlfDz88P777+PrKwsLFiwoM01FixYAD8/PxgMBmRlZQEAqqqqYGtrCxcXF6xbtw5FRUXo3r07Xnzx\nRTg5OcHX1xc7duxAY2MjLl68iJiYGFRUVODQoUMwGo0IDg5GVlYWNm7c2OZ31dfX46OPPoKuNWY2\nLp+VAZevcamvr8eJEyegVqsxYMAANDQ0oKmpCQAwe/ZsHD58GHl5eWhqaoJer0dOTg5WrlwpzC6f\nf/55vPXWW5g9e7ZQ5vnz5+Hk5IRly5bh7NmzCAoKalMnkpg1axZUKhU+/PBDeHt7Y9u2bUhJSYFU\nKsXPP/+MV155Bffeey/Onz8PV1dXeHp6QiqV4uGHHwZJ1NXVQafTob6+Hmq1GjqdDjY2NqiqqoJE\nIsG5c+dQX1+P5uZmeHh4YO7cuZDJZFAoFPjxxx9x5EjLpvM1NTW477774O7ujs2bN6OkpARSqRQS\niQSrVq1CfHw8evTogaioKCiVSqjVakyaNAkA8Mgjj8Db2xs//fQTJk+ejJdeegnNzc2YMmUKPD09\n8eabb2L//v2or69HcHAwSEKhUKDhj0Wa48ePR2NjI77//nu88847UCqVsLOzQ35+PgBAo9HAy8sL\na9euxZEjRxAfHw+SUKvVqK6uxujRo6FQKKBSqfDBBx8gNTUVu3fvRnFxMQBAeclGTI2NjZg2bRrm\nzZuH5cuX48KFC5g2bRrOnDmD2tpa1NXV4fXXX8epU6fwwgsvoLS0VJjRzZ49G9OmTUP//v3RpUsX\n1NTUICgoCCNHjsRLL70EoOU9NHbsWCxfvhz79+/HhQsXsGLFCsyZMwfl5eU4ffo0XnvtNZjNZiiV\nSnTt2hV1dXWoqKjA8uXLkZeXh6NHj2LFihXIyMhAUFAQvvvuuzbp3nrrLTzyyCMwGo0YPHgwYmNj\nce7cOZw6dQpPP/007rvvPnh6euK+++7Da6+9hry8PLz66quQSCTIyclBbm4uFi1ahPvuuw/79+9H\ndnY2SkpKUFtbi6amJiiVysva8l/1oTb8rci4SSorKwUjbGVlJV1dXZmSksJvv/2Wrq6uXLVqFRcs\nWEB/f39OmDCB0dHR9Pb2plwup0ajEYyWdnZ2VCqVgrFLq9XSxcWFCoWCKpWKdnZ2NBgMNBgM1Gg0\nlEql7N69O6dPn04fHx8aDAZ6eHjQ1taW48eP586dO6lWqzljxow29Q0JCeHzzz/PxYsXMz09nWPG\njGF1dTXNZjNzcnIYEBBAR0dHoUwnJyfKZDKOHz+eJPncc8/xk08+4fTp06nT6QRDaOt1W2kdEbfm\nWbhwIc1mM0ly1apVvP/++4W0Op2Otra2rK+v5/Lly+no6CicmzJlCletWtXmN7i7u3P58uWMiYlh\ncnKycPz+++9ndnY2SdJoNAr3CwCVSiVXrlzJtLQ0arVa9unTh2SL/n3AgAGXPVd3d3fW1tayubmZ\nEomEWVlZJMmePXsyMTGRERERwvVGjRpFJycn1tTUcOLEiQRAvV5PR0dHSqVSwdC3aNEi/uMf/2gz\nU/jmm2+E52wwGITZVWhoKO3s7Jidnc0pU6YwJSWFS5Ysob29PXft2sWLFy8KM4Bu3boxLS2NY8aM\nuez+p6enC3ad1mfxyiuvMCoqiu7u7jQYDPTx8RFmM25ubm2Mnq0fT09Purq6Cu21ta56vZ7//ve/\nKZfLGR8fz4CAAK5atYpKpZIJCQnU6/U0GAxUqVTUarWCk0XrzEAmk/Hzzz8XbBcajYbPPvssAwMD\n+eqrrzI/P1+oj52dHe3t7YUZxMcff0x3d3d6eXkJRlmZTMZnnnmGPj4+lEgklMvlQtmtI3CdTsfE\nxERmZ2ezurpamBnPmjVLaLOtzJo1i35+fvzwww/p4eHBCxcu0MbGhu+88w5Jsrq6mjY2NvT09OTo\n0aP5wAMPsFOnThw1ahR37drFPXv2MCoqit27d+cTTzzBvn37MigoiMHBwZw3bx7JFieH5ORkJiUl\nMTAwUOgbFy5coJOTE59//vk2/ffzzz+nl5cXn3jiCQ4aNEhwaPjzc3N0dBTeCSkpKcIz9/LyEu6J\nSqXi66+/TpLcu3cvbW1t6eLiQoPBQKlUSjs7O3bu3Jl1dXVCnWJiYgS7HknhfUKSe/bsYbdu3YR0\n3bt3Z//+/Tlv3jy+8MILXLVqFZ977jm6u7tTpVKxrq6OUqlU6OfV1dXU6XSCU8VfXSMtLY2xsbF8\n6qmnmJ6ezrFjxwpt+dJ2WVJSclm/bqVdZwoODg6QyWQ4f/481q5di6qqKuzevRsmkwnV1dVobm6G\nr68vTp48if3796OkpAQlJSWCTjEkJASdO3dGTEwMtFotFAoF9Ho99Hq9MBrv168fSkpKsHfvXhw7\ndgxubm6wtbXFf/7zH7z11ls4fvw48vPz8c0336BPnz54/fXX0bt3b4wYMQJvvPEGzp49i8rKSgCA\nXq9HWloaevXqhR9++AGJiYmYM2cO4uPjcc8992DZsmVITEzE999/j7y8PHTv3h2hoaH46quvUFpa\nioyMDAwcOBCTJ0+GVqvF1q1b8d1336FPnz746quvAAC1tbU4f/48mpqacPLkSaxduxaHDx9G//79\n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\n", + "text": [ + "" ] } ], - "prompt_number": 4 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -105,7 +91,8 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [], + "prompt_number": 11 }, { "cell_type": "code", @@ -125,46 +112,87 @@ "outputs": [ { "output_type": "pyout", - "prompt_number": 3, + "prompt_number": 12, "text": [ - "" + "" ] }, { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGVVJREFUeJzt3XtwVOX9x/HPRlIMoCEkEeyAidFIEiABciNcYytgJ5VL\ny4jRosLghLZyLYxFy7A4SjuiAqYKkbGtlMvQAgW8VApNkyhIEm4/IMAgkZUKFAhikHAxDM/vD44L\nkQSScE422bxfMzvuyXnynO/ufA+f3SdnV5cxxggA0OwF+LoAAEDjQCAAACQRCAAAC4EAAJBEIAAA\nLAQCAEASgeCXIiMjlZubK0maPXu2nnnmGR9XBNw6+tp5LXxdAOzncrm8959//nnb5g0ICNDBgwcV\nFRVl25xAbdHXzuMdQhN26dKlBj8mn2OE0+hr3yEQ6qC0tFShoaHasWOHJOno0aMKDw9XQUFBtePL\nysr0+uuvq1u3bgoLC9P48eO9+9atW6eBAweqW7duWrhwoc6dO+fdt337dj399NOKjIzUjBkzdPTo\nUe++yMhIvfXWW+rdu7fatm2ry5cv69NPP9WgQYMUGRmp7OzsKjW43W6NGjVKkuTxeBQQEKDVq1cr\nNjZW8fHxWrJkiXdsUVGR0tLSFBISorS0NP3xj3/0npz9+/eXJCUkJOiOO+7Q3//+d0nSrl27NG7c\nON1zzz36zW9+o8OHD3vne+edd5SWlqbg4GDFxMR43+6jcZkzZ45GjBhR5WcTJkzQpEmTqh1PX/tx\nXxvUyaJFi0xcXJw5d+6cGTRokJk2bVqNY4cMGWJGjRplPvvsM3Px4kXzySefGGOMyc3NNffcc4/Z\nsGGDOXDggPnxj39sZs6caYwxpqKiwrRp08YsWrTInDhxwkyYMMEMGDDAO2dkZKSJi4szBQUF5sKF\nC+b06dOmVatW5t133zVHjhwxTzzxhAkMDDT//ve/jTHGuN1u84tf/MIYY8yhQ4eMy+UyI0eONIcP\nHzbr1683LVu2NOfPnzfGGLNt2zZTWFhoLl26ZDZt2mQiIiLMhg0bvMd2uVymtLTUu11WVmZCQkLM\nmjVrTHl5uZk9e7bp3bu3McaYkydPmo4dO5oDBw4YY4z54osvqvwuGo9jx46Z1q1bm6+//toYY0xl\nZaW56667zPbt26sdT1/7b18TCPUwZMgQ07VrV5OQkGC+/fbbasd8/fXXplWrVqasrOy6fRMmTDDT\np0/3bm/YsMHEx8cbY4xZvXq1SUtL8+6rqKioMk9kZKR58cUXvftXrFhh+vXr590uLS01LpfLe+LM\nnDnzuhNn27Zt3vGdO3c2//znP6t9DC+88IJ59tlnvdvfP3Hefvtt88wzz3i3L126ZO666y5z/Phx\nU1ZWZkJDQ837779f43OExuPhhx82ixYtMsYY895775kuXbpUO46+9u++ZsmoHsaOHauSkhKNHz9e\ngYGB1Y7ZtGmTIiIiFBoaet2+zZs3KzEx0budmJio3bt368yZM9q0aZN69uzp3deqVStFR0dr8+bN\n3p+lpqZ67xcVFSkhIcG7HRUVpeDg4BvW3717d+/9u+++2/vW/ciRIxo3bpzi4+N15513au7cudq1\na1eN82zcuFFLly5VSEiIQkJCFBYWpoqKChUUFCg0NFR//etfNXfuXN19992aNGmSTp48ecO64DtP\nPfWUd5llyZIl3uWY76Ov/buvCYQ6Onv2rCZNmqSxY8dq5syZOn36dLXjevfurS+++EKnTp26bl+f\nPn20detW7/bWrVu9zdq3b19t27bNu6+iokKfffaZevfu7f1ZixZXLw5LSUnRzp07vdulpaUqLy+v\n12N76aWXVFlZqQ8//FDl5eWaPHmyLl++7N0fEBBQ5Y9vP/rRj/Tkk0/q9OnT3tvZs2e969E/+clP\ntHHjRu3du1eHDh3SK6+8Uq+64LyhQ4dq165d2rNnjz744AM98cQT1Y6jr/27rwmEOpo4caJSUlL0\n9ttvKyMjQ+PGjat2XNu2bTVw4EBNmTJFBw8e1IULF7yvhoYOHarly5crNzdXBw8e1Jw5czRs2DBJ\n0sCBA1VSUqI//elPOnHihH73u98pOTm52ldkkjRo0CBt375dS5cu1dGjRzVr1qwqJ1ZdHD16VO3a\ntVNoaKjy8vK0ePHiKvsTExOrnPAjR47U6tWrtWbNGlVUVKiiokIffPCBzp49qwMHDig3N1cXL17U\nD37wA7Vs2VJ33HFHveqC84KCgvTzn/9cjz/+uFJTU9WxY8dqx9HX/t3XBEIdrF27Vv/617+0YMEC\nSdLrr7+u7du3a/ny5dWOf+edd9S1a1f99Kc/VadOnfS3v/1NkpSenq65c+dq9uzZGjZsmIYOHapp\n06ZJklq3bq3c3Fzl5+crOTlZQUFBWrp0aY01tW3bVuvXr9ef//xnpaWlKSUlpcrJ7HK5qly/fe39\n73O73dq5c6c6duyoOXPm6Nlnn60yfurUqXr11VcVEhKilStXeo/9n//8Rw888ICio6O9J9vFixc1\nffp0hYeHKykpSW3bttXkyZNv9hTDh5566int2bOnxuWi79DX/tvXLmO4ABeAdPjwYcXGxur48eNq\n06aNr8uBDzjyDmHMmDFq3769unXrVu3+vLw8BQcHq0ePHurRo4deeuklJ8oAbOevvX358mXNnj1b\n48aNIwyaMUe+umL06NEaP368nnzyyRrHDBgwQOvWrXPi8IBj/LG3Kyoq1KFDB/Xo0UNr1qzxdTnw\nIUcCoV+/fvJ4PDccw0oVmiJ/7O3WrVvrm2++8XUZaAR88kdll8ulzZs3q3v37poyZYpKS0t9UQZg\nO3obTZlPvu20Z8+e+u9//6vAwEC9++67mjhxot5///3rxt3oygHADna/mqe30VjUp7cdu8rI4/Ho\nkUce0e7du284zhijDh066PDhw2rZsmXV4lwuSe76F1EyU3rTLf36FuZoJNxdXMqTlO7jOvyJW/U7\naezqbXedj3xVnvynF/LkP4+lsXCrfr3tkyWj48ePe4t97733FB8ff90JAzRF9DaaMkeWjDIzM5Wf\nn6+ysjJ16tRJs2bNUmVlpSQpKytLK1eu1IIFC9SiRQvFx8frtddec6IMwHb0NvxZo/5gmi1LRkV5\nUkq6PQX5kLuLSx5JkT6uw5+45bsrgm51ycgj/+kFj/znsTQWbjWhJaMG5Qdh8J1IXxeARiPS1wXY\nKNLXBcDL/wMBAFArBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAA\nsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAAL\ngQAAkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAI\nAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJ\nBAIAwEIgAAAkEQgAAAuBAACQRCAAACyOBMKYMWPUvn17devWrcYx06dPV1RUlBITE7V//34nygBs\nRV/D3zkSCKNHj9ZHH31U4/6ioiJ9/PHH2rp1q6ZOnaqpU6c6UQZgK/oa/s6RQOjXr59CQkJq3F9Y\nWKgRI0aoXbt2yszM1L59+5woA7AVfQ1/18IXBy0qKtKoUaO82+Hh4SotLdV9991Xzei8a+5HWjeg\n7jzWzSl162vpzMwg7/209EClpQc6WB382ad5lfo0r/LqD2adr9c8PgkEY4yMMVV+5nK5ahid7ng9\naB4iVfXlRJ7N89etr6Up7lY2V4Dm6vsvKF6vZyD45Cqj1NRU7d2717t98uRJRUVF+aIUwDb0NZo6\nnwXCqlWrdOrUKS1btkyxsbG+KAOwFX2Nps6RJaPMzEzl5+errKxMnTp10qxZs1RZeWV9KysrSykp\nKerbt6+SkpLUrl07LVmyxIkyAFvR1/B3LvP9Rc9G5Mr6q7v+E5TMtKsUn3N3qXktGvXjlq5b828o\nLpdLX5pQnxwb/q+j61S9eptPKgMAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgAAEkEAgDAQiAA\nACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQRCAAACwEAgBA\nEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAAkEQgAAAsBAIAQNINAuGNN97Q6dOnG7IWoEEUSjrv\n6yKARqjGQDh+/LiSk5P16KOP6qOPPpIxpiHrAhxzVtIi6z69DVxVYyC8/PLLOnDggMaMGaO//OUv\nio6O1vPPPy+Px9OA5QH2+7Gk8dZ9ehu46oZ/QwgICFCHDh3Uvn173XbbbTp9+rSGDRuml19+uaHq\nAxzhsv5LbwNXuUwN75fnz5+vxYsXKzQ0VGPHjtXw4cMVGBioy5cvKy4uTvv373e+OJdLkrv+E5TM\ntKsUn3N3cd18EGpli6T/k3RM0ooVK3zW21+aUMePg+apo+tUvZZCW9S046uvvtLq1asVERFR5ecB\nAQFavXp13SsEGonzkkZKmifp0Ucf9f6c3kZzV2MgzJo1q8ZfiouLc6QYoCE8eIN99DaaMz6HAACQ\nRCAAACwEAgBAEoEAALAQCAAASQQCAMBCIAAAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgAAEkE\nAgDA4kggFBQUKDY2VtHR0crOzq52THFxsZKTkxUbG6v09HQnygBsR2/Dn9X4/0O4FRMnTlROTo4i\nIiI0ePBgZWZmKiwszLvfGKMxY8Zo7ty5euihh1RWVuZEGYDt6G34M9vfIZSXl0uS+vfvr4iICA0a\nNEiFhYVVxmzdulXx8fF66KGHJKnKCQU0VvQ2/J3tgVBcXKyYmBjvdlxcnLZs2VJlzPr16+VyudSv\nXz898sgjWr9+vd1lALajt+HvHFkyupkLFy5o586d2rhxo86dO6eBAwdqz549CgoKqmZ03jX3I60b\nUHce6+akuvR2x18/e3UjOV1KSXe4OvitojypOO+aH9T8v0C+EdsDITk5WdOmTfNul5SU6OGHH64y\nJi0tTRcvXlSHDh0kSUlJSSooKNDgwYOrmTHd7hLRTEWq6suJvDr+vu29/Wt3HSsAapCSXvUFxVv1\nCwTbl4yCg4MlXbkaw+PxaMOGDUpNTa0yplevXsrPz9e5c+f01VdfaceOHerTp4/dpQC2orfh7xxZ\nMpo3b56ysrJUWVmpCRMmKCwsTDk5OZKkrKwshYaGavTo0UpKSlJ4eLhefPFFtWnTxolSAFvR2/Bn\nLmOM8XURNXG5XJLc9Z+gZKZdpficu4vL1yX4HbeuXCbqCy6XSypptKcemrournr1Np9UBgBIIhAA\nABYCAQAgiUAAAFgIBACAJAIBAGAhEAAAkggEAICFQAAASCIQAAAWAgEAIIlAAABYCAQAgCQCAQBg\nIRAAAJIIBACAhUAAAEgiEAAAFgIBACCJQAAAWAgEAIAkAgEAYCEQAACSCAQAgIVAAABIIhAAABYC\nAQAgiUAAAFgIBACAJAIBAGAhEAAAkggEAICFQAAASCIQAAAWAgEAIIlAAABYHAmEgoICxcbGKjo6\nWtnZ2dftX7t2rRISEtS9e3dlZGSouLjYiTIA29Hb8GcuY4yxe9IePXpo/vz5ioiI0ODBg/XJJ58o\nLCzMu7+iokKtW7eWJOXn52vGjBkqKCi4vjiXS5K7/oWUzKz/7zYy7i4uX5fgd9yS6tr+tvZ2ie2n\nHnBFF1ede1ty4B1CeXm5JKl///6KiIjQoEGDVFhYWGXMdyfMd+Nvv/12u8sAbEdvw9+1sHvC4uJi\nxcTEeLfj4uK0ZcsWZWRkVBn3j3/8Q5MnT9bZs2e1bdu2G8yYd839SOsG1J3HutWX7b39pvvq/eR0\nKSX9FqpDs1aUJxXn3fI0tgdCbQ0fPlzDhw/XihUrNGzYMO3YsaOGkekNWRb8WKSqvpzIc+g4te7t\nBe5r7jtUDJqJdFX9t3JWvWaxfckoOTlZ+/fv926XlJSoV69eNY4fOXKkjh49qvPnz9tdCmArehv+\nzvZACA4OlnTlagyPx6MNGzYoNTW1ypjS0lLvHzw+/PBDJSYmKigoyO5SAFvR2/B3jiwZzZs3T1lZ\nWaqsrNSECRMUFhamnJwcSVJWVpZWrVqlxYsXKzAwUD169NArr7ziRBmA7eht+DNHLju1C5edXsVl\np/Zzq+6XndrF5XJJrkZ76qGpM43kslMAQNNEIAAAJBEIAAALgQAAkEQgAAAsBAIAQBKBAACwEAgA\nAEkEAgDAQiAAACQRCAAAC4EAAJBEIAAALAQCAEASgQAAsBAIAABJBAIAwEIgAAAkEQgAAAuBAACQ\nRCAAACyOBUJBQYFiY2MVHR2t7Ozs6/bv379faWlpuv322/Xaa685VQZgK/oa/qyFUxNPnDhROTk5\nioiI0ODBg5WZmamwsDDv/tDQUGVnZ2vNmjVOlQDYjr6GP3PkHUJ5ebkkqX///oqIiNCgQYNUWFhY\nZUx4eLiSkpIUGBjoRAmA7ehr+DtH3iEUFxcrJibGux0XF6ctW7YoIyOjHrPlXXM/0roBdeexbvVl\nb19LMg9esxEpehv159GtdfcVji0Z2Sfd1wXAT0Sq6j+5eT6p4lrpvi4AfiNSdnS3I0tGycnJ2r9/\nv3e7pKREvXr1cuJQQIOhr+HvHAmE4OBgSVeuyPB4PNqwYYNSU1OrHWuMcaIEwHb0NfydY0tG8+bN\nU1ZWliorKzVhwgSFhYUpJydHkpSVlaX//e9/Sk5O1pkzZxQQEKD58+dr7969atOmjVMlAbeMvoY/\nc5lG/FLG5XJJctd/gpKZdpXic+4uLl+X4Hfc8t0r+VvubeCG3PXqbT6pDACQRCAAACwEAgBAEoEA\nALAQCAAASQ4Fws2+EVKSpk+frqioKCUmJlb5sI/tivKcm7uBeXxdABpRb3scmtcXPL4uABZHAuG7\nb4TcuHGj3nzzTZWVlVXZX1RUpI8//lhbt27V1KlTNXXqVCfKuKI4z7m5G5jH1wWgEfW2x6F5fcHj\n6wJgsT0QavONkIWFhRoxYoTatWunzMxM7du3z+4yANvR2/B3tgdCTd8Iea2ioiLFxcV5t8PDw1Va\nWmp3KYCt6G34O59826kx5rpP0V355GZ13PU/UBfrd9+aVf85Ggm39d88H9aAm2uw3pbkX92Q5+sC\nIAfeIdTmGyFTU1O1d+9e7/bJkycVFRV13VzfnVzcuDl1o7e5+eutPmwPhNp8I2RqaqpWrVqlU6dO\nadmyZYqNjbW7DMB29Db8nSNLRjf7RsiUlBT17dtXSUlJateunZYsWeJEGYDt6G34NdMI5Ofnm5iY\nGHP//febN954o9oxv/3tb829995revbsafbt21fnOfbt22d69eplWrZsaV599VXbH4NdavNcGGNM\nUVGRue2228yqVasasLqm6WbP6ZkzZ8yUKVNMQkKC6dWrlzl48GCDHNeY5tPXxtDbdnOirxtFIHTv\n3t3k5+cbj8djOnfubE6ePFllf2FhoenTp485deqUWbZsmcnIyKjzHCdOnDDFxcXmhRdeaNQnzs0e\nhzHGXLp0yTz44IMmIyPDrFy50gdVNi03e05zcnLM+PHjjTHGbN682fzsZz9rkOM2p742ht62mxN9\n7fOvrrDj2u7azBEeHq6kpCQFBgY6+GhuTW0ehyRlZ2drxIgRCg8Pb+gSm5zaPKe5ubnKyMiQJKWl\npengwYMNctzm0tcSvW03p/ra54Fgx7XdtZmjKajN4zhy5IjWrl2rX/7yl5JudEkjpNo9p4MHD9by\n5ct1/vx5rVu3Trt379ahQ4ccP25z6WuJ3rabU33tk88h1JWp5jKq5toskyZN0h/+8Ae5XK5burwM\nV40cOVJffvmlBgwYoM6dOys6OlotW7Z0/Lj0dVX0tr3q09c+f4dgx7XdtZmjKajN49i2bZsee+wx\n3XvvvVq1apV+9atfad26dQ1dapNRm+e0VatWmjFjhoqKirRgwQIFBQXphz/8oePHbS59LdHbdnOq\nr30eCHZc212bOb7TmF911OZxfP755zp06JAOHTqkESNGaMGCBRoyZIgvym0SavOclpeX69tvv9W5\nc+f0+9//XgMHDmyQ4zaXvpbobbs51tc2/tG73vLy8kxMTIy57777zPz5840xxixcuNAsXLjQO+a5\n554zkZGRpmfPnmbv3r11nuPYsWOmY8eO5s477zRt27Y1nTp1Mt98800DPLq6qc1z8Z2nn36aS/Nq\n4WbP6ebNm80DDzxg7r//fjNq1ChTUVHRIMc1pvn0tTH0tt2c6GuXMY38pQUAoEH4fMkIANA4EAgA\nAEkEAgDAQiAAACQRCE1ecXGxEhISdPHiRVVUVKhr165Vrm0Hmip6u+FxlZEfmDFjhi5cuKDz58+r\nU6dOeu6553xdEmALerthEQh+oLKyUklJSQoKCtKnn37arL/+AP6F3m5YLBn5gbKyMlVUVOjs2bM6\nf/68r8sBbENvNyzeIfiBIUOG6PHHH9fnn3+uY8eOKTs729clAbagtxtWk/i2U9Rs8eLFatmypR57\n7DFdvnxZvXv3Vl5entLT031dGnBL6O2GxzsEAIAk/oYAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkCT9PxL88fDsDe+RAAAAAElFTkSuQmCC\n", "text": [ - "" + "" ] } ], - "prompt_number": 3 + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 3D Plots\n" + ] }, { "cell_type": "code", "collapsed": false, - "input": [], + "input": [ + "x0 = np.zeros(3)\n", + "h1 = np.linspace(.1,.5,3)\n", + "h1 = np.r_[1,2,1]\n", + "h2 = np.r_[1,3]\n", + "h3 = np.linspace(.1,.5,5)\n", + "\n", + "mesh = TensorMesh([h1,h2,h3],x0)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ax1 = ax=subplot(131)\n", + "ax2 = ax=subplot(132)\n", + "ax3 = ax=subplot(133)\n", + "a1 = mesh.plotImage(mesh.gridCC[:,0],ax=ax1)\n", + "a2 = mesh.plotImage(mesh.gridCC[:,1],ax=ax2)\n", + "a3 = mesh.plotImage(mesh.gridCC[:,2],ax=ax3)\n", + "\n", + "ax1.set_title('x coordinate')\n", + "ax2.set_title('y coordinate')\n", + "ax3.set_title('z coordinate')\n" + ], "language": "python", "metadata": {}, "outputs": [ { - "ename": "SyntaxError", - "evalue": "invalid syntax (, line 2)", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m type(ax)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + "output_type": "stream", + "stream": "stderr", + "text": [ + "/Users/larsruthotto/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.py:362: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", + " \"matplotlib is currently using a non-GUI backend, \"\n" + ] + }, + { + "output_type": "pyout", + "prompt_number": 2, + "text": [ + "" + ] + }, + { + "output_type": "display_data", + "png": "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\nzZsrXWfbtm1q3759ZYJ788031dSpU1VBQYH64x//qBYsWODwNr7++mtVXFysiouL1aRJk9Tf//53\nh76WGyRXybU8tSFXpVzLVsu5Ov1O9eq4njM0NJSoqCgAmjRpQqdOnfjxxx8d2saZM2f497//zaRJ\nk5w6cbJlyxb+/Oc/U6dOHXx9fW1zflUVEBCAUors7GyuXr1Kfn4+QXb+XseAAQNuW2bPnj1MnDgR\nf39/nnrqKbvPZXnbuPfee9Hr9ej1eu677z62bnX8nXeSq5XkervakCu4lq2Wc3W6WVd0PaezTpw4\nQXJyMjGlH99VVbNmzWLBggXonfjElDNnzlBQUMCzzz5Lr169ePPNNykoKHBoGwEBASxZsgSj0Uho\naCj9+vVz+GuAss9n+/bt2bNnj8PbuNny5cuJjY11qQ6QXCXX8tVEruB6tlrOtVZ8JtSVK1cYM2YM\n8fHx1K1b9Y8A3rhxI82aNSM6Otqpn9IFBQUcO3aMUaNGYbFYSE5OZs2aNQ5t4+LFizz77LP8/PPP\npKamsmvXLr788kuHa3H2KKM8r776KvXr12f06NHVtk1nSK6S681czRVcz1bLuTrdrHv27MmRI799\nnE9ycjK9e/d2eDuFhYWMGjWK8ePHM2LECIfW3blzJ+vXr6dNmzaMGzeOhIQEJtzywbKViYiIoF27\ndsTGxhIQEMC4cePYtMmxDynds2cPvXv3JiIiguDgYEaPHs228v4UmB09e/bkcOnf5z58+DA9e/Z0\neBsA//jHP/jqq6/4+OOPnVpfcrWSXMtXk7mC69lqOtdKZ7TtuHHCIiUlxakTFiUlJWr8+PFq1qxZ\nrpShlFLKYrE4dXY5NjZW7d69WxUXF6s//vGPDp+8yc7OVm3btlWZmZmqoKBAxcbGqi1btthdLyUl\npdwTFvn5+eq5556ze8KivG1s2rRJdezYUWVkZDj0NdxKcpVcy1MbclXKtWy1nKtLzdpisaj27dur\ntm3bqr/85S8Or//9998rnU6nIiMjVVRUlIqKilKbNm1yuhZnzi4fPXpU9erVS0VGRqrZs2er3Nxc\nh7fx4Ycfqrvuukv16NFDzZ07VxUXF1e6/NixY1VYWJjy8/NTLVu2VCtWrHD4UqAb2zAYDKply5bq\ngw8+UBERESo8PNz2XD777LMOfy1KSa43SK5l1YZclXI9W63mavfvWQshhKh5teIEoxBCiMpJsxZC\nCA2QZi2EEBogzVoIITRAmrUQQmiANGshhNCA/w8I5qLIW3oKNAAAAABJRU5ErkJggg==\n", + "text": [ + "" ] } ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] + "prompt_number": 2 } ], "metadata": {} From 082df8f1104b1240dd5a9d0ecf04f6eae9dd5198 Mon Sep 17 00:00:00 2001 From: SEOGI KANG Date: Wed, 17 Jul 2013 15:03:56 -0700 Subject: [PATCH 024/359] Testing differential operators (Div, Grad, Curl) --- SimPEG/getDiffop.py | 198 ++++++++++++++++++++++++++++++++++++++ SimPEG/sputils.py | 16 ++- SimPEG/tests/test_curl.py | 48 +++++++++ SimPEG/tests/test_div.py | 27 +++--- SimPEG/tests/test_grad.py | 46 +++++++++ 5 files changed, 319 insertions(+), 16 deletions(-) create mode 100644 SimPEG/getDiffop.py create mode 100644 SimPEG/tests/test_curl.py create mode 100644 SimPEG/tests/test_grad.py diff --git a/SimPEG/getDiffop.py b/SimPEG/getDiffop.py new file mode 100644 index 00000000..6debc348 --- /dev/null +++ b/SimPEG/getDiffop.py @@ -0,0 +1,198 @@ +import numpy as np +from scipy import sparse +from utils import mkvc +from sputils import ddx, sdiag, speye, kron3, spzeros, av + +def getvol(h): + """Construct cell volumes of the 3D model as 1d array.""" + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # Compute cell volumes + v12 = h1.T*h2 + V = mkvc(v12.reshape(-1,1)*h3) + + return V + +def getarea(h): + """Construct face areas of the 3D model as 1d array.""" + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + # Compute areas of cell faces + area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) + area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) + area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) + area = np.concatenate((mkvc(area1), mkvc(area2), mkvc(area3)), axis=0) + + return area + +def getlength_e(h): + """Construct edge legnths of the 3D model as 1d array.""" + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + # Compute areas of cell faces + l1 = h1.T*mkvc(np.ones((n2+1,1))*np.ones(n3+1)) + l2 = np.ones((n1+1,1))*mkvc(h2.T*np.ones(n3+1)) + l3 = np.ones((n1+1,1))*mkvc(np.ones((n2+1,1))*h3) + #l = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) + l = np.concatenate((mkvc(l1), mkvc(l2), mkvc(l3)), axis=0) + + return l + +def getDivMatrix(h): + """Construct the 3D divergence operator on Faces.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + # Compute areas of cell faces + S = getarea(h) + + # Compute cell volumes + V = getvol(h) + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3), speye(n2), d1) + D2 = kron3(speye(n3), d2, speye(n1)) + D3 = kron3(d3, speye(n2), speye(n1)) + + D = sparse.hstack((D1, D2, D3), format="csr") + return sdiag(1/V)*D*sdiag(S) + +def getGradMatrix(h): + """Construct the 3D nodal gradient operator.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + # Compute lengths of cell edges + L = getlength_e(h) + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3+1), speye(n2+1), d1) + D2 = kron3(speye(n3+1), d2, speye(n1+1)) + D3 = kron3(d3, speye(n2+1), speye(n1+1)) + + G = sparse.vstack((D1, D2, D3), format="csr") + return sdiag(1/L)*G + +def getCurlMatrix(h): + """Construct the 3D curl operator.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + # Compute lengths of cell edges + L = getlength_e(h) + + # Compute areas of cell faces + S = getarea(h) + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + + D32 = kron3(d3, speye(n2), speye(n1+1)) + D23 = kron3(speye(n3), d2, speye(n1+1)) + D31 = kron3(d3, speye(n2+1), speye(n1)) + D13 = kron3(speye(n3), speye(n2+1), d1) + D21 = kron3(speye(n3+1), d2, speye(n1)) + D12 = kron3(speye(n3+1), speye(n2), d1) + + O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) + O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) + O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) + + C = sparse.vstack((sparse.hstack((O1,-D32, D23)), + sparse.hstack((D31,O2, -D13)), + sparse.hstack((-D21,D12, O3))), format="csr") + + return sdiag(1/S)*(C*sdiag(L)) + +def getAverageMatrixF(h): + """Construct the 3D averaging operator on cell faces.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + AvF = sparse.hstack(kron3(speye(n3), speye(n2), av1), + kron3(speye(n3), av2, speye(n3)), + kron3(av3, speye(n2), speye(n3)), format="csr") + return AvF + +def getAverageMatrixE(h): + """Construct the 3D averaging operator on cell edges.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + AvE = sparse.hstack(kron3(av3, av2, speye(n1)), + kron3(av3, speye(n2), av1), + kron3(speye(n3), av2, av1), format="csr") + return AvE \ No newline at end of file diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index 204e71cc..241d9067 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -3,16 +3,24 @@ from scipy import sparse def ddx(n): """Define 1D derivatives""" - return sparse.spdiags((np.ones((n+1,1))*[-1,1]).T, [0,1], n, n+1) + return sparse.spdiags((np.ones((n+1,1))*[-1,1]).T, [0,1], n, n+1, format="csr") def sdiag(h): """Sparse diagonal matrix""" - return sparse.spdiags(h, 0, np.size(h), np.size(h)) + return sparse.spdiags(h, 0, np.size(h), np.size(h), format="csr") def speye(n): """Sparse identity""" - return sparse.identity(n) + return sparse.identity(n, format="csr") def kron3(A, B, C): """Two kron prods""" - return sparse.kron(sparse.kron(A, B), C) \ No newline at end of file + return sparse.kron(sparse.kron(A, B), C, format="csr") + +def spzeros(n1, n2): + """spzeros""" + return sparse.coo_matrix((n1, n2)).tocsr() + +def av(n): + """Define 1D averaging operator""" + return sparse.spdiags((0.5*np.ones((n+1,1))*[1,1]).T, [0,1], n, n+1, format="csr") \ No newline at end of file diff --git a/SimPEG/tests/test_curl.py b/SimPEG/tests/test_curl.py new file mode 100644 index 00000000..8175ab2f --- /dev/null +++ b/SimPEG/tests/test_curl.py @@ -0,0 +1,48 @@ +import numpy as np + +import sys +sys.path.append('../') +from TensorMesh import TensorMesh +from getDiffop import getCurlMatrix + + +err=0. +print '>> Test Curl operator' +for i in range(4): + icount=i+1 + nc = 2**icount + # Define the mesh + h1 = np.ones((1,nc))/nc + h2 = np.ones((1,nc))/nc + h3 = np.ones((1,nc))/nc + h = [h1, h2, h3] + x0 = np.zeros((3, 1)) + M = TensorMesh(h, x0) + #n = M.plotGrid() + + # Generate DIV matrix + CURL = getCurlMatrix(h) + #Test function + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + + Ex = fun(M.gridEx[:,1]) + Ey = fun(M.gridEy[:,2]) + Ez = fun(M.gridEz[:,0]) + E = np.concatenate((Ex,Ey,Ez)) + + Fx = sol(M.gridFx[:,2]) + Fy = sol(M.gridFy[:,0]) + Fz = sol(M.gridFz[:,1]) + curlE_anal = np.concatenate((Fx,Fy,Fz)) + + curlE = CURL*E + err = np.linalg.norm((curlE-curlE_anal), np.inf) + + if icount == 1: + print 'h | inf norm | error ratio' + print '---------------------------------------' + print '%6.4f | %8.2e |'% (h1[0,0], err) + else: + print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + err_old = err \ No newline at end of file diff --git a/SimPEG/tests/test_div.py b/SimPEG/tests/test_div.py index bc0c1a9d..3ab8f6e2 100644 --- a/SimPEG/tests/test_div.py +++ b/SimPEG/tests/test_div.py @@ -5,16 +5,18 @@ sys.path.append('../') from TensorMesh import TensorMesh from getDIV import getDivMatrix, getarea, getvol -# Define the mesh + err=0. +print '>> Test face Divergence operator' for i in range(4): - icount=i+1; - nc = 2*icount; - h1 = np.pi/nc*np.ones((1,nc)) - h2 = np.pi/nc*np.ones((1,nc)) - h3 = np.pi/nc*np.ones((1,nc)) + icount=i+1 + nc = 2**icount + # Define the mesh + h1 = np.ones((1,nc))/nc + h2 = np.ones((1,nc))/nc + h3 = np.ones((1,nc))/nc h = [h1, h2, h3] - x0 = -np.pi/2*np.ones((3, 1)) + x0 = np.zeros((3, 1)) M = TensorMesh(h, x0) #n = M.plotGrid() @@ -34,12 +36,13 @@ for i in range(4): area = getarea(h) vol = getvol(h) - err = np.linalg.norm((divF-divF_anal)*np.sqrt(vol), 2) + #err = np.linalg.norm((divF-divF_anal)*np.sqrt(vol), 2) + err = np.linalg.norm((divF-divF_anal), np.inf) + if icount == 1: - err1 = err - print 'h | 2 norm | error ratio' + print 'h | inf norm | error ratio' print '---------------------------------------' print '%6.4f | %8.2e |'% (h1[0,0], err) else: - print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err1/err) - + print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + err_old = err diff --git a/SimPEG/tests/test_grad.py b/SimPEG/tests/test_grad.py new file mode 100644 index 00000000..a433c28d --- /dev/null +++ b/SimPEG/tests/test_grad.py @@ -0,0 +1,46 @@ +import numpy as np + +import sys +sys.path.append('../') +from TensorMesh import TensorMesh +from getDiffop import getGradMatrix + + +err=0. +print '>> Test nodal Gradient operator' +for i in range(4): + icount=i+1 + nc = 2**icount + # Define the mesh + h1 = np.ones((1,nc))/nc + h2 = np.ones((1,nc))/nc + h3 = np.ones((1,nc))/nc + h = [h1, h2, h3] + x0 = np.zeros((3, 1)) + M = TensorMesh(h, x0) + #n = M.plotGrid() + + # Generate DIV matrix + GRAD = getGradMatrix(h) + #Test function + fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + + phi = fun(M.gridN[:,0], M.gridN[:,1], M.gridN[:,2]) + gradE = GRAD*phi + + Ex = sol(M.gridEx[:,0]) + Ey = sol(M.gridEy[:,1]) + Ez = sol(M.gridEz[:,2]) + + gradE_anal = np.concatenate((Ex,Ey,Ez)) + err = np.linalg.norm((gradE-gradE_anal), np.inf) + + if icount == 1: + print 'h | inf norm | error ratio' + print '---------------------------------------' + print '%6.4f | %8.2e |'% (h1[0,0], err) + else: + print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + err_old = err + From 3680295e5422576281ef361c50e347448ae70acf Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 17 Jul 2013 15:11:38 -0700 Subject: [PATCH 025/359] Deleted unused code. --- SimPEG/getDIV.py | 75 ------------------------------------------------ 1 file changed, 75 deletions(-) delete mode 100644 SimPEG/getDIV.py diff --git a/SimPEG/getDIV.py b/SimPEG/getDIV.py deleted file mode 100644 index 6c45c57c..00000000 --- a/SimPEG/getDIV.py +++ /dev/null @@ -1,75 +0,0 @@ -import numpy as np -from scipy import sparse -from utils import mkvc -from sputils import ddx, sdiag, speye, kron3 - -def getvol(h): - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # Compute cell volumes - v12 = h1.T*h2 - V = mkvc(v12.reshape(-1,1)*h3) - - return V - -def getarea(h): - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - # Compute areas of cell faces - area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) - area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) - area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) - area = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) - - return area - -def getDivMatrix(h): - """Consturct the 3D divergence operator on Faces.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - # Compute areas of cell faces - #area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) - #area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) - #area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) - #area = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) - area = getarea(h) - - S = sdiag(area) - - # Compute cell volumes - #v12 = h1.T*h2 - #V = mkvc(v12.reshape(-1,1)*h3) - V = getvol(h) - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3), speye(n2), d1) - D2 = kron3(speye(n3), d2, speye(n1)) - D3 = kron3(d3, speye(n2), speye(n1)) - - D = sparse.hstack((sparse.hstack((D1, D2)), D3)) - return sdiag(1/V)*D*S - From 1e68873aadf1bdc7cdfd6996346f68711860081d Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Wed, 17 Jul 2013 23:47:31 -0700 Subject: [PATCH 026/359] Added the curl and grad and changed the area,vol such that they can work with h as defined by the grid --- SimPEG/getDiffOpps.py | 150 ++++++++++++++++++++++++++++++++++++++++++ SimPEG/sputils.py | 60 ++++++++++++++++- 2 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 SimPEG/getDiffOpps.py diff --git a/SimPEG/getDiffOpps.py b/SimPEG/getDiffOpps.py new file mode 100644 index 00000000..c8391ab8 --- /dev/null +++ b/SimPEG/getDiffOpps.py @@ -0,0 +1,150 @@ +import numpy as np +from scipy import sparse +from utils import mkvc +from sputils import * +#from sputils import ddx, sdiag, speye, kron3, spzeros, appendBottom3, + +def getvol(h): + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # Compute cell volumes + V = mkvc(np.outer(mkvc(np.outer(h1,h2)),h3)) + + return V + +def getarea(h): + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + # Compute areas of cell faces + area1 = mkvc(np.outer(np.ones(n1+1),np.outer(h2,h3))) + area2 = mkvc(np.outer(h1,mkvc(np.outer(np.ones(n2+1),h3)))) + area3 = mkvc(np.outer(h1,mkvc(np.outer(h2,np.ones(n3+1))))) + area = np.hstack((np.hstack((area1, area2)), area3)) + + return area + +def getLength(h): + + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + # compute the length of each edge + Length1 = mkvc(np.outer(h1,mkvc(np.outer(np.ones(n2+1),np.ones(n3+1))))) + Length2 = mkvc(np.outer(np.ones(n1+1),mkvc(np.outer(h2,np.ones(n3+1))))) + Length3 = mkvc(np.outer(np.ones(n1+1),mkvc(np.outer(np.ones(n2+1),h3)))) + + Length = np.hstack((np.hstack((Length1, Length2)), Length3)) + + return Length + + +def getDivMatrix(h): + """Consturct the 3D divergence operator on Faces.""" + + # Cell sizes in each direction + h1 = h[0] + h2 = h[1] + h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1) + n2 = np.size(h2) + n3 = np.size(h3) + + area = getarea(h) + S = sdiag(area) + + # Compute cell volumes + V = getvol(h) + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3), speye(n2), d1) + D2 = kron3(speye(n3), d2, speye(n1)) + D3 = kron3(d3, speye(n2), speye(n1)) + + D = sparse.hstack((sparse.hstack((D1, D2)), D3)) + return sdiag(1/V)*D*S + + +def getCurlMatrix(h): + """Edge CURL """ + + # Cell sizes in each direction + h1 = h[0]; h2 = h[1]; h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) + + d1 = ddx(n1); d2 = ddx(n2); d3 = ddx(n3) + # derivatives on x-edge variables + D32 = kron3(d3, speye(n2), speye(n1+1)) + D23 = kron3(speye(n3), d2, speye(n1+1)) + D31 = kron3(d3, speye(n2+1), speye(n1)) + D13 = kron3(speye(n3), speye(n2+1), d1) + D21 = kron3(speye(n3+1), d2, speye(n1)) + D12 = kron3(speye(n3+1), speye(n2), d1) + + O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) + O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) + O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) + + CURL = appendBottom3( + appendRight3(O1, -D32, D23), + appendRight3(D31, O2, -D13), + appendRight3(-D21, D12, O3)) + + + area = getarea(h) + S = sdiag(1/area) + + # Compute edge length + lngth = getLength(h) + L = sdiag(lngth) + + return S*(CURL*L) + + +def getNodalGradient(h): + """Nodal Gradients""" + + # Cell sizes in each direction + h1 = h[0]; h2 = h[1]; h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) + + + D1 = kron3(speye(n3+1), speye(n2+1), ddx(n1)) + D2 = kron3(speye(n3+1), ddx(n2), speye(n1+1)) + D3 = kron3(ddx(n3), speye(n2+1), speye(n1+1)) + + # topological gradient + GRAD = appendBottom3(D1, D2, D3) + + # scale for non-uniform mesh + # Compute edge length + lngth = getLength(h) + L = sdiag(1/lngth) + + return L*GRAD diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index 204e71cc..7371e46b 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -1,5 +1,7 @@ import numpy as np from scipy import sparse +from numpy import ones + def ddx(n): """Define 1D derivatives""" @@ -15,4 +17,60 @@ def speye(n): def kron3(A, B, C): """Two kron prods""" - return sparse.kron(sparse.kron(A, B), C) \ No newline at end of file + return sparse.kron(sparse.kron(A, B), C) + +def av(n): + """Define 1D average""" + return 0.5*(sparse.spdiags(ones(n+1), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1)) + +def spzeros(n1, n2): + """spzeros""" + return sparse.coo_matrix((n1, n2)) + +def appendBottom(A, B): + """append on bottom""" + C = sparse.vstack((A, B)) + C = C.tocsr() + return C + + +def appendBottom3(A, B, C): + """append on bottom""" + C = appendBottom(appendBottom(A, B), C) + C = C.tocsr() + return C + + +def appendRight(A, B): + """append on right""" + C = sparse.hstack((A, B)) + C = C.tocsr() + return C + + +def appendRight3(A, B, C): + """append on right""" + C = appendRight(appendRight(A, B), C) + C = C.tocsr() + return C + + +def blkDiag(A, B): + """blockdigonal""" + O12 = sparse.coo_matrix((np.shape(A)[0], np.shape(B)[1])) + O21 = sparse.coo_matrix((np.shape(B)[0], np.shape(A)[1])) + C = sparse.vstack((sparse.hstack((A, O12)), sparse.hstack((O21, B)))) + C = C.tocsr() + return C + + +def blkDiag3(A, B, C): + """blockdigonal 3""" + ABC = blkDiag(blkDiag(A, B), C) + ABC = ABC.tocsr() + return ABC + + + + + \ No newline at end of file From 12b84d14ee9aefddaf72487de5a5ebd743dc7ba1 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Thu, 18 Jul 2013 00:09:48 -0700 Subject: [PATCH 027/359] A few more changes - added mass matrices as well as name conventions --- SimPEG/getDiffOpps.py | 67 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/SimPEG/getDiffOpps.py b/SimPEG/getDiffOpps.py index c8391ab8..bcfe2c8a 100644 --- a/SimPEG/getDiffOpps.py +++ b/SimPEG/getDiffOpps.py @@ -4,7 +4,7 @@ from utils import mkvc from sputils import * #from sputils import ddx, sdiag, speye, kron3, spzeros, appendBottom3, -def getvol(h): +def getVol(h): # Cell sizes in each direction h1 = h[0] @@ -16,7 +16,7 @@ def getvol(h): return V -def getarea(h): +def getArea(h): # Cell sizes in each direction h1 = h[0] @@ -69,11 +69,11 @@ def getDivMatrix(h): n2 = np.size(h2) n3 = np.size(h3) - area = getarea(h) + area = getArea(h) S = sdiag(area) # Compute cell volumes - V = getvol(h) + V = getVol(h) # Compute divergence operator on faces d1 = ddx(n1) @@ -115,7 +115,7 @@ def getCurlMatrix(h): appendRight3(-D21, D12, O3)) - area = getarea(h) + area = getArea(h) S = sdiag(1/area) # Compute edge length @@ -148,3 +148,60 @@ def getNodalGradient(h): L = sdiag(1/lngth) return L*GRAD + + +def getEdgeToCellAverge(h): + + """Average from Edge to Cell center """ + + # Cell sizes in each direction + h1 = h[0]; h2 = h[1]; h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) + + a1 = av(n1); a2 = av(n2); a3 = av(n3) + # derivatives on x-edge variables + A1 = kron3(a3, a2, speye(n1)) + A2 = kron3(a3, speye(n2), a1) + A3 = kron3(speye(n3), a2, a1) + + return appendRight3(A1, A2, A3) + + +def getFaceToCellAverge(h): + + """Average from Edge to Cell center """ + + # Cell sizes in each direction + h1 = h[0]; h2 = h[1]; h3 = h[2] + + # The number of cell centers in each direction + n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) + + a1 = av(n1); a2 = av(n2); a3 = av(n3) + # derivatives on x-edge variables + A1 = kron3(speye(n3), speye(n2), a1) + A2 = kron3(speye(n3), a2, speye(n1)) + A3 = kron3(a3, speye(n2), speye(n1)) + + return appendRight3(A1, A2, A3) + + +def getEdgeMassMatrix(h,sigma): + # mass matix for products of edge functions w'*M(sigma)*e + + Av = getEdgeToCellAverge(h) + v = getVol(h) + sigma = mkvc(sigma) + + return sdiag(Av.T*(v*sigma)) + +def getFaceMassMatrix(h,sigma): + # mass matix for products of edge functions w'*M(sigma)*e + + Av = getFaceToCellAverge(h) + v = getVol(h) + sigma = mkvc(sigma) + + return sdiag(Av.T*(v*sigma)) \ No newline at end of file From ef557beb84ce3d6f39f216e011d2a0fdf0d24cc8 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 18 Jul 2013 10:41:58 -0700 Subject: [PATCH 028/359] Merged Seogi's code into the Tensor Mesh code base. This is under the DiffOperators class, which can be inherited with BaseMesh to any Mesh Object. Cell area and other dimension calculations are included in the TensorMesh class. Wrote unit tests for cell vol, area, and edges. --- SimPEG/DiffOperators.py | 156 +++++++++++++++++++++++++ SimPEG/TensorMesh.py | 79 ++++++++++++- SimPEG/__init__.py | 1 + SimPEG/getDiffop.py | 198 -------------------------------- SimPEG/tests/test_curl.py | 19 ++- SimPEG/tests/test_div.py | 19 ++- SimPEG/tests/test_grad.py | 21 ++-- SimPEG/tests/test_tensorMesh.py | 30 ++++- 8 files changed, 289 insertions(+), 234 deletions(-) create mode 100644 SimPEG/DiffOperators.py delete mode 100644 SimPEG/getDiffop.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py new file mode 100644 index 00000000..f240a44f --- /dev/null +++ b/SimPEG/DiffOperators.py @@ -0,0 +1,156 @@ +import numpy as np +from scipy import sparse +from sputils import ddx, sdiag, speye, kron3, spzeros, av + + +class DiffOperators(object): + """ + Class creates the differential operators that you need! + """ + def __init__(self): + raise Exception('You should use a Mesh class.') + + def DIV(): + doc = "Construct the 3D divergence operator on Faces." + + def fget(self): + if(self._DIV is None): + # The number of cell centers in each direction + n = [x.size for x in self.h] + # Compute divergence operator on faces + dd = [ddx(x) for x in n] + if(self.dim == 1): + D = dd[0] + elif(self.dim == 2): + D1 = sparse.kron(speye(n[1]), dd[0]) + D2 = sparse.kron(dd[1], speye(n[0])) + D = sparse.hstack((D1, D2), format="csr") + elif(self.dim == 3): + D1 = kron3(speye(n[2]), speye(n[1]), dd[0]) + D2 = kron3(speye(n[2]), dd[1], speye(n[0])) + D3 = kron3(dd[2], speye(n[1]), speye(n[0])) + D = sparse.hstack((D1, D2, D3), format="csr") + # Compute areas of cell faces + S = self.area + # Compute cell volumes + V = self.vol + self._DIV = sdiag(1/V)*D*sdiag(S) + + return self._DIV + return locals() + _DIV = None + DIV = property(**DIV()) + + def GRAD(): + doc = "Construct the 3D nodal gradient operator." + + def fget(self): + if(self._GRAD is None): + # The number of cell centers in each direction + n1 = np.size(self.hx) + n2 = np.size(self.hy) + n3 = np.size(self.hz) + + # Compute lengths of cell edges + L = self.edge + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + D1 = kron3(speye(n3+1), speye(n2+1), d1) + D2 = kron3(speye(n3+1), d2, speye(n1+1)) + D3 = kron3(d3, speye(n2+1), speye(n1+1)) + + G = sparse.vstack((D1, D2, D3), format="csr") + self._GRAD = sdiag(1/L)*G + return self._GRAD + return locals() + _GRAD = None + GRAD = property(**GRAD()) + + def CURL(): + doc = "Construct the 3D curl operator." + + def fget(self): + if(self._CURL is None): + # The number of cell centers in each direction + n1 = np.size(self.hx) + n2 = np.size(self.hy) + n3 = np.size(self.hz) + + # Compute lengths of cell edges + L = self.edge + + # Compute areas of cell faces + S = self.area + + # Compute divergence operator on faces + d1 = ddx(n1) + d2 = ddx(n2) + d3 = ddx(n3) + + D32 = kron3(d3, speye(n2), speye(n1+1)) + D23 = kron3(speye(n3), d2, speye(n1+1)) + D31 = kron3(d3, speye(n2+1), speye(n1)) + D13 = kron3(speye(n3), speye(n2+1), d1) + D21 = kron3(speye(n3+1), d2, speye(n1)) + D12 = kron3(speye(n3+1), speye(n2), d1) + + O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) + O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) + O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) + + C = sparse.vstack((sparse.hstack((O1, -D32, D23)), + sparse.hstack((D31, O2, -D13)), + sparse.hstack((-D21, D12, O3))), format="csr") + + self._CURL = sdiag(1/S)*(C*sdiag(L)) + return self._CURL + return locals() + _CURL = None + CURL = property(**CURL()) + + def AVE_F(): + doc = "Construct the 3D averaging operator on cell faces." + + def fget(self): + if(self._AVE_F is None): + # The number of cell centers in each direction + n1 = np.size(self.hx) + n2 = np.size(self.hy) + n3 = np.size(self.hz) + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + self._AVE_F = sparse.hstack(kron3(speye(n3), speye(n2), av1), + kron3(speye(n3), av2, speye(n3)), + kron3(av3, speye(n2), speye(n3)), format="csr") + return self._AVE_F + return locals() + _AVE_F = None + AVE_F = property(**AVE_F()) + + def AVE_E(): + doc = "Construct the 3D averaging operator on cell edges." + + def fget(self): + if(self._AVE_E is None): + # The number of cell centers in each direction + n1 = np.size(self.hx) + n2 = np.size(self.hy) + n3 = np.size(self.hz) + + av1 = av(n1) + av2 = av(n2) + av3 = av(n3) + + self._AVE_E = sparse.hstack(kron3(av3, av2, speye(n1)), + kron3(av3, speye(n2), av1), + kron3(speye(n3), av2, av1), format="csr") + return self._AVE_E + return locals() + _AVE_E = None + AVE_E = property(**AVE_E()) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index 5f5e44b3..023362ae 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -1,10 +1,11 @@ import numpy as np from BaseMesh import BaseMesh from TensorView import TensorView -from utils import ndgrid +from DiffOperators import DiffOperators +from utils import ndgrid, mkvc -class TensorMesh(BaseMesh, TensorView): +class TensorMesh(BaseMesh, TensorView, DiffOperators): """ TensorMesh is a mesh class that deals with tensor product meshes. @@ -186,6 +187,80 @@ class TensorMesh(BaseMesh, TensorView): def getCellNumbering(self): pass + # --------------- Geometries --------------------- + def vol(): + doc = "Construct cell volumes of the 3D model as 1d array." + + def fget(self): + if(self._vol is None): + vh = [mkvc(x, 2) for x in self.h] + # Compute cell volumes + if(self.dim == 1): + self._vol = mkvc(vh[0]) + elif(self.dim == 2): + # Cell sizes in each direction + self._vol = mkvc(vh[0]*vh[1].T) + elif(self.dim == 3): + # Cell sizes in each direction + v12 = vh[0]*vh[1].T + self._vol = mkvc(mkvc(v12, 2)*vh[2].T) + return self._vol + return locals() + _vol = None + vol = property(**vol()) + + def area(): + doc = "Construct face areas of the 3D model as 1d array." + + def fget(self): + if(self._area is None): + # Ensure that we are working with column vectors + vh = [mkvc(x, 2) for x in self.h] + # The number of cell centers in each direction + n = [x.size for x in self.h] + # Compute areas of cell faces + if(self.dim == 1): + self._area = np.ones((n[0]+1, 1)) + elif(self.dim == 2): + area1 = np.ones((n[0]+1, 1))*vh[1].T + area2 = vh[0]*np.ones((n[1]+1, 1)).T + self._area = np.r_[mkvc(area1), mkvc(area2)] + elif(self.dim == 3): + area1 = np.ones((n[0]+1, 1))*mkvc(vh[1]*vh[2].T) + area2 = vh[0]*mkvc(np.ones((n[1]+1, 1))*vh[2].T) + area3 = vh[0]*mkvc(vh[1]*np.ones((n[2]+1, 1)).T) + self._area = np.r_[mkvc(area1), mkvc(area2), mkvc(area3)] + return self._area + return locals() + _area = None + area = property(**area()) + + def edge(): + doc = "Construct edge legnths of the 3D model as 1d array." + + def fget(self): + if(self._area is None): + # Ensure that we are working with column vectors + vh = [mkvc(x, 2) for x in self.h] + # The number of cell centers in each direction + n = [x.size for x in self.h] + # Compute edge lengths + if(self.dim == 1): + self._edge = mkvc(vh[0]) + elif(self.dim == 2): + l1 = vh[0]*np.ones((n[1]+1, 1)).T + l2 = np.ones((n[0]+1, 1))*vh[1].T + self._edge = np.r_[mkvc(l1), mkvc(l2)] + elif(self.dim == 3): + l1 = vh[0]*mkvc(np.ones((n[1]+1, 1))*np.ones((n[2]+1, 1)).T) + l2 = np.ones((n[0]+1, 1))*mkvc(vh[1]*np.ones((n[2]+1, 1)).T) + l3 = np.ones((n[0]+1, 1))*mkvc(np.ones((n[1]+1, 1))*vh[2].T) + self._edge = np.r_[mkvc(l1), mkvc(l2), mkvc(l3)] + return self._edge + return locals() + _edge = None + edge = property(**edge()) + if __name__ == '__main__': print('Welcome to tensor mesh!') diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index 2d1b1e99..bcbba681 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1 +1,2 @@ from TensorMesh import TensorMesh +import utils diff --git a/SimPEG/getDiffop.py b/SimPEG/getDiffop.py deleted file mode 100644 index 6debc348..00000000 --- a/SimPEG/getDiffop.py +++ /dev/null @@ -1,198 +0,0 @@ -import numpy as np -from scipy import sparse -from utils import mkvc -from sputils import ddx, sdiag, speye, kron3, spzeros, av - -def getvol(h): - """Construct cell volumes of the 3D model as 1d array.""" - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # Compute cell volumes - v12 = h1.T*h2 - V = mkvc(v12.reshape(-1,1)*h3) - - return V - -def getarea(h): - """Construct face areas of the 3D model as 1d array.""" - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - # Compute areas of cell faces - area1 = np.ones((n1+1,1))*mkvc(h2.T*h3) - area2 = h1.T*mkvc(np.ones((n2+1,1))*h3) - area3 = h1.T*mkvc(h2.T*np.ones(n3+1)) - area = np.concatenate((mkvc(area1), mkvc(area2), mkvc(area3)), axis=0) - - return area - -def getlength_e(h): - """Construct edge legnths of the 3D model as 1d array.""" - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - # Compute areas of cell faces - l1 = h1.T*mkvc(np.ones((n2+1,1))*np.ones(n3+1)) - l2 = np.ones((n1+1,1))*mkvc(h2.T*np.ones(n3+1)) - l3 = np.ones((n1+1,1))*mkvc(np.ones((n2+1,1))*h3) - #l = np.hstack((np.hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) - l = np.concatenate((mkvc(l1), mkvc(l2), mkvc(l3)), axis=0) - - return l - -def getDivMatrix(h): - """Construct the 3D divergence operator on Faces.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - # Compute areas of cell faces - S = getarea(h) - - # Compute cell volumes - V = getvol(h) - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3), speye(n2), d1) - D2 = kron3(speye(n3), d2, speye(n1)) - D3 = kron3(d3, speye(n2), speye(n1)) - - D = sparse.hstack((D1, D2, D3), format="csr") - return sdiag(1/V)*D*sdiag(S) - -def getGradMatrix(h): - """Construct the 3D nodal gradient operator.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - # Compute lengths of cell edges - L = getlength_e(h) - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3+1), speye(n2+1), d1) - D2 = kron3(speye(n3+1), d2, speye(n1+1)) - D3 = kron3(d3, speye(n2+1), speye(n1+1)) - - G = sparse.vstack((D1, D2, D3), format="csr") - return sdiag(1/L)*G - -def getCurlMatrix(h): - """Construct the 3D curl operator.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - # Compute lengths of cell edges - L = getlength_e(h) - - # Compute areas of cell faces - S = getarea(h) - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - - D32 = kron3(d3, speye(n2), speye(n1+1)) - D23 = kron3(speye(n3), d2, speye(n1+1)) - D31 = kron3(d3, speye(n2+1), speye(n1)) - D13 = kron3(speye(n3), speye(n2+1), d1) - D21 = kron3(speye(n3+1), d2, speye(n1)) - D12 = kron3(speye(n3+1), speye(n2), d1) - - O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) - O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) - O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) - - C = sparse.vstack((sparse.hstack((O1,-D32, D23)), - sparse.hstack((D31,O2, -D13)), - sparse.hstack((-D21,D12, O3))), format="csr") - - return sdiag(1/S)*(C*sdiag(L)) - -def getAverageMatrixF(h): - """Construct the 3D averaging operator on cell faces.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - AvF = sparse.hstack(kron3(speye(n3), speye(n2), av1), - kron3(speye(n3), av2, speye(n3)), - kron3(av3, speye(n2), speye(n3)), format="csr") - return AvF - -def getAverageMatrixE(h): - """Construct the 3D averaging operator on cell edges.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - AvE = sparse.hstack(kron3(av3, av2, speye(n1)), - kron3(av3, speye(n2), av1), - kron3(speye(n3), av2, av1), format="csr") - return AvE \ No newline at end of file diff --git a/SimPEG/tests/test_curl.py b/SimPEG/tests/test_curl.py index 8175ab2f..e4d9812c 100644 --- a/SimPEG/tests/test_curl.py +++ b/SimPEG/tests/test_curl.py @@ -3,7 +3,6 @@ import numpy as np import sys sys.path.append('../') from TensorMesh import TensorMesh -from getDiffop import getCurlMatrix err=0. @@ -11,7 +10,7 @@ print '>> Test Curl operator' for i in range(4): icount=i+1 nc = 2**icount - # Define the mesh + # Define the mesh h1 = np.ones((1,nc))/nc h2 = np.ones((1,nc))/nc h3 = np.ones((1,nc))/nc @@ -21,28 +20,28 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - CURL = getCurlMatrix(h) + CURL = M.CURL #Test function fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) - + Ex = fun(M.gridEx[:,1]) Ey = fun(M.gridEy[:,2]) Ez = fun(M.gridEz[:,0]) - E = np.concatenate((Ex,Ey,Ez)) + E = np.concatenate((Ex,Ey,Ez)) Fx = sol(M.gridFx[:,2]) Fy = sol(M.gridFy[:,0]) Fz = sol(M.gridFz[:,1]) - curlE_anal = np.concatenate((Fx,Fy,Fz)) + curlE_anal = np.concatenate((Fx,Fy,Fz)) - curlE = CURL*E + curlE = CURL*E err = np.linalg.norm((curlE-curlE_anal), np.inf) if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' + print 'h | inf norm | error ratio' + print '---------------------------------------' print '%6.4f | %8.2e |'% (h1[0,0], err) else: print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) - err_old = err \ No newline at end of file + err_old = err \ No newline at end of file diff --git a/SimPEG/tests/test_div.py b/SimPEG/tests/test_div.py index 3ab8f6e2..35f4e408 100644 --- a/SimPEG/tests/test_div.py +++ b/SimPEG/tests/test_div.py @@ -3,7 +3,6 @@ import numpy as np import sys sys.path.append('../') from TensorMesh import TensorMesh -from getDIV import getDivMatrix, getarea, getvol err=0. @@ -11,7 +10,7 @@ print '>> Test face Divergence operator' for i in range(4): icount=i+1 nc = 2**icount - # Define the mesh + # Define the mesh h1 = np.ones((1,nc))/nc h2 = np.ones((1,nc))/nc h3 = np.ones((1,nc))/nc @@ -21,28 +20,26 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - DIV = getDivMatrix(h) - + DIV = M.DIV + #Test function fun = lambda x: np.sin(x) Fx = fun(M.gridFx[:,0]) Fy = fun(M.gridFy[:,1]) Fz = fun(M.gridFz[:,2]) - + F = np.concatenate((Fx,Fy,Fz)) divF = DIV*F sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) divF_anal = sol(M.gridCC[:,0], M.gridCC[:,1], M.gridCC[:,2]) - - area = getarea(h) - vol = getvol(h) + #err = np.linalg.norm((divF-divF_anal)*np.sqrt(vol), 2) err = np.linalg.norm((divF-divF_anal), np.inf) if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' + print 'h | inf norm | error ratio' + print '---------------------------------------' print '%6.4f | %8.2e |'% (h1[0,0], err) else: print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) - err_old = err + err_old = err diff --git a/SimPEG/tests/test_grad.py b/SimPEG/tests/test_grad.py index a433c28d..245d9111 100644 --- a/SimPEG/tests/test_grad.py +++ b/SimPEG/tests/test_grad.py @@ -3,15 +3,14 @@ import numpy as np import sys sys.path.append('../') from TensorMesh import TensorMesh -from getDiffop import getGradMatrix err=0. -print '>> Test nodal Gradient operator' +print '>> Test nodal Gradient operator' for i in range(4): icount=i+1 nc = 2**icount - # Define the mesh + # Define the mesh h1 = np.ones((1,nc))/nc h2 = np.ones((1,nc))/nc h3 = np.ones((1,nc))/nc @@ -21,11 +20,11 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - GRAD = getGradMatrix(h) + GRAD = M.GRAD #Test function - fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) - + phi = fun(M.gridN[:,0], M.gridN[:,1], M.gridN[:,2]) gradE = GRAD*phi @@ -33,14 +32,14 @@ for i in range(4): Ey = sol(M.gridEy[:,1]) Ez = sol(M.gridEz[:,2]) - gradE_anal = np.concatenate((Ex,Ey,Ez)) + gradE_anal = np.concatenate((Ex,Ey,Ez)) err = np.linalg.norm((gradE-gradE_anal), np.inf) if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' + print 'h | inf norm | error ratio' + print '---------------------------------------' print '%6.4f | %8.2e |'% (h1[0,0], err) else: print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) - err_old = err - + err_old = err + diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index e1b74374..2a6cb0a1 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -10,8 +10,9 @@ class TestSequenceFunctions(unittest.TestCase): def setUp(self): a = np.array([1, 1, 1]) b = np.array([1, 2]) - x0 = np.array([3, 5]) - self.mesh2 = TensorMesh([a, b], x0) + c = np.array([1, 4]) + self.mesh2 = TensorMesh([a, b], np.array([3, 5])) + self.mesh3 = TensorMesh([a, b, c]) def test_vectorN_2D(self): testNx = np.array([3, 4, 5, 6]) @@ -29,6 +30,31 @@ class TestSequenceFunctions(unittest.TestCase): ytest = np.all(self.mesh2.vectorCCy == testNy) self.assertTrue(xtest and ytest) + def test_area_3D(self): + test_area = np.array([1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2]) + t1 = np.all(self.mesh3.area == test_area) + self.assertTrue(t1) + + def test_vol_3D(self): + test_vol = np.array([1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8]) + t1 = np.all(self.mesh3.vol == test_vol) + self.assertTrue(t1) + + def test_vol_2D(self): + test_vol = np.array([1, 1, 1, 2, 2, 2]) + t1 = np.all(self.mesh2.vol == test_vol) + self.assertTrue(t1) + + def test_edge_3D(self): + test_edge = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]) + t1 = np.all(self.mesh3.edge == test_edge) + self.assertTrue(t1) + + def test_edge_2D(self): + test_edge = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]) + t1 = np.all(self.mesh2.edge == test_edge) + self.assertTrue(t1) + if __name__ == '__main__': unittest.main() From 1c48365497c0c8d782a46e00e5c7e4aa411e5060 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 18 Jul 2013 14:03:41 -0700 Subject: [PATCH 029/359] Rename based on conventions discussed in meeting. --- SimPEG/DiffOperators.py | 78 +++++++++++++++++++-------------------- SimPEG/tests/test_curl.py | 2 +- SimPEG/tests/test_div.py | 2 +- SimPEG/tests/test_grad.py | 2 +- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index f240a44f..f9d1f0aa 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -10,15 +10,15 @@ class DiffOperators(object): def __init__(self): raise Exception('You should use a Mesh class.') - def DIV(): - doc = "Construct the 3D divergence operator on Faces." + def faceDiv(): + doc = "Construct the 3D Divergence operator on Faces." def fget(self): - if(self._DIV is None): + if(self._faceDiv is None): # The number of cell centers in each direction - n = [x.size for x in self.h] - # Compute divergence operator on faces - dd = [ddx(x) for x in n] + n = [hk.size for hk in self.h] + # Compute faceDivergence operator on faces + dd = [ddx(k) for k in n] if(self.dim == 1): D = dd[0] elif(self.dim == 2): @@ -34,18 +34,18 @@ class DiffOperators(object): S = self.area # Compute cell volumes V = self.vol - self._DIV = sdiag(1/V)*D*sdiag(S) + self._faceDiv = sdiag(1/V)*D*sdiag(S) - return self._DIV + return self._faceDiv return locals() - _DIV = None - DIV = property(**DIV()) + _faceDiv = None + faceDiv = property(**faceDiv()) - def GRAD(): + def nodalGrad(): doc = "Construct the 3D nodal gradient operator." def fget(self): - if(self._GRAD is None): + if(self._nodalGrad is None): # The number of cell centers in each direction n1 = np.size(self.hx) n2 = np.size(self.hy) @@ -63,17 +63,17 @@ class DiffOperators(object): D3 = kron3(d3, speye(n2+1), speye(n1+1)) G = sparse.vstack((D1, D2, D3), format="csr") - self._GRAD = sdiag(1/L)*G - return self._GRAD + self._nodalGrad = sdiag(1/L)*G + return self._nodalGrad return locals() - _GRAD = None - GRAD = property(**GRAD()) + _nodalGrad = None + nodalGrad = property(**nodalGrad()) - def CURL(): + def edgeCurl(): doc = "Construct the 3D curl operator." def fget(self): - if(self._CURL is None): + if(self._edgeCurl is None): # The number of cell centers in each direction n1 = np.size(self.hx) n2 = np.size(self.hy) @@ -105,17 +105,17 @@ class DiffOperators(object): sparse.hstack((D31, O2, -D13)), sparse.hstack((-D21, D12, O3))), format="csr") - self._CURL = sdiag(1/S)*(C*sdiag(L)) - return self._CURL + self._edgeCurl = sdiag(1/S)*(C*sdiag(L)) + return self._edgeCurl return locals() - _CURL = None - CURL = property(**CURL()) + _edgeCurl = None + edgeCurl = property(**edgeCurl()) - def AVE_F(): - doc = "Construct the 3D averaging operator on cell faces." + def faceAve(): + doc = "Construct the 3D averaging operator on cell faces to cell centers." def fget(self): - if(self._AVE_F is None): + if(self._faceAve is None): # The number of cell centers in each direction n1 = np.size(self.hx) n2 = np.size(self.hy) @@ -125,19 +125,19 @@ class DiffOperators(object): av2 = av(n2) av3 = av(n3) - self._AVE_F = sparse.hstack(kron3(speye(n3), speye(n2), av1), - kron3(speye(n3), av2, speye(n3)), - kron3(av3, speye(n2), speye(n3)), format="csr") - return self._AVE_F + self._faceAve = sparse.hstack(kron3(speye(n3), speye(n2), av1), + kron3(speye(n3), av2, speye(n3)), + kron3(av3, speye(n2), speye(n3)), format="csr") + return self._faceAve return locals() - _AVE_F = None - AVE_F = property(**AVE_F()) + _faceAve = None + faceAve = property(**faceAve()) - def AVE_E(): + def edgeAve(): doc = "Construct the 3D averaging operator on cell edges." def fget(self): - if(self._AVE_E is None): + if(self._edgeAve is None): # The number of cell centers in each direction n1 = np.size(self.hx) n2 = np.size(self.hy) @@ -147,10 +147,10 @@ class DiffOperators(object): av2 = av(n2) av3 = av(n3) - self._AVE_E = sparse.hstack(kron3(av3, av2, speye(n1)), - kron3(av3, speye(n2), av1), - kron3(speye(n3), av2, av1), format="csr") - return self._AVE_E + self._edgeAve = sparse.hstack(kron3(av3, av2, speye(n1)), + kron3(av3, speye(n2), av1), + kron3(speye(n3), av2, av1), format="csr") + return self._edgeAve return locals() - _AVE_E = None - AVE_E = property(**AVE_E()) + _edgeAve = None + edgeAve = property(**edgeAve()) diff --git a/SimPEG/tests/test_curl.py b/SimPEG/tests/test_curl.py index e4d9812c..d8ee0018 100644 --- a/SimPEG/tests/test_curl.py +++ b/SimPEG/tests/test_curl.py @@ -20,7 +20,7 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - CURL = M.CURL + CURL = M.edgeCurl #Test function fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) diff --git a/SimPEG/tests/test_div.py b/SimPEG/tests/test_div.py index 35f4e408..dd469a3f 100644 --- a/SimPEG/tests/test_div.py +++ b/SimPEG/tests/test_div.py @@ -20,7 +20,7 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - DIV = M.DIV + DIV = M.faceDiv #Test function fun = lambda x: np.sin(x) diff --git a/SimPEG/tests/test_grad.py b/SimPEG/tests/test_grad.py index 245d9111..58401dc7 100644 --- a/SimPEG/tests/test_grad.py +++ b/SimPEG/tests/test_grad.py @@ -20,7 +20,7 @@ for i in range(4): #n = M.plotGrid() # Generate DIV matrix - GRAD = M.GRAD + GRAD = M.nodalGrad #Test function fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) From 565e9cf3630c2f551b7278ca5b4856117bb2d593 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Thu, 18 Jul 2013 14:25:19 -0700 Subject: [PATCH 030/359] plotImage can now handle face and edge staggered input removed strange axes in plotImage --- SimPEG/TensorView.py | 81 +++++++++++++++++++++++++++++---- notebooks/exPlotImage2D.ipynb | 86 ++++++++++++++++++++--------------- 2 files changed, 122 insertions(+), 45 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index d78753ed..29622c9b 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -14,10 +14,26 @@ class TensorView(object): pass def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True): + """ + Mesh.plotImage(I) + Plots scalar fields on the given mesh. + + Input: + + I - scalar field (np.array) + + Optional Input: + + imageType - type of image ('CC','N','Fx','Fy','Fz','Ex','Ey','Ez') + figNum - number of figure to plot to + ax - axis to plot to + direction - 3D only. slice dimensions + numbering - 3D only. show numbering of slices + """ assert type(I) == np.ndarray, "I must be a numpy array" assert type(numbering) == bool, "numbering must be a bool" - assert imageType in ["CC", "N"], "imageType must be 'CC' or 'N'" + assert imageType in ["CC", "N","Fx","Fy","Fz","Ex","Ey","Ez"], "imageType must be 'CC', 'N','Fx','Fy','Fz','Ex','Ey','Ez'" assert direction in ["x", "y","z"], "direction must be either x,y, or z" @@ -25,6 +41,18 @@ class TensorView(object): assert I.size == self.nC, "Incorrect dimensions for CC." elif imageType == 'N': assert I.size == self.nN, "Incorrect dimensions for N." + elif imageType == 'Fx': + assert I.size == np.prod(self.nFx), "Incorrect dimensions for Fx." + elif imageType == 'Fy': + assert I.size == np.prod(self.nFy), "Incorrect dimensions for Fy." + elif imageType == 'Fz': + assert I.size == np.prod(self.nFz), "Incorrect dimensions for Fz." + elif imageType == 'Ex': + assert I.size == np.prod(self.nEx), "Incorrect dimensions for Ex." + elif imageType == 'Ey': + assert I.size == np.prod(self.nEy), "Incorrect dimensions for Ey." + elif imageType == 'Ez': + assert I.size == np.prod(self.nEz), "Incorrect dimensions for Ez." if ax is None: fig = plt.figure(figNum) @@ -39,7 +67,6 @@ class TensorView(object): ph = ax.plot(self.vectorCCx, I, '-ro') elif imageType == 'N': ph = ax.plot(self.vectorNx, I, '-bs') - ax.set_xticks(self.vectorNx) ax.set_xlabel("x") ax.axis('tight') elif self.dim == 2: @@ -48,21 +75,58 @@ class TensorView(object): elif imageType == 'N': C = I[:].reshape(self.n+1, order='F') C = 0.25*(C[:-1, :-1] + C[1:, :-1] + C[:-1, 1:] + C[1:, 1:]) + elif imageType == 'Fx': + C = I[:].reshape(self.nFx, order='F') + C = 0.5*(C[:-1, :] + C[1:, :] ) + elif imageType == 'Fy': + C = I[:].reshape(self.nFy, order='F') + C = 0.5*(C[:, :-1] + C[:, 1:] ) + elif imageType == 'Ex': + C = I[:].reshape(self.nEx, order='F') + C = 0.5*(C[:,:-1] + C[:,1:] ) + elif imageType == 'Ey': + C = I[:].reshape(self.nEy, order='F') + C = 0.5*(C[:-1,:] + C[1:,:] ) ph = ax.pcolormesh(self.vectorNx, self.vectorNy, C.T) ax.axis('tight') ax.set_xlabel("x") ax.set_ylabel("y") - ax.set_xticks(self.vectorNx) - ax.set_yticks(self.vectorNy) elif self.dim == 3: if direction == 'z': + + # get copy of image and average to cell-centres is necessary + if imageType == 'CC': + Ic = I[:].reshape(self.n, order='F') + elif imageType == 'N': + Ic = I[:].reshape(self.n+1, order='F') + Ic = .125*(Ic[:-1,:-1,:-1]+Ic[1:,:-1,:-1] + Ic[:-1,1:,:-1]+ Ic[1:,1:,:-1]+ Ic[:-1,:-1,1:]+Ic[1:,:-1,1:] + Ic[:-1,1:,1:]+ Ic[1:,1:,1:] ) + elif imageType == 'Fx': + Ic = I[:].reshape(self.nFx, order='F') + Ic = .5*(Ic[:-1,:,:]+Ic[1:,:,:]) + elif imageType == 'Fy': + Ic = I[:].reshape(self.nFy, order='F') + Ic = .5*(Ic[:,:-1,:]+Ic[:,1:,:]) + elif imageType == 'Fz': + Ic = I[:].reshape(self.nFz, order='F') + Ic = .5*(Ic[:,:,:-1]+Ic[:,:,1:]) + elif imageType == 'Ex': + Ic = I[:].reshape(self.nEx, order='F') + Ic = .25*(Ic[:,:-1,:-1]+Ic[:,1:,:-1]+Ic[:,:-1,1:]+Ic[:,1:,:1]) + elif imageType == 'Ey': + Ic = I[:].reshape(self.nEy, order='F') + Ic = .25*(Ic[:-1,:,:-1]+Ic[1:,:,:-1]+Ic[:-1,:,1:]+Ic[1:,:,:1]) + elif imageType == 'Ez': + Ic = I[:].reshape(self.nEz, order='F') + Ic = .25*(Ic[:-1,:-1,:]+Ic[1:,:-1,:]+Ic[:-1,1:,:]+Ic[1:,:1,:]) + + # determine number oE slices in x and y dimension nX = np.ceil(np.sqrt(self.nCz)) nY = np.ceil(self.nCz/nX) - C = np.zeros((nX*self.nCx, nY*self.nCy)) + # allocate space for montage + C = np.zeros((nX*self.nCx,nY*self.nCz)) - Ic = I[:].reshape(self.n, order='F') nCx = self.nCx nCy = self.nCy @@ -94,8 +158,9 @@ class TensorView(object): for iy in range(int(nY)): for ix in range(int(nX)): iz = ix + iy*nX - ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, - '#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large') + if iz < self.nCz: + ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, + '#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large') fig.show() return ph diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb index f75e96d5..e46d6472 100644 --- a/notebooks/exPlotImage2D.ipynb +++ b/notebooks/exPlotImage2D.ipynb @@ -21,7 +21,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 8 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -37,13 +37,13 @@ "collapsed": false, "input": [ "x0 = np.zeros(1)\n", - "h = np.random.rand(51)\n", + "h = np.random.rand(32)\n", "mesh = TensorMesh([h],x0)" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 9 + "prompt_number": 2 }, { "cell_type": "code", @@ -55,21 +55,40 @@ "\n", "fig = plt.figure(1)\n", "fig.clf()\n", - "ph1 = mesh.plotImage(sin(xc),ax=subplot(111))\n", - "ph2 = mesh.plotImage(sin(xn),ax=subplot(111),imageType='N')\n" + "ax1 = subplot(121)\n", + "ax2 = subplot(122)\n", + "ph1 = mesh.plotImage(sin(xc),ax=ax1)\n", + "ph2 = mesh.plotImage(sin(xn),ax=ax2,imageType='N')\n", + "ax1.set_title('sin(x) on CC grid')\n", + "ax2.set_title('sin(x) on N grid')" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "display_data", - "png": "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\ncnKycPz+++9ndnY2SdJoNAr3CwCVSiVXrlzJtLQ0arVa9unTh2SL/n3AgAGXPVd3d3fW1tayubmZ\nEomEWVlZJMmePXsyMTGRERERwvVGjRpFJycn1tTUcOLEiQRAvV5PR0dHSqVSwdC3aNEi/uMf/2gz\nU/jmm2+E52wwGITZVWhoKO3s7Jidnc0pU6YwJSWFS5Ysob29PXft2sWLFy8KM4Bu3boxLS2NY8aM\nuez+p6enC3ad1mfxyiuvMCoqiu7u7jQYDPTx8RFmM25ubm2Mnq0fT09Purq6Cu21ta56vZ7//ve/\nKZfLGR8fz4CAAK5atYpKpZIJCQnU6/U0GAxUqVTUarWCk0XrzEAmk/Hzzz8XbBcajYbPPvssAwMD\n+eqrrzI/P1+oj52dHe3t7YUZxMcff0x3d3d6eXkJRlmZTMZnnnmGPj4+lEgklMvlQtmtI3CdTsfE\nxERmZ2ezurpamBnPmjVLaLOtzJo1i35+fvzwww/p4eHBCxcu0MbGhu+88w5Jsrq6mjY2NvT09OTo\n0aP5wAMPsFOnThw1ahR37drFPXv2MCoqit27d+cTTzzBvn37MigoiMHBwZw3bx7JFieH5ORkJiUl\nMTAwUOgbFy5coJOTE59//vk2/ffzzz+nl5cXn3jiCQ4aNEhwaPjzc3N0dBTeCSkpKcIz9/LyEu6J\nSqXi66+/TpLcu3cvbW1t6eLiQoPBQKlUSjs7O3bu3Jl1dXVCnWJiYgS7HknhfUKSe/bsYbdu3YR0\n3bt3Z//+/Tlv3jy+8MILXLVqFZ977jm6u7tTpVKxrq6OUqlU6OfV1dXU6XSCU8VfXSMtLY2xsbF8\n6qmnmJ6ezrFjxwpt+dJ2WVJSclm/bqVdZwoODg6QyWQ4f/481q5di6qqKuzevRsmkwnV1dVobm6G\nr68vTp48if3796OkpAQlJSWCTjEkJASdO3dGTEwMtFotFAoF9Ho99Hq9MBrv168fSkpKsHfvXhw7\ndgxubm6wtbXFf/7zH7z11ls4fvw48vPz8c0336BPnz54/fXX0bt3b4wYMQJvvPEGzp49i8rKSgCA\nXq9HWloaevXqhR9++AGJiYmYM2cO4uPjcc8992DZsmVITEzE999/j7y8PHTv3h2hoaH46quvUFpa\nioyMDAwcOBCTJ0+GVqvF1q1b8d1336FPnz746quvAAC1tbU4f/48mpqacPLkSaxduxaHDx9G//79\n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\n", + "output_type": "stream", + "stream": "stderr", "text": [ - "" + "/Users/larsruthotto/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.py:362: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", + " \"matplotlib is currently using a non-GUI backend, \"\n" + ] + }, + { + "output_type": "pyout", + "prompt_number": 3, + "text": [ + "" + ] + }, + { + "output_type": "display_data", + "png": "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\nFHeJRCKxIP8f8Dc5GSDGi2gAAAAASUVORK5CYII=\n", + "text": [ + "" ] } ], - "prompt_number": 10 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -92,7 +111,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 11 + "prompt_number": 4 }, { "cell_type": "code", @@ -103,29 +122,30 @@ "ax1 = subplot(121)\n", "ax2 = subplot(122)\n", "mesh.plotImage(mesh.gridCC[:,0],ax = ax1)\n", - "ax1.set_title('x coordinates') \n", - "mesh.plotImage(mesh.gridCC[:,1],ax = ax2)\n", - "ax2.set_title('y coordinates') " + "ax1.set_title('mesh.gridCC[:,0]') \n", + "mesh.plotImage(mesh.gridFx[:,1],ax = ax2,imageType='Fx')\n", + "ax2.set_title('mesh.gridFx[:,1]') \n", + "\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 5, "text": [ - "" + "" ] }, { "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAETCAYAAAA23nEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGVVJREFUeJzt3XtwVOX9x/HPRlIMoCEkEeyAidFIEiABciNcYytgJ5VL\ny4jRosLghLZyLYxFy7A4SjuiAqYKkbGtlMvQAgW8VApNkyhIEm4/IMAgkZUKFAhikHAxDM/vD44L\nkQSScE422bxfMzvuyXnynO/ufA+f3SdnV5cxxggA0OwF+LoAAEDjQCAAACQRCAAAC4EAAJBEIAAA\nLAQCAEASgeCXIiMjlZubK0maPXu2nnnmGR9XBNw6+tp5LXxdAOzncrm8959//nnb5g0ICNDBgwcV\nFRVl25xAbdHXzuMdQhN26dKlBj8mn2OE0+hr3yEQ6qC0tFShoaHasWOHJOno0aMKDw9XQUFBtePL\nysr0+uuvq1u3bgoLC9P48eO9+9atW6eBAweqW7duWrhwoc6dO+fdt337dj399NOKjIzUjBkzdPTo\nUe++yMhIvfXWW+rdu7fatm2ry5cv69NPP9WgQYMUGRmp7OzsKjW43W6NGjVKkuTxeBQQEKDVq1cr\nNjZW8fHxWrJkiXdsUVGR0tLSFBISorS0NP3xj3/0npz9+/eXJCUkJOiOO+7Q3//+d0nSrl27NG7c\nON1zzz36zW9+o8OHD3vne+edd5SWlqbg4GDFxMR43+6jcZkzZ45GjBhR5WcTJkzQpEmTqh1PX/tx\nXxvUyaJFi0xcXJw5d+6cGTRokJk2bVqNY4cMGWJGjRplPvvsM3Px4kXzySefGGOMyc3NNffcc4/Z\nsGGDOXDggPnxj39sZs6caYwxpqKiwrRp08YsWrTInDhxwkyYMMEMGDDAO2dkZKSJi4szBQUF5sKF\nC+b06dOmVatW5t133zVHjhwxTzzxhAkMDDT//ve/jTHGuN1u84tf/MIYY8yhQ4eMy+UyI0eONIcP\nHzbr1683LVu2NOfPnzfGGLNt2zZTWFhoLl26ZDZt2mQiIiLMhg0bvMd2uVymtLTUu11WVmZCQkLM\nmjVrTHl5uZk9e7bp3bu3McaYkydPmo4dO5oDBw4YY4z54osvqvwuGo9jx46Z1q1bm6+//toYY0xl\nZaW56667zPbt26sdT1/7b18TCPUwZMgQ07VrV5OQkGC+/fbbasd8/fXXplWrVqasrOy6fRMmTDDT\np0/3bm/YsMHEx8cbY4xZvXq1SUtL8+6rqKioMk9kZKR58cUXvftXrFhh+vXr590uLS01LpfLe+LM\nnDnzuhNn27Zt3vGdO3c2//znP6t9DC+88IJ59tlnvdvfP3Hefvtt88wzz3i3L126ZO666y5z/Phx\nU1ZWZkJDQ837779f43OExuPhhx82ixYtMsYY895775kuXbpUO46+9u++ZsmoHsaOHauSkhKNHz9e\ngYGB1Y7ZtGmTIiIiFBoaet2+zZs3KzEx0budmJio3bt368yZM9q0aZN69uzp3deqVStFR0dr8+bN\n3p+lpqZ67xcVFSkhIcG7HRUVpeDg4BvW3717d+/9u+++2/vW/ciRIxo3bpzi4+N15513au7cudq1\na1eN82zcuFFLly5VSEiIQkJCFBYWpoqKChUUFCg0NFR//etfNXfuXN19992aNGmSTp48ecO64DtP\nPfWUd5llyZIl3uWY76Ov/buvCYQ6Onv2rCZNmqSxY8dq5syZOn36dLXjevfurS+++EKnTp26bl+f\nPn20detW7/bWrVu9zdq3b19t27bNu6+iokKfffaZevfu7f1ZixZXLw5LSUnRzp07vdulpaUqLy+v\n12N76aWXVFlZqQ8//FDl5eWaPHmyLl++7N0fEBBQ5Y9vP/rRj/Tkk0/q9OnT3tvZs2e969E/+clP\ntHHjRu3du1eHDh3SK6+8Uq+64LyhQ4dq165d2rNnjz744AM98cQT1Y6jr/27rwmEOpo4caJSUlL0\n9ttvKyMjQ+PGjat2XNu2bTVw4EBNmTJFBw8e1IULF7yvhoYOHarly5crNzdXBw8e1Jw5czRs2DBJ\n0sCBA1VSUqI//elPOnHihH73u98pOTm52ldkkjRo0CBt375dS5cu1dGjRzVr1qwqJ1ZdHD16VO3a\ntVNoaKjy8vK0ePHiKvsTExOrnPAjR47U6tWrtWbNGlVUVKiiokIffPCBzp49qwMHDig3N1cXL17U\nD37wA7Vs2VJ33HFHveqC84KCgvTzn/9cjz/+uFJTU9WxY8dqx9HX/t3XBEIdrF27Vv/617+0YMEC\nSdLrr7+u7du3a/ny5dWOf+edd9S1a1f99Kc/VadOnfS3v/1NkpSenq65c+dq9uzZGjZsmIYOHapp\n06ZJklq3bq3c3Fzl5+crOTlZQUFBWrp0aY01tW3bVuvXr9ef//xnpaWlKSUlpcrJ7HK5qly/fe39\n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\nIAfeIdTmGyFTU1O1d+9e7/bJkycVFRV13VzfnVzcuDl1o7e5+eutPmwPhNp8I2RqaqpWrVqlU6dO\nadmyZYqNjbW7DMB29Db8nSNLRjf7RsiUlBT17dtXSUlJateunZYsWeJEGYDt6G34NdMI5Ofnm5iY\nGHP//febN954o9oxv/3tb829995revbsafbt21fnOfbt22d69eplWrZsaV599VXbH4NdavNcGGNM\nUVGRue2228yqVasasLqm6WbP6ZkzZ8yUKVNMQkKC6dWrlzl48GCDHNeY5tPXxtDbdnOirxtFIHTv\n3t3k5+cbj8djOnfubE6ePFllf2FhoenTp485deqUWbZsmcnIyKjzHCdOnDDFxcXmhRdeaNQnzs0e\nhzHGXLp0yTz44IMmIyPDrFy50gdVNi03e05zcnLM+PHjjTHGbN682fzsZz9rkOM2p742ht62mxN9\n7fOvrrDj2u7azBEeHq6kpCQFBgY6+GhuTW0ehyRlZ2drxIgRCg8Pb+gSm5zaPKe5ubnKyMiQJKWl\npengwYMNctzm0tcSvW03p/ra54Fgx7XdtZmjKajN4zhy5IjWrl2rX/7yl5JudEkjpNo9p4MHD9by\n5ct1/vx5rVu3Trt379ahQ4ccP25z6WuJ3rabU33tk88h1JWp5jKq5toskyZN0h/+8Ae5XK5burwM\nV40cOVJffvmlBgwYoM6dOys6OlotW7Z0/Lj0dVX0tr3q09c+f4dgx7XdtZmjKajN49i2bZsee+wx\n3XvvvVq1apV+9atfad26dQ1dapNRm+e0VatWmjFjhoqKirRgwQIFBQXphz/8oePHbS59LdHbdnOq\nr30eCHZc212bOb7TmF911OZxfP755zp06JAOHTqkESNGaMGCBRoyZIgvym0SavOclpeX69tvv9W5\nc+f0+9//XgMHDmyQ4zaXvpbobbs51tc2/tG73vLy8kxMTIy57777zPz5840xxixcuNAsXLjQO+a5\n554zkZGRpmfPnmbv3r11nuPYsWOmY8eO5s477zRt27Y1nTp1Mt98800DPLq6qc1z8Z2nn36aS/Nq\n4WbP6ebNm80DDzxg7r//fjNq1ChTUVHRIMc1pvn0tTH0tt2c6GuXMY38pQUAoEH4fMkIANA4EAgA\nAEkEAgDAQiAAACQRCE1ecXGxEhISdPHiRVVUVKhr165Vrm0Hmip6u+FxlZEfmDFjhi5cuKDz58+r\nU6dOeu6553xdEmALerthEQh+oLKyUklJSQoKCtKnn37arL/+AP6F3m5YLBn5gbKyMlVUVOjs2bM6\nf/68r8sBbENvNyzeIfiBIUOG6PHHH9fnn3+uY8eOKTs729clAbagtxtWk/i2U9Rs8eLFatmypR57\n7DFdvnxZvXv3Vl5entLT031dGnBL6O2GxzsEAIAk/oYAALAQCAAASQQCAMBCIAAAJBEIAAALgQAA\nkCT9PxL88fDsDe+RAAAAAElFTkSuQmCC\n", + "png": "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\nGGPJ5QAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 12 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -149,7 +169,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 6 }, { "cell_type": "code", @@ -159,40 +179,32 @@ "ax2 = ax=subplot(132)\n", "ax3 = ax=subplot(133)\n", "a1 = mesh.plotImage(mesh.gridCC[:,0],ax=ax1)\n", - "a2 = mesh.plotImage(mesh.gridCC[:,1],ax=ax2)\n", - "a3 = mesh.plotImage(mesh.gridCC[:,2],ax=ax3)\n", + "a2 = mesh.plotImage(mesh.gridFx[:,1],ax=ax2,imageType='Fx')\n", + "a3 = mesh.plotImage(mesh.gridEz[:,2],ax=ax3,imageType='Ez')\n", "\n", - "ax1.set_title('x coordinate')\n", - "ax2.set_title('y coordinate')\n", - "ax3.set_title('z coordinate')\n" + "ax1.set_title('mesh.gridCC[:,0]')\n", + "ax2.set_title('mesh.gridFx[:,1]')\n", + "ax3.set_title('mesh.gridEz[:,2]')\n" ], "language": "python", "metadata": {}, "outputs": [ - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "/Users/larsruthotto/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.py:362: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", - " \"matplotlib is currently using a non-GUI backend, \"\n" - ] - }, { "output_type": "pyout", - "prompt_number": 2, + "prompt_number": 7, "text": [ - "" + "" ] }, { "output_type": "display_data", - "png": "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\nzZsrXWfbtm1q3759ZYJ788031dSpU1VBQYH64x//qBYsWODwNr7++mtVXFysiouL1aRJk9Tf//53\nh76WGyRXybU8tSFXpVzLVsu5Ov1O9eq4njM0NJSoqCgAmjRpQqdOnfjxxx8d2saZM2f497//zaRJ\nk5w6cbJlyxb+/Oc/U6dOHXx9fW1zflUVEBCAUors7GyuXr1Kfn4+QXb+XseAAQNuW2bPnj1MnDgR\nf39/nnrqKbvPZXnbuPfee9Hr9ej1eu677z62bnX8nXeSq5XkervakCu4lq2Wc3W6WVd0PaezTpw4\nQXJyMjGlH99VVbNmzWLBggXonfjElDNnzlBQUMCzzz5Lr169ePPNNykoKHBoGwEBASxZsgSj0Uho\naCj9+vVz+GuAss9n+/bt2bNnj8PbuNny5cuJjY11qQ6QXCXX8tVEruB6tlrOtVZ8JtSVK1cYM2YM\n8fHx1K1b9Y8A3rhxI82aNSM6Otqpn9IFBQUcO3aMUaNGYbFYSE5OZs2aNQ5t4+LFizz77LP8/PPP\npKamsmvXLr788kuHa3H2KKM8r776KvXr12f06NHVtk1nSK6S681czRVcz1bLuTrdrHv27MmRI799\nnE9ycjK9e/d2eDuFhYWMGjWK8ePHM2LECIfW3blzJ+vXr6dNmzaMGzeOhIQEJtzywbKViYiIoF27\ndsTGxhIQEMC4cePYtMmxDynds2cPvXv3JiIiguDgYEaPHs228v4UmB09e/bkcOnf5z58+DA9e/Z0\neBsA//jHP/jqq6/4+OOPnVpfcrWSXMtXk7mC69lqOtdKZ7TtuHHCIiUlxakTFiUlJWr8+PFq1qxZ\nrpShlFLKYrE4dXY5NjZW7d69WxUXF6s//vGPDp+8yc7OVm3btlWZmZmqoKBAxcbGqi1btthdLyUl\npdwTFvn5+eq5556ze8KivG1s2rRJdezYUWVkZDj0NdxKcpVcy1MbclXKtWy1nKtLzdpisaj27dur\ntm3bqr/85S8Or//9998rnU6nIiMjVVRUlIqKilKbNm1yuhZnzi4fPXpU9erVS0VGRqrZs2er3Nxc\nh7fx4Ycfqrvuukv16NFDzZ07VxUXF1e6/NixY1VYWJjy8/NTLVu2VCtWrHD4UqAb2zAYDKply5bq\ngw8+UBERESo8PNz2XD777LMOfy1KSa43SK5l1YZclXI9W63mavfvWQshhKh5teIEoxBCiMpJsxZC\nCA2QZi2EEBogzVoIITRAmrUQQmiANGshhNCA/w8I5qLIW3oKNAAAAABJRU5ErkJggg==\n", + "png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAAEICAYAAACZJtWMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtclHXe//HXDAwI5vkAeEBMSsEUMI+pOZoZeVzrNrU7\nLdMOZmlmWW2YY79y7ajrveptbdp2V7pum3loKTN3tExRy3QljwUKhikogiIIw/f3x8AkCsyJGbiu\nPk8f83gMXtf1vT7Mm+vDxfeag0EppRBCCFGnGWu7ACGEEM5JsxZCCA2QZi2EEBogzVoIITRAmrUQ\nQmiANGshhNCAOt+s33vvPfr37++z8T/88EPuuOOOKpebzWbefffdGtuf2WwmJCQEs9lcI+O9++67\nNGjQAKPRyM8//1wjY/qLHrJ94IEHCAoK4vrrr/dqnHKbN2+mQYMGBAQE8NVXX9XImLVBD9nWtWO1\nzjdrX/vv//5vvvjiiyqXGwwGDAaD4+vz588zbdo0YmJiaNiwITExMVgsFgoKChzrvP/++/Tu3Zum\nTZvSpk0b7rnnHg4cOOAYb8mSJVitVpdrPHr0KLfeeitNmjRhwIABHDt2zLFs8uTJ5Ofnu/Ed/364\nk+17771HQEAADRo0cNymT5/udB8Gg4HnnnvOrYNvzpw5dOnSBZPJxLx58yosGzx4MPn5+URGRlb4\nuRMVeZttw4YNOXXqVLX7cPdYPXLkCKNGjaJly5Zcf/31PPXUUxw/ftyx3Ntj9XfdrG02m1vrX7p0\nie7du/Pjjz8yb948srOz+fTTTzlx4gQ//fQTAC+88ALPP/88w4cPJzU1lR9++IEhQ4bw6aefOsZx\n53VISimGDh1KbGwsBw4cICYmhqFDh7o1xu+Ru9kC9O3bl/z8fMdt8eLFLm3nbhY33HADr7/+OsOG\nDZOG7IGayDYvL4/w8HCn27mT7fnz5/nDH/7AkSNH2L17N5cuXeLZZ591u9aqeN2so6KiWLZsGX36\n9CEsLIzZs2dz8eJF7rnnHiIiInjyyScdv01++uknZs+eTbt27XjooYf48ccfHeOsW7eOgQMH0rhx\nY66//no++uijCvt56aWXaN26NYmJiezYsaPKelJTU7nnnnto1aoVf/zjHyv8OfTee+/Rr18/Xnzx\nRdq1a4fFYrnmz7Urt3/hhRcqjP3WW29x+vRpNm3axD333ENQUBAdO3ZkxYoVdOnShbS0NN544w3e\neOMNkpKSiIiIoHnz5kyZMoWkpCTHOO4coFu3biUjI4OlS5fSunVrli5dSmZmpltn5p76PWULlR+Y\nly9fJiEhgb/85S+AvVH07duXl19+2Y1HsqKJEyeSmJhIgwYNau2XrmRr9/e//73CGXdwcDADBw50\nLHfnWO3RoweTJk2icePGNGvWjBdeeIF//vOfXLx40eUxquN1szYYDLzzzjssW7aML7/8kuXLlzNw\n4EAmTJjA999/z86dO/n000+x2WzccsstjjPE/v37O+aciouLmTFjBgsWLCA3N5cdO3YQHx/v2Meu\nXbsAOHDgAL1792b27NmV1qKUYtCgQdxyyy3s37+f4uJiduzYUeEB37VrFyUlJezfv/+aUMu379Wr\nF/v376ewsJBvv/3WsXzbtm0MGTIEk8lU6f537tzpOBN2x7Rp05g2bVqlyw4fPkxsbCxGoz0qo9FI\nbGwshw4dcmsfnvg9ZVuVoKAgPvjgA1588UUOHTrEggULUEpV2hDKLViwgBEjRjgduzZJtnZjx451\nnG3/8ssvdOjQgXvvvbfK9as7Vq+2c+dOwsPDqV+/vkvrO6W8FBUVpd566y3H17fffru66667HF+/\n8sor6v7771ebNm1St99+e4Vt4+Pj1a5du1RxcbGKiIhQH3zwgbp48WKFdVauXKmaNGmibDabUkqp\nX375RZlMJnXhwoVraklJSVFt27Z1fH3p0iUVHBys3n33XcdYISEhqqioqML4/fr1q3T7goKCCtvH\nxsZW+F6v9uqrr6ouXbpUuVwppcxms2M8V7zyyitq9OjRFf5vzJgx6uWXX67wfwaDQf30008uj+uK\n31O2K1euVIGBgapx48aOW0pKimP9N998U914442qadOm6tixY47/f+CBB1RSUpKzh7JS9913n7JY\nLJUui4qKUl999ZVH47ri955tdHR0hRpsNpsaNmyYeuyxxxz/5+6xeqWMjAwVHh6uPvnkk2uWeXqs\n1sicdVxcnON+WFjYNV+fPHmSr776iq+//pomTZo4bseOHWPbtm0EBgbyz3/+k48//pg2bdowefJk\n0tLSHGN07tzZcWYZERFBSUkJv/766zV1pKSkVPjNXq9ePWJiYq6pNSgoqNLvIyUlpULtISEhdOrU\nyfF127Ztq/2N3bZtWw4dOkReXl6V67irWbNmFR4LsP9Z2qxZsxrbR3V+L9kC9O7dm3PnzjluPXv2\ndCybOHEiJ06cYOjQoXTo0KHax0wrfs/ZHj16tMLyF154gYsXL7p8naI6Z86cYfDgwcyYMYPRo0d7\nPV45n1xgVFfMD5XfHzhwIGazucIDlp+fz6xZswDo06cPa9euJT09HZPJVOWfTNXp1asX+/btc3x9\n6dKla6YLAgMDq9y+Z8+e1W5/6623smnTJoqLiyvdvnfv3hgMBj777DO3a69Kx44dOXjwoOOiis1m\n4+DBg9f8MPqLXrN15rHHHmP48OF8/vnnbN++3Y3Kq1eXLjD+XrNdvXo1f//73/n4448JCAhwo/Jr\nnTt3jiFDhjB69Giee+45r8a6mt+eDXL77bfzn//8h/fff59z585RWFiI1Wrl5MmTnD59mnXr1nHx\n4kUCAgKoV68eDRo0cHsf3bt3p7CwkMWLF3PmzBksFgulpaUub9+jRw+KiopYuHAhZ86cYc6cORV+\ngJ966inCwsJITEzk448/pqioiKNHj/Lwww+zf/9+2rdvzzPPPMPs2bOZP38+v/zyCzk5OaxcudKt\nC1IPPPAAkyZNAmDAgAFERkby+OOPk5GRwbRp02jTpk2NPfezJugh2+r83//9H3v37uVvf/sbixcv\n5v77769w0chZw7VYLBUuWpWUlFBYWIjNZqO4uJjCwkK3vhd/0nu2e/fu5YknnmDt2rUe/bV65bGa\nl5fHHXfcQb9+/fjTn/7k9ljO+KRZX/nDW/58R6PRiNVq5fDhw9x8881ERkby5ptvopSitLSUhQsX\n0rp1azp16sTZs2cdzz+9+nnOV48/depUpk6dav9mjEY2b97Mtm3biIuLIyAggLi4OBo1alTtWOX/\nV7799u3biYuLIzg4mL59+zrWrVevHnv27CEmJoakpCSaN2/OyJEjadu2LTfccAMAL7/8MvPnz2f9\n+vV07tyZrl27smnTJu6++27HOFf/IF35PQBkZmbSr18/R33/+te/+PHHH+nSpQsHDx4kOTm5wvau\n/mDWBL1mW9n2ACdOnGDmzJm8//77hIaGMn78eLp3785TTz0F2B/7qx//+fPnV7jInJGR4cgTYMqU\nKYSGhrJ69WpeeeUVQkND+eCDD5w99D6n52x37NhxzfOs9+zZw/r168nNzaVfv36OZcOGDXNs6+xY\nvTLbtWvXsmfPHlauXFlhP5mZmVWO5xb3p861Izc3VwUFBans7OzaLsVhyJAhqkGDBmrQoEGVLi8q\n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\nkSPQsCF07gzbtl27XuvW8H3ZU/eUsr94ZvRoe7PvEO1lDfXsZ9JHLkNDo/2i4baCa9eb3tR+Jrw8\nwn4rZy2A26592FxiUE6uCGzbto1HHnmEkpISpk+fzhNPPFFxAIMBsFS5/Rzl/Ow33XqcKHO7KpcH\nGOZXuWyuUlitVgYO3OqzGqrbf12qwWAwuHWBx9tsnUsHojzaUqm5Th/T30sNesoVrnhcB5k9L0FZ\nweDZ9qoU+/5berF/gF1W6OlhDbG4navTk/IZM2awfPlyNm/ezJIlS8jO9nzeqSrHrSecr1QNq9Uq\nNXjA99mme7V1TTymeqjBXXU9V6iJx9W77Wsk1901MIYbqm3W58/bnzZ266230q5dO4YMGUJKSopf\nChO+Jdnqk+SqX9XOWe/evZtOnTo5vo6NjWXnzp0MGzaswnpKzfWqCEvZvyop568i9GkNLuy/rtTg\nKn9ka7EoLBbvHhOvH1Od1OAqreQK9ukIz2uw37zaf6x321tagMXLMdyiqvHll1+qcePGOb5etmyZ\nSkpKqrAO9letyK2O3Fwl2WrrJrnq8+aOas+se/TowTPPPOP4OjU1lcTExArrKB++Ykn4jmSrT5Kr\nflU7Z92oUSPAfnU5PT2dL7/8kl69evmlMOFbkq0+Sa765fR51osWLeKRRx6huLiY6dOn07y5j9/W\nSviNZKtPkqtOuTVpcpWtW7eqTp06qejoaLV48WK3tz9x4oQym80qNjZWDRgwQH344Yce1VFSUqLi\n4+PV8OHD3d72woULauLEieqGG25QMTExaseOHW6P8fbbb6s+ffqobt26qRkzZjhdf9KkSaply5bq\npptucvxfXl6eGjlypGrbtq0aNWqUys/Pd3uMp59+WnXq1EklJCSoGTNmqIKCAre/F6Uk13KSa0V1\nIVelvM9Wq7l61azj4+PV1q1bVXp6uurYsaM6c+aMW9tnZWWpvXv3KqWUOnPmjGrfvr3Ky8tzu443\n33xT3XvvvWrEiBFubztr1iyVlJSkLl26pIqLi1Vubq5b2+fk5KioqCh14cIFZbPZ1J133qk+//zz\narfZtm2b+v777ysE9+qrr6rHH39cFRYWqmnTpqnXX3/d7TE2bdqkbDabstlsasqUKeqvf/2rW99L\nOclVcq1MXchVKe+y1XKuHr9SvSaezxkeHk58fDwAzZs3p3PnzuzZs8etMTIzM/nXv/7FlClTPLpw\nsnnzZv74xz9Sr149AgMDHXN+rgoJCUEpxfnz57l06RIFBQU0cfJ+Hf37979mnV27djF58mSCg4N5\n8MEHnT6WlY1x++23YzQaMRqN3HHHHWzd6v4r7yRXO8n1WnUhV/AuWy3n6nGzrur5nJ46duwYqamp\n9Cz7+C5XzZw5k9dffx2jB5+YkpmZSWFhIVOnTqVXr168+uqrFBYWujVGSEgIy5YtIyoqivDwcPr2\n7ev29wAVH89OnTqxa9cut8e40jvvvMOIESO8qgMkV8m1crWRK3ifrZZzrROfCZWfn8/YsWNZuHAh\n9eu7/hHAGzdupGXLliQkJHj0W7qwsJAjR45w9913Y7VaSU1NZc2aNW6NcebMGaZOncqPP/5Ieno6\nO3bs4LPPPnO7Fk/PMirz0ksv0aBBA8aMGVNjY3pCcpVcr+RtruB9tlrO1eNm3aNHDw4d+u3jfFJT\nU+ndu7fb4xQXF3P33XczYcIERo0a5da23377LevXr6d9+/aMHz+eLVu2MPGqD5atTnR0NB07dmTE\niBGEhIQwfvx4kpPd+5DSXbt20bt3b6Kjo2nWrBljxoxhW2VvBeZEjx49OFj2/twHDx6kR48ebo8B\n8N577/HFF1/wwQcfeLS95GonuVauNnMF77PVdK7Vzmg7UX7BIi0tzaMLFqWlpWrChAlq5syZ3pSh\nlFLKarV6dHV5xIgRaufOncpms6lp06a5ffHm/PnzqkOHDionJ0cVFhaqESNGqM2bNzvdLi0trdIL\nFgUFBeqxxx5zesGisjGSk5NVbGysys7Odut7uJrkKrlWpi7kqpR32Wo5V6+atdVqVZ06dVIdOnRQ\nf/7zn93e/uuvv1YGg0HFxcWp+Ph4FR8fr5KTkz2uxZOry4cPH1a9evVScXFxatasWerChQtuj7Fy\n5Up16623qu7du6ukpCRls9mqXX/cuHEqIiJCBQUFqTZt2qgVK1a4/VSg8jFMJpNq06aNevfdd1V0\ndLSKjIx0PJZTp051+3tRSnItJ7lWVBdyVcr7bLWaq9P3sxZCCFH76sQFRiGEENWTZi2EEBogzVoI\nITRAmrUQQmiANGshhNAAadZCCKEB/x8BWriF5zXyHAAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 2 + "prompt_number": 7 } ], "metadata": {} From f626cedfb8d2dd1d9f2038a72da3b0c7b4ebd1f3 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 19 Jul 2013 11:24:14 -0700 Subject: [PATCH 031/359] Bug fixes to do with array sizes. Incorporated eldads outer product code --- SimPEG/DiffOperators.py | 75 +++++++++++++++++++++------------------ SimPEG/TensorMesh.py | 44 +++++++++++------------ SimPEG/sputils.py | 39 +++++++------------- SimPEG/tests/test_curl.py | 13 ++++--- SimPEG/tests/test_div.py | 16 ++++----- SimPEG/tests/test_grad.py | 13 ++++--- 6 files changed, 96 insertions(+), 104 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index f9d1f0aa..a755662f 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -1,6 +1,16 @@ import numpy as np -from scipy import sparse -from sputils import ddx, sdiag, speye, kron3, spzeros, av +from scipy import sparse as sp +from sputils import sdiag, speye, kron3, spzeros + + +def ddx(n): + """Define 1D derivatives""" + return sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format="csr") + + +def av(n): + """Define 1D averaging operator""" + return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr") class DiffOperators(object): @@ -16,20 +26,20 @@ class DiffOperators(object): def fget(self): if(self._faceDiv is None): # The number of cell centers in each direction - n = [hk.size for hk in self.h] + n = self.n # Compute faceDivergence operator on faces dd = [ddx(k) for k in n] if(self.dim == 1): D = dd[0] elif(self.dim == 2): - D1 = sparse.kron(speye(n[1]), dd[0]) - D2 = sparse.kron(dd[1], speye(n[0])) - D = sparse.hstack((D1, D2), format="csr") + D1 = sp.kron(speye(n[1]), dd[0]) + D2 = sp.kron(dd[1], speye(n[0])) + D = sp.hstack((D1, D2), format="csr") elif(self.dim == 3): D1 = kron3(speye(n[2]), speye(n[1]), dd[0]) D2 = kron3(speye(n[2]), dd[1], speye(n[0])) D3 = kron3(dd[2], speye(n[1]), speye(n[0])) - D = sparse.hstack((D1, D2, D3), format="csr") + D = sp.hstack((D1, D2, D3), format="csr") # Compute areas of cell faces S = self.area # Compute cell volumes @@ -62,7 +72,7 @@ class DiffOperators(object): D2 = kron3(speye(n3+1), d2, speye(n1+1)) D3 = kron3(d3, speye(n2+1), speye(n1+1)) - G = sparse.vstack((D1, D2, D3), format="csr") + G = sp.vstack((D1, D2, D3), format="csr") self._nodalGrad = sdiag(1/L)*G return self._nodalGrad return locals() @@ -101,9 +111,9 @@ class DiffOperators(object): O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) - C = sparse.vstack((sparse.hstack((O1, -D32, D23)), - sparse.hstack((D31, O2, -D13)), - sparse.hstack((-D21, D12, O3))), format="csr") + C = sp.vstack((sp.hstack((O1, -D32, D23)), + sp.hstack((D31, O2, -D13)), + sp.hstack((-D21, D12, O3))), format="csr") self._edgeCurl = sdiag(1/S)*(C*sdiag(L)) return self._edgeCurl @@ -116,18 +126,16 @@ class DiffOperators(object): def fget(self): if(self._faceAve is None): - # The number of cell centers in each direction - n1 = np.size(self.hx) - n2 = np.size(self.hy) - n3 = np.size(self.hz) - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - self._faceAve = sparse.hstack(kron3(speye(n3), speye(n2), av1), - kron3(speye(n3), av2, speye(n3)), - kron3(av3, speye(n2), speye(n3)), format="csr") + n = self.n + if(self.dim == 1): + self._faceAve = av(n[0]) + elif(self.dim == 2): + self._faceAve = sp.hstack((sp.kron(speye(n[1]), av(n[0])), + sp.kron(av(n[1]), speye(n[0]))), format="csr") + elif(self.dim == 3): + self._faceAve = sp.hstack((kron3(speye(n[2]), speye(n[1]), av(n[0])), + kron3(speye(n[2]), av(n[1]), speye(n[0])), + kron3(av(n[2]), speye(n[1]), speye(n[0]))), format="csr") return self._faceAve return locals() _faceAve = None @@ -139,17 +147,16 @@ class DiffOperators(object): def fget(self): if(self._edgeAve is None): # The number of cell centers in each direction - n1 = np.size(self.hx) - n2 = np.size(self.hy) - n3 = np.size(self.hz) - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - self._edgeAve = sparse.hstack(kron3(av3, av2, speye(n1)), - kron3(av3, speye(n2), av1), - kron3(speye(n3), av2, av1), format="csr") + n = self.n + if(self.dim == 1): + raise Exception('Edge Averaging does not make sense in 1D: Use Identity?') + elif(self.dim == 2): + self._edgeAve = sp.hstack((sp.kron(av(n[1]), speye(n[0])), + sp.kron(speye(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._edgeAve = sp.hstack((kron3(av(n[2]), av(n[1]), speye(n[0])), + kron3(av(n[2]), speye(n[1]), av(n[0])), + kron3(speye(n[2]), av(n[1]), av(n[0]))), format="csr") return self._edgeAve return locals() _edgeAve = None diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index 023362ae..8395c54d 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -22,15 +22,16 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): """ def __init__(self, h, x0=None): - super(TensorMesh, self).__init__(np.array([len(x) for x in h]), x0) + super(TensorMesh, self).__init__(np.array([x.size for x in h]), x0) assert len(h) == len(self.x0), "Dimension mismatch. x0 != len(h)" for i, h_i in enumerate(h): assert type(h_i) == np.ndarray, ("h[%i] is not a numpy array." % i) + assert len(h_i.shape) == 1, ("h[%i] must be a 1D numpy array." % i) # Ensure h contains 1D vectors - self._h = [x.ravel() for x in h] + self._h = [mkvc(x) for x in h] def h(): doc = "h is a list containing the cell widths of the tensor mesh in each dimension." @@ -193,17 +194,16 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): def fget(self): if(self._vol is None): - vh = [mkvc(x, 2) for x in self.h] + vh = self.h # Compute cell volumes if(self.dim == 1): self._vol = mkvc(vh[0]) elif(self.dim == 2): # Cell sizes in each direction - self._vol = mkvc(vh[0]*vh[1].T) + self._vol = mkvc(np.outer(vh[0], vh[1])) elif(self.dim == 3): # Cell sizes in each direction - v12 = vh[0]*vh[1].T - self._vol = mkvc(mkvc(v12, 2)*vh[2].T) + self._vol = mkvc(np.outer(mkvc(np.outer(vh[0], vh[1])), vh[2])) return self._vol return locals() _vol = None @@ -215,20 +215,20 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): def fget(self): if(self._area is None): # Ensure that we are working with column vectors - vh = [mkvc(x, 2) for x in self.h] + vh = self.h # The number of cell centers in each direction - n = [x.size for x in self.h] + n = self.n # Compute areas of cell faces if(self.dim == 1): - self._area = np.ones((n[0]+1, 1)) + self._area = np.ones(n[0]+1) elif(self.dim == 2): - area1 = np.ones((n[0]+1, 1))*vh[1].T - area2 = vh[0]*np.ones((n[1]+1, 1)).T + area1 = np.outer(np.ones(n[0]+1), vh[1]) + area2 = np.outer(vh[0], np.ones(n[1]+1)) self._area = np.r_[mkvc(area1), mkvc(area2)] elif(self.dim == 3): - area1 = np.ones((n[0]+1, 1))*mkvc(vh[1]*vh[2].T) - area2 = vh[0]*mkvc(np.ones((n[1]+1, 1))*vh[2].T) - area3 = vh[0]*mkvc(vh[1]*np.ones((n[2]+1, 1)).T) + area1 = np.outer(np.ones(n[0]+1), mkvc(np.outer(vh[1], vh[2]))) + area2 = np.outer(vh[0], mkvc(np.outer(np.ones(n[1]+1), vh[2]))) + area3 = np.outer(vh[0], mkvc(np.outer(vh[1], np.ones(n[2]+1)))) self._area = np.r_[mkvc(area1), mkvc(area2), mkvc(area3)] return self._area return locals() @@ -239,22 +239,22 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): doc = "Construct edge legnths of the 3D model as 1d array." def fget(self): - if(self._area is None): + if(self._edge is None): # Ensure that we are working with column vectors - vh = [mkvc(x, 2) for x in self.h] + vh = self.h # The number of cell centers in each direction - n = [x.size for x in self.h] + n = self.n # Compute edge lengths if(self.dim == 1): self._edge = mkvc(vh[0]) elif(self.dim == 2): - l1 = vh[0]*np.ones((n[1]+1, 1)).T - l2 = np.ones((n[0]+1, 1))*vh[1].T + l1 = np.outer(vh[0], np.ones(n[1]+1)) + l2 = np.outer(np.ones(n[0]+1), vh[1]) self._edge = np.r_[mkvc(l1), mkvc(l2)] elif(self.dim == 3): - l1 = vh[0]*mkvc(np.ones((n[1]+1, 1))*np.ones((n[2]+1, 1)).T) - l2 = np.ones((n[0]+1, 1))*mkvc(vh[1]*np.ones((n[2]+1, 1)).T) - l3 = np.ones((n[0]+1, 1))*mkvc(np.ones((n[1]+1, 1))*vh[2].T) + l1 = np.outer(vh[0], mkvc(np.outer(np.ones(n[1]+1), np.ones(n[2]+1)))) + l2 = np.outer(np.ones(n[0]+1), mkvc(np.outer(vh[1], np.ones(n[2]+1)))) + l3 = np.outer(np.ones(n[0]+1), mkvc(np.outer(np.ones(n[1]+1), vh[2]))) self._edge = np.r_[mkvc(l1), mkvc(l2), mkvc(l3)] return self._edge return locals() diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index f1e9a677..79bbdf04 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -1,43 +1,30 @@ import numpy as np -from scipy import sparse -from numpy import ones +from scipy import sparse as sp -def ddx(n): - """Define 1D derivatives""" - return sparse.spdiags((np.ones((n+1,1))*[-1,1]).T, [0,1], n, n+1, format="csr") - def sdiag(h): """Sparse diagonal matrix""" - return sparse.spdiags(h, 0, np.size(h), np.size(h), format="csr") + return sp.spdiags(h, 0, np.size(h), np.size(h), format="csr") + def speye(n): """Sparse identity""" - return sparse.identity(n, format="csr") + return sp.identity(n, format="csr") + def kron3(A, B, C): """Two kron prods""" - return sparse.kron(sparse.kron(A, B), C, format="csr") + return sp.kron(sp.kron(A, B), C, format="csr") + def spzeros(n1, n2): """spzeros""" - return sparse.coo_matrix((n1, n2)).tocsr() + return sp.coo_matrix((n1, n2)).tocsr() -def av(n): - """Define 1D averaging operator""" - return sparse.spdiags((0.5*np.ones((n+1,1))*[1,1]).T, [0,1], n, n+1, format="csr") - -def av(n): - """Define 1D average""" - return 0.5*(sparse.spdiags(ones(n+1), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1)) - -def spzeros(n1, n2): - """spzeros""" - return sparse.coo_matrix((n1, n2)) def appendBottom(A, B): """append on bottom""" - C = sparse.vstack((A, B)) + C = sp.vstack((A, B)) C = C.tocsr() return C @@ -51,7 +38,7 @@ def appendBottom3(A, B, C): def appendRight(A, B): """append on right""" - C = sparse.hstack((A, B)) + C = sp.hstack((A, B)) C = C.tocsr() return C @@ -65,9 +52,9 @@ def appendRight3(A, B, C): def blkDiag(A, B): """blockdigonal""" - O12 = sparse.coo_matrix((np.shape(A)[0], np.shape(B)[1])) - O21 = sparse.coo_matrix((np.shape(B)[0], np.shape(A)[1])) - C = sparse.vstack((sparse.hstack((A, O12)), sparse.hstack((O21, B)))) + O12 = sp.coo_matrix((np.shape(A)[0], np.shape(B)[1])) + O21 = sp.coo_matrix((np.shape(B)[0], np.shape(A)[1])) + C = sp.vstack((sp.hstack((A, O12)), sp.hstack((O21, B)))) C = C.tocsr() return C diff --git a/SimPEG/tests/test_curl.py b/SimPEG/tests/test_curl.py index d8ee0018..e90f8cfa 100644 --- a/SimPEG/tests/test_curl.py +++ b/SimPEG/tests/test_curl.py @@ -11,12 +11,11 @@ for i in range(4): icount=i+1 nc = 2**icount # Define the mesh - h1 = np.ones((1,nc))/nc - h2 = np.ones((1,nc))/nc - h3 = np.ones((1,nc))/nc + h1 = np.ones(nc)/nc + h2 = np.ones(nc)/nc + h3 = np.ones(nc)/nc h = [h1, h2, h3] - x0 = np.zeros((3, 1)) - M = TensorMesh(h, x0) + M = TensorMesh(h) #n = M.plotGrid() # Generate DIV matrix @@ -41,7 +40,7 @@ for i in range(4): if icount == 1: print 'h | inf norm | error ratio' print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0,0], err) + print '%6.4f | %8.2e |'% (h1[0], err) else: - print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) err_old = err \ No newline at end of file diff --git a/SimPEG/tests/test_div.py b/SimPEG/tests/test_div.py index dd469a3f..53ca506b 100644 --- a/SimPEG/tests/test_div.py +++ b/SimPEG/tests/test_div.py @@ -11,9 +11,9 @@ for i in range(4): icount=i+1 nc = 2**icount # Define the mesh - h1 = np.ones((1,nc))/nc - h2 = np.ones((1,nc))/nc - h3 = np.ones((1,nc))/nc + h1 = np.ones(nc)/nc + h2 = np.ones(nc)/nc + h3 = np.ones(nc)/nc h = [h1, h2, h3] x0 = np.zeros((3, 1)) M = TensorMesh(h, x0) @@ -24,9 +24,9 @@ for i in range(4): #Test function fun = lambda x: np.sin(x) - Fx = fun(M.gridFx[:,0]) - Fy = fun(M.gridFy[:,1]) - Fz = fun(M.gridFz[:,2]) + Fx = fun(M.gridFx[:, 0]) + Fy = fun(M.gridFy[:, 1]) + Fz = fun(M.gridFz[:, 2]) F = np.concatenate((Fx,Fy,Fz)) divF = DIV*F @@ -39,7 +39,7 @@ for i in range(4): if icount == 1: print 'h | inf norm | error ratio' print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0,0], err) + print '%6.4f | %8.2e |'% (h1[0], err) else: - print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) err_old = err diff --git a/SimPEG/tests/test_grad.py b/SimPEG/tests/test_grad.py index 58401dc7..fbc36aeb 100644 --- a/SimPEG/tests/test_grad.py +++ b/SimPEG/tests/test_grad.py @@ -11,12 +11,11 @@ for i in range(4): icount=i+1 nc = 2**icount # Define the mesh - h1 = np.ones((1,nc))/nc - h2 = np.ones((1,nc))/nc - h3 = np.ones((1,nc))/nc + h1 = np.ones(nc)/nc + h2 = np.ones(nc)/nc + h3 = np.ones(nc)/nc h = [h1, h2, h3] - x0 = np.zeros((3, 1)) - M = TensorMesh(h, x0) + M = TensorMesh(h) #n = M.plotGrid() # Generate DIV matrix @@ -38,8 +37,8 @@ for i in range(4): if icount == 1: print 'h | inf norm | error ratio' print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0,0], err) + print '%6.4f | %8.2e |'% (h1[0], err) else: - print '%6.4f | %8.2e | %6.4f' % (h1[0,0], err, err_old/err) + print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) err_old = err From ffb78fea10e47191f62804365800037b1dbf0a82 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Fri, 19 Jul 2013 14:43:15 -0700 Subject: [PATCH 032/359] added mass matrix --- SimPEG/DiffOperators.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index a755662f..0fb36c2b 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -161,3 +161,23 @@ class DiffOperators(object): return locals() _edgeAve = None edgeAve = property(**edgeAve()) + + + +def getEdgeMassMatrix(h,sigma): + # mass matix for products of edge functions w'*M(sigma)*e + + Av = getEdgeToCellAverge(h) + v = getVol(h) + sigma = mkvc(sigma) + + return sdiag(Av.T*(v*sigma)) + +def getFaceMassMatrix(h,sigma): + # mass matix for products of edge functions w'*M(sigma)*e + + Av = getFaceToCellAverge(h) + v = getVol(h) + sigma = mkvc(sigma) + + return sdiag(Av.T*(v*sigma)) \ No newline at end of file From 906d7d210f41dfa211daafbbde156abf35679910 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 19 Jul 2013 14:51:23 -0700 Subject: [PATCH 033/359] Cell Centered Grad, and Div in 3D --- SimPEG/DiffOperators.py | 130 ++++++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 26 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index a755662f..064c4844 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -4,10 +4,40 @@ from sputils import sdiag, speye, kron3, spzeros def ddx(n): - """Define 1D derivatives""" + """Define 1D derivatives, inner, this means we go from n+1 to n+1""" return sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format="csr") +def checkBC(bc): + if(type(bc) is str): + bc = [bc, bc] + assert type(bc) is list, 'bc must be a list' + assert len(bc) == 2, 'bc must have two elements' + + for bc_i in bc: + assert type(bc_i) is str, "each bc must be a string" + assert bc_i in ['dirichlet', 'neumann'], "each bc must be either, 'dirichlet' or 'neumann'" + return bc + + +def ddxCellGrad(n, bc): + """Define 1D derivatives, outer, this means we go from n to n+1""" + bc = checkBC(bc) + + D = sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [-1, 0], n+1, n, format="csr") + # Set the first side + if(bc[0] == 'dirichlet'): + D[0, 0] = 2 + elif(bc[0] == 'neumann'): + D[0, 0] = 0 + # Set the second side + if(bc[1] == 'dirichlet'): + D[-1, -1] = -2 + elif(bc[1] == 'neumann'): + D[-1, -1] = 0 + return D + + def av(n): """Define 1D averaging operator""" return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr") @@ -28,21 +58,19 @@ class DiffOperators(object): # The number of cell centers in each direction n = self.n # Compute faceDivergence operator on faces - dd = [ddx(k) for k in n] if(self.dim == 1): - D = dd[0] + D = ddx(n[0]) elif(self.dim == 2): - D1 = sp.kron(speye(n[1]), dd[0]) - D2 = sp.kron(dd[1], speye(n[0])) + D1 = sp.kron(speye(n[1]), ddx(n[0])) + D2 = sp.kron(ddx(n[1]), speye(n[0])) D = sp.hstack((D1, D2), format="csr") elif(self.dim == 3): - D1 = kron3(speye(n[2]), speye(n[1]), dd[0]) - D2 = kron3(speye(n[2]), dd[1], speye(n[0])) - D3 = kron3(dd[2], speye(n[1]), speye(n[0])) + D1 = kron3(speye(n[2]), speye(n[1]), ddx(n[0])) + D2 = kron3(speye(n[2]), ddx(n[1]), speye(n[0])) + D3 = kron3(ddx(n[2]), speye(n[1]), speye(n[0])) D = sp.hstack((D1, D2, D3), format="csr") - # Compute areas of cell faces + # Compute areas of cell faces & volumes S = self.area - # Compute cell volumes V = self.vol self._faceDiv = sdiag(1/V)*D*sdiag(S) @@ -57,28 +85,78 @@ class DiffOperators(object): def fget(self): if(self._nodalGrad is None): # The number of cell centers in each direction - n1 = np.size(self.hx) - n2 = np.size(self.hy) - n3 = np.size(self.hz) - + n = self.n + # Compute divergence operator on faces + if(self.dim == 1): + G = ddx(n[0]) + elif(self.dim == 2): + D1 = sp.kron(speye(n[1]+1), ddx(n[0])) + D2 = sp.kron(ddx(n[1]), speye(n[0]+1)) + G = sp.vstack((D1, D2), format="csr") + elif(self.dim == 3): + D1 = kron3(speye(n[2]+1), speye(n[1]+1), ddx(n[0])) + D2 = kron3(speye(n[2]+1), ddx(n[1]), speye(n[0]+1)) + D3 = kron3(ddx(n[2]), speye(n[1]+1), speye(n[0]+1)) + G = sp.vstack((D1, D2, D3), format="csr") # Compute lengths of cell edges L = self.edge - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3+1), speye(n2+1), d1) - D2 = kron3(speye(n3+1), d2, speye(n1+1)) - D3 = kron3(d3, speye(n2+1), speye(n1+1)) - - G = sp.vstack((D1, D2, D3), format="csr") self._nodalGrad = sdiag(1/L)*G return self._nodalGrad return locals() _nodalGrad = None nodalGrad = property(**nodalGrad()) + def setCellGradBC(self, BC): + """ + e.g. + + BC = 'neumann' + BC = ['neumann', 'dirichlet', 'neumann'] + BC = [['neumann', 'dirichlet'], 'dirichlet', 'neumann'] + + """ + if(type(BC) is str): + BC = [BC for _ in self.n] # Repeat the str self.dim times + elif(type(BC) is list): + assert len(BC) == self.dim, 'BC list must be the size of your mesh' + else: + raise Exception("BC must be a str or a list.") + + for i, bc_i in enumerate(BC): + BC[i] = checkBC(bc_i) + + self._cellGrad = None # ensure we create a new gradient next time we call it + self._cellGradBC = BC + return BC + _cellGradBC = 'neumann' + + def cellGrad(): + doc = "The cell centered Gradient, takes you to cell faces." + + def fget(self): + if(self._cellGrad is None): + BC = self.setCellGradBC(self._cellGradBC) + n = self.n + if(self.dim == 1): + G = ddxCellGrad(n[0], BC[0]) + elif(self.dim == 2): + G1 = sp.kron(speye(n[1]), ddxCellGrad(n[0], BC[0])) + G2 = sp.kron(ddxCellGrad(n[1], BC[1]), speye(n[0])) + G = sp.vstack((G1, G2), format="csr") + elif(self.dim == 3): + G1 = kron3(speye(n[2]), speye(n[1]), ddxCellGrad(n[0], BC[0])) + G2 = kron3(speye(n[2]), ddxCellGrad(n[1], BC[1]), speye(n[0])) + G3 = kron3(ddxCellGrad(n[2], BC[2]), speye(n[1]), speye(n[0])) + G = sp.vstack((G1, G2, G3), format="csr") + # Compute areas of cell faces & volumes + S = self.area + V = self.vol + self._cellGrad = sdiag(S)*G*sdiag(1/V) + return self._cellGrad + return locals() + _cellGrad = None + cellGrad = property(**cellGrad()) + def edgeCurl(): doc = "Construct the 3D curl operator." @@ -122,7 +200,7 @@ class DiffOperators(object): edgeCurl = property(**edgeCurl()) def faceAve(): - doc = "Construct the 3D averaging operator on cell faces to cell centers." + doc = "Construct the averaging operator on cell faces to cell centers." def fget(self): if(self._faceAve is None): @@ -142,7 +220,7 @@ class DiffOperators(object): faceAve = property(**faceAve()) def edgeAve(): - doc = "Construct the 3D averaging operator on cell edges." + doc = "Construct the averaging operator on cell edges to cell centers." def fget(self): if(self._edgeAve is None): From b1f41c14a50aeb979c3e460df40829a49a679a60 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 19 Jul 2013 15:51:53 -0700 Subject: [PATCH 034/359] Mass Matrices. Merged eldad's code. --- SimPEG/DiffOperators.py | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index 7c194e76..bec2492e 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -1,6 +1,7 @@ import numpy as np from scipy import sparse as sp from sputils import sdiag, speye, kron3, spzeros +from utils import mkvc def ddx(n): @@ -240,22 +241,16 @@ class DiffOperators(object): _edgeAve = None edgeAve = property(**edgeAve()) + def getEdgeMass(self, materialProp=None): + """mass matix for products of edge functions w'*M(materialProp)*e""" + if(materialProp is None): + materialProp = np.ones(self.nC) + Av = self.edgeAve + return sdiag(Av.T * (self.vol * mkvc(materialProp))) - -def getEdgeMassMatrix(h,sigma): - # mass matix for products of edge functions w'*M(sigma)*e - - Av = getEdgeToCellAverge(h) - v = getVol(h) - sigma = mkvc(sigma) - - return sdiag(Av.T*(v*sigma)) - -def getFaceMassMatrix(h,sigma): - # mass matix for products of edge functions w'*M(sigma)*e - - Av = getFaceToCellAverge(h) - v = getVol(h) - sigma = mkvc(sigma) - - return sdiag(Av.T*(v*sigma)) + def getFaceMass(self, materialProp=None): + """mass matix for products of edge functions w'*M(materialProp)*e""" + if(materialProp is None): + materialProp = np.ones(self.nC) + Av = self.faceAve + return sdiag(Av.T*(self.vol*mkvc(materialProp))) From d0efdb509c094f093b8a5059c71f5ded80a66434 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 22 Jul 2013 12:26:17 -0700 Subject: [PATCH 035/359] Created an OrderTest class This creates a testable framework so that we can easily test order of convergence on things like operators by just writing the guts of the code. Merged Seogi's code into this framework. --- SimPEG/tests/OrderTest.py | 50 ++++++++++++++++ SimPEG/tests/test_curl.py | 46 --------------- SimPEG/tests/test_div.py | 45 --------------- SimPEG/tests/test_grad.py | 44 --------------- SimPEG/tests/test_operatorOrders.py | 88 +++++++++++++++++++++++++++++ 5 files changed, 138 insertions(+), 135 deletions(-) create mode 100644 SimPEG/tests/OrderTest.py delete mode 100644 SimPEG/tests/test_curl.py delete mode 100644 SimPEG/tests/test_div.py delete mode 100644 SimPEG/tests/test_grad.py create mode 100644 SimPEG/tests/test_operatorOrders.py diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py new file mode 100644 index 00000000..68837f7a --- /dev/null +++ b/SimPEG/tests/OrderTest.py @@ -0,0 +1,50 @@ +import sys +sys.path.append('../../') +from SimPEG import TensorMesh +import numpy as np +import unittest + + +class OrderTest(unittest.TestCase): + """Order test sets up the basics for testing order of decrease for a function on a mesh.""" + + name = "Order Test" + expectedOrder = 2 + meshSizes = [4, 8, 16, 32] + + def setupMesh(self, nc): + # Define the mesh + h1 = np.ones(nc)/nc + h2 = np.ones(nc)/nc + h3 = np.ones(nc)/nc + h = [h1, h2, h3] + self.M = TensorMesh(h) + + def getError(self): + """Overwrite this function with the guts of the test.""" + return 1. + + def orderTest(self): + order = [] + err_old = 0. + nc_old = 0. + for ii, nc in enumerate(self.meshSizes): + self.setupMesh(nc) + err = self.getError() + if ii == 0: + print '' + print 'Testing order of: ' + self.name + print ' h | inf norm | ratio | order' + print '------------------------------------------' + print '%4i | %8.2e |' % (nc, err) + else: + order.append(np.log(err/err_old)/np.log(float(nc_old)/float(nc))) + print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) + err_old = err + nc_old = nc + + self.assertTrue(len(np.where(np.array(order) > 0.9*self.expectedOrder)[0]) > np.floor(0.75*len(order))) + + +if __name__ == '__main__': + unittest.main() diff --git a/SimPEG/tests/test_curl.py b/SimPEG/tests/test_curl.py deleted file mode 100644 index e90f8cfa..00000000 --- a/SimPEG/tests/test_curl.py +++ /dev/null @@ -1,46 +0,0 @@ -import numpy as np - -import sys -sys.path.append('../') -from TensorMesh import TensorMesh - - -err=0. -print '>> Test Curl operator' -for i in range(4): - icount=i+1 - nc = 2**icount - # Define the mesh - h1 = np.ones(nc)/nc - h2 = np.ones(nc)/nc - h3 = np.ones(nc)/nc - h = [h1, h2, h3] - M = TensorMesh(h) - #n = M.plotGrid() - - # Generate DIV matrix - CURL = M.edgeCurl - #Test function - fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) - sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) - - Ex = fun(M.gridEx[:,1]) - Ey = fun(M.gridEy[:,2]) - Ez = fun(M.gridEz[:,0]) - E = np.concatenate((Ex,Ey,Ez)) - - Fx = sol(M.gridFx[:,2]) - Fy = sol(M.gridFy[:,0]) - Fz = sol(M.gridFz[:,1]) - curlE_anal = np.concatenate((Fx,Fy,Fz)) - - curlE = CURL*E - err = np.linalg.norm((curlE-curlE_anal), np.inf) - - if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0], err) - else: - print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) - err_old = err \ No newline at end of file diff --git a/SimPEG/tests/test_div.py b/SimPEG/tests/test_div.py deleted file mode 100644 index 53ca506b..00000000 --- a/SimPEG/tests/test_div.py +++ /dev/null @@ -1,45 +0,0 @@ -import numpy as np - -import sys -sys.path.append('../') -from TensorMesh import TensorMesh - - -err=0. -print '>> Test face Divergence operator' -for i in range(4): - icount=i+1 - nc = 2**icount - # Define the mesh - h1 = np.ones(nc)/nc - h2 = np.ones(nc)/nc - h3 = np.ones(nc)/nc - h = [h1, h2, h3] - x0 = np.zeros((3, 1)) - M = TensorMesh(h, x0) - #n = M.plotGrid() - - # Generate DIV matrix - DIV = M.faceDiv - - #Test function - fun = lambda x: np.sin(x) - Fx = fun(M.gridFx[:, 0]) - Fy = fun(M.gridFy[:, 1]) - Fz = fun(M.gridFz[:, 2]) - - F = np.concatenate((Fx,Fy,Fz)) - divF = DIV*F - sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - divF_anal = sol(M.gridCC[:,0], M.gridCC[:,1], M.gridCC[:,2]) - - #err = np.linalg.norm((divF-divF_anal)*np.sqrt(vol), 2) - err = np.linalg.norm((divF-divF_anal), np.inf) - - if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0], err) - else: - print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) - err_old = err diff --git a/SimPEG/tests/test_grad.py b/SimPEG/tests/test_grad.py deleted file mode 100644 index fbc36aeb..00000000 --- a/SimPEG/tests/test_grad.py +++ /dev/null @@ -1,44 +0,0 @@ -import numpy as np - -import sys -sys.path.append('../') -from TensorMesh import TensorMesh - - -err=0. -print '>> Test nodal Gradient operator' -for i in range(4): - icount=i+1 - nc = 2**icount - # Define the mesh - h1 = np.ones(nc)/nc - h2 = np.ones(nc)/nc - h3 = np.ones(nc)/nc - h = [h1, h2, h3] - M = TensorMesh(h) - #n = M.plotGrid() - - # Generate DIV matrix - GRAD = M.nodalGrad - #Test function - fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) - - phi = fun(M.gridN[:,0], M.gridN[:,1], M.gridN[:,2]) - gradE = GRAD*phi - - Ex = sol(M.gridEx[:,0]) - Ey = sol(M.gridEy[:,1]) - Ez = sol(M.gridEz[:,2]) - - gradE_anal = np.concatenate((Ex,Ey,Ez)) - err = np.linalg.norm((gradE-gradE_anal), np.inf) - - if icount == 1: - print 'h | inf norm | error ratio' - print '---------------------------------------' - print '%6.4f | %8.2e |'% (h1[0], err) - else: - print '%6.4f | %8.2e | %6.4f' % (h1[0], err, err_old/err) - err_old = err - diff --git a/SimPEG/tests/test_operatorOrders.py b/SimPEG/tests/test_operatorOrders.py new file mode 100644 index 00000000..9bb9fa03 --- /dev/null +++ b/SimPEG/tests/test_operatorOrders.py @@ -0,0 +1,88 @@ +import numpy as np +from OrderTest import OrderTest +import unittest + + +class TestCurl(OrderTest): + + name = "Curl" + + def getError(self): + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + + Ex = fun(self.M.gridEx[:, 1]) + Ey = fun(self.M.gridEy[:, 2]) + Ez = fun(self.M.gridEz[:, 0]) + E = np.concatenate((Ex, Ey, Ez)) + + Fx = sol(self.M.gridFx[:, 2]) + Fy = sol(self.M.gridFy[:, 0]) + Fz = sol(self.M.gridFz[:, 1]) + curlE_anal = np.concatenate((Fx, Fy, Fz)) + + # Generate DIV matrix + CURL = self.M.edgeCurl + + curlE = CURL*E + err = np.linalg.norm((curlE-curlE_anal), np.inf) + return err + + def test_order(self): + self.orderTest() + + +class TestFaceDiv(OrderTest): + + name = "Face Divergence" + + def getError(self): + DIV = self.M.faceDiv + + #Test function + fun = lambda x: np.sin(x) + Fx = fun(self.M.gridFx[:, 0]) + Fy = fun(self.M.gridFy[:, 1]) + Fz = fun(self.M.gridFz[:, 2]) + + F = np.concatenate((Fx, Fy, Fz)) + divF = DIV*F + sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) + + err = np.linalg.norm((divF-divF_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestNodalGrad(OrderTest): + + name = "Nodal Gradient" + + def getError(self): + GRAD = self.M.nodalGrad + #Test function + fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + + phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) + gradE = GRAD*phi + + Ex = sol(self.M.gridEx[:, 0]) + Ey = sol(self.M.gridEy[:, 1]) + Ez = sol(self.M.gridEz[:, 2]) + + gradE_anal = np.concatenate((Ex, Ey, Ez)) + err = np.linalg.norm((gradE-gradE_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +if __name__ == '__main__': + unittest.main() From f86ebe12dbdcd83aa217cc2b1c61939c57363e7b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 22 Jul 2013 13:40:18 -0700 Subject: [PATCH 036/359] Added Poisson Equation Tests. Forwards and Backwards. --- SimPEG/tests/OrderTest.py | 5 ++-- SimPEG/tests/test_operatorOrders.py | 37 ++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 68837f7a..652b224a 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -34,15 +34,16 @@ class OrderTest(unittest.TestCase): if ii == 0: print '' print 'Testing order of: ' + self.name + print '__________________________________________' print ' h | inf norm | ratio | order' - print '------------------------------------------' + print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~|~~~~~~~~~~' print '%4i | %8.2e |' % (nc, err) else: order.append(np.log(err/err_old)/np.log(float(nc_old)/float(nc))) print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) err_old = err nc_old = nc - + print '------------------------------------------' self.assertTrue(len(np.where(np.array(order) > 0.9*self.expectedOrder)[0]) > np.floor(0.75*len(order))) diff --git a/SimPEG/tests/test_operatorOrders.py b/SimPEG/tests/test_operatorOrders.py index 9bb9fa03..9fdebc10 100644 --- a/SimPEG/tests/test_operatorOrders.py +++ b/SimPEG/tests/test_operatorOrders.py @@ -1,10 +1,10 @@ import numpy as np from OrderTest import OrderTest import unittest +from scipy.sparse.linalg import dsolve class TestCurl(OrderTest): - name = "Curl" def getError(self): @@ -33,7 +33,6 @@ class TestCurl(OrderTest): class TestFaceDiv(OrderTest): - name = "Face Divergence" def getError(self): @@ -59,7 +58,6 @@ class TestFaceDiv(OrderTest): class TestNodalGrad(OrderTest): - name = "Nodal Gradient" def getError(self): @@ -84,5 +82,38 @@ class TestNodalGrad(OrderTest): self.orderTest() +class TestPoissonEqn(OrderTest): + name = "Poisson Equation" + meshSizes = [16, 20, 24] + + def getError(self): + # Create some functions to integrate + fun = lambda x: np.sin(2*np.pi*x[:, 0])*np.sin(2*np.pi*x[:, 1])*np.sin(2*np.pi*x[:, 2]) + sol = lambda x: -3.*((2*np.pi)**2)*fun(x) + + self.M.setCellGradBC('dirichlet') + + D = self.M.faceDiv + G = self.M.cellGrad + if self.forward: + sA = sol(self.M.gridCC) + sN = D*G*fun(self.M.gridCC) + err = np.linalg.norm((sA - sN), np.inf) + else: + fA = fun(self.M.gridCC) + fN = dsolve.spsolve(D*G, sol(self.M.gridCC)) + err = np.linalg.norm((fA - fN), np.inf) + return err + + def test_orderForward(self): + self.name = "Poisson Equation - Forward" + self.forward = True + self.orderTest() + + def test_orderBackward(self): + self.name = "Poisson Equation - Backward" + self.forward = False + self.orderTest() + if __name__ == '__main__': unittest.main() From 50f40c743dbedb140b65b558952087486b5984a5 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Mon, 22 Jul 2013 15:12:34 -0700 Subject: [PATCH 037/359] added comments --- SimPEG/DiffOperators.py | 22 +-- SimPEG/getDiffOpps.py | 207 ---------------------------- SimPEG/sputils.py | 2 +- SimPEG/tests/OrderTest.py | 78 +++++++++-- SimPEG/tests/test_operatorOrders.py | 119 ---------------- SimPEG/tests/test_tensorMesh.py | 113 ++++++++++++++- 6 files changed, 196 insertions(+), 345 deletions(-) delete mode 100644 SimPEG/getDiffOpps.py delete mode 100644 SimPEG/tests/test_operatorOrders.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index bec2492e..c5daa96d 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -10,6 +10,7 @@ def ddx(n): def checkBC(bc): + """ Checks if boundary condition 'bc' is valid. """ if(type(bc) is str): bc = [bc, bc] assert type(bc) is list, 'bc must be a list' @@ -22,7 +23,7 @@ def checkBC(bc): def ddxCellGrad(n, bc): - """Define 1D derivatives, outer, this means we go from n to n+1""" + """Create 1D derivative operator from cell-centres to nodes this means we go from n to n+1""" bc = checkBC(bc) D = sp.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [-1, 0], n+1, n, format="csr") @@ -40,7 +41,7 @@ def ddxCellGrad(n, bc): def av(n): - """Define 1D averaging operator""" + """Define 1D averaging operator from cell-centres to nodes.""" return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr") @@ -49,10 +50,10 @@ class DiffOperators(object): Class creates the differential operators that you need! """ def __init__(self): - raise Exception('You should use a Mesh class.') + raise Exception('DiffOperators is a base class providing differential operators on meshes and cannot run on its own. Inherit to your favorite Mesh class.') def faceDiv(): - doc = "Construct the 3D Divergence operator on Faces." + doc = "Construct divergence operator (face-stg to cell-centres)." def fget(self): if(self._faceDiv is None): @@ -81,7 +82,7 @@ class DiffOperators(object): faceDiv = property(**faceDiv()) def nodalGrad(): - doc = "Construct the 3D nodal gradient operator." + doc = "Construct gradient operator (nodes to edges)." def fget(self): if(self._nodalGrad is None): @@ -109,11 +110,14 @@ class DiffOperators(object): def setCellGradBC(self, BC): """ - e.g. + Function that sets the boundary conditions for cell-centred derivative operators. - BC = 'neumann' - BC = ['neumann', 'dirichlet', 'neumann'] - BC = [['neumann', 'dirichlet'], 'dirichlet', 'neumann'] + Examples: + + BC = 'neumann' # Neumann in all directions + BC = ['neumann', 'dirichlet', 'neumann'] # 3D, Dirichlet in y Neumann else + BC = [['neumann', 'dirichlet'], 'dirichlet', 'dirichlet'] # 3D, Neumann in x on bottom of domain, + # Dirichlet else """ if(type(BC) is str): diff --git a/SimPEG/getDiffOpps.py b/SimPEG/getDiffOpps.py deleted file mode 100644 index bcfe2c8a..00000000 --- a/SimPEG/getDiffOpps.py +++ /dev/null @@ -1,207 +0,0 @@ -import numpy as np -from scipy import sparse -from utils import mkvc -from sputils import * -#from sputils import ddx, sdiag, speye, kron3, spzeros, appendBottom3, - -def getVol(h): - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # Compute cell volumes - V = mkvc(np.outer(mkvc(np.outer(h1,h2)),h3)) - - return V - -def getArea(h): - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - # Compute areas of cell faces - area1 = mkvc(np.outer(np.ones(n1+1),np.outer(h2,h3))) - area2 = mkvc(np.outer(h1,mkvc(np.outer(np.ones(n2+1),h3)))) - area3 = mkvc(np.outer(h1,mkvc(np.outer(h2,np.ones(n3+1))))) - area = np.hstack((np.hstack((area1, area2)), area3)) - - return area - -def getLength(h): - - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - # compute the length of each edge - Length1 = mkvc(np.outer(h1,mkvc(np.outer(np.ones(n2+1),np.ones(n3+1))))) - Length2 = mkvc(np.outer(np.ones(n1+1),mkvc(np.outer(h2,np.ones(n3+1))))) - Length3 = mkvc(np.outer(np.ones(n1+1),mkvc(np.outer(np.ones(n2+1),h3)))) - - Length = np.hstack((np.hstack((Length1, Length2)), Length3)) - - return Length - - -def getDivMatrix(h): - """Consturct the 3D divergence operator on Faces.""" - - # Cell sizes in each direction - h1 = h[0] - h2 = h[1] - h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1) - n2 = np.size(h2) - n3 = np.size(h3) - - area = getArea(h) - S = sdiag(area) - - # Compute cell volumes - V = getVol(h) - - # Compute divergence operator on faces - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3), speye(n2), d1) - D2 = kron3(speye(n3), d2, speye(n1)) - D3 = kron3(d3, speye(n2), speye(n1)) - - D = sparse.hstack((sparse.hstack((D1, D2)), D3)) - return sdiag(1/V)*D*S - - -def getCurlMatrix(h): - """Edge CURL """ - - # Cell sizes in each direction - h1 = h[0]; h2 = h[1]; h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) - - d1 = ddx(n1); d2 = ddx(n2); d3 = ddx(n3) - # derivatives on x-edge variables - D32 = kron3(d3, speye(n2), speye(n1+1)) - D23 = kron3(speye(n3), d2, speye(n1+1)) - D31 = kron3(d3, speye(n2+1), speye(n1)) - D13 = kron3(speye(n3), speye(n2+1), d1) - D21 = kron3(speye(n3+1), d2, speye(n1)) - D12 = kron3(speye(n3+1), speye(n2), d1) - - O1 = spzeros(np.shape(D32)[0], np.shape(D31)[1]) - O2 = spzeros(np.shape(D31)[0], np.shape(D32)[1]) - O3 = spzeros(np.shape(D21)[0], np.shape(D13)[1]) - - CURL = appendBottom3( - appendRight3(O1, -D32, D23), - appendRight3(D31, O2, -D13), - appendRight3(-D21, D12, O3)) - - - area = getArea(h) - S = sdiag(1/area) - - # Compute edge length - lngth = getLength(h) - L = sdiag(lngth) - - return S*(CURL*L) - - -def getNodalGradient(h): - """Nodal Gradients""" - - # Cell sizes in each direction - h1 = h[0]; h2 = h[1]; h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) - - - D1 = kron3(speye(n3+1), speye(n2+1), ddx(n1)) - D2 = kron3(speye(n3+1), ddx(n2), speye(n1+1)) - D3 = kron3(ddx(n3), speye(n2+1), speye(n1+1)) - - # topological gradient - GRAD = appendBottom3(D1, D2, D3) - - # scale for non-uniform mesh - # Compute edge length - lngth = getLength(h) - L = sdiag(1/lngth) - - return L*GRAD - - -def getEdgeToCellAverge(h): - - """Average from Edge to Cell center """ - - # Cell sizes in each direction - h1 = h[0]; h2 = h[1]; h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) - - a1 = av(n1); a2 = av(n2); a3 = av(n3) - # derivatives on x-edge variables - A1 = kron3(a3, a2, speye(n1)) - A2 = kron3(a3, speye(n2), a1) - A3 = kron3(speye(n3), a2, a1) - - return appendRight3(A1, A2, A3) - - -def getFaceToCellAverge(h): - - """Average from Edge to Cell center """ - - # Cell sizes in each direction - h1 = h[0]; h2 = h[1]; h3 = h[2] - - # The number of cell centers in each direction - n1 = np.size(h1); n2 = np.size(h2); n3 = np.size(h3) - - a1 = av(n1); a2 = av(n2); a3 = av(n3) - # derivatives on x-edge variables - A1 = kron3(speye(n3), speye(n2), a1) - A2 = kron3(speye(n3), a2, speye(n1)) - A3 = kron3(a3, speye(n2), speye(n1)) - - return appendRight3(A1, A2, A3) - - -def getEdgeMassMatrix(h,sigma): - # mass matix for products of edge functions w'*M(sigma)*e - - Av = getEdgeToCellAverge(h) - v = getVol(h) - sigma = mkvc(sigma) - - return sdiag(Av.T*(v*sigma)) - -def getFaceMassMatrix(h,sigma): - # mass matix for products of edge functions w'*M(sigma)*e - - Av = getFaceToCellAverge(h) - v = getVol(h) - sigma = mkvc(sigma) - - return sdiag(Av.T*(v*sigma)) \ No newline at end of file diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index 79bbdf04..b078fff2 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -13,7 +13,7 @@ def speye(n): def kron3(A, B, C): - """Two kron prods""" + """Three kron prods""" return sp.kron(sp.kron(A, B), C, format="csr") diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 652b224a..7f9f97ca 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -6,14 +6,69 @@ import unittest class OrderTest(unittest.TestCase): - """Order test sets up the basics for testing order of decrease for a function on a mesh.""" + """ + + OrderTest is a base class for testing convergence orders with respect to mesh + sizes of integral/differential operators. + + Mathematical Problem: + + Given are an operator A and its discretization A[h]. For a given test function f + and h --> 0 we compare: + + error(h) = \| A[h](f) - A(f) \|_{\infty} + + Note that you can provide any norm. + + Test is passed when estimated rate order of convergence is at least 90% of the + estimated rate supplied by the user. + + Minimal example for a curl operator: + + class TestCURL(OrderTest): + name = "Curl" + + def getError(self): + # For given Mesh, generate A[h], f and A(f) and return norm of error. + + + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + + + Ex = fun(self.M.gridEx[:, 1]) + Ey = fun(self.M.gridEy[:, 2]) + Ez = fun(self.M.gridEz[:, 0]) + f = np.concatenate((Ex, Ey, Ez)) + + Fx = sol(self.M.gridFx[:, 2]) + Fy = sol(self.M.gridFy[:, 0]) + Fz = sol(self.M.gridFz[:, 1]) + Af = np.concatenate((Fx, Fy, Fz)) + + # Generate DIV matrix + Ah = self.M.edgeCurl + + curlE = Ah*E + err = np.linalg.norm((Ah*f -Af), np.inf) + return err + + def test_order(self): + # runs the test + self.orderTest() + + See also: test_operatorOrder.py + + """ name = "Order Test" expectedOrder = 2 meshSizes = [4, 8, 16, 32] def setupMesh(self, nc): - # Define the mesh + """ + For a given number of cells nc, generate a TensorMesh with uniform cells with edge length h=1/nc. + """ h1 = np.ones(nc)/nc h2 = np.ones(nc)/nc h3 = np.ones(nc)/nc @@ -21,10 +76,17 @@ class OrderTest(unittest.TestCase): self.M = TensorMesh(h) def getError(self): - """Overwrite this function with the guts of the test.""" + """For given h, generate A[h], f and A(f) and return norm of error.""" return 1. def orderTest(self): + """ + For number of cells specified in meshSizes setup mesh, call getError + and prints mesh size, error, ratio between current and previous error, + and estimated order of convergence. + + + """ order = [] err_old = 0. nc_old = 0. @@ -34,16 +96,16 @@ class OrderTest(unittest.TestCase): if ii == 0: print '' print 'Testing order of: ' + self.name - print '__________________________________________' - print ' h | inf norm | ratio | order' - print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~|~~~~~~~~~~' + print '_____________________________________________' + print ' h | error | e(i-1)/e(i) | order' + print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' print '%4i | %8.2e |' % (nc, err) else: order.append(np.log(err/err_old)/np.log(float(nc_old)/float(nc))) - print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) + print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) err_old = err nc_old = nc - print '------------------------------------------' + print '---------------------------------------------' self.assertTrue(len(np.where(np.array(order) > 0.9*self.expectedOrder)[0]) > np.floor(0.75*len(order))) diff --git a/SimPEG/tests/test_operatorOrders.py b/SimPEG/tests/test_operatorOrders.py deleted file mode 100644 index 9fdebc10..00000000 --- a/SimPEG/tests/test_operatorOrders.py +++ /dev/null @@ -1,119 +0,0 @@ -import numpy as np -from OrderTest import OrderTest -import unittest -from scipy.sparse.linalg import dsolve - - -class TestCurl(OrderTest): - name = "Curl" - - def getError(self): - fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) - sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) - - Ex = fun(self.M.gridEx[:, 1]) - Ey = fun(self.M.gridEy[:, 2]) - Ez = fun(self.M.gridEz[:, 0]) - E = np.concatenate((Ex, Ey, Ez)) - - Fx = sol(self.M.gridFx[:, 2]) - Fy = sol(self.M.gridFy[:, 0]) - Fz = sol(self.M.gridFz[:, 1]) - curlE_anal = np.concatenate((Fx, Fy, Fz)) - - # Generate DIV matrix - CURL = self.M.edgeCurl - - curlE = CURL*E - err = np.linalg.norm((curlE-curlE_anal), np.inf) - return err - - def test_order(self): - self.orderTest() - - -class TestFaceDiv(OrderTest): - name = "Face Divergence" - - def getError(self): - DIV = self.M.faceDiv - - #Test function - fun = lambda x: np.sin(x) - Fx = fun(self.M.gridFx[:, 0]) - Fy = fun(self.M.gridFy[:, 1]) - Fz = fun(self.M.gridFz[:, 2]) - - F = np.concatenate((Fx, Fy, Fz)) - divF = DIV*F - sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) - - err = np.linalg.norm((divF-divF_anal), np.inf) - - return err - - def test_order(self): - self.orderTest() - - -class TestNodalGrad(OrderTest): - name = "Nodal Gradient" - - def getError(self): - GRAD = self.M.nodalGrad - #Test function - fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) - - phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) - gradE = GRAD*phi - - Ex = sol(self.M.gridEx[:, 0]) - Ey = sol(self.M.gridEy[:, 1]) - Ez = sol(self.M.gridEz[:, 2]) - - gradE_anal = np.concatenate((Ex, Ey, Ez)) - err = np.linalg.norm((gradE-gradE_anal), np.inf) - - return err - - def test_order(self): - self.orderTest() - - -class TestPoissonEqn(OrderTest): - name = "Poisson Equation" - meshSizes = [16, 20, 24] - - def getError(self): - # Create some functions to integrate - fun = lambda x: np.sin(2*np.pi*x[:, 0])*np.sin(2*np.pi*x[:, 1])*np.sin(2*np.pi*x[:, 2]) - sol = lambda x: -3.*((2*np.pi)**2)*fun(x) - - self.M.setCellGradBC('dirichlet') - - D = self.M.faceDiv - G = self.M.cellGrad - if self.forward: - sA = sol(self.M.gridCC) - sN = D*G*fun(self.M.gridCC) - err = np.linalg.norm((sA - sN), np.inf) - else: - fA = fun(self.M.gridCC) - fN = dsolve.spsolve(D*G, sol(self.M.gridCC)) - err = np.linalg.norm((fA - fN), np.inf) - return err - - def test_orderForward(self): - self.name = "Poisson Equation - Forward" - self.forward = True - self.orderTest() - - def test_orderBackward(self): - self.name = "Poisson Equation - Backward" - self.forward = False - self.orderTest() - -if __name__ == '__main__': - unittest.main() diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index 2a6cb0a1..c0b194db 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -3,9 +3,11 @@ import unittest import sys sys.path.append('../') from TensorMesh import TensorMesh +from OrderTest import OrderTest +from scipy.sparse.linalg import dsolve -class TestSequenceFunctions(unittest.TestCase): +class BasicTensorMeshTests(unittest.TestCase): def setUp(self): a = np.array([1, 1, 1]) @@ -55,6 +57,115 @@ class TestSequenceFunctions(unittest.TestCase): t1 = np.all(self.mesh2.edge == test_edge) self.assertTrue(t1) +class TestCurl(OrderTest): + name = "Curl" + def getError(self): + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + + Ex = fun(self.M.gridEx[:, 1]) + Ey = fun(self.M.gridEy[:, 2]) + Ez = fun(self.M.gridEz[:, 0]) + E = np.concatenate((Ex, Ey, Ez)) + + Fx = sol(self.M.gridFx[:, 2]) + Fy = sol(self.M.gridFy[:, 0]) + Fz = sol(self.M.gridFz[:, 1]) + curlE_anal = np.concatenate((Fx, Fy, Fz)) + + # Generate DIV matrix + CURL = self.M.edgeCurl + + curlE = CURL*E + err = np.linalg.norm((curlE-curlE_anal), np.inf) + return err + + def test_order(self): + self.orderTest() + + +class TestFaceDiv(OrderTest): + name = "Face Divergence" + + def getError(self): + DIV = self.M.faceDiv + + #Test function + fun = lambda x: np.sin(x) + Fx = fun(self.M.gridFx[:, 0]) + Fy = fun(self.M.gridFy[:, 1]) + Fz = fun(self.M.gridFz[:, 2]) + + F = np.concatenate((Fx, Fy, Fz)) + divF = DIV*F + sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) + + err = np.linalg.norm((divF-divF_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestNodalGrad(OrderTest): + name = "Nodal Gradient" + + def getError(self): + GRAD = self.M.nodalGrad + #Test function + fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + + phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) + gradE = GRAD*phi + + Ex = sol(self.M.gridEx[:, 0]) + Ey = sol(self.M.gridEy[:, 1]) + Ez = sol(self.M.gridEz[:, 2]) + + gradE_anal = np.concatenate((Ex, Ey, Ez)) + err = np.linalg.norm((gradE-gradE_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestPoissonEqn(OrderTest): + name = "Poisson Equation" + meshSizes = [16, 20, 24] + + def getError(self): + # Create some functions to integrate + fun = lambda x: np.sin(2*np.pi*x[:, 0])*np.sin(2*np.pi*x[:, 1])*np.sin(2*np.pi*x[:, 2]) + sol = lambda x: -3.*((2*np.pi)**2)*fun(x) + + self.M.setCellGradBC('dirichlet') + + D = self.M.faceDiv + G = self.M.cellGrad + if self.forward: + sA = sol(self.M.gridCC) + sN = D*G*fun(self.M.gridCC) + err = np.linalg.norm((sA - sN), np.inf) + else: + fA = fun(self.M.gridCC) + fN = dsolve.spsolve(D*G, sol(self.M.gridCC)) + err = np.linalg.norm((fA - fN), np.inf) + return err + + def test_orderForward(self): + self.name = "Poisson Equation - Forward" + self.forward = True + self.orderTest() + + def test_orderBackward(self): + self.name = "Poisson Equation - Backward" + self.forward = False + self.orderTest() if __name__ == '__main__': unittest.main() From 7b9ca74465316cda9a38028834fcb2a2dd27661a Mon Sep 17 00:00:00 2001 From: Luz Angelica Caudillo Mata Date: Mon, 22 Jul 2013 15:27:35 -0700 Subject: [PATCH 038/359] Implementation 3 conductivity models: block, 2 layered, analytic expression. --- SimPEG/parameters.py | 191 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 SimPEG/parameters.py diff --git a/SimPEG/parameters.py b/SimPEG/parameters.py new file mode 100644 index 00000000..926d246a --- /dev/null +++ b/SimPEG/parameters.py @@ -0,0 +1,191 @@ +import numpy as np +import TensorMesh as tm +import TensorView as tv + + +def getIndecesBlock(p0,p1,ccMesh): + """ + Creates a vector containing the block indexes in the cell centerd mesh. + Returns a tuple + + The block is defined by the points + p0 : describe the position of the left upper front corner, and + p1 : describe the position of the right bottom back corner. + + ccMesh represents the cell-centered mesh + + The points p0 and p1 must live in the the same dimensional space as the mesh. + """ + + # Validation of the input + assert type(p0) == np.ndarray, "Vector must be a numpy array" + assert type(p1) == np.ndarray, "Vector must be a numpy array" + + # Validation: p0 and p1 live in the same dimensional space + assert len(p0) == len(p1), "Dimension mismatch. len(p0) != len(p1)" + + # Validation: mesh and points live in the same dimensional space + dimMesh = np.size(ccMesh[0,:]) + assert len(p0) == dimMesh, "Dimension mismatch. len(p0) != dimMesh" + + if dimMesh == 1: + # Define the reference points + x1 = p0[0] + x2 = p1[0] + + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) + ind = np.where(indX) + + elif dimMesh == 2: + # Define the reference points + x1 = p0[0] + y1 = p0[1] + + x2 = p1[0] + y2 = p1[1] + + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) + indY = (y1 <= ccMesh[:,1]) & (ccMesh[:,1] <= y2) + + ind = np.where(indX & indY) + + else: + # Define the points + x1 = p0[0] + y1 = p0[1] + z1 = p0[2] + + x2 = p1[0] + y2 = p1[1] + z2 = p1[2] + + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) + indY = (y1 <= ccMesh[:,1]) & (ccMesh[:,1] <= y2) + indZ = (z1 <= ccMesh[:,2]) & (ccMesh[:,2] <= z2) + + ind = np.where(indX & indY & indZ) + + # Return a tuple + return ind + +def defineBlockConductivity(p0,p1,ccMesh,condVals): + """ + Build a block with the conductivity specified by condVal. Returns an array. + condVals[0] conductivity of the block + condVals[1] conductivity of the ground + """ + sigma = np.zeros(ccMesh.shape[0]) + condVals[1] + ind = getIndecesBlock(p0,p1,ccMesh) + + sigma[ind] = condVals[0] + + return sigma + +def defineTwoLayeredConductivity(depth,ccMesh,condVals): + """ + Define a two layered model. Depth of the first layer must be specified. + CondVals vector with the conductivity values of the layers. Eg: + + Convention to number the layers: + <----------------------------|------------------------------------> + 0 depth zf + 1st layer 2nd layer + """ + sigma = np.zeros(ccMesh.shape[0]) + condVals[1] + + dim = np.size(ccMesh[0,:]) + + p0 = np.zeros(dim) + p1 = np.zeros(dim) + + # Identify 1st cell centered reference point + p0[0] = ccMesh[0,0] + p0[1] = ccMesh[0,1] + p0[2] = ccMesh[0,2] + + # Identify the last cell-centered reference point + p1[0] = ccMesh[-1,0] + p1[1] = ccMesh[-1,1] + p1[2] = ccMesh[-1,2] - depth; + + ind = getIndecesBlock(p0,p1,ccMesh) + + sigma[ind] = condVals[0]; + + return sigma + +def scalarConductivity(ccMesh,pFunction): + """ + Define the distribution conductivity in the mesh according to the + analytical expression given in pFunction + """ + xCC = ccMesh[:,0] + yCC = ccMesh[:,1] + zCC = ccMesh[:,2] + + sigma = pFunction(xCC,yCC,zCC) + + return sigma + +if __name__ == '__main__': + + # Define the mesh + + testDim = 3 + h1 = 0.3*np.ones((1, 7)) + h1[:, 0] = 0.5 + h1[:, -1] = 0.6 + h2 = .5 * np.ones((1, 4)) + h3 = .4 * np.ones((1, 6)) + x0 = np.zeros((3, 1)) + + if testDim == 1: + h = [h1] + x0 = x0[0] + elif testDim == 2: + h = [h1, h2] + x0 = x0[0:2] + else: + h = [h1, h2, h3] + + M = tm.TensorMesh(h, x0) + + ccMesh = M.gridCC + + + + + # ------------------- Test conductivities! -------------------------- + print('Testing 1 block conductivity') + + p0 = np.array([0.5,0.5,0.5]) + p1 = np.array([1.0,1.0,1.0]) + condVals = np.array([100,1e-6]) + + sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) + + #M.plotImage(sigma) + print sigma + print 'Done with block! :)' + + # ----------------------------------------- + print('Testing the two layered model') + condVals = np.array([100,1e-5]); + depth = 1.0; + + sigma = defineTwoLayeredConductivity(depth,ccMesh,condVals) + + print sigma + print 'layer model!' + + # ----------------------------------------- + print('Testing scalar conductivity') + + pFunction = lambda x,y,z: np.exp(x+y+z) + + sigma = scalarConductivity(ccMesh,pFunction) + + print sigma + print 'Scalar conductivity defined!' + + # ----------------------------------------- From c8237cfeff29ffd36f5e53e9723aefc17db3d84a Mon Sep 17 00:00:00 2001 From: Luz Angelica Caudillo Mata Date: Mon, 22 Jul 2013 16:16:16 -0700 Subject: [PATCH 039/359] Includes plotting functionally. This code doesn't show the right image. It needs to be reviewed. --- SimPEG/parameters.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/SimPEG/parameters.py b/SimPEG/parameters.py index 926d246a..385f329a 100644 --- a/SimPEG/parameters.py +++ b/SimPEG/parameters.py @@ -132,12 +132,12 @@ if __name__ == '__main__': # Define the mesh testDim = 3 - h1 = 0.3*np.ones((1, 7)) - h1[:, 0] = 0.5 - h1[:, -1] = 0.6 - h2 = .5 * np.ones((1, 4)) - h3 = .4 * np.ones((1, 6)) - x0 = np.zeros((3, 1)) + h1 = 0.3*np.ones(7) + h1[0] = 0.5 + h1[-1] = 0.6 + h2 = .5 * np.ones(4) + h3 = .4 * np.ones(6) + x0 = np.zeros(3) if testDim == 1: h = [h1] @@ -151,10 +151,7 @@ if __name__ == '__main__': M = tm.TensorMesh(h, x0) ccMesh = M.gridCC - - - # ------------------- Test conductivities! -------------------------- print('Testing 1 block conductivity') @@ -164,7 +161,8 @@ if __name__ == '__main__': sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) - #M.plotImage(sigma) + # Plot sigma model + M.plotImage(sigma) print sigma print 'Done with block! :)' @@ -175,6 +173,7 @@ if __name__ == '__main__': sigma = defineTwoLayeredConductivity(depth,ccMesh,condVals) + M.plotImage(sigma) print sigma print 'layer model!' @@ -185,6 +184,8 @@ if __name__ == '__main__': sigma = scalarConductivity(ccMesh,pFunction) + # Plot sigma model + M.plotImage(sigma) print sigma print 'Scalar conductivity defined!' From 22cfc6181c75213569f2bd4b66326574c1590d93 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Mon, 22 Jul 2013 16:20:02 -0700 Subject: [PATCH 040/359] fixed bug in plotImage --- SimPEG/TensorView.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 29622c9b..c6f86a8e 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -124,6 +124,7 @@ class TensorView(object): # determine number oE slices in x and y dimension nX = np.ceil(np.sqrt(self.nCz)) nY = np.ceil(self.nCz/nX) + # allocate space for montage C = np.zeros((nX*self.nCx,nY*self.nCz)) @@ -143,8 +144,8 @@ class TensorView(object): yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())] ph = ax.pcolormesh(xx, yy, C.T) # Plot the lines - gx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), np.sum(self.hy)).ravel())] - gy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), np.sum(self.hx)).ravel())] + gx = np.arange(nX+1)*self.vectorNx[-1] + gy = np.arange(nY+1)*self.vectorNy[-1] # Repeat and seperate with NaN gxX = np.c_[gx, gx, gx+np.nan].ravel() gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() From f439a6d017a26dc6681889fd59136400cbf66b9d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 22 Jul 2013 16:25:34 -0700 Subject: [PATCH 041/359] Updated TensorMesh __main__ so that it works with new standards. --- SimPEG/TensorMesh.py | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index 8395c54d..b247138b 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -266,23 +266,15 @@ if __name__ == '__main__': print('Welcome to tensor mesh!') testDim = 1 - h1 = 0.3*np.ones((1, 7)) - h1[:, 0] = 0.5 - h1[:, -1] = 0.6 - h2 = .5 * np.ones((1, 4)) - h3 = .4 * np.ones((1, 6)) - x0 = np.zeros((3, 1)) + h1 = 0.3*np.ones(7) + h1[0] = 0.5 + h1[-1] = 0.6 + h2 = .5 * np.ones(4) + h3 = .4 * np.ones(6) - if testDim == 1: - h = [h1] - x0 = x0[0] - elif testDim == 2: - h = [h1, h2] - x0 = x0[0:2] - else: - h = [h1, h2, h3] + h = [h1, h2, h3] + h = h[:testDim] - I = np.linspace(0, 1, 8) - M = TensorMesh(h, x0) + M = TensorMesh(h) xn = M.plotGrid() From bffbabf391f8bd109dac551ee3887725a585c997 Mon Sep 17 00:00:00 2001 From: Luz Angelica Caudillo Mata Date: Mon, 22 Jul 2013 16:35:23 -0700 Subject: [PATCH 042/359] Plotting functionality working. --- SimPEG/parameters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SimPEG/parameters.py b/SimPEG/parameters.py index 385f329a..c90686b0 100644 --- a/SimPEG/parameters.py +++ b/SimPEG/parameters.py @@ -162,7 +162,7 @@ if __name__ == '__main__': sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) # Plot sigma model - M.plotImage(sigma) + #M.plotImage(sigma) print sigma print 'Done with block! :)' @@ -173,7 +173,7 @@ if __name__ == '__main__': sigma = defineTwoLayeredConductivity(depth,ccMesh,condVals) - M.plotImage(sigma) + #M.plotImage(sigma) print sigma print 'layer model!' From 51390a335c8696e8b028da2d9035b86e2526c9a6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 23 Jul 2013 11:17:55 -0700 Subject: [PATCH 043/359] Changed fig.show() to plt.show() to ensure that the kernel always waits for the plot to show. --- SimPEG/TensorView.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index c6f86a8e..e98fb93e 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -163,7 +163,7 @@ class TensorView(object): ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, '#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large') - fig.show() + plt.show() return ph def plotGrid(self): @@ -181,7 +181,7 @@ class TensorView(object): ax.grid(True) ax.hold(False) ax.set_xlabel('x1') - fig.show() + plt.show() elif self.dim == 2: fig = plt.figure(2) fig.clf() @@ -200,7 +200,7 @@ class TensorView(object): ax.hold(False) ax.set_xlabel('x1') ax.set_ylabel('x2') - fig.show() + plt.show() elif self.dim == 3: fig = plt.figure(3) fig.clf() @@ -229,4 +229,4 @@ class TensorView(object): ax.set_xlabel('x1') ax.set_ylabel('x2') ax.set_zlabel('x3') - fig.show() + plt.show() From 0d298af1d7e3e5fe82026b8463306827ca1adfc7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 23 Jul 2013 19:35:57 -0700 Subject: [PATCH 044/359] Initial commit of Logically orthogonal mesh. --- SimPEG/LogicallyOrthogonalMesh.py | 115 ++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 SimPEG/LogicallyOrthogonalMesh.py diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py new file mode 100644 index 00000000..b530fcb1 --- /dev/null +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -0,0 +1,115 @@ +import numpy as np +from BaseMesh import BaseMesh +from DiffOperators import DiffOperators +from utils import mkvc + + +class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid + """ + LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. + + """ + def __init__(self, nodes, x0=None): + # Start with some error checking: + assert type(nodes) == list, "'nodes' variable must be a list of np.ndarray" + + for i, nodes_i in enumerate(nodes): + assert type(nodes_i) == np.ndarray, ("nodes[%i] is not a numpy array." % i) + assert nodes_i.shape == nodes[0].shape, ("nodes[%i] is not the same shape as nodes[0]" % i) + + super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape), x0) + + assert len(nodes[0].shape) == len(self.x0), "Dimension mismatch. x0 != len(h)" + + # Save nodes to private variable _gridN as vectors + self._gridN = np.ones((nodes[0].size, self.dim)) + for i, node_i in enumerate(nodes): + self._gridN[:, i] = mkvc(node_i) + + def gridCC(): + doc = "Cell-centered grid." + + def fget(self): + if self._gridCC is None: + self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridCC + return locals() + _gridCC = None # Store grid by default + gridCC = property(**gridCC()) + + def gridN(): + doc = "Nodal grid." + + def fget(self): + if self._gridN is None: + self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridN + return locals() + _gridN = None # Store grid by default + gridN = property(**gridN()) + + def gridFx(): + doc = "Face staggered grid in the x direction." + + def fget(self): + if self._gridFx is None: + self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) + return self._gridFx + return locals() + _gridFx = None # Store grid by default + gridFx = property(**gridFx()) + + def gridFy(): + doc = "Face staggered grid in the y direction." + + def fget(self): + if self._gridFy is None: + self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridFy + return locals() + _gridFy = None # Store grid by default + gridFy = property(**gridFy()) + + def gridFz(): + doc = "Face staggered grid in the z direction." + + def fget(self): + if self._gridFz is None: + self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridFz + return locals() + _gridFz = None # Store grid by default + gridFz = property(**gridFz()) + + def gridEx(): + doc = "Edge staggered grid in the x direction." + + def fget(self): + if self._gridEx is None: + self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) + return self._gridEx + return locals() + _gridEx = None # Store grid by default + gridEx = property(**gridEx()) + + def gridEy(): + doc = "Edge staggered grid in the y direction." + + def fget(self): + if self._gridEy is None: + self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) + return self._gridEy + return locals() + _gridEy = None # Store grid by default + gridEy = property(**gridEy()) + + def gridEz(): + doc = "Edge staggered grid in the z direction." + + def fget(self): + if self._gridEz is None: + self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) + return self._gridEz + return locals() + _gridEz = None # Store grid by default + gridEz = property(**gridEz()) From 8ed0fd116e1f1c8b20764e302d4750e6dfd76c13 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 24 Jul 2013 11:36:53 -0700 Subject: [PATCH 045/359] Added a reshape class. This is useful if you want to quickly go from a vector to a matrix, or you want a single component of a unshaped vector. Has documentation and tests included. --- SimPEG/BaseMesh.py | 108 ++++++++++++++++++++++++++++++ SimPEG/tests/test_basemesh.py | 121 ++++++++++++++++++++++++++++++++++ 2 files changed, 229 insertions(+) diff --git a/SimPEG/BaseMesh.py b/SimPEG/BaseMesh.py index a197b8a4..9d8982e6 100644 --- a/SimPEG/BaseMesh.py +++ b/SimPEG/BaseMesh.py @@ -1,4 +1,5 @@ import numpy as np +from utils import mkvc class BaseMesh(object): @@ -52,6 +53,113 @@ class BaseMesh(object): return locals() x0 = property(**x0()) + def r(self, x, xType='CC', outType='CC', format='V'): + """ + Mesh.r is a quick reshape command that will do the best it can at giving you what you want. + + For example, you have a face variable, and you want the x component of it reshaped to a 3D matrix. + + Mesh.r can fulfil your dreams... + + mesh.r(V, 'F', 'Fx', 'M') + | | | { How: 'M' or ['V'] for a matrix (ndgrid style) or a vector (n x dim) } + | | { What you want: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } + | { What is it: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } + { The input: as a list or ndarray } + + + For example: + + Xex, Yex, Zex = r(mesh.gridEx, 'Ex', 'Ex', 'M') # Separates each component of the Ex grid into 3 matrices + + XedgeVector = r(edgeVector, 'E', 'Ex', 'V') # Given an edge vector, this will return just the part on the x edges as a vector + + eX, eY, eZ = r(edgeVector, 'E', 'E', 'V') # Separates each component of the edgeVector into 3 vectors + """ + + assert (type(x) == list or type(x) == np.ndarray), "x must be either a list or a ndarray" + assert xType in ['CC', 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', 'Ez'], "xType must be either 'CC', 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez'" + assert outType in ['CC', 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', 'Ez'], "outType must be either 'CC', 'N', 'F', Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez'" + assert format in ['M', 'V'], "format must be either 'M' or 'V'" + assert outType[:len(xType)] == xType, "You cannot change types when reshaping." + assert xType in outType, 'You cannot change type of components.' + if type(x) == list: + for i, xi in enumerate(x): + assert type(x) == np.ndarray, "x[%i] must be a numpy array" % i + assert xi.size == x[0].size, "Number of elements in list must not change." + + x_array = np.ones((x.size, len(x))) + # Unwrap it and put it in a np array + for i, xi in enumerate(x): + x_array[:, i] = mkvc(xi) + x = x_array + + assert type(x) == np.ndarray, "x must be a numpy array" + + x = x[:] # make a copy. + xTypeIsFExyz = len(xType) > 1 and xType[0] in ['F', 'E'] and xType[1] in ['x', 'y', 'z'] + + def outKernal(xx, nn): + """Returns xx as either a matrix (shape == nn) or a vector.""" + if format == 'M': + return xx.reshape(nn, order='F') + elif format == 'V': + return mkvc(xx) + + def switchKernal(xx): + """Switches over the different options.""" + if xType in ['CC', 'N']: + nn = (self.n) if xType == 'CC' else (self.n+1) + assert xx.size == np.prod(nn), "Number of elements must not change." + return outKernal(xx, nn) + elif xType in ['F', 'E']: + # This will only deal with components of fields, not full 'F' or 'E' + xx = mkvc(xx) # unwrap it in case it is a matrix + nn = self.nF if xType == 'F' else self.nE + nn = np.r_[0, nn] + + nx = [0, 0, 0] + nx[0] = self.nFx if xType == 'F' else self.nEx + nx[1] = self.nFy if xType == 'F' else self.nEy + nx[2] = self.nFz if xType == 'F' else self.nEz + + for dim, dimName in enumerate(['x', 'y', 'z']): + if dimName in outType: + assert self.dim > dim, ("Dimensions of mesh not great enough for %s%s", (xType, dimName)) + assert xx.size == np.sum(nn), 'Vector is not the right size.' + start = np.sum(nn[:dim+1]) + end = np.sum(nn[:dim+2]) + return outKernal(xx[start:end], nx[dim]) + elif xTypeIsFExyz: + # This will deal with partial components (x, y or z) lying on edges or faces + if 'x' in xType: + nn = self.nFx if 'F' in xType else self.nEx + elif 'y' in xType: + nn = self.nFy if 'F' in xType else self.nEy + elif 'z' in xType: + nn = self.nFz if 'F' in xType else self.nEz + assert xx.size == np.prod(nn), 'Vector is not the right size.' + return outKernal(xx, nn) + + # Check if we are dealing with a vector quantity + isVectorQuantity = len(x.shape) == 2 and x.shape[1] == self.dim + + if outType in ['F', 'E']: + assert ~isVectorQuantity, 'Not sure what to do with a vector vector quantity..' + outTypeCopy = outType + out = () + for ii, dirName in enumerate(['x', 'y', 'z'][:self.dim]): + outType = outTypeCopy + dirName + out += (switchKernal(x),) + return out + elif isVectorQuantity: + out = () + for ii in range(x.shape[1]): + out += (switchKernal(x[:, ii]),) + return out + else: + return switchKernal(x) + def n(): doc = "Number of Cells in each dimension (array of integers)" fget = lambda self: self._n diff --git a/SimPEG/tests/test_basemesh.py b/SimPEG/tests/test_basemesh.py index 9aece19b..60373011 100644 --- a/SimPEG/tests/test_basemesh.py +++ b/SimPEG/tests/test_basemesh.py @@ -44,6 +44,74 @@ class TestBaseMesh(unittest.TestCase): self.assertTrue(np.all([c, f, e])) + def test_mesh_r_E_V(self): + ex = np.ones(self.mesh.nE[0]) + ey = np.ones(self.mesh.nE[1])*2 + ez = np.ones(self.mesh.nE[2])*3 + e = np.r_[ex, ey, ez] + tex = self.mesh.r(e, 'E', 'Ex', 'V') + tey = self.mesh.r(e, 'E', 'Ey', 'V') + tez = self.mesh.r(e, 'E', 'Ez', 'V') + self.assertTrue(np.all(tex == ex)) + self.assertTrue(np.all(tey == ey)) + self.assertTrue(np.all(tez == ez)) + tex, tey, tez = self.mesh.r(e, 'E', 'E', 'V') + self.assertTrue(np.all(tex == ex)) + self.assertTrue(np.all(tey == ey)) + self.assertTrue(np.all(tez == ez)) + + def test_mesh_r_F_V(self): + fx = np.ones(self.mesh.nF[0]) + fy = np.ones(self.mesh.nF[1])*2 + fz = np.ones(self.mesh.nF[2])*3 + f = np.r_[fx, fy, fz] + tfx = self.mesh.r(f, 'F', 'Fx', 'V') + tfy = self.mesh.r(f, 'F', 'Fy', 'V') + tfz = self.mesh.r(f, 'F', 'Fz', 'V') + self.assertTrue(np.all(tfx == fx)) + self.assertTrue(np.all(tfy == fy)) + self.assertTrue(np.all(tfz == fz)) + tfx, tfy, tfz = self.mesh.r(f, 'F', 'F', 'V') + self.assertTrue(np.all(tfx == fx)) + self.assertTrue(np.all(tfy == fy)) + self.assertTrue(np.all(tfz == fz)) + + def test_mesh_r_E_M(self): + g = np.ones((np.prod(self.mesh.nEx), 3)) + g[:, 1] = 2 + g[:, 2] = 3 + Xex, Yex, Zex = self.mesh.r(g, 'Ex', 'Ex', 'M') + self.assertTrue(np.all(Xex.shape == self.mesh.nEx)) + self.assertTrue(np.all(Yex.shape == self.mesh.nEx)) + self.assertTrue(np.all(Zex.shape == self.mesh.nEx)) + self.assertTrue(np.all(Xex == 1)) + self.assertTrue(np.all(Yex == 2)) + self.assertTrue(np.all(Zex == 3)) + + def test_mesh_r_F_M(self): + g = np.ones((np.prod(self.mesh.nFx), 3)) + g[:, 1] = 2 + g[:, 2] = 3 + Xfx, Yfx, Zfx = self.mesh.r(g, 'Fx', 'Fx', 'M') + self.assertTrue(np.all(Xfx.shape == self.mesh.nFx)) + self.assertTrue(np.all(Yfx.shape == self.mesh.nFx)) + self.assertTrue(np.all(Zfx.shape == self.mesh.nFx)) + self.assertTrue(np.all(Xfx == 1)) + self.assertTrue(np.all(Yfx == 2)) + self.assertTrue(np.all(Zfx == 3)) + + def test_mesh_r_CC_M(self): + g = np.ones((self.mesh.nC, 3)) + g[:, 1] = 2 + g[:, 2] = 3 + Xc, Yc, Zc = self.mesh.r(g, 'CC', 'CC', 'M') + self.assertTrue(np.all(Xc.shape == self.mesh.n)) + self.assertTrue(np.all(Yc.shape == self.mesh.n)) + self.assertTrue(np.all(Zc.shape == self.mesh.n)) + self.assertTrue(np.all(Xc == 1)) + self.assertTrue(np.all(Yc == 2)) + self.assertTrue(np.all(Zc == 3)) + class TestMeshNumbers2D(unittest.TestCase): @@ -84,5 +152,58 @@ class TestMeshNumbers2D(unittest.TestCase): self.assertTrue(np.all([c, f, e])) + def test_mesh_r_E_V(self): + ex = np.ones(self.mesh.nE[0]) + ey = np.ones(self.mesh.nE[1])*2 + e = np.r_[ex, ey] + tex = self.mesh.r(e, 'E', 'Ex', 'V') + tey = self.mesh.r(e, 'E', 'Ey', 'V') + self.assertTrue(np.all(tex == ex)) + self.assertTrue(np.all(tey == ey)) + tex, tey = self.mesh.r(e, 'E', 'E', 'V') + self.assertTrue(np.all(tex == ex)) + self.assertTrue(np.all(tey == ey)) + self.assertRaises(AssertionError, self.mesh.r, e, 'E', 'Ez', 'V') + + def test_mesh_r_F_V(self): + fx = np.ones(self.mesh.nF[0]) + fy = np.ones(self.mesh.nF[1])*2 + f = np.r_[fx, fy] + tfx = self.mesh.r(f, 'F', 'Fx', 'V') + tfy = self.mesh.r(f, 'F', 'Fy', 'V') + self.assertTrue(np.all(tfx == fx)) + self.assertTrue(np.all(tfy == fy)) + tfx, tfy = self.mesh.r(f, 'F', 'F', 'V') + self.assertTrue(np.all(tfx == fx)) + self.assertTrue(np.all(tfy == fy)) + self.assertRaises(AssertionError, self.mesh.r, f, 'F', 'Fz', 'V') + + def test_mesh_r_E_M(self): + g = np.ones((np.prod(self.mesh.nEx), 2)) + g[:, 1] = 2 + Xex, Yex = self.mesh.r(g, 'Ex', 'Ex', 'M') + self.assertTrue(np.all(Xex.shape == self.mesh.nEx)) + self.assertTrue(np.all(Yex.shape == self.mesh.nEx)) + self.assertTrue(np.all(Xex == 1)) + self.assertTrue(np.all(Yex == 2)) + + def test_mesh_r_F_M(self): + g = np.ones((np.prod(self.mesh.nFx), 2)) + g[:, 1] = 2 + Xfx, Yfx = self.mesh.r(g, 'Fx', 'Fx', 'M') + self.assertTrue(np.all(Xfx.shape == self.mesh.nFx)) + self.assertTrue(np.all(Yfx.shape == self.mesh.nFx)) + self.assertTrue(np.all(Xfx == 1)) + self.assertTrue(np.all(Yfx == 2)) + + def test_mesh_r_CC_M(self): + g = np.ones((self.mesh.nC, 2)) + g[:, 1] = 2 + Xc, Yc = self.mesh.r(g, 'CC', 'CC', 'M') + self.assertTrue(np.all(Xc.shape == self.mesh.n)) + self.assertTrue(np.all(Yc.shape == self.mesh.n)) + self.assertTrue(np.all(Xc == 1)) + self.assertTrue(np.all(Yc == 2)) + if __name__ == '__main__': unittest.main() From dc9a92c83a5a36c44a1be1bb717c66bfded34ea5 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 24 Jul 2013 12:25:31 -0700 Subject: [PATCH 046/359] Cell centered grid working in LOM --- SimPEG/DiffOperators.py | 42 +++++++++++++++++++++++++++++++ SimPEG/LogicallyOrthogonalMesh.py | 22 +++++++++++++--- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index c5daa96d..5d8356bd 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -245,6 +245,48 @@ class DiffOperators(object): _edgeAve = None edgeAve = property(**edgeAve()) + def nodalAve(): + doc = "Construct the averaging operator on cell nodes to cell centers." + + def fget(self): + if(self._nodalAve is None): + # The number of cell centers in each direction + n = self.n + if(self.dim == 1): + self._nodalAve = av(n[0]) + elif(self.dim == 2): + self._nodalAve = sp.hstack((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._nodalAve = sp.hstack((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._nodalAve + return locals() + _nodalAve = None + nodalAve = property(**nodalAve()) + + def nodalVectorAve(): + doc = "Construct the averaging operator on cell nodes to cell centers, keeping each dimension seperate." + + def fget(self): + if(self._nodalVectorAve is None): + # The number of cell centers in each direction + n = self.n + if(self.dim == 1): + self._nodalVectorAve = av(n[0]) + elif(self.dim == 2): + self._nodalVectorAve = sp.block_diag((sp.kron(av(n[1]), av(n[0])), + sp.kron(av(n[1]), av(n[0]))), format="csr") + elif(self.dim == 3): + self._nodalVectorAve = sp.block_diag((kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0])), + kron3(av(n[2]), av(n[1]), av(n[0]))), format="csr") + return self._nodalVectorAve + return locals() + _nodalVectorAve = None + nodalVectorAve = property(**nodalVectorAve()) + def getEdgeMass(self, materialProp=None): """mass matix for products of edge functions w'*M(materialProp)*e""" if(materialProp is None): diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index b530fcb1..b49d595c 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -1,7 +1,7 @@ import numpy as np from BaseMesh import BaseMesh from DiffOperators import DiffOperators -from utils import mkvc +from utils import mkvc, ndgrid class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid @@ -17,7 +17,9 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid assert type(nodes_i) == np.ndarray, ("nodes[%i] is not a numpy array." % i) assert nodes_i.shape == nodes[0].shape, ("nodes[%i] is not the same shape as nodes[0]" % i) - super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape), x0) + assert len(nodes[0].shape) == len(nodes), "Dimension mismatch" + + super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape)-1, x0) assert len(nodes[0].shape) == len(self.x0), "Dimension mismatch. x0 != len(h)" @@ -31,7 +33,8 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid def fget(self): if self._gridCC is None: - self._gridCC = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorCCz] if not x is None]) + ccV = (self.nodalVectorAve*mkvc(self.gridN)) + self._gridCC = ccV.reshape((-1, self.dim), order='F') return self._gridCC return locals() _gridCC = None # Store grid by default @@ -42,7 +45,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid def fget(self): if self._gridN is None: - self._gridN = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorNz] if not x is None]) + raise Exception("Someone deleted this. I blame you.") return self._gridN return locals() _gridN = None # Store grid by default @@ -113,3 +116,14 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid return locals() _gridEz = None # Store grid by default gridEz = property(**gridEz()) + +if __name__ == '__main__': + nc = 5 + h1 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) + h2 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) + h3 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) + h = [h1, h2, h3] + X, Y, Z = ndgrid(h1, h2, h3, vector=False) + M = LogicallyOrthogonalMesh([X, Y, Z]) + print M.gridCC[:,0] + print M.gridN[:,0] From de0f5a7b1fe5eb7bd5360663124edeebc94f19b8 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 24 Jul 2013 15:36:28 -0700 Subject: [PATCH 047/359] Cleaned up utility codes. --- SimPEG/sputils.py | 47 +---------------------------------------------- SimPEG/utils.py | 4 ---- 2 files changed, 1 insertion(+), 50 deletions(-) diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index b078fff2..d9aab184 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -1,10 +1,9 @@ -import numpy as np from scipy import sparse as sp def sdiag(h): """Sparse diagonal matrix""" - return sp.spdiags(h, 0, np.size(h), np.size(h), format="csr") + return sp.spdiags(h, 0, h.size, h.size, format="csr") def speye(n): @@ -20,47 +19,3 @@ def kron3(A, B, C): def spzeros(n1, n2): """spzeros""" return sp.coo_matrix((n1, n2)).tocsr() - - -def appendBottom(A, B): - """append on bottom""" - C = sp.vstack((A, B)) - C = C.tocsr() - return C - - -def appendBottom3(A, B, C): - """append on bottom""" - C = appendBottom(appendBottom(A, B), C) - C = C.tocsr() - return C - - -def appendRight(A, B): - """append on right""" - C = sp.hstack((A, B)) - C = C.tocsr() - return C - - -def appendRight3(A, B, C): - """append on right""" - C = appendRight(appendRight(A, B), C) - C = C.tocsr() - return C - - -def blkDiag(A, B): - """blockdigonal""" - O12 = sp.coo_matrix((np.shape(A)[0], np.shape(B)[1])) - O21 = sp.coo_matrix((np.shape(B)[0], np.shape(A)[1])) - C = sp.vstack((sp.hstack((A, O12)), sp.hstack((O21, B)))) - C = C.tocsr() - return C - - -def blkDiag3(A, B, C): - """blockdigonal 3""" - ABC = blkDiag(blkDiag(A, B), C) - ABC = ABC.tocsr() - return ABC diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 4937062b..fdeb2742 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -1,10 +1,6 @@ import numpy as np -def reshapeF(x, size): - return np.reshape(x, size, order='F') - - def mkvc(x, numDims=1): """Creates a vector with the number of dimension specified From 87331c4c9238db17f8f9ca44591485b8dcbc7f0f Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Fri, 26 Jul 2013 11:22:52 -0700 Subject: [PATCH 048/359] mass matrices for anisotropic sigma --- SimPEG/getEdgeInnerProducts.py | 181 ++++++++++++++++++++++++++++++ SimPEG/massMatrices.py | 94 ++++++++++++++++ SimPEG/subArray.py | 8 ++ SimPEG/tests/test_massMatrices.py | 48 ++++++++ SimPEG/utils.py | 31 ++++- 5 files changed, 361 insertions(+), 1 deletion(-) create mode 100644 SimPEG/getEdgeInnerProducts.py create mode 100644 SimPEG/massMatrices.py create mode 100644 SimPEG/subArray.py create mode 100644 SimPEG/tests/test_massMatrices.py diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py new file mode 100644 index 00000000..5a95f146 --- /dev/null +++ b/SimPEG/getEdgeInnerProducts.py @@ -0,0 +1,181 @@ +from scipy.sparse import linalg +from scipy import sparse +from sputils import * +from utils import * +from numpy import * +from TensorMesh import * + +# [A] = getEdgeInnerProduct(X,Y,Z,sigma) +# + +# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) +# / / +# / / | +# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) +# / / | +# / / | +# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) +# | | | +# | | node(i+1,j+1,k+1) +# | | / +# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) +# | | / +# | | / +# | |/ +# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + +# no | node | e1 | e2 | e3 +# 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k +# 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k +# 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k +# 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k +# 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k +# 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k +# 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k +# 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k + + +def subarray(T,i1,i2,i3): + return take(take(take(T,i1,0),i2,1),i3,2) + + +def getEdgeInnerProduct(mesh,sigma): + + h = mesh.h + m = array([size(h[0]),size(h[1]),size(h[2])]) + nc = prod(m) + + me1 = m + array([0, 1, 1]); ne1 = prod(me1) + me2 = m + array([1, 0, 1]); ne2 = prod(me2) + me3 = m + array([1, 1, 0]); ne3 = prod(me3) + + i = int64(linspace(0,m[0]-1,m[0])) + j = int64(linspace(0,m[1]-1,m[1])) + k = int64(linspace(0,m[2]-1,m[2])) + + ii,jj,kk = ndgrid(i,j,k,vector=False) + ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) + + ## -------- + # no | node | e1 | e2 | e3 + # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + ind1 = sub2ind(me1,c_[ii,jj,kk]) + ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 + ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k + ind1 = sub2ind(me1,c_[ii,jj,kk]) + ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 + ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k + ind1 = sub2ind(me1,c_[ii,jj+1,kk]) + ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 + ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k + ind1 = sub2ind(me1,c_[ii,jj+1,kk]) + ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 + ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ###### + + ## -------- + # no | node | e1 | e2 | e3 + # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k + ind1 = sub2ind(me1,c_[ii,jj,kk+1]) + ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 + ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 + ind1 = sub2ind(me1,c_[ii,jj,kk+1]) + ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 + ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 + ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) + ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 + ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + ## -------- + # no | node | e1 | e2 | e3 + # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 + ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) + ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 + ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 + + IND = vstack((vstack((ind1,ind2)),ind3)) + IND = array(IND).flatten() + + P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() + + + + # Cell volume + v = sqrt(mesh.vol) + row1 = sp.hstack((sdiag(sigma[:,0]),sdiag(sigma[:,3]),sdiag(sigma[:,4]))) + row2 = sp.hstack((sdiag(sigma[:,3]),sdiag(sigma[:,1]),sdiag(sigma[:,5]))) + row3 = sp.hstack((sdiag(sigma[:,4]),sdiag(sigma[:,5]),sdiag(sigma[:,2]))) + Sigma = sp.vstack((row1, row2, row3)) + + v3 = r_[v,v,v] + V = sdiag(v3)*Sigma*sdiag(v3) + + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + + A = 0.125*A + + return A + + +if __name__ == '__main__': + + h = [array([1,2,3,4]),array([1,2,1,4,2]),array([1,1,4,1])] + mesh = TensorMesh(h) + sigma = ones((mesh.nC,6)) + A = getEdgeInnerProduct(mesh,sigma) \ No newline at end of file diff --git a/SimPEG/massMatrices.py b/SimPEG/massMatrices.py new file mode 100644 index 00000000..ead21e3a --- /dev/null +++ b/SimPEG/massMatrices.py @@ -0,0 +1,94 @@ +import numpy as np +from scipy import sparse as sp +from sputils import sdiag, speye, kron3, spzeros +from utils import mkvc + + + +def getEdgeMassMatrix(sigma,mesh): + """Get anisotropic mass matrix""" + + n = array([size(mesh.h[0]),size(mesh.h[1]),size(mesh.h[2])]) + nx = prod(n + [1, 0, 0]) + ex = reshape(arange(0,nx),[n[0]+1,n[1],n[2]]) + ny = prod(n + [0, 1, 0]) + ey = reshape(arange(0,ny),[n[0],n[1]+1,n[2]]) + nz = prod(n + [0, 0, 1]); + ez = reshape(arange(0,nz),[n[0],n[1],n[2]+1]) + + + i = arange(0,n[0]-1); j = arange(0,n[1]-1); k = arange(0,n[2]-1) + + # corner i,j,k + Px1 = take(ex,[i,j,k]); Py1 = take(ey,[i,j,k]); Pz1 = take(ez,[i,j,k]) + # corner i+1,j,k + Px2 = take(ex,[i,j,k]); Py2 = take(ey,[i+1,j,k]); Pz2 = take(ez,[i+1,j,k]) + # corner i,j+1,k + Px3 = take(ex,[i,j+1,k]); Py3 = take(ey,[i,j,k]); Pz3 = take(ez,[i,j+1,k]) + # corner i+1,j+1,k + Px4 = take(ex,[i,j+1,k]); Py4 = take(ey,[i+1,j,k]); Pz4 = take(ez,[i+1,j+1,k]); + + # corner i,j,k+1 + Px5 = take(ex,[i,j,k+1]); Py5 = take(ey,[i,j,k+1]); Pz5 = take(ez,[i,j,k]) + # corner i+1,j,k+1 + Px6 = take(ex,[i,j,k+1]); Py6 = take(ey,[i+1,j,k+1]); Pz6 = take(ez,[i+1,j,k]) + # corner i,j+1,k+1 + Px7 = take(ex,[i,j+1,k+1]); Py7 = take(ey,[i,j,k+1]); Pz7 = take(ez,[i,j+1,k]) + # corner i+1,j+1,k+1 + Px8 = take(ex,[i,j+1,k+1]); Py8 = take(ey,[i+1,j,k+1]); Pz8 = take(ez,[i+1,j+1,k]) + + + nx1 = size(Px1); ny1 = size(Py1); nz1 = size(Pz1) + #sparse.coo_matrix((V,(I,J)),shape=(4,4)) + P1 = block_diag(( sparse.coo_matrix(arange(0,nx1),Px1(:), e(nx1), nx1,nx), + sparse.coo_matrix(arange(0,ny1),Py1(:),e(ny1), ny1,ny), + sparse.coo_matrix(arange(0,nz1),Pz1(:),e(nz1), nz1,nz))) + + nx2 = numel(Px2); ny2 = numel(Py2); nz2 = numel(Pz2); + P2 = blkdiag( sparse(1:nx2,Px2(:), e(nx2), nx2,nx) , ... + sparse(1:ny2,Py2(:),e(ny2), ny2,ny), ... + sparse(1:nz2,Pz2(:),e(nz2), nz2,nz)); + + nx3 = numel(Px3); ny3 = numel(Py3); nz3 = numel(Pz3); + P3 = blkdiag( sparse(1:nx3,Px3(:), e(nx3), nx3,nx) , ... + sparse(1:ny3,Py3(:),e(ny3), ny3,ny), ... + sparse(1:nz3,Pz3(:),e(nz3), nz3,nz)); + + nx4 = numel(Px4); ny4 = numel(Py4); nz4 = numel(Pz4); + P4 = blkdiag( sparse(1:nx4,Px4(:), e(nx4), nx4,nx) , ... + sparse(1:ny4,Py4(:), e(ny4), ny4,ny), ... + sparse(1:nz4,Pz4(:), e(nz4), nz4,nz)); + + nx5 = numel(Px5); ny5 = numel(Py5); nz5 = numel(Pz5); + P5 = blkdiag( sparse(1:nx5,Px5(:), e(nx5), nx5,nx) , ... + sparse(1:ny5,Py5(:), e(ny5), ny5,ny), ... + sparse(1:nz5,Pz5(:), e(nz5), nz5,nz)); + + nx6 = numel(Px6); ny6 = numel(Py6); nz6 = numel(Pz6); + P6 = blkdiag( sparse(1:nx6,Px6(:), e(nx6), nx6,nx) , ... + sparse(1:ny6,Py6(:), e(ny6), ny6,ny), ... + sparse(1:nz6,Pz6(:), e(nz6), nz6,nz)); + + nx7 = numel(Px7); ny7 = numel(Py7); nz7 = numel(Pz7); + P7 = blkdiag( sparse(1:nx7,Px7(:), e(nx7), nx7,nx) , ... + sparse(1:ny7,Py7(:), e(ny7), ny7,ny), ... + sparse(1:nz7,Pz7(:), e(nz7), nz7,nz)); + + nx8 = numel(Px8); ny8 = numel(Py8); nz8 = numel(Pz8); + P8 = blkdiag( sparse(1:nx8,Px8(:), e(nx8), nx8,nx) , ... + sparse(1:ny8,Py8(:), e(ny8), ny8,ny), ... + sparse(1:nz8,Pz8(:), e(nz8), nz8,nz)); + + V = sdiag(sqrt([v(:); v(:); v(:)])); + + # generate the conductivity + S = [sdiag(sig(:,1)) , sdiag(sig(:,4)) , sdiag(sig(:,5)); ... + sdiag(sig(:,4)) , sdiag(sig(:,2)) , sdiag(sig(:,6)); ... + sdiag(sig(:,5)) , sdiag(sig(:,6)) , sdiag(sig(:,3))]; + + # scale by the volume + S = V*S*V; + + M = 1/8*(P1'*S*P1 + P2'*S*P2 + P3'*S*P3 + P4'*S*P4 + ... + P5'*S*P5 + P6'*S*P6 + P7'*S*P7 + P8'*S*P8); + \ No newline at end of file diff --git a/SimPEG/subArray.py b/SimPEG/subArray.py new file mode 100644 index 00000000..2811f350 --- /dev/null +++ b/SimPEG/subArray.py @@ -0,0 +1,8 @@ +import numpy as np + +def getSubArray(A,ind): + """subArray""" + i = ind[0]; j = ind[1]; k = ind[2] + + return A[i,:,:][:,j,:][:,:,k] + \ No newline at end of file diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py new file mode 100644 index 00000000..08fa4caf --- /dev/null +++ b/SimPEG/tests/test_massMatrices.py @@ -0,0 +1,48 @@ +import numpy as np +import unittest +import sys +sys.path.append('../') +from TensorMesh import TensorMesh +from OrderTest import OrderTest +from scipy.sparse.linalg import dsolve +from getEdgeInnerProducts import getEdgeInnerProducts + + +class TestNodalGrad(OrderTest): + name = "Nodal Gradient" + + meshSizes = [4, 8, 16, 32] + + def getError(self): + ex = lambda x, y, z: x**2+y*z + ey = lambda x, y, z: (z**2)*x+y*z + ez = lambda x, y, z: y**2+x*z + + sigma1 = lambda x, y, z: x*y+1 + sigma2 = lambda x, y, z: x*z+2 + sigma3 = lambda x, y, z: 3+z*y + sigma4 = lambda x, y, z: 0.1*x*y*z + sigma5 = lambda x, y, z: 0.2*x*y + sigma6 = lambda x, y, z: 0.1*z + + Ex = ex(self.M.gridEx[:, 0],self.M.gridEx[:, 1],self.M.gridEx[:, 2]) + Ey = ey(self.M.gridEy[:, 0],self.M.gridEy[:, 1],self.M.gridEy[:, 2]) + Ez = ez(self.M.gridEz[:, 0],self.M.gridEz[:, 1],self.M.gridEz[:, 2]) + + E = np.r_[Ex,Ey,Ez] + Gc = self.M.gridCC + sigma = np.c_[sigma1(Gc[:,0],Gc[:,1],Gc[:,2]), + sigma2(Gc[:,0],Gc[:,1],Gc[:,2]), + sigma3(Gc[:,0],Gc[:,1],Gc[:,2]), + sigma4(Gc[:,0],Gc[:,1],Gc[:,2]), + sigma5(Gc[:,0],Gc[:,1],Gc[:,2]), + sigma6(Gc[:,0],Gc[:,1],Gc[:,2])] + + A = getEdgeInnerProducts(self.M, sigma) + + err = np.abs(E.T*A*E - 69881./21600) + + return err + + def test_order(self): + self.orderTest() diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 4937062b..b9e17847 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -1,5 +1,5 @@ import numpy as np - +from numpy import * def reshapeF(x, size): return np.reshape(x, size, order='F') @@ -97,3 +97,32 @@ def ndgrid(*args, **kwargs): return np.c_[X1, X2, X3] else: return XYZ[2], XYZ[1], XYZ[0] + + +def ind2sub(shape, ind): + """From the given shape, returns the subscrips of the given index""" + revshp = [] + revshp.extend(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult)) + + sub = [] + + for i in range(0, len(shape)): + sub.extend([math.floor(ind / mult[i])]) + ind = ind - (math.floor(ind/mult[i]) * mult[i]) + return sub + + +def sub2ind(shape, subs): + """From the given shape, returns the index of the given subscript""" + revshp = list(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = array(mult).reshape(len(mult), 1) + + idx = dot((subs), (mult)) + return idx \ No newline at end of file From 1909af17755768934b46e3bd96f97cf61e35d2b4 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 11:40:36 -0700 Subject: [PATCH 049/359] Error checking and volume. --- SimPEG/LogicallyOrthogonalMesh.py | 84 ++++++++----------------------- SimPEG/utils.py | 30 +++++++++++ 2 files changed, 50 insertions(+), 64 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index b49d595c..7369237c 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -10,7 +10,6 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid """ def __init__(self, nodes, x0=None): - # Start with some error checking: assert type(nodes) == list, "'nodes' variable must be a list of np.ndarray" for i, nodes_i in enumerate(nodes): @@ -18,6 +17,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid assert nodes_i.shape == nodes[0].shape, ("nodes[%i] is not the same shape as nodes[0]" % i) assert len(nodes[0].shape) == len(nodes), "Dimension mismatch" + assert len(nodes[0].shape) > 1, "Not worth using LOM for a 1D mesh." super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape)-1, x0) @@ -51,71 +51,27 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid _gridN = None # Store grid by default gridN = property(**gridN()) - def gridFx(): - doc = "Face staggered grid in the x direction." + # --------------- Geometries --------------------- + def vol(): + doc = "Construct cell volumes of the 3D model as 1d array." def fget(self): - if self._gridFx is None: - self._gridFx = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorCCz] if not x is None]) - return self._gridFx + if(self._vol is None): + vh = self.h + # Compute cell volumes + if(self.dim == 1): + self._vol = mkvc(vh[0]) + elif(self.dim == 2): + # Cell sizes in each direction + self._vol = mkvc(np.outer(vh[0], vh[1])) + elif(self.dim == 3): + # Cell sizes in each direction + self._vol = mkvc(np.outer(mkvc(np.outer(vh[0], vh[1])), vh[2])) + return self._vol return locals() - _gridFx = None # Store grid by default - gridFx = property(**gridFx()) + _vol = None + vol = property(**vol()) - def gridFy(): - doc = "Face staggered grid in the y direction." - - def fget(self): - if self._gridFy is None: - self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) - return self._gridFy - return locals() - _gridFy = None # Store grid by default - gridFy = property(**gridFy()) - - def gridFz(): - doc = "Face staggered grid in the z direction." - - def fget(self): - if self._gridFz is None: - self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) - return self._gridFz - return locals() - _gridFz = None # Store grid by default - gridFz = property(**gridFz()) - - def gridEx(): - doc = "Edge staggered grid in the x direction." - - def fget(self): - if self._gridEx is None: - self._gridEx = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorNz] if not x is None]) - return self._gridEx - return locals() - _gridEx = None # Store grid by default - gridEx = property(**gridEx()) - - def gridEy(): - doc = "Edge staggered grid in the y direction." - - def fget(self): - if self._gridEy is None: - self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) - return self._gridEy - return locals() - _gridEy = None # Store grid by default - gridEy = property(**gridEy()) - - def gridEz(): - doc = "Edge staggered grid in the z direction." - - def fget(self): - if self._gridEz is None: - self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) - return self._gridEz - return locals() - _gridEz = None # Store grid by default - gridEz = property(**gridEz()) if __name__ == '__main__': nc = 5 @@ -125,5 +81,5 @@ if __name__ == '__main__': h = [h1, h2, h3] X, Y, Z = ndgrid(h1, h2, h3, vector=False) M = LogicallyOrthogonalMesh([X, Y, Z]) - print M.gridCC[:,0] - print M.gridN[:,0] + print M.r(M.gridCC, format='M') + print M.gridN[:, 0] diff --git a/SimPEG/utils.py b/SimPEG/utils.py index fdeb2742..84bf11bf 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -93,3 +93,33 @@ def ndgrid(*args, **kwargs): return np.c_[X1, X2, X3] else: return XYZ[2], XYZ[1], XYZ[0] + + +def volTetra(xyz, A, B, C, D): + """ + Returns the volume for tetrahedras volume specified by the indexes A to D. + + + Input: + xyz - X,Y,Z vertex vector + A,B,C,D - vert index of the tetrahedra + + Output: + V - volume + + Algorithm: http://en.wikipedia.org/wiki/Tetrahedron#Volume + + V = 1/3 A * h + + V = 1/6 | ( a - d ) o ( ( b - d ) X ( c - d ) ) | + + """ + + AD = xyz[A, :] - xyz[D, :] + BD = xyz[B, :] - xyz[D, :] + CD = xyz[C, :] - xyz[D, :] + + + + V = (BD[:, 0]*CD[:, 1] - BD[:, 1]*CD[:, 0])*AD[:, 2] - (BD[:, 0]*CD[:, 2] - BD[:, 2]*CD[:, 0])*AD[:, 1] + (BD[:, 1]*CD[:, 2] - BD[:, 2]*CD[:, 1])*AD[:, 0] + return V/6 From 150cbc7df3b7c94e4173629b5130776079289aaa Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 12:11:45 -0700 Subject: [PATCH 050/359] Test for edge inner products working. --- SimPEG/getEdgeInnerProducts.py | 122 +++++++++++++++--------------- SimPEG/tests/test_massMatrices.py | 47 ++++++------ 2 files changed, 86 insertions(+), 83 deletions(-) diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py index 5a95f146..d3b91211 100644 --- a/SimPEG/getEdgeInnerProducts.py +++ b/SimPEG/getEdgeInnerProducts.py @@ -6,7 +6,7 @@ from numpy import * from TensorMesh import * # [A] = getEdgeInnerProduct(X,Y,Z,sigma) -# +# # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) # / / @@ -35,147 +35,147 @@ from TensorMesh import * # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k -def subarray(T,i1,i2,i3): - return take(take(take(T,i1,0),i2,1),i3,2) - +def subarray(T, i1, i2, i3): + return take(take(take(T, i1, 0), i2, 1), i3, 2) -def getEdgeInnerProduct(mesh,sigma): + +def getEdgeInnerProduct(mesh, sigma): h = mesh.h - m = array([size(h[0]),size(h[1]),size(h[2])]) + m = array([size(h[0]), size(h[1]), size(h[2])]) nc = prod(m) - + me1 = m + array([0, 1, 1]); ne1 = prod(me1) me2 = m + array([1, 0, 1]); ne2 = prod(me2) me3 = m + array([1, 1, 0]); ne3 = prod(me3) - + i = int64(linspace(0,m[0]-1,m[0])) j = int64(linspace(0,m[1]-1,m[1])) k = int64(linspace(0,m[2]-1,m[2])) - - ii,jj,kk = ndgrid(i,j,k,vector=False) + + ii,jj,kk = ndgrid(i,j,k,vector=False) ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) - + ## -------- # no | node | e1 | e2 | e3 # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk]) + ind1 = sub2ind(me1,c_[ii,jj,kk]) ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk]) + ind1 = sub2ind(me1,c_[ii,jj,kk]) ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - ind1 = sub2ind(me1,c_[ii,jj+1,kk]) + ind1 = sub2ind(me1,c_[ii,jj+1,kk]) ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - ind1 = sub2ind(me1,c_[ii,jj+1,kk]) + ind1 = sub2ind(me1,c_[ii,jj+1,kk]) ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ###### - + ## -------- # no | node | e1 | e2 | e3 # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk+1]) + ind1 = sub2ind(me1,c_[ii,jj,kk+1]) ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 - ind1 = sub2ind(me1,c_[ii,jj,kk+1]) + ind1 = sub2ind(me1,c_[ii,jj,kk+1]) ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 - ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) + ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - + ## -------- # no | node | e1 | e2 | e3 # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 - ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) + ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 - + IND = vstack((vstack((ind1,ind2)),ind3)) IND = array(IND).flatten() - + P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - - + + + # Cell volume - v = sqrt(mesh.vol) - row1 = sp.hstack((sdiag(sigma[:,0]),sdiag(sigma[:,3]),sdiag(sigma[:,4]))) - row2 = sp.hstack((sdiag(sigma[:,3]),sdiag(sigma[:,1]),sdiag(sigma[:,5]))) - row3 = sp.hstack((sdiag(sigma[:,4]),sdiag(sigma[:,5]),sdiag(sigma[:,2]))) + row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) + row2 = sp.hstack((sdiag(sigma[:, 3]), sdiag(sigma[:, 1]), sdiag(sigma[:, 5]))) + row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) Sigma = sp.vstack((row1, row2, row3)) - - v3 = r_[v,v,v] + + v = sqrt(mesh.vol) + v3 = r_[v, v, v] V = sdiag(v3)*Sigma*sdiag(v3) - - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - + + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + A = 0.125*A - + return A - - + + if __name__ == '__main__': - h = [array([1,2,3,4]),array([1,2,1,4,2]),array([1,1,4,1])] + h = [array([1, 2, 3, 4]), array([1, 2, 1, 4, 2]), array([1, 1, 4, 1])] mesh = TensorMesh(h) - sigma = ones((mesh.nC,6)) - A = getEdgeInnerProduct(mesh,sigma) \ No newline at end of file + sigma = ones((mesh.nC, 6)) + A = getEdgeInnerProduct(mesh, sigma) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 08fa4caf..68ed8516 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -2,18 +2,21 @@ import numpy as np import unittest import sys sys.path.append('../') -from TensorMesh import TensorMesh from OrderTest import OrderTest -from scipy.sparse.linalg import dsolve -from getEdgeInnerProducts import getEdgeInnerProducts +from getEdgeInnerProducts import * -class TestNodalGrad(OrderTest): - name = "Nodal Gradient" - +class TestEdgeInnerProduct(OrderTest): + """Integrate a function over a unit cube domain.""" + + name = "Edge Inner Product" + meshSizes = [4, 8, 16, 32] def getError(self): + + call = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) + ex = lambda x, y, z: x**2+y*z ey = lambda x, y, z: (z**2)*x+y*z ez = lambda x, y, z: y**2+x*z @@ -24,25 +27,25 @@ class TestNodalGrad(OrderTest): sigma4 = lambda x, y, z: 0.1*x*y*z sigma5 = lambda x, y, z: 0.2*x*y sigma6 = lambda x, y, z: 0.1*z - - Ex = ex(self.M.gridEx[:, 0],self.M.gridEx[:, 1],self.M.gridEx[:, 2]) - Ey = ey(self.M.gridEy[:, 0],self.M.gridEy[:, 1],self.M.gridEy[:, 2]) - Ez = ez(self.M.gridEz[:, 0],self.M.gridEz[:, 1],self.M.gridEz[:, 2]) - - E = np.r_[Ex,Ey,Ez] + + Ex = call(ex, self.M.gridEx) + Ey = call(ey, self.M.gridEy) + Ez = call(ez, self.M.gridEz) + + E = np.matrix(mkvc(np.r_[Ex, Ey, Ez], 2)) Gc = self.M.gridCC - sigma = np.c_[sigma1(Gc[:,0],Gc[:,1],Gc[:,2]), - sigma2(Gc[:,0],Gc[:,1],Gc[:,2]), - sigma3(Gc[:,0],Gc[:,1],Gc[:,2]), - sigma4(Gc[:,0],Gc[:,1],Gc[:,2]), - sigma5(Gc[:,0],Gc[:,1],Gc[:,2]), - sigma6(Gc[:,0],Gc[:,1],Gc[:,2])] - - A = getEdgeInnerProducts(self.M, sigma) - - err = np.abs(E.T*A*E - 69881./21600) + sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc), + call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)] + A = getEdgeInnerProduct(self.M, sigma) + numeric = E.T*A*E + analytic = 69881./21600 # Found using matlab symbolic toolbox. + err = np.abs(numeric - analytic) return err def test_order(self): self.orderTest() + + +if __name__ == '__main__': + unittest.main() From 90bf6d31390d6d89e8ae795cd46b9eae1f622eeb Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 13:56:05 -0700 Subject: [PATCH 051/359] Refactored and cleaned up code. --- SimPEG/getEdgeInnerProducts.py | 198 ++++++++---------------------- SimPEG/tests/test_massMatrices.py | 2 +- 2 files changed, 51 insertions(+), 149 deletions(-) diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py index d3b91211..858d5a72 100644 --- a/SimPEG/getEdgeInnerProducts.py +++ b/SimPEG/getEdgeInnerProducts.py @@ -1,160 +1,61 @@ -from scipy.sparse import linalg -from scipy import sparse -from sputils import * -from utils import * -from numpy import * -from TensorMesh import * - -# [A] = getEdgeInnerProduct(X,Y,Z,sigma) -# - -# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) -# / / -# / / | -# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) -# / / | -# / / | -# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) -# | | | -# | | node(i+1,j+1,k+1) -# | | / -# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) -# | | / -# | | / -# | |/ -# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - -# no | node | e1 | e2 | e3 -# 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k -# 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k -# 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k -# 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k -# 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k -# 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k -# 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k -# 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k - - -def subarray(T, i1, i2, i3): - return take(take(take(T, i1, 0), i2, 1), i3, 2) +from scipy import sparse as sp +from sputils import sdiag +from utils import sub2ind, ndgrid +import numpy as np def getEdgeInnerProduct(mesh, sigma): - h = mesh.h - m = array([size(h[0]), size(h[1]), size(h[2])]) - nc = prod(m) + m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) + nc = mesh.nC - me1 = m + array([0, 1, 1]); ne1 = prod(me1) - me2 = m + array([1, 0, 1]); ne2 = prod(me2) - me3 = m + array([1, 1, 0]); ne3 = prod(me3) + i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) - i = int64(linspace(0,m[0]-1,m[0])) - j = int64(linspace(0,m[1]-1,m[1])) - k = int64(linspace(0,m[2]-1,m[2])) + iijjkk = ndgrid(i, j, k) + ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] - ii,jj,kk = ndgrid(i,j,k,vector=False) - ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) + def Pxxx(pos): + ind1 = sub2ind(mesh.nEx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) + ind2 = sub2ind(mesh.nEy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nE[0] + ind3 = sub2ind(mesh.nEz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nE[0] + mesh.nE[1] + + IND = np.r_[ind1, ind2, ind3].flatten() + + return sp.coo_matrix((np.ones(3*nc), (np.linspace(0, 3*nc-1, 3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() + + # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + # / / + # / / | + # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + # / / | + # / / | + # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + # | | | + # | | node(i+1,j+1,k+1) + # | | / + # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) + # | | / + # | | / + # | |/ + # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - ## -------- # no | node | e1 | e2 | e3 # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk]) - ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 - ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk]) - ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 - ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - ind1 = sub2ind(me1,c_[ii,jj+1,kk]) - ind2 = sub2ind(me2,c_[ii,jj,kk]) + ne1 - ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - ind1 = sub2ind(me1,c_[ii,jj+1,kk]) - ind2 = sub2ind(me2,c_[ii+1,jj,kk]) + ne1 - ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ###### - - ## -------- - # no | node | e1 | e2 | e3 - # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - ind1 = sub2ind(me1,c_[ii,jj,kk+1]) - ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 - ind3 = sub2ind(me3,c_[ii,jj,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 - # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 - ind1 = sub2ind(me1,c_[ii,jj,kk+1]) - ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 - ind3 = sub2ind(me3,c_[ii+1,jj,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 - # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 - ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) - ind2 = sub2ind(me2,c_[ii,jj,kk+1]) + ne1 - ind3 = sub2ind(me3,c_[ii,jj+1,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - ## -------- - # no | node | e1 | e2 | e3 - # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 - ind1 = sub2ind(me1,c_[ii,jj+1,kk+1]) - ind2 = sub2ind(me2,c_[ii+1,jj,kk+1]) + ne1 - ind3 = sub2ind(me3,c_[ii+1,jj+1,kk]) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - + # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k + # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k + # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k + # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k + P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = Pxxx([[0, 0, 0], [1, 0, 0], [1, 0, 0]]) + P010 = Pxxx([[0, 1, 0], [0, 0, 0], [0, 1, 0]]) + P110 = Pxxx([[0, 1, 0], [1, 0, 0], [1, 1, 0]]) + P001 = Pxxx([[0, 0, 1], [0, 0, 1], [0, 0, 0]]) + P101 = Pxxx([[0, 0, 1], [1, 0, 1], [1, 0, 0]]) + P011 = Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) + P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) # Cell volume row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) @@ -162,8 +63,8 @@ def getEdgeInnerProduct(mesh, sigma): row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) Sigma = sp.vstack((row1, row2, row3)) - v = sqrt(mesh.vol) - v3 = r_[v, v, v] + v = np.sqrt(mesh.vol) + v3 = np.r_[v, v, v] V = sdiag(v3)*Sigma*sdiag(v3) A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 @@ -175,7 +76,8 @@ def getEdgeInnerProduct(mesh, sigma): if __name__ == '__main__': - h = [array([1, 2, 3, 4]), array([1, 2, 1, 4, 2]), array([1, 1, 4, 1])] + from TensorMesh import * + h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] mesh = TensorMesh(h) - sigma = ones((mesh.nC, 6)) + sigma = np.ones((mesh.nC, 6)) A = getEdgeInnerProduct(mesh, sigma) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 68ed8516..87310a47 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,7 +32,7 @@ class TestEdgeInnerProduct(OrderTest): Ey = call(ey, self.M.gridEy) Ez = call(ez, self.M.gridEz) - E = np.matrix(mkvc(np.r_[Ex, Ey, Ez], 2)) + E = np.matrix(np.r_[Ex, Ey, Ez]).T Gc = self.M.gridCC sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc), call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)] From c8633881fbdfeaaaa0cec92a60b24c155d1cf4a8 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 14:19:44 -0700 Subject: [PATCH 052/359] Support for isotropic sigma --- SimPEG/getEdgeInnerProducts.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py index 858d5a72..7e123ab6 100644 --- a/SimPEG/getEdgeInnerProducts.py +++ b/SimPEG/getEdgeInnerProducts.py @@ -1,6 +1,6 @@ from scipy import sparse as sp from sputils import sdiag -from utils import sub2ind, ndgrid +from utils import sub2ind, ndgrid, mkvc import numpy as np @@ -21,7 +21,7 @@ def getEdgeInnerProduct(mesh, sigma): IND = np.r_[ind1, ind2, ind3].flatten() - return sp.coo_matrix((np.ones(3*nc), (np.linspace(0, 3*nc-1, 3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() + return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) # / / @@ -57,15 +57,21 @@ def getEdgeInnerProduct(mesh, sigma): P011 = Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) - # Cell volume - row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) - row2 = sp.hstack((sdiag(sigma[:, 3]), sdiag(sigma[:, 1]), sdiag(sigma[:, 5]))) - row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) - Sigma = sp.vstack((row1, row2, row3)) + if sigma.size == mesh.nC: # Isotropic! + sigma = mkvc(sigma) + Sigma = sdiag(np.r_[sigma, sigma, sigma]) + elif sigma.shape[1] == 3: # Diagonal tensor + Sigma = sdiag(np.r_[sigma[:, 0], sigma[:, 1], sigma[:, 2]]) + elif sigma.shape[1] == 6: # Fully anisotropic + row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) + row2 = sp.hstack((sdiag(sigma[:, 3]), sdiag(sigma[:, 1]), sdiag(sigma[:, 5]))) + row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) + Sigma = sp.vstack((row1, row2, row3)) + # Cell volume v = np.sqrt(mesh.vol) v3 = np.r_[v, v, v] - V = sdiag(v3)*Sigma*sdiag(v3) + V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 @@ -73,10 +79,8 @@ def getEdgeInnerProduct(mesh, sigma): return A - if __name__ == '__main__': - - from TensorMesh import * + from TensorMesh import TensorMesh h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] mesh = TensorMesh(h) sigma = np.ones((mesh.nC, 6)) From 5c83095781f67e1c315bf2a7889ec09004964526 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 14:30:04 -0700 Subject: [PATCH 053/359] Minor changes and comments. --- SimPEG/getEdgeInnerProducts.py | 2 +- SimPEG/tests/test_massMatrices.py | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py index 7e123ab6..68423a3f 100644 --- a/SimPEG/getEdgeInnerProducts.py +++ b/SimPEG/getEdgeInnerProducts.py @@ -58,7 +58,7 @@ def getEdgeInnerProduct(mesh, sigma): P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) if sigma.size == mesh.nC: # Isotropic! - sigma = mkvc(sigma) + sigma = mkvc(sigma) # ensure it is a vector. Sigma = sdiag(np.r_[sigma, sigma, sigma]) elif sigma.shape[1] == 3: # Diagonal tensor Sigma = sdiag(np.r_[sigma[:, 0], sigma[:, 1], sigma[:, 2]]) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 87310a47..0aae0615 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -1,18 +1,16 @@ import numpy as np import unittest +from OrderTest import OrderTest import sys sys.path.append('../') -from OrderTest import OrderTest from getEdgeInnerProducts import * class TestEdgeInnerProduct(OrderTest): - """Integrate a function over a unit cube domain.""" + """Integrate an edge function over a unit cube domain using edgeInnerProducts.""" name = "Edge Inner Product" - meshSizes = [4, 8, 16, 32] - def getError(self): call = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) From fe547476c9ea0b7855df80b811b7d83fa304b03c Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 15:56:21 -0700 Subject: [PATCH 054/359] IndexCube now in Utils --- SimPEG/tests/test_utils.py | 33 +++++++++++----- SimPEG/utils.py | 77 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 10 deletions(-) diff --git a/SimPEG/tests/test_utils.py b/SimPEG/tests/test_utils.py index 5d05b710..59b70147 100644 --- a/SimPEG/tests/test_utils.py +++ b/SimPEG/tests/test_utils.py @@ -2,7 +2,7 @@ import numpy as np import unittest import sys sys.path.append('../') -from utils import mkvc, ndgrid +from utils import mkvc, ndgrid, indexCube class TestSequenceFunctions(unittest.TestCase): @@ -30,10 +30,8 @@ class TestSequenceFunctions(unittest.TestCase): X1_test = np.array([1, 2, 3, 1, 2, 3]) X2_test = np.array([1, 1, 1, 2, 2, 2]) - xtest = np.all(XY[:, 0] == X1_test) - ytest = np.all(XY[:, 1] == X2_test) - - self.assertTrue(xtest and ytest) + self.assertTrue(np.all(XY[:, 0] == X1_test)) + self.assertTrue(np.all(XY[:, 1] == X2_test)) def test_ndgrid_3D(self): XYZ = ndgrid([self.a, self.b, self.c]) @@ -42,12 +40,27 @@ class TestSequenceFunctions(unittest.TestCase): X2_test = np.array([1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2]) X3_test = np.array([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]) - xtest = np.all(XYZ[:, 0] == X1_test) - ytest = np.all(XYZ[:, 1] == X2_test) - ztest = np.all(XYZ[:, 2] == X3_test) + self.assertTrue(np.all(XYZ[:, 0] == X1_test)) + self.assertTrue(np.all(XYZ[:, 1] == X2_test)) + self.assertTrue(np.all(XYZ[:, 2] == X3_test)) - self.assertTrue(xtest and ytest and ztest) + def test_indexCube_2D(self): + nN = np.array([3, 3]) + self.assertTrue(np.all(indexCube('A', nN) == np.array([0, 1, 3, 4]))) + self.assertTrue(np.all(indexCube('B', nN) == np.array([3, 4, 6, 7]))) + self.assertTrue(np.all(indexCube('C', nN) == np.array([4, 5, 7, 8]))) + self.assertTrue(np.all(indexCube('D', nN) == np.array([1, 2, 4, 5]))) + + def test_indexCube_3D(self): + nN = np.array([3, 3, 3]) + self.assertTrue(np.all(indexCube('A', nN) == np.array([0, 1, 3, 4, 9, 10, 12, 13]))) + self.assertTrue(np.all(indexCube('B', nN) == np.array([3, 4, 6, 7, 12, 13, 15, 16]))) + self.assertTrue(np.all(indexCube('C', nN) == np.array([4, 5, 7, 8, 13, 14, 16, 17]))) + self.assertTrue(np.all(indexCube('D', nN) == np.array([1, 2, 4, 5, 10, 11, 13, 14]))) + self.assertTrue(np.all(indexCube('E', nN) == np.array([9, 10, 12, 13, 18, 19, 21, 22]))) + self.assertTrue(np.all(indexCube('F', nN) == np.array([12, 13, 15, 16, 21, 22, 24, 25]))) + self.assertTrue(np.all(indexCube('G', nN) == np.array([13, 14, 16, 17, 22, 23, 25, 26]))) + self.assertTrue(np.all(indexCube('H', nN) == np.array([10, 11, 13, 14, 19, 20, 22, 23]))) if __name__ == '__main__': unittest.main() - diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 55acf9b0..8aa7f27b 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -124,6 +124,83 @@ def volTetra(xyz, A, B, C, D): return V/6 +def indexCube(nodes, nN): + """ + Returns the index of nodes on the mesh. + + + Input: + nodes - string of which nodes to return. e.g. 'ABCD' + nN - size of the nodal grid + + Output: + index - index in the order asked e.g. 'ABCD' --> (A,B,C,D) + + TWO DIMENSIONS: + + node(i,j) node(i,j+1) + A -------------- B + | | + | cell(i,j) | + | I | + | | + D -------------- C + node(i+1,j) node(i+1,j+1) + + + THREE DIMENSIONS: + + node(i,j,k+1) node(i,j+1,k+1) + E --------------- F + /| / | + / | / | + / | / | + node(i,j,k) node(i,j+1,k) + A -------------- B | + | H ----------|---- G + | /cell(i,j) | / + | / I | / + | / | / + D -------------- C + node(i+1,j,k) node(i+1,j+1,k) + + + @author Rowan Cockett + + Last modified on: 2013/03/07 + """ + + assert type(nodes) == str, "Nodes must be a str variable: e.g. 'ABCD'" + assert type(nN) == np.ndarray, "Number of nodes must be an ndarray" + nodes = nodes.upper() + # Make sure that we choose from the possible nodes. + possibleNodes = 'ABCD' if nN.size == 2 else 'ABCDEFGH' + for node in nodes: + assert node in possibleNodes, "Nodes must be chosen from: '%s'" % possibleNodes + dim = nN.size + nC = nN - 1 + + if dim == 2: + ij = ndgrid(np.arange(nC[0]), np.arange(nC[1])) + i, j = ij[:, 0], ij[:, 1] + elif dim == 3: + ijk = ndgrid(np.arange(nC[0]), np.arange(nC[1]), np.arange(nC[2])) + i, j, k = ijk[:, 0], ijk[:, 1], ijk[:, 2] + else: + raise Exception('Only 2 and 3 dimensions supported.') + + nodeMap = {'A': [0, 0, 0], 'B': [0, 1, 0], 'C': [1, 1, 0], 'D': [1, 0, 0], + 'E': [0, 0, 1], 'F': [0, 1, 1], 'G': [1, 1, 1], 'H': [1, 0, 1]} + out = () + for node in nodes: + shift = nodeMap[node] + if dim == 2: + out += (sub2ind(nN, np.c_[i+shift[0], j+shift[1]]).flatten(), ) + elif dim == 3: + out += (sub2ind(nN, np.c_[i+shift[0], j+shift[1], k+shift[2]]).flatten(), ) + + return out + def getSubArray(A, ind): """subArray""" return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] From 079acb1153fb129a37f090caaeb14f63b58d9f80 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 26 Jul 2013 16:38:12 -0700 Subject: [PATCH 055/359] volume in 2D by calculating faceInfo (in utils for now.) --- SimPEG/LogicallyOrthogonalMesh.py | 61 +++++++++++++++++++---- SimPEG/utils.py | 83 ++++++++++++++++++++++++++++++- 2 files changed, 131 insertions(+), 13 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 7369237c..5bb5482b 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -1,7 +1,7 @@ import numpy as np from BaseMesh import BaseMesh from DiffOperators import DiffOperators -from utils import mkvc, ndgrid +from utils import mkvc, ndgrid, volTetra, indexCube, faceInfo class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid @@ -52,21 +52,60 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid gridN = property(**gridN()) # --------------- Geometries --------------------- + # + # + # ------------------- 2D ------------------------- + # + # node(i,j) node(i,j+1) + # A -------------- B + # | | + # | cell(i,j) | + # | I | + # | | + # D -------------- C + # node(i+1,j) node(i+1,j+1) + # + # ------------------- 3D ------------------------- + # + # + # node(i,j,k+1) node(i,j+1,k+1) + # E --------------- F + # /| / | + # / | / | + # / | / | + # node(i,j,k) node(i,j+1,k) + # A -------------- B | + # | H ----------|---- G + # | /cell(i,j) | / + # | / I | / + # | / | / + # D -------------- C + # node(i+1,j,k) node(i+1,j+1,k) def vol(): doc = "Construct cell volumes of the 3D model as 1d array." def fget(self): if(self._vol is None): - vh = self.h - # Compute cell volumes - if(self.dim == 1): - self._vol = mkvc(vh[0]) - elif(self.dim == 2): - # Cell sizes in each direction - self._vol = mkvc(np.outer(vh[0], vh[1])) - elif(self.dim == 3): - # Cell sizes in each direction - self._vol = mkvc(np.outer(mkvc(np.outer(vh[0], vh[1])), vh[2])) + if self.dim == 2: + A, B, C, D = indexCube('ABCD', np.array([self.nNx, self.nNy])) + normal, area, length = faceInfo(np.c_[self.gridN, np.zeros((self.nC, 1))], A, B, C, D) + self._vol = area + elif self.dim == 3: + # Each polyhedron can be decomposed into 5 tetrahedrons + # T1 = [A B D E]; % cutted edge + # T2 = [B E F G]; % cutted edge + # T3 = [B D E G]; % mid + # T4 = [B C D G]; % cutted edge + # T5 = [D E G H]; % cutted edge + A, B, C, D, E, F, G, H = indexCube('ABCDEFGH', np.array([self.nNx, self.nNy, self.nNz])) + + v1 = volTetra(self.gridN, A, B, D, E) # cutted edge + v2 = volTetra(self.gridN, B, E, F, G) # cutted edge + v3 = volTetra(self.gridN, B, D, E, G) # mid + v4 = volTetra(self.gridN, B, C, D, G) # cutted edge + v5 = volTetra(self.gridN, D, E, G, H) # cutted edge + + self._vol = v1 + v2 + v3 + v4 + v5 return self._vol return locals() _vol = None diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 8aa7f27b..37441e8e 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -126,7 +126,7 @@ def volTetra(xyz, A, B, C, D): def indexCube(nodes, nN): """ - Returns the index of nodes on the mesh. + Returns the index of nodes on the mesh. Input: @@ -167,7 +167,7 @@ def indexCube(nodes, nN): @author Rowan Cockett - Last modified on: 2013/03/07 + Last modified on: 2013/07/26 """ assert type(nodes) == str, "Nodes must be a str variable: e.g. 'ABCD'" @@ -201,6 +201,85 @@ def indexCube(nodes, nN): return out + +def faceInfo(xyz, A, B, C, D, average=True): + """ + function [N] = faceInfo(y,A,B,C,D) + + Returns the averaged normal, area, and edge lengths for a given set of faces. + + If average option is FALSE then N is a cell array {nA,nB,nC,nD} + + + Input: + xyz - X,Y,Z vertex vector + A,B,C,D - vert index of the face (counter clockwize) + + Options: + average - [true]/false, toggles returning all normals or the average + + Output: + N - average face normal or {nA,nB,nC,nD} if average = false + area - average face area + edgeLengths - exact edge Lengths, 4 column vector [AB, BC, CD, DA] + + see also testFaceNormal testFaceArea + + @author Rowan Cockett + + Last modified on: 2013/07/26 + + """ + + # compute normal that is pointing away from you. + # + # A -------A-B------- B + # | | + # | | + # D-A (X) B-C + # | | + # | | + # D -------C-D------- C + + AB = xyz[B, :] - xyz[A, :] + BC = xyz[C, :] - xyz[B, :] + CD = xyz[D, :] - xyz[C, :] + DA = xyz[A, :] - xyz[D, :] + + def cross(X, Y): + return np.c_[X[1, :]*Y[2, :] - X[2, :]*Y[1, :], + X[2, :]*Y[0, :] - X[0, :]*Y[2, :], + X[0, :]*Y[1, :] - X[1, :]*Y[0, :]] + + nA = cross(AB, DA) + nB = cross(BC, AB) + nC = cross(CD, BC) + nD = cross(DA, CD) + + length = lambda x: (x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2)**0.5 + normalize = lambda x: x/np.kron(np.ones((1, x.shape[1]), length(x), 1)) + if average: + # average the normals at each vertex. + N = (nA + nB + nC + nD)/4 # this is intrinsically weighted by area + # normalize + N = normalize(N) + else: + N = [normalize(nA), normalize(nB), normalize(nC), normalize(nD)] + + # Area calculation + # + # Approximate by 4 different triangles, and divide by 2. + # Each triangle is one half of the length of the cross product + # + # So also could be viewed as the average parallelogram. + area = (length(nA)+length(nB)+length(nC)+length(nD))/4 + + # simple edge length calculations + edgeLengths = [length(AB), length(BC), length(CD), length(DA)] + + return N, area, edgeLengths + + def getSubArray(A, ind): """subArray""" return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] From 05ddf93d647ad6f54949b4c716e5a791711dbf00 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Sat, 27 Jul 2013 16:11:24 -0700 Subject: [PATCH 056/359] Added getFaceInnerProduct and getInnerProduct that puts the edge and face mass matrices together --- SimPEG/getFaceInnerProducts.py | 87 +++++++++++++++++ SimPEG/getInnerProducts.py | 165 +++++++++++++++++++++++++++++++++ 2 files changed, 252 insertions(+) create mode 100644 SimPEG/getFaceInnerProducts.py create mode 100644 SimPEG/getInnerProducts.py diff --git a/SimPEG/getFaceInnerProducts.py b/SimPEG/getFaceInnerProducts.py new file mode 100644 index 00000000..961013c8 --- /dev/null +++ b/SimPEG/getFaceInnerProducts.py @@ -0,0 +1,87 @@ +from scipy import sparse as sp +from sputils import sdiag +from utils import sub2ind, ndgrid, mkvc +import numpy as np + + +def getFaceInnerProduct(mesh, mu): + + m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) + nc = mesh.nC + + i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) + + iijjkk = ndgrid(i, j, k) + ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] + + def Pxxx(pos): + ind1 = sub2ind(mesh.nFx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) + ind2 = sub2ind(mesh.nFy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nF[0] + ind3 = sub2ind(mesh.nFz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nF[0] + mesh.nF[1] + + IND = np.r_[ind1, ind2, ind3].flatten() + + return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() + + # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + # / / + # / / | + # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + # / / | + # / / | + # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + # | | | + # | | node(i+1,j+1,k+1) + # | | / + # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) + # | | / + # | | / + # | |/ + # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + # no | node | e1 | e2 | e3 + # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + # 100 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k + # 010 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k + # 110 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k + # 001 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k+1 + # 101 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k+1 + # 011 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k+1 + # 111 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k+1 + P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) + P010 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) + P110 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) + P001 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 1]]) + P101 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) + P011 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) + P111 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + + if mu.size == mesh.nC: # Isotropic! + mu = mkvc(mu) # ensure it is a vector. + mu = sdiag(np.r_[mu, mu, mu]) + elif mu.shape[1] == 3: # Diagonal tensor + mu = sdiag(np.r_[mu[:, 0], mu[:, 1], mu[:, 2]]) + elif mu.shape[1] == 6: # Fully anisotropic + row1 = sp.hstack((sdiag(mu[:, 0]), sdiag(mu[:, 3]), sdiag(mu[:, 4]))) + row2 = sp.hstack((sdiag(mu[:, 3]), sdiag(mu[:, 1]), sdiag(mu[:, 5]))) + row3 = sp.hstack((sdiag(mu[:, 4]), sdiag(mu[:, 5]), sdiag(mu[:, 2]))) + mu = sp.vstack((row1, row2, row3)) + + # Cell volume + v = np.sqrt(mesh.vol) + v3 = np.r_[v, v, v] + V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry + + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + + A = 0.125*A + + return A + +if __name__ == '__main__': + from TensorMesh import TensorMesh + h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] + mesh = TensorMesh(h) + mu = np.ones((mesh.nC, 6)) + A = getFaceInnerProduct(mesh, mu) diff --git a/SimPEG/getInnerProducts.py b/SimPEG/getInnerProducts.py new file mode 100644 index 00000000..94c02826 --- /dev/null +++ b/SimPEG/getInnerProducts.py @@ -0,0 +1,165 @@ +from scipy import sparse as sp +from sputils import sdiag +from utils import sub2ind, ndgrid, mkvc +import numpy as np + + +def getFaceInnerProduct(mesh, mu): + + m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) + nc = mesh.nC + + i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) + + iijjkk = ndgrid(i, j, k) + ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] + + def Pxxx(pos): + ind1 = sub2ind(mesh.nFx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) + ind2 = sub2ind(mesh.nFy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nF[0] + ind3 = sub2ind(mesh.nFz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nF[0] + mesh.nF[1] + + IND = np.r_[ind1, ind2, ind3].flatten() + + return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() + + # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + # / / + # / / | + # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + # / / | + # / / | + # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + # | | | + # | | node(i+1,j+1,k+1) + # | | / + # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) + # | | / + # | | / + # | |/ + # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + # no | node | e1 | e2 | e3 + # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + # 100 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k + # 010 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k + # 110 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k + # 001 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k+1 + # 101 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k+1 + # 011 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k+1 + # 111 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k+1 + P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) + P010 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) + P110 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) + P001 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 1]]) + P101 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) + P011 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) + P111 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + + if mu.size == mesh.nC: # Isotropic! + mu = mkvc(mu) # ensure it is a vector. + mu = sdiag(np.r_[mu, mu, mu]) + elif mu.shape[1] == 3: # Diagonal tensor + mu = sdiag(np.r_[mu[:, 0], mu[:, 1], mu[:, 2]]) + elif mu.shape[1] == 6: # Fully anisotropic + row1 = sp.hstack((sdiag(mu[:, 0]), sdiag(mu[:, 3]), sdiag(mu[:, 4]))) + row2 = sp.hstack((sdiag(mu[:, 3]), sdiag(mu[:, 1]), sdiag(mu[:, 5]))) + row3 = sp.hstack((sdiag(mu[:, 4]), sdiag(mu[:, 5]), sdiag(mu[:, 2]))) + mu = sp.vstack((row1, row2, row3)) + + # Cell volume + v = np.sqrt(mesh.vol) + v3 = np.r_[v, v, v] + V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry + + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + + A = 0.125*A + + return A + + +def getEdgeInnerProduct(mesh, sigma): + + m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) + nc = mesh.nC + + i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) + + iijjkk = ndgrid(i, j, k) + ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] + + def Pxxx(pos): + ind1 = sub2ind(mesh.nEx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) + ind2 = sub2ind(mesh.nEy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nE[0] + ind3 = sub2ind(mesh.nEz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nE[0] + mesh.nE[1] + + IND = np.r_[ind1, ind2, ind3].flatten() + + return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() + + # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) + # / / + # / / | + # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) + # / / | + # / / | + # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) + # | | | + # | | node(i+1,j+1,k+1) + # | | / + # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) + # | | / + # | | / + # | |/ + # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + # no | node | e1 | e2 | e3 + # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k + # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k + # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k + # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k + # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k + # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k + # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k + # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k + P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = Pxxx([[0, 0, 0], [1, 0, 0], [1, 0, 0]]) + P010 = Pxxx([[0, 1, 0], [0, 0, 0], [0, 1, 0]]) + P110 = Pxxx([[0, 1, 0], [1, 0, 0], [1, 1, 0]]) + P001 = Pxxx([[0, 0, 1], [0, 0, 1], [0, 0, 0]]) + P101 = Pxxx([[0, 0, 1], [1, 0, 1], [1, 0, 0]]) + P011 = Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) + P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) + + if sigma.size == mesh.nC: # Isotropic! + sigma = mkvc(sigma) # ensure it is a vector. + Sigma = sdiag(np.r_[sigma, sigma, sigma]) + elif sigma.shape[1] == 3: # Diagonal tensor + Sigma = sdiag(np.r_[sigma[:, 0], sigma[:, 1], sigma[:, 2]]) + elif sigma.shape[1] == 6: # Fully anisotropic + row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) + row2 = sp.hstack((sdiag(sigma[:, 3]), sdiag(sigma[:, 1]), sdiag(sigma[:, 5]))) + row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) + Sigma = sp.vstack((row1, row2, row3)) + + # Cell volume + v = np.sqrt(mesh.vol) + v3 = np.r_[v, v, v] + V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry + + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + + A = 0.125*A + + return A + + + +if __name__ == '__main__': + from TensorMesh import TensorMesh + h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] + mesh = TensorMesh(h) + mu = np.ones((mesh.nC, 6)) + A = getFaceInnerProduct(mesh, mu) From f7713656ef47bfc8a0363358cfa6fee7e4a8ea15 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Sat, 27 Jul 2013 17:36:00 -0700 Subject: [PATCH 057/359] Added interpolation matrix. Not sure its working since my canopy is playing tricks --- SimPEG/interpmat.py | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 SimPEG/interpmat.py diff --git a/SimPEG/interpmat.py b/SimPEG/interpmat.py new file mode 100644 index 00000000..35e998ff --- /dev/null +++ b/SimPEG/interpmat.py @@ -0,0 +1,86 @@ +from scipy import sparse as sp +from sputils import sdiag +from utils import sub2ind, ndgrid, mkvc +import numpy as np + +def interpmat(x,y,z,xr,yr,zr): +# +# This function does local linear interpolation +# computed for each receiver point in turn +# +# [Q] = linint(x,y,z,xr,yr,zr) +# Interpolation matrix +# + + nx = size(x) + ny = size(y) + nz = size(z) + + np = size(xr) + + #Q = spalloc(np,nx*ny*nz,8*np); + Q = sparse.coo_matrix((0.0,(0,0)),shape=(nx*ny*nz,8*np)) + + for i in range(0, np): + im = amin(abs(xr[i]-x)) + if xr[i] - x[im] >= 0: # Point on the left + ind_x[0] = im; ind_x[1] = im+1 + else: # Point on the right + ind_x[0] = im-1; ind_x[1] = im + + + dx[0] = xr[i] - x[ind_x[0]] + dx[1] = x[ind_x[1]] - xr[i] + + im = amin(abs(yr[i] - y)) + if yr[i] - y[im] >= 0: # Point on the left + ind_y[0] = im; ind_y[1] = im+1 + else: # Point on the right + ind_y[0] = im-1; ind_y[1] = im + + + dy[0] = yr[i] - y[ind_y[0]] + dy[1] = y[ind_y[1]] - yr[i]; + + im = amin(abs(zr[i] - z)); + if zr(i) -z(im) >= 0: # Point on the left + ind_z[0] = im; ind_z[1] = im+1 + else: # Point on the right + ind_z[0] = im-1; ind_z[1] = im; + + dz[0] = zr[i] - z[ind_z[0]]; dz[1] = z[ind_z[1]] - zr[i] + + Dx = x[ind_x[1]] - x[ind_x[0]] + Dy = y[ind_y[1]] - y[ind_y[0]] + Dz = z[ind_z[1]] - z[ind_z[0]] + dv = Dx*Dy*Dz + + # Get the row in the matrix + v = zeros([nx, ny,nz]); + + v[ ind_x[0], ind_y[0], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz) + v[ ind_x[0], ind_y[1], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz); + v[ ind_x[1], ind_y[0], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz); + v[ ind_x[1], ind_y[1], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz); + v[ ind_x[0], ind_y[0], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz); + v[ ind_x[0], ind_y[1], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz); + v[ ind_x[1], ind_y[0], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz); + v[ ind_x[1], ind_y[1], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz); + + + Q[i,:] = v.flatten('F') + + return Q + + +if __name__ == '__main__': + x = np.array([1, 2, 3, 4]) + y = np.array([1, 2, 3, 4, 5]) + z = np.array([0, 1, 4, 6]) + + xr = np.array([2.5,3.2]) + yr = np.array([2.4,3.6]) + zr = np.array([2.5,3.9]) + + A = interpmat(x,y,z,xr,yr,zr) + \ No newline at end of file From 1fca1b894e6e165e8e6309916bc9daabdad3c1a0 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Mon, 29 Jul 2013 12:47:41 -0700 Subject: [PATCH 058/359] fixed interpmat need more testing --- SimPEG/interpmat.py | 52 +++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/SimPEG/interpmat.py b/SimPEG/interpmat.py index 35e998ff..68b6c4c1 100644 --- a/SimPEG/interpmat.py +++ b/SimPEG/interpmat.py @@ -1,6 +1,4 @@ from scipy import sparse as sp -from sputils import sdiag -from utils import sub2ind, ndgrid, mkvc import numpy as np def interpmat(x,y,z,xr,yr,zr): @@ -12,17 +10,20 @@ def interpmat(x,y,z,xr,yr,zr): # Interpolation matrix # - nx = size(x) - ny = size(y) - nz = size(z) + nx = np.size(x) + ny = np.size(y) + nz = np.size(z) - np = size(xr) + nps = np.size(xr) #Q = spalloc(np,nx*ny*nz,8*np); - Q = sparse.coo_matrix((0.0,(0,0)),shape=(nx*ny*nz,8*np)) - - for i in range(0, np): - im = amin(abs(xr[i]-x)) + Q = sp.lil_matrix((nps,nx*ny*nz)) + ind_x = np.array([0,0]) + ind_y = np.array([0,0]) + ind_z = np.array([0,0]) + dx, dy, dz = np.zeros(2), np.zeros(2), np.zeros(2) + for i in range(0, nps): + im = np.amin(abs(xr[i]-x)) if xr[i] - x[im] >= 0: # Point on the left ind_x[0] = im; ind_x[1] = im+1 else: # Point on the right @@ -32,7 +33,7 @@ def interpmat(x,y,z,xr,yr,zr): dx[0] = xr[i] - x[ind_x[0]] dx[1] = x[ind_x[1]] - xr[i] - im = amin(abs(yr[i] - y)) + im = np.amin(abs(yr[i] - y)) if yr[i] - y[im] >= 0: # Point on the left ind_y[0] = im; ind_y[1] = im+1 else: # Point on the right @@ -42,8 +43,8 @@ def interpmat(x,y,z,xr,yr,zr): dy[0] = yr[i] - y[ind_y[0]] dy[1] = y[ind_y[1]] - yr[i]; - im = amin(abs(zr[i] - z)); - if zr(i) -z(im) >= 0: # Point on the left + im = np.amin(abs(zr[i] - z)); + if zr[i] -z[im] >= 0: # Point on the left ind_z[0] = im; ind_z[1] = im+1 else: # Point on the right ind_z[0] = im-1; ind_z[1] = im; @@ -53,27 +54,32 @@ def interpmat(x,y,z,xr,yr,zr): Dx = x[ind_x[1]] - x[ind_x[0]] Dy = y[ind_y[1]] - y[ind_y[0]] Dz = z[ind_z[1]] - z[ind_z[0]] - dv = Dx*Dy*Dz + #dv = Dx*Dy*Dz # Get the row in the matrix - v = zeros([nx, ny,nz]); + v = np.zeros([nx, ny,nz]) v[ ind_x[0], ind_y[0], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz) - v[ ind_x[0], ind_y[1], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz); - v[ ind_x[1], ind_y[0], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz); - v[ ind_x[1], ind_y[1], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz); - v[ ind_x[0], ind_y[0], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz); - v[ ind_x[0], ind_y[1], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz); - v[ ind_x[1], ind_y[0], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz); - v[ ind_x[1], ind_y[1], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz); + v[ ind_x[0], ind_y[1], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz) + v[ ind_x[1], ind_y[0], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz) + v[ ind_x[1], ind_y[1], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz) + v[ ind_x[0], ind_y[0], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz) + v[ ind_x[0], ind_y[1], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz) + v[ ind_x[1], ind_y[0], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz) + v[ ind_x[1], ind_y[1], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz) + print(np.shape(v.flatten('F'))) + print(np.shape(Q)) + Q[i,:] = v.flatten('F') - return Q + + return Q.tocsr() if __name__ == '__main__': + x = np.array([1, 2, 3, 4]) y = np.array([1, 2, 3, 4, 5]) z = np.array([0, 1, 4, 6]) From ead836c3419697d2c01d49f82b0177333d33dbad Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 29 Jul 2013 23:02:25 -0700 Subject: [PATCH 059/359] Fixed 2D volume calculation. --- SimPEG/LogicallyOrthogonalMesh.py | 18 ++++++++++++------ SimPEG/utils.py | 8 ++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 5bb5482b..15dcb09c 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -88,7 +88,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid if(self._vol is None): if self.dim == 2: A, B, C, D = indexCube('ABCD', np.array([self.nNx, self.nNy])) - normal, area, length = faceInfo(np.c_[self.gridN, np.zeros((self.nC, 1))], A, B, C, D) + normal, area, length = faceInfo(np.c_[self.gridN, np.zeros((self.nN, 1))], A, B, C, D) self._vol = area elif self.dim == 3: # Each polyhedron can be decomposed into 5 tetrahedrons @@ -117,8 +117,14 @@ if __name__ == '__main__': h1 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) h2 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) h3 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) - h = [h1, h2, h3] - X, Y, Z = ndgrid(h1, h2, h3, vector=False) - M = LogicallyOrthogonalMesh([X, Y, Z]) - print M.r(M.gridCC, format='M') - print M.gridN[:, 0] + dee3 = False + if dee3: + X, Y, Z = ndgrid(h1, h2, h3, vector=False) + M = LogicallyOrthogonalMesh([X, Y, Z]) + else: + X, Y = ndgrid(h1, h2, vector=False) + M = LogicallyOrthogonalMesh([X, Y]) + + # print M.r(M.gridCC, format='M') + # print M.gridN[:, 0] + print np.sum(M.vol) diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 37441e8e..eff11748 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -247,9 +247,9 @@ def faceInfo(xyz, A, B, C, D, average=True): DA = xyz[A, :] - xyz[D, :] def cross(X, Y): - return np.c_[X[1, :]*Y[2, :] - X[2, :]*Y[1, :], - X[2, :]*Y[0, :] - X[0, :]*Y[2, :], - X[0, :]*Y[1, :] - X[1, :]*Y[0, :]] + return np.c_[X[:, 1]*Y[:, 2] - X[:, 2]*Y[:, 1], + X[:, 2]*Y[:, 0] - X[:, 0]*Y[:, 2], + X[:, 0]*Y[:, 1] - X[:, 1]*Y[:, 0]] nA = cross(AB, DA) nB = cross(BC, AB) @@ -257,7 +257,7 @@ def faceInfo(xyz, A, B, C, D, average=True): nD = cross(DA, CD) length = lambda x: (x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2)**0.5 - normalize = lambda x: x/np.kron(np.ones((1, x.shape[1]), length(x), 1)) + normalize = lambda x: x/np.kron(np.ones((1, x.shape[1])), mkvc(length(N), 2)) if average: # average the normals at each vertex. N = (nA + nB + nC + nD)/4 # this is intrinsically weighted by area From d8f646c7d99216fe860daf861794c6ddb39afb15 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 21:49:23 -0700 Subject: [PATCH 060/359] Updates to OrderTest so that it runs random meshes. --- SimPEG/tests/OrderTest.py | 42 +++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 7f9f97ca..59dce6d6 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -20,7 +20,7 @@ class OrderTest(unittest.TestCase): Note that you can provide any norm. - Test is passed when estimated rate order of convergence is at least 90% of the + Test is passed when estimated rate order of convergence is at least within the specified tolerance of the estimated rate supplied by the user. Minimal example for a curl operator: @@ -63,17 +63,32 @@ class OrderTest(unittest.TestCase): name = "Order Test" expectedOrder = 2 - meshSizes = [4, 8, 16, 32] + tolerance = 0.85 + meshSizes = [4, 8, 16, 32, 64] + meshType = 'uniformTensorMesh' + meshDimension = 3 def setupMesh(self, nc): """ For a given number of cells nc, generate a TensorMesh with uniform cells with edge length h=1/nc. """ - h1 = np.ones(nc)/nc - h2 = np.ones(nc)/nc - h3 = np.ones(nc)/nc - h = [h1, h2, h3] - self.M = TensorMesh(h) + if 'TensorMesh' in self.meshType: + if 'uniform' in self.meshType: + h1 = np.ones(nc)/nc + h2 = np.ones(nc)/nc + h3 = np.ones(nc)/nc + h = [h1, h2, h3] + elif 'random' in self.meshType: + h1 = np.random.rand(nc) + h2 = np.random.rand(nc) + h3 = np.random.rand(nc) + h = [hi/np.sum(hi) for hi in [h1, h2, h3]] # normalize + else: + raise Exception('Unexpected meshType') + + self.M = TensorMesh(h[:self.meshDimension]) + max_h = max([np.max(hi) for hi in self.M.h]) + return max_h def getError(self): """For given h, generate A[h], f and A(f) and return norm of error.""" @@ -89,9 +104,9 @@ class OrderTest(unittest.TestCase): """ order = [] err_old = 0. - nc_old = 0. + max_h_old = 0. for ii, nc in enumerate(self.meshSizes): - self.setupMesh(nc) + max_h = self.setupMesh(nc) err = self.getError() if ii == 0: print '' @@ -101,13 +116,14 @@ class OrderTest(unittest.TestCase): print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' print '%4i | %8.2e |' % (nc, err) else: - order.append(np.log(err/err_old)/np.log(float(nc_old)/float(nc))) + order.append(np.log(err/err_old)/np.log(max_h/max_h_old)) print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) err_old = err - nc_old = nc + max_h_old = max_h print '---------------------------------------------' - self.assertTrue(len(np.where(np.array(order) > 0.9*self.expectedOrder)[0]) > np.floor(0.75*len(order))) - + passTest = np.mean(np.array(order)) > self.tolerance*self.expectedOrder + # passTest = len(np.where(np.array(order) > self.tolerance*self.expectedOrder)[0]) > np.floor(0.75*len(order)) + self.assertTrue(passTest) if __name__ == '__main__': unittest.main() From c259a6651a7760ff2cf93aca20642516f48673bd Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 22:12:53 -0700 Subject: [PATCH 061/359] Integrated getEdge/FaceInnerProduct into the tensor mesh class. --- SimPEG/DiffOperators.py | 2 +- .../{getInnerProducts.py => InnerProducts.py} | 42 ++++++--- SimPEG/TensorMesh.py | 5 +- SimPEG/getEdgeInnerProducts.py | 87 ------------------- SimPEG/getFaceInnerProducts.py | 87 ------------------- SimPEG/tests/OrderTest.py | 2 +- SimPEG/tests/test_massMatrices.py | 5 +- 7 files changed, 39 insertions(+), 191 deletions(-) rename SimPEG/{getInnerProducts.py => InnerProducts.py} (82%) delete mode 100644 SimPEG/getEdgeInnerProducts.py delete mode 100644 SimPEG/getFaceInnerProducts.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index c5daa96d..6688f254 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -50,7 +50,7 @@ class DiffOperators(object): Class creates the differential operators that you need! """ def __init__(self): - raise Exception('DiffOperators is a base class providing differential operators on meshes and cannot run on its own. Inherit to your favorite Mesh class.') + raise Exception('DiffOperators is a base class providing differential operators on meshes and cannot run on its own. Inherit to your favorite Mesh class.') def faceDiv(): doc = "Construct divergence operator (face-stg to cell-centres)." diff --git a/SimPEG/getInnerProducts.py b/SimPEG/InnerProducts.py similarity index 82% rename from SimPEG/getInnerProducts.py rename to SimPEG/InnerProducts.py index 94c02826..bc482de4 100644 --- a/SimPEG/getInnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -4,6 +4,28 @@ from utils import sub2ind, ndgrid, mkvc import numpy as np +class InnerProducts(object): + """ + Class creates the inner product matrices that you need! + """ + def __init__(self): + raise Exception('InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class.') + + def getFaceInnerProduct(self, mu): + if self._meshType == 'TENSOR': + pass + elif self._meshType == 'LOM': + pass # todo: we should be doing something slightly different here! + return getFaceInnerProduct(self, mu) + + def getEdgeInnerProduct(self, sigma): + if self._meshType == 'TENSOR': + pass + elif self._meshType == 'LOM': + pass # todo: we should be doing something slightly different here! + return getEdgeInnerProduct(self, sigma) + + def getFaceInnerProduct(mesh, mu): m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) @@ -39,15 +61,15 @@ def getFaceInnerProduct(mesh, mu): # | |/ # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - # no | node | e1 | e2 | e3 - # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - # 100 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k - # 010 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k - # 110 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k - # 001 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k+1 - # 101 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k+1 - # 011 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k+1 - # 111 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k+1 + # no | node | f1 | f2 | f3 + # 000 | i ,j ,k | i , j, k | i, j , k | i, j, k + # 100 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k + # 010 | i ,j+1,k | i , j, k | i, j+1, k | i, j, k + # 110 | i+1,j+1,k | i+1, j, k | i, j+1, k | i, j, k + # 001 | i ,j ,k | i , j, k | i, j , k | i, j, k+1 + # 101 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k+1 + # 011 | i ,j+1,k | i , j, k | i, j+1, k | i, j, k+1 + # 111 | i+1,j+1,k | i+1, j, k | i, j+1, k | i, j, k+1 P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) P100 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) P010 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) @@ -162,4 +184,4 @@ if __name__ == '__main__': h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] mesh = TensorMesh(h) mu = np.ones((mesh.nC, 6)) - A = getFaceInnerProduct(mesh, mu) + A = mesh.getFaceInnerProduct(mu) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index b247138b..acfdfbac 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -2,10 +2,11 @@ import numpy as np from BaseMesh import BaseMesh from TensorView import TensorView from DiffOperators import DiffOperators +from InnerProducts import InnerProducts from utils import ndgrid, mkvc -class TensorMesh(BaseMesh, TensorView, DiffOperators): +class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): """ TensorMesh is a mesh class that deals with tensor product meshes. @@ -21,6 +22,8 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): mesh = TensorMesh([hx, hy, hz]) """ + _meshType = 'TENSOR' + def __init__(self, h, x0=None): super(TensorMesh, self).__init__(np.array([x.size for x in h]), x0) diff --git a/SimPEG/getEdgeInnerProducts.py b/SimPEG/getEdgeInnerProducts.py deleted file mode 100644 index 68423a3f..00000000 --- a/SimPEG/getEdgeInnerProducts.py +++ /dev/null @@ -1,87 +0,0 @@ -from scipy import sparse as sp -from sputils import sdiag -from utils import sub2ind, ndgrid, mkvc -import numpy as np - - -def getEdgeInnerProduct(mesh, sigma): - - m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) - nc = mesh.nC - - i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) - - iijjkk = ndgrid(i, j, k) - ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] - - def Pxxx(pos): - ind1 = sub2ind(mesh.nEx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) - ind2 = sub2ind(mesh.nEy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nE[0] - ind3 = sub2ind(mesh.nEz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nE[0] + mesh.nE[1] - - IND = np.r_[ind1, ind2, ind3].flatten() - - return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() - - # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - # / / - # / / | - # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - # / / | - # / / | - # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - # | | | - # | | node(i+1,j+1,k+1) - # | | / - # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) - # | | / - # | | / - # | |/ - # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - - # no | node | e1 | e2 | e3 - # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k - # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k - # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k - P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) - P100 = Pxxx([[0, 0, 0], [1, 0, 0], [1, 0, 0]]) - P010 = Pxxx([[0, 1, 0], [0, 0, 0], [0, 1, 0]]) - P110 = Pxxx([[0, 1, 0], [1, 0, 0], [1, 1, 0]]) - P001 = Pxxx([[0, 0, 1], [0, 0, 1], [0, 0, 0]]) - P101 = Pxxx([[0, 0, 1], [1, 0, 1], [1, 0, 0]]) - P011 = Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) - P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) - - if sigma.size == mesh.nC: # Isotropic! - sigma = mkvc(sigma) # ensure it is a vector. - Sigma = sdiag(np.r_[sigma, sigma, sigma]) - elif sigma.shape[1] == 3: # Diagonal tensor - Sigma = sdiag(np.r_[sigma[:, 0], sigma[:, 1], sigma[:, 2]]) - elif sigma.shape[1] == 6: # Fully anisotropic - row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 3]), sdiag(sigma[:, 4]))) - row2 = sp.hstack((sdiag(sigma[:, 3]), sdiag(sigma[:, 1]), sdiag(sigma[:, 5]))) - row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) - Sigma = sp.vstack((row1, row2, row3)) - - # Cell volume - v = np.sqrt(mesh.vol) - v3 = np.r_[v, v, v] - V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry - - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - - A = 0.125*A - - return A - -if __name__ == '__main__': - from TensorMesh import TensorMesh - h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] - mesh = TensorMesh(h) - sigma = np.ones((mesh.nC, 6)) - A = getEdgeInnerProduct(mesh, sigma) diff --git a/SimPEG/getFaceInnerProducts.py b/SimPEG/getFaceInnerProducts.py deleted file mode 100644 index 961013c8..00000000 --- a/SimPEG/getFaceInnerProducts.py +++ /dev/null @@ -1,87 +0,0 @@ -from scipy import sparse as sp -from sputils import sdiag -from utils import sub2ind, ndgrid, mkvc -import numpy as np - - -def getFaceInnerProduct(mesh, mu): - - m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) - nc = mesh.nC - - i, j, k = np.int64(range(m[0])), np.int64(range(m[1])), np.int64(range(m[2])) - - iijjkk = ndgrid(i, j, k) - ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] - - def Pxxx(pos): - ind1 = sub2ind(mesh.nFx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) - ind2 = sub2ind(mesh.nFy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nF[0] - ind3 = sub2ind(mesh.nFz, np.c_[ii + pos[2][0], jj + pos[2][1], kk + pos[2][2]]) + mesh.nF[0] + mesh.nF[1] - - IND = np.r_[ind1, ind2, ind3].flatten() - - return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() - - # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - # / / - # / / | - # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - # / / | - # / / | - # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - # | | | - # | | node(i+1,j+1,k+1) - # | | / - # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) - # | | / - # | | / - # | |/ - # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - - # no | node | e1 | e2 | e3 - # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - # 100 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k - # 010 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k - # 110 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k - # 001 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k+1 - # 101 | i+1,j ,k | i+1 ,j ,k | i,j ,k | i,j ,k+1 - # 011 | i ,j+1,k | i ,j,k | i ,j+1 ,k | i ,j,k+1 - # 111 | i+1,j+1,k | i+1 ,j,k | i,j+1 ,k | i,j,k+1 - P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) - P100 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) - P010 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) - P110 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) - P001 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 1]]) - P101 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) - P011 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) - P111 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - - if mu.size == mesh.nC: # Isotropic! - mu = mkvc(mu) # ensure it is a vector. - mu = sdiag(np.r_[mu, mu, mu]) - elif mu.shape[1] == 3: # Diagonal tensor - mu = sdiag(np.r_[mu[:, 0], mu[:, 1], mu[:, 2]]) - elif mu.shape[1] == 6: # Fully anisotropic - row1 = sp.hstack((sdiag(mu[:, 0]), sdiag(mu[:, 3]), sdiag(mu[:, 4]))) - row2 = sp.hstack((sdiag(mu[:, 3]), sdiag(mu[:, 1]), sdiag(mu[:, 5]))) - row3 = sp.hstack((sdiag(mu[:, 4]), sdiag(mu[:, 5]), sdiag(mu[:, 2]))) - mu = sp.vstack((row1, row2, row3)) - - # Cell volume - v = np.sqrt(mesh.vol) - v3 = np.r_[v, v, v] - V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry - - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - - A = 0.125*A - - return A - -if __name__ == '__main__': - from TensorMesh import TensorMesh - h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] - mesh = TensorMesh(h) - mu = np.ones((mesh.nC, 6)) - A = getFaceInnerProduct(mesh, mu) diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 59dce6d6..55ac7d34 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -64,7 +64,7 @@ class OrderTest(unittest.TestCase): name = "Order Test" expectedOrder = 2 tolerance = 0.85 - meshSizes = [4, 8, 16, 32, 64] + meshSizes = [4, 8, 16, 32] meshType = 'uniformTensorMesh' meshDimension = 3 diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 0aae0615..4840abed 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -1,9 +1,6 @@ import numpy as np import unittest from OrderTest import OrderTest -import sys -sys.path.append('../') -from getEdgeInnerProducts import * class TestEdgeInnerProduct(OrderTest): @@ -35,7 +32,7 @@ class TestEdgeInnerProduct(OrderTest): sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc), call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)] - A = getEdgeInnerProduct(self.M, sigma) + A = self.M.getEdgeInnerProduct(sigma) numeric = E.T*A*E analytic = 69881./21600 # Found using matlab symbolic toolbox. err = np.abs(numeric - analytic) From 9573c6c230571b21f5cc8998dff4bb89efac9c29 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 22:40:10 -0700 Subject: [PATCH 062/359] Tested face and edge inner products for anisotropic, isotropic and tensor sigma. --- SimPEG/tests/test_massMatrices.py | 94 ++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 13 deletions(-) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 4840abed..f8fc99b0 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -3,8 +3,34 @@ import unittest from OrderTest import OrderTest -class TestEdgeInnerProduct(OrderTest): - """Integrate an edge function over a unit cube domain using edgeInnerProducts.""" +# MATLAB code: + +# syms x y z + +# ex = x.^2+y.*z; +# ey = (z.^2).*x+y.*z; +# ez = y.^2+x.*z; + +# e = [ex;ey;ez]; + +# sigma1 = x.*y+1; +# sigma2 = x.*z+2; +# sigma3 = 3+z.*y; +# sigma4 = 0.1.*x.*y.*z; +# sigma5 = 0.2.*x.*y; +# sigma6 = 0.1.*z; + +# S1 = [sigma1,0,0;0,sigma1,0;0,0,sigma1]; +# S2 = [sigma1,0,0;0,sigma2,0;0,0,sigma3]; +# S3 = [sigma1,sigma4,sigma5;sigma4,sigma2,sigma6;sigma5,sigma6,sigma3]; + +# i1 = int(int(int(e.'*S1*e,x,0,1),y,0,1),z,0,1); +# i2 = int(int(int(e.'*S2*e,x,0,1),y,0,1),z,0,1); +# i3 = int(int(int(e.'*S3*e,x,0,1),y,0,1),z,0,1); + + +class TestInnerProducts(OrderTest): + """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" name = "Edge Inner Product" @@ -23,22 +49,64 @@ class TestEdgeInnerProduct(OrderTest): sigma5 = lambda x, y, z: 0.2*x*y sigma6 = lambda x, y, z: 0.1*z - Ex = call(ex, self.M.gridEx) - Ey = call(ey, self.M.gridEy) - Ez = call(ez, self.M.gridEz) - - E = np.matrix(np.r_[Ex, Ey, Ez]).T Gc = self.M.gridCC - sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc), - call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)] + if self.sigmaTest == 1: + sigma = np.c_[call(sigma1, Gc)] + analytic = 647./360 # Found using matlab symbolic toolbox. + elif self.sigmaTest == 3: + sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc)] + analytic = 37./12 # Found using matlab symbolic toolbox. + elif self.sigmaTest == 6: + sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc), + call(sigma4, Gc), call(sigma5, Gc), call(sigma6, Gc)] + analytic = 69881./21600 # Found using matlab symbolic toolbox. + + if self.location == 'edges': + Ex = call(ex, self.M.gridEx) + Ey = call(ey, self.M.gridEy) + Ez = call(ez, self.M.gridEz) + E = np.matrix(np.r_[Ex, Ey, Ez]).T + A = self.M.getEdgeInnerProduct(sigma) + numeric = E.T*A*E + elif self.location == 'faces': + Fx = call(ex, self.M.gridFx) + Fy = call(ey, self.M.gridFy) + Fz = call(ez, self.M.gridFz) + F = np.matrix(np.r_[Fx, Fy, Fz]).T + A = self.M.getFaceInnerProduct(sigma) + numeric = F.T*A*F - A = self.M.getEdgeInnerProduct(sigma) - numeric = E.T*A*E - analytic = 69881./21600 # Found using matlab symbolic toolbox. err = np.abs(numeric - analytic) return err - def test_order(self): + def test_order1_edges(self): + self.location = 'edges' + self.sigmaTest = 1 + self.orderTest() + + def test_order3_edges(self): + self.location = 'edges' + self.sigmaTest = 3 + self.orderTest() + + def test_order6_edges(self): + self.location = 'edges' + self.sigmaTest = 6 + self.orderTest() + + def test_order1_faces(self): + self.location = 'faces' + self.sigmaTest = 1 + self.orderTest() + + def test_order3_faces(self): + self.location = 'faces' + self.sigmaTest = 3 + self.orderTest() + + def test_order6_faces(self): + self.location = 'faces' + self.sigmaTest = 6 self.orderTest() From 4660b177a1f0ceca9336c8263063fa21cdcea1fe Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 22:48:27 -0700 Subject: [PATCH 063/359] Names in tests. --- SimPEG/tests/test_massMatrices.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index f8fc99b0..c304dda5 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,8 +32,6 @@ from OrderTest import OrderTest class TestInnerProducts(OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" - name = "Edge Inner Product" - def getError(self): call = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) @@ -80,31 +78,37 @@ class TestInnerProducts(OrderTest): return err def test_order1_edges(self): + self.name = "Edge Inner Product - Isotropic" self.location = 'edges' self.sigmaTest = 1 self.orderTest() def test_order3_edges(self): + self.name = "Edge Inner Product - Anisotropic" self.location = 'edges' self.sigmaTest = 3 self.orderTest() def test_order6_edges(self): + self.name = "Edge Inner Product - Full Tensor" self.location = 'edges' self.sigmaTest = 6 self.orderTest() def test_order1_faces(self): + self.name = "Face Inner Product - Isotropic" self.location = 'faces' self.sigmaTest = 1 self.orderTest() def test_order3_faces(self): + self.name = "Face Inner Product - Anisotropic" self.location = 'faces' self.sigmaTest = 3 self.orderTest() def test_order6_faces(self): + self.name = "Face Inner Product - Full Tensor" self.location = 'faces' self.sigmaTest = 6 self.orderTest() From 68e44cca5a253c9277ebd640c04ce294e772c565 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 22:52:37 -0700 Subject: [PATCH 064/359] Deleted massMatrices.py This code is not working and is repeated in InnerProducts.py --- SimPEG/massMatrices.py | 94 ------------------------------------------ 1 file changed, 94 deletions(-) delete mode 100644 SimPEG/massMatrices.py diff --git a/SimPEG/massMatrices.py b/SimPEG/massMatrices.py deleted file mode 100644 index ead21e3a..00000000 --- a/SimPEG/massMatrices.py +++ /dev/null @@ -1,94 +0,0 @@ -import numpy as np -from scipy import sparse as sp -from sputils import sdiag, speye, kron3, spzeros -from utils import mkvc - - - -def getEdgeMassMatrix(sigma,mesh): - """Get anisotropic mass matrix""" - - n = array([size(mesh.h[0]),size(mesh.h[1]),size(mesh.h[2])]) - nx = prod(n + [1, 0, 0]) - ex = reshape(arange(0,nx),[n[0]+1,n[1],n[2]]) - ny = prod(n + [0, 1, 0]) - ey = reshape(arange(0,ny),[n[0],n[1]+1,n[2]]) - nz = prod(n + [0, 0, 1]); - ez = reshape(arange(0,nz),[n[0],n[1],n[2]+1]) - - - i = arange(0,n[0]-1); j = arange(0,n[1]-1); k = arange(0,n[2]-1) - - # corner i,j,k - Px1 = take(ex,[i,j,k]); Py1 = take(ey,[i,j,k]); Pz1 = take(ez,[i,j,k]) - # corner i+1,j,k - Px2 = take(ex,[i,j,k]); Py2 = take(ey,[i+1,j,k]); Pz2 = take(ez,[i+1,j,k]) - # corner i,j+1,k - Px3 = take(ex,[i,j+1,k]); Py3 = take(ey,[i,j,k]); Pz3 = take(ez,[i,j+1,k]) - # corner i+1,j+1,k - Px4 = take(ex,[i,j+1,k]); Py4 = take(ey,[i+1,j,k]); Pz4 = take(ez,[i+1,j+1,k]); - - # corner i,j,k+1 - Px5 = take(ex,[i,j,k+1]); Py5 = take(ey,[i,j,k+1]); Pz5 = take(ez,[i,j,k]) - # corner i+1,j,k+1 - Px6 = take(ex,[i,j,k+1]); Py6 = take(ey,[i+1,j,k+1]); Pz6 = take(ez,[i+1,j,k]) - # corner i,j+1,k+1 - Px7 = take(ex,[i,j+1,k+1]); Py7 = take(ey,[i,j,k+1]); Pz7 = take(ez,[i,j+1,k]) - # corner i+1,j+1,k+1 - Px8 = take(ex,[i,j+1,k+1]); Py8 = take(ey,[i+1,j,k+1]); Pz8 = take(ez,[i+1,j+1,k]) - - - nx1 = size(Px1); ny1 = size(Py1); nz1 = size(Pz1) - #sparse.coo_matrix((V,(I,J)),shape=(4,4)) - P1 = block_diag(( sparse.coo_matrix(arange(0,nx1),Px1(:), e(nx1), nx1,nx), - sparse.coo_matrix(arange(0,ny1),Py1(:),e(ny1), ny1,ny), - sparse.coo_matrix(arange(0,nz1),Pz1(:),e(nz1), nz1,nz))) - - nx2 = numel(Px2); ny2 = numel(Py2); nz2 = numel(Pz2); - P2 = blkdiag( sparse(1:nx2,Px2(:), e(nx2), nx2,nx) , ... - sparse(1:ny2,Py2(:),e(ny2), ny2,ny), ... - sparse(1:nz2,Pz2(:),e(nz2), nz2,nz)); - - nx3 = numel(Px3); ny3 = numel(Py3); nz3 = numel(Pz3); - P3 = blkdiag( sparse(1:nx3,Px3(:), e(nx3), nx3,nx) , ... - sparse(1:ny3,Py3(:),e(ny3), ny3,ny), ... - sparse(1:nz3,Pz3(:),e(nz3), nz3,nz)); - - nx4 = numel(Px4); ny4 = numel(Py4); nz4 = numel(Pz4); - P4 = blkdiag( sparse(1:nx4,Px4(:), e(nx4), nx4,nx) , ... - sparse(1:ny4,Py4(:), e(ny4), ny4,ny), ... - sparse(1:nz4,Pz4(:), e(nz4), nz4,nz)); - - nx5 = numel(Px5); ny5 = numel(Py5); nz5 = numel(Pz5); - P5 = blkdiag( sparse(1:nx5,Px5(:), e(nx5), nx5,nx) , ... - sparse(1:ny5,Py5(:), e(ny5), ny5,ny), ... - sparse(1:nz5,Pz5(:), e(nz5), nz5,nz)); - - nx6 = numel(Px6); ny6 = numel(Py6); nz6 = numel(Pz6); - P6 = blkdiag( sparse(1:nx6,Px6(:), e(nx6), nx6,nx) , ... - sparse(1:ny6,Py6(:), e(ny6), ny6,ny), ... - sparse(1:nz6,Pz6(:), e(nz6), nz6,nz)); - - nx7 = numel(Px7); ny7 = numel(Py7); nz7 = numel(Pz7); - P7 = blkdiag( sparse(1:nx7,Px7(:), e(nx7), nx7,nx) , ... - sparse(1:ny7,Py7(:), e(ny7), ny7,ny), ... - sparse(1:nz7,Pz7(:), e(nz7), nz7,nz)); - - nx8 = numel(Px8); ny8 = numel(Py8); nz8 = numel(Pz8); - P8 = blkdiag( sparse(1:nx8,Px8(:), e(nx8), nx8,nx) , ... - sparse(1:ny8,Py8(:), e(ny8), ny8,ny), ... - sparse(1:nz8,Pz8(:), e(nz8), nz8,nz)); - - V = sdiag(sqrt([v(:); v(:); v(:)])); - - # generate the conductivity - S = [sdiag(sig(:,1)) , sdiag(sig(:,4)) , sdiag(sig(:,5)); ... - sdiag(sig(:,4)) , sdiag(sig(:,2)) , sdiag(sig(:,6)); ... - sdiag(sig(:,5)) , sdiag(sig(:,6)) , sdiag(sig(:,3))]; - - # scale by the volume - S = V*S*V; - - M = 1/8*(P1'*S*P1 + P2'*S*P2 + P3'*S*P3 + P4'*S*P4 + ... - P5'*S*P5 + P6'*S*P6 + P7'*S*P7 + P8'*S*P8); - \ No newline at end of file From 7e169bbb7988e28c578a8c3b7eaeb6345cf8dc6b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 22:56:36 -0700 Subject: [PATCH 065/359] Cleaned utils code, merged in subArray. --- SimPEG/subArray.py | 8 -------- SimPEG/utils.py | 19 ++++++++++++------- 2 files changed, 12 insertions(+), 15 deletions(-) delete mode 100644 SimPEG/subArray.py diff --git a/SimPEG/subArray.py b/SimPEG/subArray.py deleted file mode 100644 index 2811f350..00000000 --- a/SimPEG/subArray.py +++ /dev/null @@ -1,8 +0,0 @@ -import numpy as np - -def getSubArray(A,ind): - """subArray""" - i = ind[0]; j = ind[1]; k = ind[2] - - return A[i,:,:][:,j,:][:,:,k] - \ No newline at end of file diff --git a/SimPEG/utils.py b/SimPEG/utils.py index b9e17847..ec89739b 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -1,5 +1,5 @@ import numpy as np -from numpy import * + def reshapeF(x, size): return np.reshape(x, size, order='F') @@ -106,13 +106,13 @@ def ind2sub(shape, ind): mult = [1] for i in range(0, len(revshp)-1): mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult)) + mult = np.array(mult).reshape(len(mult)) sub = [] for i in range(0, len(shape)): - sub.extend([math.floor(ind / mult[i])]) - ind = ind - (math.floor(ind/mult[i]) * mult[i]) + sub.extend([np.math.floor(ind / mult[i])]) + ind = ind - (np.math.floor(ind/mult[i]) * mult[i]) return sub @@ -122,7 +122,12 @@ def sub2ind(shape, subs): mult = [1] for i in range(0, len(revshp)-1): mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult), 1) + mult = np.array(mult).reshape(len(mult), 1) - idx = dot((subs), (mult)) - return idx \ No newline at end of file + idx = np.dot((subs), (mult)) + return idx + + +def getSubArray(A, ind): + """subArray""" + return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] From 47c0c7603df8be31526f82495cacd68ce89586b7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 30 Jul 2013 23:43:13 -0700 Subject: [PATCH 066/359] Area and indexCube bug fix --- SimPEG/LogicallyOrthogonalMesh.py | 42 ++++++++++++++++++++++++++++--- SimPEG/utils.py | 25 ++++++++++-------- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 15dcb09c..3ee037df 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -87,7 +87,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid def fget(self): if(self._vol is None): if self.dim == 2: - A, B, C, D = indexCube('ABCD', np.array([self.nNx, self.nNy])) + A, B, C, D = indexCube('ABCD', self.n+1) normal, area, length = faceInfo(np.c_[self.gridN, np.zeros((self.nN, 1))], A, B, C, D) self._vol = area elif self.dim == 3: @@ -97,7 +97,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid # T3 = [B D E G]; % mid # T4 = [B C D G]; % cutted edge # T5 = [D E G H]; % cutted edge - A, B, C, D, E, F, G, H = indexCube('ABCDEFGH', np.array([self.nNx, self.nNy, self.nNz])) + A, B, C, D, E, F, G, H = indexCube('ABCDEFGH', self.n+1) v1 = volTetra(self.gridN, A, B, D, E) # cutted edge v2 = volTetra(self.gridN, B, E, F, G) # cutted edge @@ -111,13 +111,46 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid _vol = None vol = property(**vol()) + def area(): + doc = "Face areas." + + def fget(self): + if(self._area is None): + # Compute areas of cell faces + if(self.dim == 2): + xy = self.gridN + length = lambda x: (x[:, 0]**2 + x[:, 1]**2)**0.5 + + A, B = indexCube('AB', self.n+1, np.array([self.nNx, self.nCy])) + area1 = length(xy[B, :] - xy[A, :]) + A, D = indexCube('AD', self.n+1, np.array([self.nCx, self.nNy])) + area2 = length(xy[D, :] - xy[A, :]) + self._area = np.r_[mkvc(area1), mkvc(area2)] + elif(self.dim == 3): + + A, E, F, B = indexCube('AEFB', self.n+1, np.array([self.nNx, self.nCy, self.nCz])) + normal, area1, length = faceInfo(self.gridN, A, E, F, B) + + A, D, H, E = indexCube('ADHE', self.n+1, np.array([self.nCx, self.nNy, self.nCz])) + normal, area2, length = faceInfo(self.gridN, A, D, H, E) + + A, B, C, D = indexCube('ABCD', self.n+1, np.array([self.nCx, self.nCy, self.nNz])) + normal, area3, length = faceInfo(self.gridN, A, B, C, D) + + self._area = np.r_[mkvc(area1), mkvc(area2), mkvc(area3)] + return self._area + return locals() + _area = None + area = property(**area()) + if __name__ == '__main__': nc = 5 h1 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) + nc = 7 h2 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) h3 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) - dee3 = False + dee3 = True if dee3: X, Y, Z = ndgrid(h1, h2, h3, vector=False) M = LogicallyOrthogonalMesh([X, Y, Z]) @@ -127,4 +160,5 @@ if __name__ == '__main__': # print M.r(M.gridCC, format='M') # print M.gridN[:, 0] - print np.sum(M.vol) + print M.nE + print M.area diff --git a/SimPEG/utils.py b/SimPEG/utils.py index eff11748..9847751f 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -124,14 +124,16 @@ def volTetra(xyz, A, B, C, D): return V/6 -def indexCube(nodes, nN): +def indexCube(nodes, gridSize, n=None): """ Returns the index of nodes on the mesh. Input: - nodes - string of which nodes to return. e.g. 'ABCD' - nN - size of the nodal grid + nodes - string of which nodes to return. e.g. 'ABCD' + gridSize - size of the nodal grid + n - number of nodes each i,j,k direction: [ni,nj,nk] + Output: index - index in the order asked e.g. 'ABCD' --> (A,B,C,D) @@ -171,20 +173,21 @@ def indexCube(nodes, nN): """ assert type(nodes) == str, "Nodes must be a str variable: e.g. 'ABCD'" - assert type(nN) == np.ndarray, "Number of nodes must be an ndarray" + assert type(gridSize) == np.ndarray, "Number of nodes must be an ndarray" nodes = nodes.upper() # Make sure that we choose from the possible nodes. - possibleNodes = 'ABCD' if nN.size == 2 else 'ABCDEFGH' + possibleNodes = 'ABCD' if gridSize.size == 2 else 'ABCDEFGH' for node in nodes: assert node in possibleNodes, "Nodes must be chosen from: '%s'" % possibleNodes - dim = nN.size - nC = nN - 1 + dim = gridSize.size + if n is None: + n = gridSize - 1 if dim == 2: - ij = ndgrid(np.arange(nC[0]), np.arange(nC[1])) + ij = ndgrid(np.arange(n[0]), np.arange(n[1])) i, j = ij[:, 0], ij[:, 1] elif dim == 3: - ijk = ndgrid(np.arange(nC[0]), np.arange(nC[1]), np.arange(nC[2])) + ijk = ndgrid(np.arange(n[0]), np.arange(n[1]), np.arange(n[2])) i, j, k = ijk[:, 0], ijk[:, 1], ijk[:, 2] else: raise Exception('Only 2 and 3 dimensions supported.') @@ -195,9 +198,9 @@ def indexCube(nodes, nN): for node in nodes: shift = nodeMap[node] if dim == 2: - out += (sub2ind(nN, np.c_[i+shift[0], j+shift[1]]).flatten(), ) + out += (sub2ind(gridSize, np.c_[i+shift[0], j+shift[1]]).flatten(), ) elif dim == 3: - out += (sub2ind(nN, np.c_[i+shift[0], j+shift[1], k+shift[2]]).flatten(), ) + out += (sub2ind(gridSize, np.c_[i+shift[0], j+shift[1], k+shift[2]]).flatten(), ) return out From 451e4260cedb06b12b47dfdea819e3f7d5c8553e Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 31 Jul 2013 11:22:21 -0700 Subject: [PATCH 067/359] Removed x0 from input for LOM --- SimPEG/LogicallyOrthogonalMesh.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 3ee037df..5594b5b9 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -9,7 +9,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. """ - def __init__(self, nodes, x0=None): + def __init__(self, nodes): assert type(nodes) == list, "'nodes' variable must be a list of np.ndarray" for i, nodes_i in enumerate(nodes): @@ -19,9 +19,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid assert len(nodes[0].shape) == len(nodes), "Dimension mismatch" assert len(nodes[0].shape) > 1, "Not worth using LOM for a 1D mesh." - super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape)-1, x0) - - assert len(nodes[0].shape) == len(self.x0), "Dimension mismatch. x0 != len(h)" + super(LogicallyOrthogonalMesh, self).__init__(np.array(nodes[0].shape)-1, None) # Save nodes to private variable _gridN as vectors self._gridN = np.ones((nodes[0].size, self.dim)) From 34e380ccb903117a2f7a831a79755b53e0664706 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 31 Jul 2013 15:07:14 -0700 Subject: [PATCH 068/359] edge and tangent calculating, along with testing functions. --- SimPEG/LogicallyOrthogonalMesh.py | 57 +++++++++++++++++--- SimPEG/tests/test_LogicallyOrthogonalMesh.py | 52 ++++++++++++++++++ SimPEG/utils.py | 2 +- 3 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 SimPEG/tests/test_LogicallyOrthogonalMesh.py diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 5594b5b9..ae11647a 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -3,12 +3,20 @@ from BaseMesh import BaseMesh from DiffOperators import DiffOperators from utils import mkvc, ndgrid, volTetra, indexCube, faceInfo +# Some helper functions. +length2D = lambda x: (x[:, 0]**2 + x[:, 1]**2)**0.5 +length3D = lambda x: (x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2)**0.5 +normalize2D = lambda x: x/np.kron(np.ones((1, 2)), mkvc(length2D(x), 2)) +normalize3D = lambda x: x/np.kron(np.ones((1, 3)), mkvc(length3D(x), 2)) + class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid """ LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. """ + _meshType = 'LOM' + def __init__(self, nodes): assert type(nodes) == list, "'nodes' variable must be a list of np.ndarray" @@ -117,12 +125,10 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid # Compute areas of cell faces if(self.dim == 2): xy = self.gridN - length = lambda x: (x[:, 0]**2 + x[:, 1]**2)**0.5 - A, B = indexCube('AB', self.n+1, np.array([self.nNx, self.nCy])) - area1 = length(xy[B, :] - xy[A, :]) + area1 = length2D(xy[B, :] - xy[A, :]) A, D = indexCube('AD', self.n+1, np.array([self.nCx, self.nNy])) - area2 = length(xy[D, :] - xy[A, :]) + area2 = length2D(xy[D, :] - xy[A, :]) self._area = np.r_[mkvc(area1), mkvc(area2)] elif(self.dim == 3): @@ -141,6 +147,45 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid _area = None area = property(**area()) + def edge(): + doc = "Edge legnths." + + def fget(self): + if(self._edge is None or self._tangents is None): + if(self.dim == 2): + xy = self.gridN + A, D = indexCube('AD', self.n+1, np.array([self.nCx, self.nNy])) + edge1 = xy[D, :] - xy[A, :] + A, B = indexCube('AB', self.n+1, np.array([self.nNx, self.nCy])) + edge2 = xy[B, :] - xy[A, :] + self._edge = np.r_[mkvc(length2D(edge1)), mkvc(length2D(edge2))] + self._tangents = np.r_[edge1, edge2]/np.c_[self._edge, self._edge] + elif(self.dim == 3): + xyz = self.gridN + A, D = indexCube('AD', self.n+1, np.array([self.nCx, self.nNy, self.nNz])) + edge1 = xyz[D, :] - xyz[A, :] + A, B = indexCube('AB', self.n+1, np.array([self.nNx, self.nCy, self.nNz])) + edge2 = xyz[B, :] - xyz[A, :] + A, E = indexCube('AE', self.n+1, np.array([self.nNx, self.nNy, self.nCz])) + edge3 = xyz[E, :] - xyz[A, :] + self._edge = np.r_[mkvc(length3D(edge1)), mkvc(length3D(edge2)), mkvc(length3D(edge3))] + self._tangents = np.r_[edge1, edge2, edge3]/np.c_[self._edge, self._edge, self._edge] + return self._edge + return locals() + _edge = None + edge = property(**edge()) + + def tangents(): + doc = "Edge tangents." + + def fget(self): + if(self._tangents is None): + self.edge # calling .edge will create the tangents + return self._tangents + return locals() + _tangents = None + tangents = property(**tangents()) + if __name__ == '__main__': nc = 5 @@ -148,7 +193,7 @@ if __name__ == '__main__': nc = 7 h2 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) h3 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) - dee3 = True + dee3 = False if dee3: X, Y, Z = ndgrid(h1, h2, h3, vector=False) M = LogicallyOrthogonalMesh([X, Y, Z]) @@ -159,4 +204,4 @@ if __name__ == '__main__': # print M.r(M.gridCC, format='M') # print M.gridN[:, 0] print M.nE - print M.area + print M.r(M.tangents, 'E', 'Ex', 'M') diff --git a/SimPEG/tests/test_LogicallyOrthogonalMesh.py b/SimPEG/tests/test_LogicallyOrthogonalMesh.py new file mode 100644 index 00000000..6c6eade9 --- /dev/null +++ b/SimPEG/tests/test_LogicallyOrthogonalMesh.py @@ -0,0 +1,52 @@ +import numpy as np +import unittest +import sys +sys.path.append('../') +from TensorMesh import TensorMesh +from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh +from OrderTest import OrderTest +from scipy.sparse.linalg import dsolve +from utils import ndgrid + + +class BasicLOMTests(unittest.TestCase): + + def setUp(self): + a = np.array([1, 1, 1]) + b = np.array([1, 2]) + c = np.array([1, 4]) + gridIt = lambda h: [np.cumsum(np.r_[0, x]) for x in h] + X, Y = ndgrid(gridIt([a, b]), vector=False) + self.TM2 = TensorMesh([a, b]) + self.LOM2 = LogicallyOrthogonalMesh([X, Y]) + X, Y, Z = ndgrid(gridIt([a, b, c]), vector=False) + self.TM3 = TensorMesh([a, b, c]) + self.LOM3 = LogicallyOrthogonalMesh([X, Y, Z]) + + def test_area_3D(self): + test_area = np.array([1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2]) + self.assertTrue(np.all(self.LOM3.area == test_area)) + + def test_vol_3D(self): + test_vol = np.array([1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8]) + np.testing.assert_almost_equal(self.LOM3.vol, test_vol) + self.assertTrue(True) # Pass if you get past the assertion. + + def test_vol_2D(self): + test_vol = np.array([1, 1, 1, 2, 2, 2]) + t1 = np.all(self.LOM2.vol == test_vol) + self.assertTrue(t1) + + def test_edge_3D(self): + test_edge = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]) + t1 = np.all(self.LOM3.edge == test_edge) + self.assertTrue(t1) + + def test_edge_2D(self): + test_edge = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]) + t1 = np.all(self.LOM2.edge == test_edge) + self.assertTrue(t1) + + +if __name__ == '__main__': + unittest.main() diff --git a/SimPEG/utils.py b/SimPEG/utils.py index c4280457..55771729 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -259,7 +259,7 @@ def faceInfo(xyz, A, B, C, D, average=True): nD = cross(DA, CD) length = lambda x: (x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2)**0.5 - normalize = lambda x: x/np.kron(np.ones((1, x.shape[1])), mkvc(length(N), 2)) + normalize = lambda x: x/np.kron(np.ones((1, x.shape[1])), mkvc(length(x), 2)) if average: # average the normals at each vertex. N = (nA + nB + nC + nD)/4 # this is intrinsically weighted by area From ea223d073c3fbe9bed6febbc5ed6ad8472a31bd6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 31 Jul 2013 18:07:52 -0700 Subject: [PATCH 069/359] Face Normals. Note that there are some serious differences in how these are stored based in 3D vs 2D, but that is the nature of the beast. :) --- SimPEG/LogicallyOrthogonalMesh.py | 56 ++++++++++++++++++++++++------- SimPEG/utils.py | 15 +++++---- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index ae11647a..af141ac7 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -94,7 +94,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid if(self._vol is None): if self.dim == 2: A, B, C, D = indexCube('ABCD', self.n+1) - normal, area, length = faceInfo(np.c_[self.gridN, np.zeros((self.nN, 1))], A, B, C, D) + normal, area = faceInfo(np.c_[self.gridN, np.zeros((self.nN, 1))], A, B, C, D) self._vol = area elif self.dim == 3: # Each polyhedron can be decomposed into 5 tetrahedrons @@ -121,32 +121,67 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid doc = "Face areas." def fget(self): - if(self._area is None): + if(self._area is None or self._normals is None): # Compute areas of cell faces if(self.dim == 2): xy = self.gridN A, B = indexCube('AB', self.n+1, np.array([self.nNx, self.nCy])) - area1 = length2D(xy[B, :] - xy[A, :]) + edge1 = xy[B, :] - xy[A, :] + normal1 = np.c_[edge1[:, 1], -edge1[:, 0]] + area1 = length2D(edge1) A, D = indexCube('AD', self.n+1, np.array([self.nCx, self.nNy])) - area2 = length2D(xy[D, :] - xy[A, :]) + # Note that we are doing A-D to make sure the normal points the right way. + # Think about it. Look at the picture. Normal points towards C iff you do this. + edge2 = xy[A, :] - xy[D, :] + normal2 = np.c_[edge2[:, 1], -edge2[:, 0]] + area2 = length2D(edge2) self._area = np.r_[mkvc(area1), mkvc(area2)] + self._normals = [normalize2D(normal1), normalize2D(normal2)] elif(self.dim == 3): A, E, F, B = indexCube('AEFB', self.n+1, np.array([self.nNx, self.nCy, self.nCz])) - normal, area1, length = faceInfo(self.gridN, A, E, F, B) + normal1, area1 = faceInfo(self.gridN, A, E, F, B, average=False, normalizeNormals=False) A, D, H, E = indexCube('ADHE', self.n+1, np.array([self.nCx, self.nNy, self.nCz])) - normal, area2, length = faceInfo(self.gridN, A, D, H, E) + normal2, area2 = faceInfo(self.gridN, A, D, H, E, average=False, normalizeNormals=False) A, B, C, D = indexCube('ABCD', self.n+1, np.array([self.nCx, self.nCy, self.nNz])) - normal, area3, length = faceInfo(self.gridN, A, B, C, D) + normal3, area3 = faceInfo(self.gridN, A, B, C, D, average=False, normalizeNormals=False) self._area = np.r_[mkvc(area1), mkvc(area2), mkvc(area3)] + self._normals = [normal1, normal2, normal3] return self._area return locals() _area = None area = property(**area()) + def normals(): + doc = """ +Face normals: calling this will average +the computed normals so that there is one +per face. This is especially relevant in +3D, as there are up to 4 different normals +for each face that will be different. + +To reshape the normals into a matrix and get the y component: + +NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') +""" + + def fget(self): + if(self._tangents is None): + self.area # calling .area will create the face normals + if self.dim == 2: + return normalize2D(np.r_[self._normals[0], self._normals[1]]) + elif self.dim == 3: + normal1 = (self._normals[0][0] + self._normals[0][1] + self._normals[0][2] + self._normals[0][3])/4 + normal2 = (self._normals[1][0] + self._normals[1][1] + self._normals[1][2] + self._normals[1][3])/4 + normal3 = (self._normals[2][0] + self._normals[2][1] + self._normals[2][2] + self._normals[2][3])/4 + return normalize3D(np.r_[normal1, normal2, normal3]) + return locals() + _normals = None + normals = property(**normals()) + def edge(): doc = "Edge legnths." @@ -193,7 +228,7 @@ if __name__ == '__main__': nc = 7 h2 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) h3 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) - dee3 = False + dee3 = True if dee3: X, Y, Z = ndgrid(h1, h2, h3, vector=False) M = LogicallyOrthogonalMesh([X, Y, Z]) @@ -201,7 +236,4 @@ if __name__ == '__main__': X, Y = ndgrid(h1, h2, vector=False) M = LogicallyOrthogonalMesh([X, Y]) - # print M.r(M.gridCC, format='M') - # print M.gridN[:, 0] - print M.nE - print M.r(M.tangents, 'E', 'Ex', 'M') + print M.r(M.normals, 'F', 'Fx', 'V') diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 55771729..e182cc5e 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -204,7 +204,7 @@ def indexCube(nodes, gridSize, n=None): return out -def faceInfo(xyz, A, B, C, D, average=True): +def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): """ function [N] = faceInfo(y,A,B,C,D) @@ -232,7 +232,8 @@ def faceInfo(xyz, A, B, C, D, average=True): Last modified on: 2013/07/26 """ - + assert type(average) is bool, 'average must be a boolean' + assert type(normalizeNormals) is bool, 'normalizeNormals must be a boolean' # compute normal that is pointing away from you. # # A -------A-B------- B @@ -266,7 +267,10 @@ def faceInfo(xyz, A, B, C, D, average=True): # normalize N = normalize(N) else: - N = [normalize(nA), normalize(nB), normalize(nC), normalize(nD)] + if normalizeNormals: + N = [normalize(nA), normalize(nB), normalize(nC), normalize(nD)] + else: + N = [nA, nB, nC, nD] # Area calculation # @@ -276,10 +280,7 @@ def faceInfo(xyz, A, B, C, D, average=True): # So also could be viewed as the average parallelogram. area = (length(nA)+length(nB)+length(nC)+length(nD))/4 - # simple edge length calculations - edgeLengths = [length(AB), length(BC), length(CD), length(DA)] - - return N, area, edgeLengths + return N, area def ind2sub(shape, ind): From 5af4a5f5c27b833cc975423c28d09884e306731b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Wed, 31 Jul 2013 18:34:03 -0700 Subject: [PATCH 070/359] 3D volume tweak now takes the average of two different ways to divide into tetrahedras --- SimPEG/LogicallyOrthogonalMesh.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index af141ac7..dd424e6e 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -98,20 +98,22 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid self._vol = area elif self.dim == 3: # Each polyhedron can be decomposed into 5 tetrahedrons - # T1 = [A B D E]; % cutted edge - # T2 = [B E F G]; % cutted edge - # T3 = [B D E G]; % mid - # T4 = [B C D G]; % cutted edge - # T5 = [D E G H]; % cutted edge + # However, this presents a choice so we may as well divide in two ways and average. A, B, C, D, E, F, G, H = indexCube('ABCDEFGH', self.n+1) - v1 = volTetra(self.gridN, A, B, D, E) # cutted edge - v2 = volTetra(self.gridN, B, E, F, G) # cutted edge - v3 = volTetra(self.gridN, B, D, E, G) # mid - v4 = volTetra(self.gridN, B, C, D, G) # cutted edge - v5 = volTetra(self.gridN, D, E, G, H) # cutted edge + vol1 = (volTetra(self.gridN, A, B, D, E) + # cutted edge top + volTetra(self.gridN, B, E, F, G) + # cutted edge top + volTetra(self.gridN, B, D, E, G) + # middle + volTetra(self.gridN, B, C, D, G) + # cutted edge bottom + volTetra(self.gridN, D, E, G, H)) # cutted edge bottom - self._vol = v1 + v2 + v3 + v4 + v5 + vol2 = (volTetra(self.gridN, A, F, B, C) + # cutted edge top + volTetra(self.gridN, A, E, F, H) + # cutted edge top + volTetra(self.gridN, A, H, F, C) + # middle + volTetra(self.gridN, C, H, D, A) + # cutted edge bottom + volTetra(self.gridN, C, G, H, F)) # cutted edge bottom + + self._vol = (vol1 + vol2)/2 return self._vol return locals() _vol = None @@ -169,7 +171,7 @@ NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') """ def fget(self): - if(self._tangents is None): + if(self._normals is None): self.area # calling .area will create the face normals if self.dim == 2: return normalize2D(np.r_[self._normals[0], self._normals[1]]) From 4887f4b13086df8eab94670d9de4f1f8bcd6bc48 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 1 Aug 2013 08:23:23 -0700 Subject: [PATCH 071/359] Minor changes to utile so that it works with matrices. --- SimPEG/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SimPEG/utils.py b/SimPEG/utils.py index e182cc5e..e92f81cb 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -18,6 +18,9 @@ def mkvc(x, numDims=1): > (3, 1, 1) """ + if type(x) == np.matrix: + x = np.array(x) + assert type(x) == np.ndarray, "Vector must be a numpy array" if numDims == 1: @@ -259,7 +262,7 @@ def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): nC = cross(CD, BC) nD = cross(DA, CD) - length = lambda x: (x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2)**0.5 + length = lambda x: np.sqrt(x[:, 0]**2 + x[:, 1]**2 + x[:, 2]**2) normalize = lambda x: x/np.kron(np.ones((1, x.shape[1])), mkvc(length(x), 2)) if average: # average the normals at each vertex. @@ -278,6 +281,8 @@ def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): # Each triangle is one half of the length of the cross product # # So also could be viewed as the average parallelogram. + print nA, nB, nC, nD + print length(nA), length(nB), length(nC), length(nD) area = (length(nA)+length(nB)+length(nC)+length(nD))/4 return N, area From 444feca101bff3805fb74900e487fd5dca6dc0af Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Thu, 1 Aug 2013 15:05:12 -0700 Subject: [PATCH 072/359] initial forward EM --- SimPEG/EMforward.py | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 SimPEG/EMforward.py diff --git a/SimPEG/EMforward.py b/SimPEG/EMforward.py new file mode 100644 index 00000000..fc143841 --- /dev/null +++ b/SimPEG/EMforward.py @@ -0,0 +1,49 @@ +import numpy as np +from utils import mkvc +import scipy.sparse.linalg.dsolve as dsl + +def getMisfit(m,mesh,forward): + + mu0 = 4*np.pi*1e-7 + omega = forward['omega'] #[param['indomega']] + rhs = forward['rhs'] #[:,param['indrhs']] + misfit = 0 + + # Maxwell's system for E + for i in range(len(omega)): + for j in range(rhs.shape[1]): + Curl = mesh.edgeCurl + #Grad = mesh.nodalGrad + sigma = np.exp(m) + Me,PP = mesh.getEdgeMass(sigma) + Mf = 1/mu0 * mesh.getFaceMass() # assume mu = mu0 + + A = Curl.T * Mf * Curl - 1j * omega[i] * Me + b = mkvc(np.array(rhs[:,j])) + e = dsl.spsolve(A,b) + e = mkvc(e,2) + #print np.linalg.norm(A*e-b)/np.linalg.norm(b) + P = forward['projection'] + d = P*e + r = mkvc(d - param.dobs[i,j,:],2) + + mis = mis + 0.5*(r.T*r) + # get derivatives + lam = dsl.spsolve(A.T,P.T*r) + Gij = PP.T*diag((PP*e)*mesh.vol) + dmis = dmis - Gij.T*lam + + + + +if __name__ == '__main__': + from TensorMesh import TensorMesh + h = [np.ones(7),np.ones(8),np.ones(9)] + mesh = TensorMesh(h) + ne = np.sum(mesh.nE) + Q = np.matrix(np.random.randn(ne,5)) + P = np.matrix(Q.T) + forward = {'omega':[1,2,3], 'rhs':Q,'projection':P} + + m = np.ones(mesh.nC) + getMisfit(m,mesh,forward) From a3ecaf799679c760c1a88ea818885ba26fb4ec19 Mon Sep 17 00:00:00 2001 From: Dave Marchant Date: Thu, 1 Aug 2013 22:54:52 -0700 Subject: [PATCH 073/359] Added an __str__ method to the mesh class. Will allow for basic mesh info to be viewed using 'print mesh' --- SimPEG/TensorMesh.py | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index b247138b..396e6d5c 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -33,6 +33,57 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators): # Ensure h contains 1D vectors self._h = [mkvc(x) for x in h] + def __str__(self): + outStr = ' ---- {0:d}-D TensorMesh ---- '.format(self.dim) + def printH(hx, outStr=''): + i = -1 + while True: + i = i + 1 + if i > hx.size: + break + elif i == hx.size: + break + h = hx[i] + n = 1 + for j in range(i+1, hx.size): + if hx[j] == h: + n = n + 1 + i = i + 1 + else: + break + + if n == 1: + outStr = outStr + ' {0:.2f},'.format(h) + else: + outStr = outStr + ' {0:d}*{1:.2f},'.format(n,h) + + return outStr[:-1] + + if self.dim == 1: + outStr = outStr + '\n x0: {0:.2f}'.format(self.x0[0]) + outStr = outStr + '\n nCx: {0:d}'.format(self.nCx) + outStr = outStr + printH(self.hx, outStr='\n hx:') + pass + elif self.dim == 2: + outStr = outStr + '\n x0: {0:.2f}'.format(self.x0[0]) + outStr = outStr + '\n y0: {0:.2f}'.format(self.x0[1]) + outStr = outStr + '\n nCx: {0:d}'.format(self.nCx) + outStr = outStr + '\n nCy: {0:d}'.format(self.nCy) + outStr = outStr + printH(self.hx, outStr='\n hx:') + outStr = outStr + printH(self.hy, outStr='\n hy:') + elif self.dim == 3: + outStr = outStr + '\n x0: {0:.2f}'.format(self.x0[0]) + outStr = outStr + '\n y0: {0:.2f}'.format(self.x0[1]) + outStr = outStr + '\n z0: {0:.2f}'.format(self.x0[2]) + outStr = outStr + '\n nCx: {0:d}'.format(self.nCx) + outStr = outStr + '\n nCy: {0:d}'.format(self.nCy) + outStr = outStr + '\n nCz: {0:d}'.format(self.nCz) + outStr = outStr + printH(self.hx, outStr='\n hx:') + outStr = outStr + printH(self.hy, outStr='\n hy:') + outStr = outStr + printH(self.hz, outStr='\n hz:') + + return outStr + def h(): doc = "h is a list containing the cell widths of the tensor mesh in each dimension." fget = lambda self: self._h From dcae030d811b994b1d2786f5ab849f05d9bf7c7e Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Fri, 2 Aug 2013 00:18:46 -0700 Subject: [PATCH 074/359] 1. Added output for the edgeInnerProduct so we can use it in the derivative phase 2. The getMisfit may be working but needs a little bit more work We need to go through our code to make sure that all vectors that can be multiplied by a matrix are set to vec = mkvc(vec,2) --- SimPEG/EMforward.py | 47 ++++++++++++++++++++++++++++++++--------- SimPEG/InnerProducts.py | 12 ++++++----- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/SimPEG/EMforward.py b/SimPEG/EMforward.py index fc143841..0f65cb21 100644 --- a/SimPEG/EMforward.py +++ b/SimPEG/EMforward.py @@ -1,13 +1,15 @@ import numpy as np from utils import mkvc import scipy.sparse.linalg.dsolve as dsl +from InnerProducts import getFaceInnerProduct, getEdgeInnerProduct -def getMisfit(m,mesh,forward): +def getMisfit(m,mesh,forward,param): mu0 = 4*np.pi*1e-7 omega = forward['omega'] #[param['indomega']] rhs = forward['rhs'] #[:,param['indrhs']] - misfit = 0 + mis = 0 + dmis = m*0 # Maxwell's system for E for i in range(len(omega)): @@ -15,8 +17,8 @@ def getMisfit(m,mesh,forward): Curl = mesh.edgeCurl #Grad = mesh.nodalGrad sigma = np.exp(m) - Me,PP = mesh.getEdgeMass(sigma) - Mf = 1/mu0 * mesh.getFaceMass() # assume mu = mu0 + Me,PP = getEdgeInnerProduct(mesh,sigma) + Mf = 1/mu0 * getFaceInnerProduct(mesh) # assume mu = mu0 A = Curl.T * Mf * Curl - 1j * omega[i] * Me b = mkvc(np.array(rhs[:,j])) @@ -30,20 +32,45 @@ def getMisfit(m,mesh,forward): mis = mis + 0.5*(r.T*r) # get derivatives lam = dsl.spsolve(A.T,P.T*r) - Gij = PP.T*diag((PP*e)*mesh.vol) + lam = mkvc(lam,2) + Gij = - 1j * omega[i] * PP.T*sp.diag((PP*e)*mesh.vol) dmis = dmis - Gij.T*lam + return mis, dmis, d + if __name__ == '__main__': from TensorMesh import TensorMesh + from interpmat import interpmat + from scipy import sparse as sp + h = [np.ones(7),np.ones(8),np.ones(9)] mesh = TensorMesh(h) - ne = np.sum(mesh.nE) - Q = np.matrix(np.random.randn(ne,5)) - P = np.matrix(Q.T) - forward = {'omega':[1,2,3], 'rhs':Q,'projection':P} + xs = np.array([3.1,4.3,5.4,6.5]) + ys = np.array([3.2,4.1,5.4,6.2]) + zs = np.array([4.3,4.2,4.1,4.1]); + + xyz = mesh.gridEx + x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + Px = interpmat(x,y,z,xs,ys,zs) + xyz = mesh.gridEy + x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + Py = interpmat(x,y,z,xs,ys,zs) + xyz = mesh.gridEz + x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + Pz = interpmat(x,y,z,xs,ys,zs) + P = sp.hstack((Px,Py,Pz)) + + ne = np.sum(mesh.nE) + Q = np.matrix(np.random.randn(ne,5)) + omega = [1,2,3] + forward = {'omega':omega, 'rhs':Q,'projection':P} + dobs = np.ones(np.size(xs),np.shape(Q,2),np.size(omega)) + param = {'dobs':dobs} + + m = np.ones(mesh.nC) - getMisfit(m,mesh,forward) + getMisfit(m,mesh,forward,param) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index bc482de4..d4b2e9ad 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -169,13 +169,15 @@ def getEdgeInnerProduct(mesh, sigma): # Cell volume v = np.sqrt(mesh.vol) v3 = np.r_[v, v, v] - V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry + #V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + #A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - A = 0.125*A - - return A + #A = 0.125*A + P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, + sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) + A = 0.125* (P.T*Sigma*P) + return A, P From ec4358d872fd9c9088c31f7cfe532d5159c445d5 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Fri, 2 Aug 2013 01:51:10 -0700 Subject: [PATCH 075/359] corrected bugs --- SimPEG/InnerProducts.py | 12 +++++++----- SimPEG/interpmat.py | 14 ++++++++------ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index d4b2e9ad..1ff5cea4 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -169,14 +169,14 @@ def getEdgeInnerProduct(mesh, sigma): # Cell volume v = np.sqrt(mesh.vol) v3 = np.r_[v, v, v] - #V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry + V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry - #A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - #A = 0.125*A + A = 0.125*A P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) - A = 0.125* (P.T*Sigma*P) + return A, P @@ -186,4 +186,6 @@ if __name__ == '__main__': h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] mesh = TensorMesh(h) mu = np.ones((mesh.nC, 6)) - A = mesh.getFaceInnerProduct(mu) + A = getFaceInnerProduct(mesh,mu) + B = getEdgeInnerProduct(mesh,mu) + diff --git a/SimPEG/interpmat.py b/SimPEG/interpmat.py index 68b6c4c1..bfb80291 100644 --- a/SimPEG/interpmat.py +++ b/SimPEG/interpmat.py @@ -1,6 +1,7 @@ from scipy import sparse as sp import numpy as np + def interpmat(x,y,z,xr,yr,zr): # # This function does local linear interpolation @@ -23,7 +24,8 @@ def interpmat(x,y,z,xr,yr,zr): ind_z = np.array([0,0]) dx, dy, dz = np.zeros(2), np.zeros(2), np.zeros(2) for i in range(0, nps): - im = np.amin(abs(xr[i]-x)) + im = np.argmin(abs(xr[i]-x)) + print i,im if xr[i] - x[im] >= 0: # Point on the left ind_x[0] = im; ind_x[1] = im+1 else: # Point on the right @@ -33,7 +35,7 @@ def interpmat(x,y,z,xr,yr,zr): dx[0] = xr[i] - x[ind_x[0]] dx[1] = x[ind_x[1]] - xr[i] - im = np.amin(abs(yr[i] - y)) + im = np.argmin(abs(yr[i] - y)) if yr[i] - y[im] >= 0: # Point on the left ind_y[0] = im; ind_y[1] = im+1 else: # Point on the right @@ -43,7 +45,7 @@ def interpmat(x,y,z,xr,yr,zr): dy[0] = yr[i] - y[ind_y[0]] dy[1] = y[ind_y[1]] - yr[i]; - im = np.amin(abs(zr[i] - z)); + im = np.argmin(abs(zr[i] - z)); if zr[i] -z[im] >= 0: # Point on the left ind_z[0] = im; ind_z[1] = im+1 else: # Point on the right @@ -80,9 +82,9 @@ def interpmat(x,y,z,xr,yr,zr): if __name__ == '__main__': - x = np.array([1, 2, 3, 4]) - y = np.array([1, 2, 3, 4, 5]) - z = np.array([0, 1, 4, 6]) + x = np.array([1.1, 2.1, 3.6, 4.9]) + y = np.array([1.2, 2.2, 3.3, 4.9, 5.6]) + z = np.array([0.8, 1.7, 4.9, 6.5]) xr = np.array([2.5,3.2]) yr = np.array([2.4,3.6]) From f41463b241de0945dfeb149e72afefd3191403a0 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Fri, 2 Aug 2013 01:51:46 -0700 Subject: [PATCH 076/359] need more work but its closer --- SimPEG/EMforward.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SimPEG/EMforward.py b/SimPEG/EMforward.py index 0f65cb21..9c332c9b 100644 --- a/SimPEG/EMforward.py +++ b/SimPEG/EMforward.py @@ -54,12 +54,15 @@ if __name__ == '__main__': xyz = mesh.gridEx x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + x = list(set(x)); y = list(set(y)); z = list(set(z)) Px = interpmat(x,y,z,xs,ys,zs) xyz = mesh.gridEy x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + x = list(set(x)); y = list(set(y)); z = list(set(z)) Py = interpmat(x,y,z,xs,ys,zs) xyz = mesh.gridEz x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] + x = list(set(x)); y = list(set(y)); z = list(set(z)) Pz = interpmat(x,y,z,xs,ys,zs) P = sp.hstack((Px,Py,Pz)) @@ -67,7 +70,7 @@ if __name__ == '__main__': Q = np.matrix(np.random.randn(ne,5)) omega = [1,2,3] forward = {'omega':omega, 'rhs':Q,'projection':P} - dobs = np.ones(np.size(xs),np.shape(Q,2),np.size(omega)) + dobs = np.ones([np.size(xs),5,np.size(omega)]) param = {'dobs':dobs} From 24773c4f60b008e0c88b4b18783125ad35655ad4 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Sat, 3 Aug 2013 02:07:15 -0700 Subject: [PATCH 077/359] my first attempt at a wrapper to overcome some of numpy issues --- SimPEG/ops.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 SimPEG/ops.py diff --git a/SimPEG/ops.py b/SimPEG/ops.py new file mode 100644 index 00000000..4997cde9 --- /dev/null +++ b/SimPEG/ops.py @@ -0,0 +1,62 @@ +import numpy as np +from utils import mkvc +import scipy.sparse.linalg as spla +import scipy.sparse as sp + + +def matmul(A,B): + + # first check shape + if np.shape(A)[1] != np.shape(B)[0]: + print 'error in sizes' + return + + # Check types + sA = sp.issparse(A) + sB = sp.issparse(B) + + if ((sA == False) & (sB == True)): # doesno't work unless we trick it + return (B.T.dot(A.T)).T + else: + return A.dot(B) + + +def dot(A,B): + A = mkvc(A,1) + B = mkvc(B,1) + return np.dot(A,B) + +def inner(A,B): + A = mkvc(A,1) + B = mkvc(B,1) + return np.dot(A,B) + + +if __name__ == '__main__': + import numpy as np + from utils import mkvc + import scipy.sparse as sp + + # generate sparse and dense matrices + A = sp.rand(100, 200, density=0.05, format='csr', dtype=None) + B = sp.rand(200, 150, density=0.05, format='csr', dtype=None) + C = np.random.rand(200,150) + D = np.random.rand(150,100) + b = mkvc(np.arange(200),1) + c = np.reshape(b,(1,200)) + matmul(A,B) + matmul(A,C) + matmul(C,D) + matmul(D,A) + matmul(A,b) + dot(c,b) + dot(C,C) + print np.shape(c), np.shape(b)[0] + print matmul(c,b),dot(c,b) + + + + + + + From caaa7dcb41c19d6be451ced0625fe0f37fcaa9c7 Mon Sep 17 00:00:00 2001 From: ehaber99 Date: Sat, 3 Aug 2013 10:23:35 -0700 Subject: [PATCH 078/359] made the inner products easy to use to get the derivatives with respect to conductivity/mu --- SimPEG/InnerProducts.py | 45 ++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 1ff5cea4..5e53961f 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -81,23 +81,34 @@ def getFaceInnerProduct(mesh, mu): if mu.size == mesh.nC: # Isotropic! mu = mkvc(mu) # ensure it is a vector. - mu = sdiag(np.r_[mu, mu, mu]) + Mu = sdiag(np.r_[mu, mu, mu]) elif mu.shape[1] == 3: # Diagonal tensor - mu = sdiag(np.r_[mu[:, 0], mu[:, 1], mu[:, 2]]) + Mu = sdiag(np.r_[mu[:, 0], mu[:, 1], mu[:, 2]]) elif mu.shape[1] == 6: # Fully anisotropic row1 = sp.hstack((sdiag(mu[:, 0]), sdiag(mu[:, 3]), sdiag(mu[:, 4]))) row2 = sp.hstack((sdiag(mu[:, 3]), sdiag(mu[:, 1]), sdiag(mu[:, 5]))) row3 = sp.hstack((sdiag(mu[:, 4]), sdiag(mu[:, 5]), sdiag(mu[:, 2]))) - mu = sp.vstack((row1, row2, row3)) + Mu = sp.vstack((row1, row2, row3)) # Cell volume v = np.sqrt(mesh.vol) - v3 = np.r_[v, v, v] - V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry + v3 = (0.125)**(0.5)*np.r_[v, v, v] + #V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry + #A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 + #A = 0.125*A + P000 = sdiag(v3)*P000; P001 = sdiag(v3)*P001; P010 = sdiag(v3)*P010; P011 = sdiag(v3)*P011 + P100 = sdiag(v3)*P100; P101 = sdiag(v3)*P101; P110 = sdiag(v3)*P110; P111 = sdiag(v3)*P111 + + A = P000.T*Mu*P000 + P001.T*Mu*P001 + P010.T*Mu*P010 + P011.T*Mu*P011 + P100.T*Mu*P100 + P101.T*Mu*P101 + P110.T*Mu*P110 + P111.T*Mu*P111 + + #P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, + # sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) + + #A = 0.125*(P.T * sp.kron(sp.eye(8),Sigma) * P) + P = [P000,P001,P010,P011,P100,P101,P110,P111] + return A, P - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - A = 0.125*A return A @@ -168,15 +179,21 @@ def getEdgeInnerProduct(mesh, sigma): # Cell volume v = np.sqrt(mesh.vol) - v3 = np.r_[v, v, v] - V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry + v3 = (0.125)**(0.5)*np.r_[v, v, v] + + P000 = sdiag(v3)*P000; P001 = sdiag(v3)*P001; P010 = sdiag(v3)*P010; P011 = sdiag(v3)*P011 + P100 = sdiag(v3)*P100; P101 = sdiag(v3)*P101; P110 = sdiag(v3)*P110; P111 = sdiag(v3)*P111 - A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - A = 0.125*A - P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, - sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) + #V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry + A = P000.T*Sigma*P000 + P001.T*Sigma*P001 + P010.T*Sigma*P010 + P011.T*Sigma*P011 + P100.T*Sigma*P100 + P101.T*Sigma*P101 + P110.T*Sigma*P110 + P111.T*Sigma*P111 + + #P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, + # sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) + + #A = 0.125*(P.T * sp.kron(sp.eye(8),Sigma) * P) + P = [P000,P001,P010,P011,P100,P101,P110,P111] return A, P @@ -187,5 +204,5 @@ if __name__ == '__main__': mesh = TensorMesh(h) mu = np.ones((mesh.nC, 6)) A = getFaceInnerProduct(mesh,mu) - B = getEdgeInnerProduct(mesh,mu) + B, P = getEdgeInnerProduct(mesh,mu) From 306e31ef047920db0747521a017420dc5461172a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 13:53:08 -0700 Subject: [PATCH 079/359] Added warning to the faceInfo utils ---> this does not compute concave areas correctly. This is an issue, and should be fixed in future versions. --- SimPEG/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SimPEG/utils.py b/SimPEG/utils.py index e92f81cb..0741b7bb 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -281,8 +281,8 @@ def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): # Each triangle is one half of the length of the cross product # # So also could be viewed as the average parallelogram. - print nA, nB, nC, nD - print length(nA), length(nB), length(nC), length(nD) + # + # WARNING: This does not compute correctly for concave quadrilaterals area = (length(nA)+length(nB)+length(nC)+length(nD))/4 return N, area From 9ca9c20731ff4395f9a749c5b5d0905d752004ac Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 13:57:00 -0700 Subject: [PATCH 080/359] Modified innerProducts so they have defaults, and you have to explicitly ask for the projection matrices. --- SimPEG/InnerProducts.py | 163 ++++++++++++++------------------ SimPEG/tests/test_tensorMesh.py | 1 + 2 files changed, 70 insertions(+), 94 deletions(-) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 5e53961f..b8819e6a 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -11,22 +11,45 @@ class InnerProducts(object): def __init__(self): raise Exception('InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class.') - def getFaceInnerProduct(self, mu): + def getFaceInnerProduct(self, mu=None, returnP=False): if self._meshType == 'TENSOR': pass elif self._meshType == 'LOM': pass # todo: we should be doing something slightly different here! - return getFaceInnerProduct(self, mu) + return getFaceInnerProduct(self, mu, returnP) - def getEdgeInnerProduct(self, sigma): + def getEdgeInnerProduct(self, sigma=None, returnP=False): if self._meshType == 'TENSOR': pass elif self._meshType == 'LOM': pass # todo: we should be doing something slightly different here! - return getEdgeInnerProduct(self, sigma) + return getEdgeInnerProduct(self, sigma, returnP) -def getFaceInnerProduct(mesh, mu): +# ------------------------ Geometries ------------------------------ +# +# +# node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) +# / / +# / / | +# edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) +# / / | +# / / | +# node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) +# | | | +# | | node(i+1,j+1,k+1) +# | | / +# edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) +# | | / +# | | / +# | |/ +# node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) + + +def getFaceInnerProduct(mesh, mu=None, returnP=False): + + if mu is None: # default is ones + mu = np.ones((mesh.nC, 1)) m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) nc = mesh.nC @@ -45,22 +68,6 @@ def getFaceInnerProduct(mesh, mu): return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() - # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - # / / - # / / | - # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - # / / | - # / / | - # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - # | | | - # | | node(i+1,j+1,k+1) - # | | / - # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) - # | | / - # | | / - # | |/ - # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - # no | node | f1 | f2 | f3 # 000 | i ,j ,k | i , j, k | i, j , k | i, j, k # 100 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k @@ -70,14 +77,19 @@ def getFaceInnerProduct(mesh, mu): # 101 | i+1,j ,k | i+1, j, k | i, j , k | i, j, k+1 # 011 | i ,j+1,k | i , j, k | i, j+1, k | i, j, k+1 # 111 | i+1,j+1,k | i+1, j, k | i, j+1, k | i, j, k+1 - P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) - P100 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) - P010 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) - P110 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) - P001 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 1]]) - P101 = Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) - P011 = Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) - P111 = Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + + # Square root of cell volume multiplied by 1/8 + v = np.sqrt(0.125*mesh.vol) + V3 = sdiag(np.r_[v, v, v]) # We will multiply on each side to keep symmetry + + P000 = V3*Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = V3*Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 0]]) + P010 = V3*Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 0]]) + P110 = V3*Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) + P001 = V3*Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 1]]) + P101 = V3*Pxxx([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) + P011 = V3*Pxxx([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) + P111 = V3*Pxxx([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) if mu.size == mesh.nC: # Isotropic! mu = mkvc(mu) # ensure it is a vector. @@ -90,30 +102,18 @@ def getFaceInnerProduct(mesh, mu): row3 = sp.hstack((sdiag(mu[:, 4]), sdiag(mu[:, 5]), sdiag(mu[:, 2]))) Mu = sp.vstack((row1, row2, row3)) - # Cell volume - v = np.sqrt(mesh.vol) - v3 = (0.125)**(0.5)*np.r_[v, v, v] - #V = sdiag(v3)*mu*sdiag(v3) # to keep symmetry - #A = P000.T*V*P000 + P001.T*V*P001 + P010.T*V*P010 + P011.T*V*P011 + P100.T*V*P100 + P101.T*V*P101 + P110.T*V*P110 + P111.T*V*P111 - #A = 0.125*A - P000 = sdiag(v3)*P000; P001 = sdiag(v3)*P001; P010 = sdiag(v3)*P010; P011 = sdiag(v3)*P011 - P100 = sdiag(v3)*P100; P101 = sdiag(v3)*P101; P110 = sdiag(v3)*P110; P111 = sdiag(v3)*P111 - A = P000.T*Mu*P000 + P001.T*Mu*P001 + P010.T*Mu*P010 + P011.T*Mu*P011 + P100.T*Mu*P100 + P101.T*Mu*P101 + P110.T*Mu*P110 + P111.T*Mu*P111 - - #P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, - # sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) - - #A = 0.125*(P.T * sp.kron(sp.eye(8),Sigma) * P) - P = [P000,P001,P010,P011,P100,P101,P110,P111] - return A, P + P = [P000, P001, P010, P011, P100, P101, P110, P111] + if returnP: + return A, P + else: + return A +def getEdgeInnerProduct(mesh, sigma=None, returnP=False): - return A - - -def getEdgeInnerProduct(mesh, sigma): + if sigma is None: # default is ones + sigma = np.ones((mesh.nC, 1)) m = np.array([mesh.nCx, mesh.nCy, mesh.nCz]) nc = mesh.nC @@ -132,22 +132,6 @@ def getEdgeInnerProduct(mesh, sigma): return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() - # node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - # / / - # / / | - # edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - # / / | - # / / | - # node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - # | | | - # | | node(i+1,j+1,k+1) - # | | / - # edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) - # | | / - # | | / - # | |/ - # node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - # no | node | e1 | e2 | e3 # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k @@ -157,14 +141,19 @@ def getEdgeInnerProduct(mesh, sigma): # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k - P000 = Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) - P100 = Pxxx([[0, 0, 0], [1, 0, 0], [1, 0, 0]]) - P010 = Pxxx([[0, 1, 0], [0, 0, 0], [0, 1, 0]]) - P110 = Pxxx([[0, 1, 0], [1, 0, 0], [1, 1, 0]]) - P001 = Pxxx([[0, 0, 1], [0, 0, 1], [0, 0, 0]]) - P101 = Pxxx([[0, 0, 1], [1, 0, 1], [1, 0, 0]]) - P011 = Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) - P111 = Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) + + # Square root of cell volume multiplied by 1/8 + v = np.sqrt(0.125*mesh.vol) + V3 = sdiag(np.r_[v, v, v]) # We will multiply on each side to keep symmetry + + P000 = V3*Pxxx([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) + P100 = V3*Pxxx([[0, 0, 0], [1, 0, 0], [1, 0, 0]]) + P010 = V3*Pxxx([[0, 1, 0], [0, 0, 0], [0, 1, 0]]) + P110 = V3*Pxxx([[0, 1, 0], [1, 0, 0], [1, 1, 0]]) + P001 = V3*Pxxx([[0, 0, 1], [0, 0, 1], [0, 0, 0]]) + P101 = V3*Pxxx([[0, 0, 1], [1, 0, 1], [1, 0, 0]]) + P011 = V3*Pxxx([[0, 1, 1], [0, 0, 1], [0, 1, 0]]) + P111 = V3*Pxxx([[0, 1, 1], [1, 0, 1], [1, 1, 0]]) if sigma.size == mesh.nC: # Isotropic! sigma = mkvc(sigma) # ensure it is a vector. @@ -177,25 +166,12 @@ def getEdgeInnerProduct(mesh, sigma): row3 = sp.hstack((sdiag(sigma[:, 4]), sdiag(sigma[:, 5]), sdiag(sigma[:, 2]))) Sigma = sp.vstack((row1, row2, row3)) - # Cell volume - v = np.sqrt(mesh.vol) - v3 = (0.125)**(0.5)*np.r_[v, v, v] - - P000 = sdiag(v3)*P000; P001 = sdiag(v3)*P001; P010 = sdiag(v3)*P010; P011 = sdiag(v3)*P011 - P100 = sdiag(v3)*P100; P101 = sdiag(v3)*P101; P110 = sdiag(v3)*P110; P111 = sdiag(v3)*P111 - - - #V = sdiag(v3)*Sigma*sdiag(v3) # to keep symmetry - A = P000.T*Sigma*P000 + P001.T*Sigma*P001 + P010.T*Sigma*P010 + P011.T*Sigma*P011 + P100.T*Sigma*P100 + P101.T*Sigma*P101 + P110.T*Sigma*P110 + P111.T*Sigma*P111 - - #P = sp.vstack((sdiag(v3)*P000,sdiag(v3)*P001,sdiag(v3)*P010,sdiag(v3)*P011, - # sdiag(v3)*P100,sdiag(v3)*P101,sdiag(v3)*P110,sdiag(v3)*P111)) - - #A = 0.125*(P.T * sp.kron(sp.eye(8),Sigma) * P) - P = [P000,P001,P010,P011,P100,P101,P110,P111] - return A, P - + P = [P000, P001, P010, P011, P100, P101, P110, P111] + if returnP: + return A, P + else: + return A if __name__ == '__main__': @@ -203,6 +179,5 @@ if __name__ == '__main__': h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] mesh = TensorMesh(h) mu = np.ones((mesh.nC, 6)) - A = getFaceInnerProduct(mesh,mu) - B, P = getEdgeInnerProduct(mesh,mu) - + A, P = mesh.getFaceInnerProduct(mu, returnP=True) + B, P = mesh.getEdgeInnerProduct(mu, returnP=True) diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index c0b194db..bc034e0b 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -57,6 +57,7 @@ class BasicTensorMeshTests(unittest.TestCase): t1 = np.all(self.mesh2.edge == test_edge) self.assertTrue(t1) + class TestCurl(OrderTest): name = "Curl" From 6d5190b2f2a39debadf57b9ce99119e262566970 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 16:07:27 -0700 Subject: [PATCH 081/359] GridFunctions! --- SimPEG/LogicallyOrthogonalMesh.py | 97 ++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index dd424e6e..1018305b 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -1,6 +1,7 @@ import numpy as np from BaseMesh import BaseMesh from DiffOperators import DiffOperators +from InnerProducts import InnerProducts from utils import mkvc, ndgrid, volTetra, indexCube, faceInfo # Some helper functions. @@ -10,7 +11,7 @@ normalize2D = lambda x: x/np.kron(np.ones((1, 2)), mkvc(length2D(x), 2)) normalize3D = lambda x: x/np.kron(np.ones((1, 3)), mkvc(length3D(x), 2)) -class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid +class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts): """ LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. @@ -57,6 +58,100 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators): # , LOMGrid _gridN = None # Store grid by default gridN = property(**gridN()) + def gridFx(): + doc = "Face staggered grid in the x direction." + + def fget(self): + if self._gridFx is None: + N = self.r(self.gridN, 'N', 'N', 'M') + if self.dim == 2: + XY = [mkvc(0.5 * (n[:, :-1] + n[:, 1:])) for n in N] + self._gridFx = np.c_[XY[0], XY[1]] + elif self.dim == 3: + XYZ = [mkvc(0.25 * (n[:, :-1, :-1] + n[:, :-1, 1:] + n[:, 1:, :-1] + n[:, 1:, 1:])) for n in N] + self._gridFx = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridFx + return locals() + _gridFx = None # Store grid by default + gridFx = property(**gridFx()) + + def gridFy(): + doc = "Face staggered grid in the y direction." + + def fget(self): + if self._gridFy is None: + N = self.r(self.gridN, 'N', 'N', 'M') + if self.dim == 2: + XY = [mkvc(0.5 * (n[:-1, :] + n[1:, :])) for n in N] + self._gridFy = np.c_[XY[0], XY[1]] + elif self.dim == 3: + XYZ = [mkvc(0.25 * (n[:-1, :, :-1] + n[:-1, :, 1:] + n[1:, :, :-1] + n[1:, :, 1:])) for n in N] + self._gridFy = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridFy + return locals() + _gridFy = None # Store grid by default + gridFy = property(**gridFy()) + + def gridFz(): + doc = "Face staggered grid in the z direction." + + def fget(self): + if self._gridFz is None and self.dim == 3: + N = self.r(self.gridN, 'N', 'N', 'M') + XYZ = [mkvc(0.25 * (n[:-1, :-1, :] + n[:-1, 1:, :] + n[1:, :-1, :] + n[1:, 1:, :])) for n in N] + self._gridFz = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridFz + return locals() + _gridFz = None # Store grid by default + gridFz = property(**gridFz()) + + def gridEx(): + doc = "Edge staggered grid in the x direction." + + def fget(self): + if self._gridEx is None: + N = self.r(self.gridN, 'N', 'N', 'M') + if self.dim == 2: + XY = [mkvc(0.5 * (n[:-1, :] + n[1:, :])) for n in N] + self._gridEx = np.c_[XY[0], XY[1]] + elif self.dim == 3: + XYZ = [mkvc(0.5 * (n[:-1, :, :] + n[1:, :, :])) for n in N] + self._gridEx = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridEx + return locals() + _gridEx = None # Store grid by default + gridEx = property(**gridEx()) + + def gridEy(): + doc = "Edge staggered grid in the y direction." + + def fget(self): + if self._gridEy is None: + N = self.r(self.gridN, 'N', 'N', 'M') + if self.dim == 2: + XY = [mkvc(0.5 * (n[:, :-1] + n[:, 1:])) for n in N] + self._gridEy = np.c_[XY[0], XY[1]] + elif self.dim == 3: + XYZ = [mkvc(0.5 * (n[:, :-1, :] + n[:, 1:, :])) for n in N] + self._gridEy = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridEy + return locals() + _gridEy = None # Store grid by default + gridEy = property(**gridEy()) + + def gridEz(): + doc = "Edge staggered grid in the z direction." + + def fget(self): + if self._gridEz is None and self.dim == 3: + N = self.r(self.gridN, 'N', 'N', 'M') + XYZ = [mkvc(0.5 * (n[:, :, :-1] + n[:, :, 1:])) for n in N] + self._gridEz = np.c_[XYZ[0], XYZ[1], XYZ[2]] + return self._gridEz + return locals() + _gridEz = None # Store grid by default + gridEz = property(**gridEz()) + # --------------- Geometries --------------------- # # From 1acb1a4b848dbcde990fee6e7a2ebe48d9844071 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 16:08:04 -0700 Subject: [PATCH 082/359] Ensure you return None if dimension of TensorMesh is less than the requested grid. --- SimPEG/TensorMesh.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index acfdfbac..5218aec1 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -133,7 +133,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): doc = "Face staggered grid in the y direction." def fget(self): - if self._gridFy is None: + if self._gridFy is None and self.dim > 1: self._gridFy = ndgrid([x for x in [self.vectorCCx, self.vectorNy, self.vectorCCz] if not x is None]) return self._gridFy return locals() @@ -144,7 +144,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): doc = "Face staggered grid in the z direction." def fget(self): - if self._gridFz is None: + if self._gridFz is None and self.dim > 2: self._gridFz = ndgrid([x for x in [self.vectorCCx, self.vectorCCy, self.vectorNz] if not x is None]) return self._gridFz return locals() @@ -166,7 +166,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): doc = "Edge staggered grid in the y direction." def fget(self): - if self._gridEy is None: + if self._gridEy is None and self.dim > 1: self._gridEy = ndgrid([x for x in [self.vectorNx, self.vectorCCy, self.vectorNz] if not x is None]) return self._gridEy return locals() @@ -177,7 +177,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): doc = "Edge staggered grid in the z direction." def fget(self): - if self._gridEz is None: + if self._gridEz is None and self.dim > 2: self._gridEz = ndgrid([x for x in [self.vectorNx, self.vectorNy, self.vectorCCz] if not x is None]) return self._gridEz return locals() From cc66eaf9fdcfaa431b8b2a11a07e48925478967a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 16:08:54 -0700 Subject: [PATCH 083/359] Testing of LOM (comparing against Tensor Mesh) --- SimPEG/__init__.py | 1 + SimPEG/tests/OrderTest.py | 11 +++- SimPEG/tests/test_LogicallyOrthogonalMesh.py | 55 +++++++++++++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index bcbba681..ca9b9f7b 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,2 +1,3 @@ from TensorMesh import TensorMesh +from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh import utils diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 55ac7d34..1b7ba7de 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -1,6 +1,6 @@ import sys sys.path.append('../../') -from SimPEG import TensorMesh +from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh import numpy as np import unittest @@ -90,6 +90,15 @@ class OrderTest(unittest.TestCase): max_h = max([np.max(hi) for hi in self.M.h]) return max_h + elif 'LOM' in self.meshType: + if 'uniform' in self.meshType: + xx = np.ones(nc)/nc + X, Y, Z = utils.ndgrid(xx, xx, xx, vector=False) + else: + raise Exception('Unexpected meshType') + self.M = LogicallyOrthogonalMesh([X, Y, Z]) + return 1./nc + def getError(self): """For given h, generate A[h], f and A(f) and return norm of error.""" return 1. diff --git a/SimPEG/tests/test_LogicallyOrthogonalMesh.py b/SimPEG/tests/test_LogicallyOrthogonalMesh.py index 6c6eade9..523b18d2 100644 --- a/SimPEG/tests/test_LogicallyOrthogonalMesh.py +++ b/SimPEG/tests/test_LogicallyOrthogonalMesh.py @@ -4,8 +4,6 @@ import sys sys.path.append('../') from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh -from OrderTest import OrderTest -from scipy.sparse.linalg import dsolve from utils import ndgrid @@ -47,6 +45,59 @@ class BasicLOMTests(unittest.TestCase): t1 = np.all(self.LOM2.edge == test_edge) self.assertTrue(t1) + def test_tangents(self): + T = self.LOM2.tangents + self.assertTrue(np.all(self.LOM2.r(T, 'E', 'Ex', 'V')[0] == np.ones(self.LOM2.nE[0]))) + self.assertTrue(np.all(self.LOM2.r(T, 'E', 'Ex', 'V')[1] == np.zeros(self.LOM2.nE[0]))) + self.assertTrue(np.all(self.LOM2.r(T, 'E', 'Ey', 'V')[0] == np.zeros(self.LOM2.nE[1]))) + self.assertTrue(np.all(self.LOM2.r(T, 'E', 'Ey', 'V')[1] == np.ones(self.LOM2.nE[1]))) + + T = self.LOM3.tangents + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ex', 'V')[0] == np.ones(self.LOM3.nE[0]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ex', 'V')[1] == np.zeros(self.LOM3.nE[0]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ex', 'V')[2] == np.zeros(self.LOM3.nE[0]))) + + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ey', 'V')[0] == np.zeros(self.LOM3.nE[1]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ey', 'V')[1] == np.ones(self.LOM3.nE[1]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ey', 'V')[2] == np.zeros(self.LOM3.nE[1]))) + + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ez', 'V')[0] == np.zeros(self.LOM3.nE[2]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ez', 'V')[1] == np.zeros(self.LOM3.nE[2]))) + self.assertTrue(np.all(self.LOM3.r(T, 'E', 'Ez', 'V')[2] == np.ones(self.LOM3.nE[2]))) + + def test_normals(self): + N = self.LOM2.normals + self.assertTrue(np.all(self.LOM2.r(N, 'F', 'Fx', 'V')[0] == np.ones(self.LOM2.nF[0]))) + self.assertTrue(np.all(self.LOM2.r(N, 'F', 'Fx', 'V')[1] == np.zeros(self.LOM2.nF[0]))) + self.assertTrue(np.all(self.LOM2.r(N, 'F', 'Fy', 'V')[0] == np.zeros(self.LOM2.nF[1]))) + self.assertTrue(np.all(self.LOM2.r(N, 'F', 'Fy', 'V')[1] == np.ones(self.LOM2.nF[1]))) + + N = self.LOM3.normals + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fx', 'V')[0] == np.ones(self.LOM3.nF[0]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fx', 'V')[1] == np.zeros(self.LOM3.nF[0]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fx', 'V')[2] == np.zeros(self.LOM3.nF[0]))) + + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fy', 'V')[0] == np.zeros(self.LOM3.nF[1]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fy', 'V')[1] == np.ones(self.LOM3.nF[1]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fy', 'V')[2] == np.zeros(self.LOM3.nF[1]))) + + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fz', 'V')[0] == np.zeros(self.LOM3.nF[2]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fz', 'V')[1] == np.zeros(self.LOM3.nF[2]))) + self.assertTrue(np.all(self.LOM3.r(N, 'F', 'Fz', 'V')[2] == np.ones(self.LOM3.nF[2]))) + + def test_grid(self): + self.assertTrue(np.all(self.LOM2.gridFx == self.TM2.gridFx)) + self.assertTrue(np.all(self.LOM2.gridFy == self.TM2.gridFy)) + self.assertTrue(np.all(self.LOM2.gridEx == self.TM2.gridEx)) + self.assertTrue(np.all(self.LOM2.gridEy == self.TM2.gridEy)) + + self.assertTrue(np.all(self.LOM3.gridFx == self.TM3.gridFx)) + self.assertTrue(np.all(self.LOM3.gridFy == self.TM3.gridFy)) + self.assertTrue(np.all(self.LOM3.gridFz == self.TM3.gridFz)) + self.assertTrue(np.all(self.LOM3.gridEx == self.TM3.gridEx)) + self.assertTrue(np.all(self.LOM3.gridEy == self.TM3.gridEy)) + self.assertTrue(np.all(self.LOM3.gridEz == self.TM3.gridEz)) + if __name__ == '__main__': unittest.main() From 26b334585fb30fbfd6b7141968ad0ea5340828f7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 16:39:34 -0700 Subject: [PATCH 084/359] EdgeInnerProducts now working for LOM Fixed DiffOps bug in CURL Fixed bug in OrderTest --> must remember to do cumSum, and not just supply dx to ndgrid test_massMatrices now tests uniformLOM --- SimPEG/DiffOperators.py | 6 +++--- SimPEG/InnerProducts.py | 19 ++++++++++++++--- SimPEG/sputils.py | 34 +++++++++++++++++++++++++++++++ SimPEG/tests/OrderTest.py | 4 ++-- SimPEG/tests/test_massMatrices.py | 2 ++ 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index df321e5f..d02b26bf 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -168,9 +168,9 @@ class DiffOperators(object): def fget(self): if(self._edgeCurl is None): # The number of cell centers in each direction - n1 = np.size(self.hx) - n2 = np.size(self.hy) - n3 = np.size(self.hz) + n1 = self.nCx + n2 = self.nCy + n3 = self.nCy # Compute lengths of cell edges L = self.edge diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index b8819e6a..d1d0d623 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -1,6 +1,6 @@ from scipy import sparse as sp -from sputils import sdiag -from utils import sub2ind, ndgrid, mkvc +from sputils import sdiag, inv3X3BlockDiagonal +from utils import sub2ind, ndgrid, mkvc, getSubArray import numpy as np @@ -123,6 +123,11 @@ def getEdgeInnerProduct(mesh, sigma=None, returnP=False): iijjkk = ndgrid(i, j, k) ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] + if mesh._meshType == 'LOM': + eT1 = mesh.r(mesh.tangents, 'E', 'Ex', 'M') + eT2 = mesh.r(mesh.tangents, 'E', 'Ey', 'M') + eT3 = mesh.r(mesh.tangents, 'E', 'Ez', 'M') + def Pxxx(pos): ind1 = sub2ind(mesh.nEx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) ind2 = sub2ind(mesh.nEy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nE[0] @@ -130,7 +135,15 @@ def getEdgeInnerProduct(mesh, sigma=None, returnP=False): IND = np.r_[ind1, ind2, ind3].flatten() - return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() + PXXX = sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nE))).tocsr() + + if mesh._meshType == 'LOM': + I3x3 = inv3X3BlockDiagonal(getSubArray(eT1[0], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), getSubArray(eT1[1], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), getSubArray(eT1[2], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), + getSubArray(eT2[0], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), getSubArray(eT2[1], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), getSubArray(eT2[2], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), + getSubArray(eT3[0], [i + pos[2][0], j + pos[2][1], k + pos[2][2]]), getSubArray(eT3[1], [i + pos[2][0], j + pos[2][1], k + pos[2][2]]), getSubArray(eT3[2], [i + pos[2][0], j + pos[2][1], k + pos[2][2]])) + PXXX = I3x3 * PXXX + + return PXXX # no | node | e1 | e2 | e3 # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index d9aab184..ae41a210 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -1,4 +1,5 @@ from scipy import sparse as sp +from utils import mkvc def sdiag(h): @@ -19,3 +20,36 @@ def kron3(A, B, C): def spzeros(n1, n2): """spzeros""" return sp.coo_matrix((n1, n2)).tocsr() + + +def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): + + a11 = mkvc(a11) + a12 = mkvc(a12) + a13 = mkvc(a13) + a21 = mkvc(a21) + a22 = mkvc(a22) + a23 = mkvc(a23) + a31 = mkvc(a31) + a32 = mkvc(a32) + a33 = mkvc(a33) + + detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 + + b11 = +(a22*a33 - a23*a32)/detA + b12 = -(a12*a33 - a13*a32)/detA + b13 = +(a12*a23 - a13*a22)/detA + + b21 = +(a31*a23 - a21*a33)/detA + b22 = -(a31*a13 - a11*a33)/detA + b23 = +(a21*a13 - a11*a23)/detA + + b31 = -(a31*a22 - a21*a32)/detA + b32 = +(a31*a12 - a11*a32)/detA + b33 = -(a21*a12 - a11*a22)/detA + + B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12), sdiag(b13))), + sp.hstack((sdiag(b21), sdiag(b22), sdiag(b23))), + sp.hstack((sdiag(b31), sdiag(b32), sdiag(b33))))) + + return B diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 1b7ba7de..5bddf118 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -92,8 +92,8 @@ class OrderTest(unittest.TestCase): elif 'LOM' in self.meshType: if 'uniform' in self.meshType: - xx = np.ones(nc)/nc - X, Y, Z = utils.ndgrid(xx, xx, xx, vector=False) + xx = np.cumsum(np.r_[0, np.ones(nc)/nc]) + X, Y, Z = utils.ndgrid([xx, xx, xx], vector=False) else: raise Exception('Unexpected meshType') self.M = LogicallyOrthogonalMesh([X, Y, Z]) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index c304dda5..da9f0ca6 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,6 +32,8 @@ from OrderTest import OrderTest class TestInnerProducts(OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" + meshType = 'uniformLOM' + def getError(self): call = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) From 849a91473815c141080f3572dfb7d1457cea5e2a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sun, 4 Aug 2013 07:54:33 -0700 Subject: [PATCH 085/359] LOM grid ding and visualization code. --- SimPEG/LomView.py | 61 +++++++++++++++++++++++++++++++++++++++++++ SimPEG/exampleGrid.py | 25 ++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 SimPEG/LomView.py create mode 100644 SimPEG/exampleGrid.py diff --git a/SimPEG/LomView.py b/SimPEG/LomView.py new file mode 100644 index 00000000..1596dfd9 --- /dev/null +++ b/SimPEG/LomView.py @@ -0,0 +1,61 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib +from mpl_toolkits.mplot3d import Axes3D +from utils import mkvc + + +class LomView(object): + """ + Provides viewing functions for TensorMesh + + This class is inherited by TensorMesh + """ + def __init__(self): + pass + + def plotGrid(self): + """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" + NN = self.r(self.gridN, 'N', 'N', 'M') + if self.dim == 2: + fig = plt.figure(2) + fig.clf() + ax = plt.subplot(111) + X1 = np.c_[mkvc(NN[0][:-1, :]), mkvc(NN[0][1:, :]), mkvc(NN[0][:-1, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][:-1, :]), mkvc(NN[1][1:, :]), mkvc(NN[1][:-1, :])*np.nan].flatten() + + X2 = np.c_[mkvc(NN[0][:, :-1]), mkvc(NN[0][:, 1:]), mkvc(NN[0][:, :-1])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, :-1]), mkvc(NN[1][:, 1:]), mkvc(NN[1][:, :-1])*np.nan].flatten() + + X = np.r_[X1, X2] + Y = np.r_[Y1, Y2] + + plt.plot(X, Y) + elif self.dim == 3: + fig = plt.figure(3) + fig.clf() + ax = fig.add_subplot(111, projection='3d') + X1 = np.c_[mkvc(NN[0][:-1, :, :]), mkvc(NN[0][1:, :, :]), mkvc(NN[0][:-1, :, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][:-1, :, :]), mkvc(NN[1][1:, :, :]), mkvc(NN[1][:-1, :, :])*np.nan].flatten() + Z1 = np.c_[mkvc(NN[2][:-1, :, :]), mkvc(NN[2][1:, :, :]), mkvc(NN[2][:-1, :, :])*np.nan].flatten() + + X2 = np.c_[mkvc(NN[0][:, :-1, :]), mkvc(NN[0][:, 1:, :]), mkvc(NN[0][:, :-1, :])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, :-1, :]), mkvc(NN[1][:, 1:, :]), mkvc(NN[1][:, :-1, :])*np.nan].flatten() + Z2 = np.c_[mkvc(NN[2][:, :-1, :]), mkvc(NN[2][:, 1:, :]), mkvc(NN[2][:, :-1, :])*np.nan].flatten() + + X3 = np.c_[mkvc(NN[0][:, :, :-1]), mkvc(NN[0][:, :, 1:]), mkvc(NN[0][:, :, :-1])*np.nan].flatten() + Y3 = np.c_[mkvc(NN[1][:, :, :-1]), mkvc(NN[1][:, :, 1:]), mkvc(NN[1][:, :, :-1])*np.nan].flatten() + Z3 = np.c_[mkvc(NN[2][:, :, :-1]), mkvc(NN[2][:, :, 1:]), mkvc(NN[2][:, :, :-1])*np.nan].flatten() + + X = np.r_[X1, X2, X3] + Y = np.r_[Y1, Y2, Y3] + Z = np.r_[Z1, Z2, Z3] + + plt.plot(X, Y, 'b', zs=Z) + ax.set_zlabel('x3') + + ax.grid(True) + ax.hold(False) + ax.set_xlabel('x1') + ax.set_ylabel('x2') + fig.show() diff --git a/SimPEG/exampleGrid.py b/SimPEG/exampleGrid.py new file mode 100644 index 00000000..a49326df --- /dev/null +++ b/SimPEG/exampleGrid.py @@ -0,0 +1,25 @@ +import numpy as np +from utils import mkvc, ndgrid + + +def exampleLomGird(nC, exType): + assert type(nC) == list, "nC must be a list containing the number of nodes" + assert len(nC) == 2 or len(nC) == 3, "nC must either two or three dimensions" + exType = exType.lower() + + possibleTypes = ['rect', 'rotate'] + assert exType in possibleTypes, "Not a possible example type." + + if exType == 'rect': + return ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + elif exType == 'rotate': + if len(nC) == 2: + X, Y = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2) + amt[amt < 0] = 0 + return X + (-(Y - 0.5))*amt, Y + (+(X - 0.5))*amt + elif len(nC) == 3: + X, Y, Z = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2 + (Z - 0.5)**2) + amt[amt < 0] = 0 + return X + (-(Y - 0.5))*amt, Y + (-(Z - 0.5))*amt, Z + (-(X - 0.5))*amt From e2e38074fc5533bb4f87a40bdf0aa9ff5631a28b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sun, 4 Aug 2013 07:56:25 -0700 Subject: [PATCH 086/359] Order Test must incorporate different meshes. Current test fails, must support 2D mass matrices. --- SimPEG/LogicallyOrthogonalMesh.py | 3 ++- SimPEG/__init__.py | 1 + SimPEG/tests/OrderTest.py | 16 +++++++++++----- SimPEG/tests/test_massMatrices.py | 4 +++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 1018305b..1c29c947 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -2,6 +2,7 @@ import numpy as np from BaseMesh import BaseMesh from DiffOperators import DiffOperators from InnerProducts import InnerProducts +from LomView import LomView from utils import mkvc, ndgrid, volTetra, indexCube, faceInfo # Some helper functions. @@ -11,7 +12,7 @@ normalize2D = lambda x: x/np.kron(np.ones((1, 2)), mkvc(length2D(x), 2)) normalize3D = lambda x: x/np.kron(np.ones((1, 3)), mkvc(length3D(x), 2)) -class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts): +class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): """ LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index ca9b9f7b..7cb2b76d 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,3 +1,4 @@ from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh import utils +from exampleGrid import exampleLomGird diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 5bddf118..64d37a32 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -1,6 +1,6 @@ import sys sys.path.append('../../') -from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh +from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh, exampleLomGird import numpy as np import unittest @@ -92,11 +92,17 @@ class OrderTest(unittest.TestCase): elif 'LOM' in self.meshType: if 'uniform' in self.meshType: - xx = np.cumsum(np.r_[0, np.ones(nc)/nc]) - X, Y, Z = utils.ndgrid([xx, xx, xx], vector=False) + kwrd = 'rect' + elif 'rotate' in self.meshType: + kwrd = 'rotate' else: raise Exception('Unexpected meshType') - self.M = LogicallyOrthogonalMesh([X, Y, Z]) + if self.meshDimension == 2: + X, Y = exampleLomGird([nc, nc], kwrd) + self.M = LogicallyOrthogonalMesh([X, Y]) + if self.meshDimension == 3: + X, Y, Z = exampleLomGird([nc, nc, nc], kwrd) + self.M = LogicallyOrthogonalMesh([X, Y, Z]) return 1./nc def getError(self): @@ -119,7 +125,7 @@ class OrderTest(unittest.TestCase): err = self.getError() if ii == 0: print '' - print 'Testing order of: ' + self.name + print 'Testing convergence on ' + self.M._meshType + ' of: ' + self.name print '_____________________________________________' print ' h | error | e(i-1)/e(i) | order' print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index da9f0ca6..021a307b 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,7 +32,9 @@ from OrderTest import OrderTest class TestInnerProducts(OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" - meshType = 'uniformLOM' + meshType = 'rotateLOM' + meshDimension = 2 + meshSizes = [16, 32, 64] def getError(self): From e073eaeb8b35f5fdb205b13edc92aae191dc8d8f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 5 Aug 2013 11:51:03 -0700 Subject: [PATCH 087/359] Innerproduct work. Testing, visualization, and 2D - NOTE there are bugs in anything but a uniform LOM Not very helpful yet! --- SimPEG/InnerProducts.py | 94 ++++++++++++++++++- SimPEG/LomView.py | 32 ++++++- SimPEG/sputils.py | 45 +++++++++- SimPEG/tests/OrderTest.py | 61 +++++++------ SimPEG/tests/test_massMatrices.py | 90 ++++++++++++++++++- SimPEG/tests/test_operators.py | 144 ++++++++++++++++++++++++++++++ SimPEG/tests/test_tensorMesh.py | 80 +---------------- SimPEG/tests/test_utils.py | 25 ++++++ SimPEG/utils.py | 10 ++- 9 files changed, 465 insertions(+), 116 deletions(-) create mode 100644 SimPEG/tests/test_operators.py diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index d1d0d623..5cc391c4 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -1,5 +1,5 @@ from scipy import sparse as sp -from sputils import sdiag, inv3X3BlockDiagonal +from sputils import sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal from utils import sub2ind, ndgrid, mkvc, getSubArray import numpy as np @@ -16,7 +16,10 @@ class InnerProducts(object): pass elif self._meshType == 'LOM': pass # todo: we should be doing something slightly different here! - return getFaceInnerProduct(self, mu, returnP) + if self.dim == 2: + return getFaceInnerProduct2D(self, mu, returnP) + elif self.dim == 3: + return getFaceInnerProduct(self, mu, returnP) def getEdgeInnerProduct(self, sigma=None, returnP=False): if self._meshType == 'TENSOR': @@ -59,6 +62,11 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): iijjkk = ndgrid(i, j, k) ii, jj, kk = iijjkk[:, 0], iijjkk[:, 1], iijjkk[:, 2] + if mesh._meshType == 'LOM': + fN1 = mesh.r(mesh.normals, 'F', 'Fx', 'M') + fN2 = mesh.r(mesh.normals, 'F', 'Fy', 'M') + fN3 = mesh.r(mesh.normals, 'F', 'Fz', 'M') + def Pxxx(pos): ind1 = sub2ind(mesh.nFx, np.c_[ii + pos[0][0], jj + pos[0][1], kk + pos[0][2]]) ind2 = sub2ind(mesh.nFy, np.c_[ii + pos[1][0], jj + pos[1][1], kk + pos[1][2]]) + mesh.nF[0] @@ -66,7 +74,15 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): IND = np.r_[ind1, ind2, ind3].flatten() - return sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() + PXXX = sp.coo_matrix((np.ones(3*nc), (range(3*nc), IND)), shape=(3*nc, np.sum(mesh.nF))).tocsr() + + if mesh._meshType == 'LOM': + I3x3 = inv3X3BlockDiagonal(getSubArray(fN1[0], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), getSubArray(fN1[1], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), getSubArray(fN1[2], [i + pos[0][0], j + pos[0][1], k + pos[0][2]]), + getSubArray(fN2[0], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), getSubArray(fN2[1], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), getSubArray(fN2[2], [i + pos[1][0], j + pos[1][1], k + pos[1][2]]), + getSubArray(fN3[0], [i + pos[2][0], j + pos[2][1], k + pos[2][2]]), getSubArray(fN3[1], [i + pos[2][0], j + pos[2][1], k + pos[2][2]]), getSubArray(fN3[2], [i + pos[2][0], j + pos[2][1], k + pos[2][2]])) + PXXX = I3x3 * PXXX + + return PXXX # no | node | f1 | f2 | f3 # 000 | i ,j ,k | i , j, k | i, j , k | i, j, k @@ -110,6 +126,78 @@ def getFaceInnerProduct(mesh, mu=None, returnP=False): return A +def getFaceInnerProduct2D(mesh, mu=None, returnP=False): + + if mu is None: # default is ones + mu = np.ones((mesh.nC, 1)) + + m = np.array([mesh.nCx, mesh.nCy]) + nc = mesh.nC + + i, j = np.int64(range(m[0])), np.int64(range(m[1])) + + iijj = ndgrid(i, j) + ii, jj = iijj[:, 0], iijj[:, 1] + + if mesh._meshType == 'LOM': + fN1 = mesh.r(mesh.normals, 'F', 'Fx', 'M') + fN2 = mesh.r(mesh.normals, 'F', 'Fy', 'M') + + def Pxx(pos): + ind1 = sub2ind(mesh.nFx, np.c_[ii + pos[0][0], jj + pos[0][1]]) + ind2 = sub2ind(mesh.nFy, np.c_[ii + pos[1][0], jj + pos[1][1]]) + mesh.nF[0] + + IND = np.r_[ind1, ind2].flatten() + + PXX = sp.coo_matrix((np.ones(2*nc), (range(2*nc), IND)), shape=(2*nc, np.sum(mesh.nF))).tocsr() + + if mesh._meshType == 'LOM': + # print fN1[0].shape + # print fN2[0].shape + # print np.c_[i+pos[0][0],j+pos[0][1],i+pos[1][0],j+pos[1][1]] + # print fN1[1].shape + I2x2 = inv2X2BlockDiagonal(getSubArray(fN1[0], [i + pos[0][0], j + pos[0][1]]), getSubArray(fN1[1], [i + pos[0][0], j + pos[0][1]]), + getSubArray(fN2[0], [i + pos[1][0], j + pos[1][1]]), getSubArray(fN2[1], [i + pos[1][0], j + pos[1][1]])) + PXX = I2x2 * PXX + + # import matplotlib.pyplot as plt + # plt.spy(PXX) + # plt.show() + return PXX + + # no | node | f1 | f2 + # 00 | i ,j | i , j | i, j + # 10 | i+1,j | i+1, j | i, j + # 01 | i ,j+1 | i , j | i, j+1 + # 11 | i+1,j+1 | i+1, j | i, j+1 + + # Square root of cell volume multiplied by 1/4 + v = np.sqrt(0.25*mesh.vol) + V2 = sdiag(np.r_[v, v]) # We will multiply on each side to keep symmetry + + P00 = V2*Pxx([[0, 0], [0, 0]]) + P10 = V2*Pxx([[1, 0], [0, 0]]) + P01 = V2*Pxx([[0, 0], [0, 1]]) + P11 = V2*Pxx([[1, 0], [0, 1]]) + + if mu.size == mesh.nC: # Isotropic! + mu = mkvc(mu) # ensure it is a vector. + Mu = sdiag(np.r_[mu, mu]) + elif mu.shape[1] == 2: # Diagonal tensor + Mu = sdiag(np.r_[mu[:, 0], mu[:, 1]]) + elif mu.shape[1] == 3: # Fully anisotropic + row1 = sp.hstack((sdiag(mu[:, 0]), sdiag(mu[:, 2]))) + row2 = sp.hstack((sdiag(mu[:, 2]), sdiag(mu[:, 1]))) + Mu = sp.vstack((row1, row2)) + + A = P00.T*Mu*P00 + P10.T*Mu*P10 + P01.T*Mu*P01 + P11.T*Mu*P11 + P = [P00, P10, P01, P11] + if returnP: + return A, P + else: + return A + + def getEdgeInnerProduct(mesh, sigma=None, returnP=False): if sigma is None: # default is ones diff --git a/SimPEG/LomView.py b/SimPEG/LomView.py index 1596dfd9..4c9b1dab 100644 --- a/SimPEG/LomView.py +++ b/SimPEG/LomView.py @@ -14,7 +14,7 @@ class LomView(object): def __init__(self): pass - def plotGrid(self): + def plotGrid(self, length=0.05): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions.""" NN = self.r(self.gridN, 'N', 'N', 'M') if self.dim == 2: @@ -31,6 +31,36 @@ class LomView(object): Y = np.r_[Y1, Y2] plt.plot(X, Y) + + plt.hold(True) + Nx = self.r(self.normals, 'F', 'Fx', 'V') + Ny = self.r(self.normals, 'F', 'Fy', 'V') + Tx = self.r(self.tangents, 'E', 'Ex', 'V') + Ty = self.r(self.tangents, 'E', 'Ey', 'V') + + plt.plot(self.gridN[:, 0], self.gridN[:, 1], 'bo') + + nX = np.c_[self.gridFx[:, 0], self.gridFx[:, 0] + Nx[0]*length, self.gridFx[:, 0]*np.nan].flatten() + nY = np.c_[self.gridFx[:, 1], self.gridFx[:, 1] + Nx[1]*length, self.gridFx[:, 1]*np.nan].flatten() + plt.plot(self.gridFx[:, 0], self.gridFx[:, 1], 'rs') + plt.plot(nX, nY, 'r-') + + nX = np.c_[self.gridFy[:, 0], self.gridFy[:, 0] + Ny[0]*length, self.gridFy[:, 0]*np.nan].flatten() + nY = np.c_[self.gridFy[:, 1], self.gridFy[:, 1] + Ny[1]*length, self.gridFy[:, 1]*np.nan].flatten() + #plt.plot(self.gridFy[:, 0], self.gridFy[:, 1], 'gs') + plt.plot(nX, nY, 'g-') + + tX = np.c_[self.gridEx[:, 0], self.gridEx[:, 0] + Tx[0]*length, self.gridEx[:, 0]*np.nan].flatten() + tY = np.c_[self.gridEx[:, 1], self.gridEx[:, 1] + Tx[1]*length, self.gridEx[:, 1]*np.nan].flatten() + plt.plot(self.gridEx[:, 0], self.gridEx[:, 1], 'r^') + plt.plot(tX, tY, 'r-') + + nX = np.c_[self.gridEy[:, 0], self.gridEy[:, 0] + Ty[0]*length, self.gridEy[:, 0]*np.nan].flatten() + nY = np.c_[self.gridEy[:, 1], self.gridEy[:, 1] + Ty[1]*length, self.gridEy[:, 1]*np.nan].flatten() + #plt.plot(self.gridEy[:, 0], self.gridEy[:, 1], 'g^') + plt.plot(nX, nY, 'g-') + plt.axis('equal') + elif self.dim == 3: fig = plt.figure(3) fig.clf() diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py index ae41a210..79a1abf9 100644 --- a/SimPEG/sputils.py +++ b/SimPEG/sputils.py @@ -4,7 +4,7 @@ from utils import mkvc def sdiag(h): """Sparse diagonal matrix""" - return sp.spdiags(h, 0, h.size, h.size, format="csr") + return sp.spdiags(mkvc(h), 0, h.size, h.size, format="csr") def speye(n): @@ -23,6 +23,16 @@ def spzeros(n1, n2): def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): + """ B = inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33) + + inverts a stack of 3x3 matrices + + Input: + A - a11, a12, a13, a21, a22, a23, a31, a32, a33 + + Output: + B - inverse + """ a11 = mkvc(a11) a12 = mkvc(a12) @@ -53,3 +63,36 @@ def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): sp.hstack((sdiag(b31), sdiag(b32), sdiag(b33))))) return B + + +def inv2X2BlockDiagonal(a11, a12, a21, a22): + """ B = inv2X2BlockDiagonal(a11, a12, a21, a22) + + Inverts a stack of 2x2 matrices by using the inversion formula + + inv(A) = (1/det(A)) * cof(A)^T + + Input: + A - a11, a12, a13, a21, a22, a23, a31, a32, a33 + + Output: + B - inverse + """ + + a11 = mkvc(a11) + a12 = mkvc(a12) + a21 = mkvc(a21) + a22 = mkvc(a22) + + # compute inverse of the determinant. + detAinv = 1./(a11*a22 - a21*a12) + + b11 = +detAinv*a22 + b12 = -detAinv*a12 + b21 = -detAinv*a21 + b22 = +detAinv*a11 + + B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12))), + sp.hstack((sdiag(b21), sdiag(b22))))) + + return B diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 64d37a32..107a8d9f 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -65,20 +65,21 @@ class OrderTest(unittest.TestCase): expectedOrder = 2 tolerance = 0.85 meshSizes = [4, 8, 16, 32] - meshType = 'uniformTensorMesh' + meshTypes = ['uniformTensorMesh'] + _meshType = meshTypes[0] meshDimension = 3 def setupMesh(self, nc): """ For a given number of cells nc, generate a TensorMesh with uniform cells with edge length h=1/nc. """ - if 'TensorMesh' in self.meshType: - if 'uniform' in self.meshType: + if 'TensorMesh' in self._meshType: + if 'uniform' in self._meshType: h1 = np.ones(nc)/nc h2 = np.ones(nc)/nc h3 = np.ones(nc)/nc h = [h1, h2, h3] - elif 'random' in self.meshType: + elif 'random' in self._meshType: h1 = np.random.rand(nc) h2 = np.random.rand(nc) h3 = np.random.rand(nc) @@ -90,10 +91,10 @@ class OrderTest(unittest.TestCase): max_h = max([np.max(hi) for hi in self.M.h]) return max_h - elif 'LOM' in self.meshType: - if 'uniform' in self.meshType: + elif 'LOM' in self._meshType: + if 'uniform' in self._meshType: kwrd = 'rect' - elif 'rotate' in self.meshType: + elif 'rotate' in self._meshType: kwrd = 'rotate' else: raise Exception('Unexpected meshType') @@ -117,28 +118,30 @@ class OrderTest(unittest.TestCase): """ - order = [] - err_old = 0. - max_h_old = 0. - for ii, nc in enumerate(self.meshSizes): - max_h = self.setupMesh(nc) - err = self.getError() - if ii == 0: - print '' - print 'Testing convergence on ' + self.M._meshType + ' of: ' + self.name - print '_____________________________________________' - print ' h | error | e(i-1)/e(i) | order' - print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' - print '%4i | %8.2e |' % (nc, err) - else: - order.append(np.log(err/err_old)/np.log(max_h/max_h_old)) - print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) - err_old = err - max_h_old = max_h - print '---------------------------------------------' - passTest = np.mean(np.array(order)) > self.tolerance*self.expectedOrder - # passTest = len(np.where(np.array(order) > self.tolerance*self.expectedOrder)[0]) > np.floor(0.75*len(order)) - self.assertTrue(passTest) + for meshType in self.meshTypes: + self._meshType = meshType + order = [] + err_old = 0. + max_h_old = 0. + for ii, nc in enumerate(self.meshSizes): + max_h = self.setupMesh(nc) + err = self.getError() + if ii == 0: + print '' + print 'Testing convergence on ' + self.M._meshType + ' of: ' + self.name + print '_____________________________________________' + print ' h | error | e(i-1)/e(i) | order' + print '~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~~~~|~~~~~~~~~~' + print '%4i | %8.2e |' % (nc, err) + else: + order.append(np.log(err/err_old)/np.log(max_h/max_h_old)) + print '%4i | %8.2e | %6.4f | %6.4f' % (nc, err, err_old/err, order[-1]) + err_old = err + max_h_old = max_h + print '---------------------------------------------' + passTest = np.mean(np.array(order)) > self.tolerance*self.expectedOrder + # passTest = len(np.where(np.array(order) > self.tolerance*self.expectedOrder)[0]) > np.floor(0.75*len(order)) + self.assertTrue(passTest) if __name__ == '__main__': unittest.main() diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 021a307b..83d8bf3e 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,9 +32,9 @@ from OrderTest import OrderTest class TestInnerProducts(OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" - meshType = 'rotateLOM' - meshDimension = 2 - meshSizes = [16, 32, 64] + meshTypes = ['uniformTensorMesh', 'uniformLOM'] + meshDimension = 3 + meshSizes = [16, 32] def getError(self): @@ -118,5 +118,89 @@ class TestInnerProducts(OrderTest): self.orderTest() +class TestInnerProducts2D(OrderTest): + """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" + + meshTypes = ['uniformTensorMesh', 'uniformLOM', 'rotateLOM'] + meshDimension = 2 + meshSizes = [4, 8, 16, 32, 64, 128] + + def getError(self): + + z = 5 # Because 5 is just such a great number. + + call = lambda fun, xy: fun(xy[:, 0], xy[:, 1]) + + ex = lambda x, y: x**2+y*z + ey = lambda x, y: (z**2)*x+y*z + + sigma1 = lambda x, y: x*y+1 + sigma2 = lambda x, y: x*z+2 + sigma3 = lambda x, y: 3+z*y + + Gc = self.M.gridCC + if self.sigmaTest == 1: + sigma = np.c_[call(sigma1, Gc)] + analytic = 144877./360 # Found using matlab symbolic toolbox. z=5 + elif self.sigmaTest == 2: + sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc)] + analytic = 189959./120 # Found using matlab symbolic toolbox. z=5 + elif self.sigmaTest == 3: + sigma = np.c_[call(sigma1, Gc), call(sigma2, Gc), call(sigma3, Gc)] + analytic = 781427./360 # Found using matlab symbolic toolbox. z=5 + + if self.location == 'edges': + Ex = call(ex, self.M.gridEx) + Ey = call(ey, self.M.gridEy) + E = np.matrix(np.r_[Ex, Ey]).T + A = self.M.getEdgeInnerProduct(sigma) + numeric = E.T*A*E + elif self.location == 'faces': + Fx = call(ex, self.M.gridFx) + Fy = call(ey, self.M.gridFy) + F = np.matrix(np.r_[Fx, Fy]).T + A = self.M.getFaceInnerProduct(sigma) + numeric = F.T*A*F + + err = np.abs(numeric - analytic) + return err + + # def test_order1_edges(self): + # self.name = "2D Edge Inner Product - Isotropic" + # self.location = 'edges' + # self.sigmaTest = 1 + # self.orderTest() + + # def test_order3_edges(self): + # self.name = "2D Edge Inner Product - Anisotropic" + # self.location = 'edges' + # self.sigmaTest = 2 + # self.orderTest() + + # def test_order6_edges(self): + # self.name = "2D Edge Inner Product - Full Tensor" + # self.location = 'edges' + # self.sigmaTest = 3 + # self.orderTest() + + def test_order1_faces(self): + self.name = "2D Face Inner Product - Isotropic" + self.location = 'faces' + self.sigmaTest = 1 + self.orderTest() + + def test_order3_faces(self): + self.name = "2D Face Inner Product - Anisotropic" + self.location = 'faces' + self.sigmaTest = 2 + self.orderTest() + + def test_order6_faces(self): + self.name = "2D Face Inner Product - Full Tensor" + self.location = 'faces' + self.sigmaTest = 3 + self.orderTest() + + if __name__ == '__main__': unittest.main() diff --git a/SimPEG/tests/test_operators.py b/SimPEG/tests/test_operators.py new file mode 100644 index 00000000..03ea36d1 --- /dev/null +++ b/SimPEG/tests/test_operators.py @@ -0,0 +1,144 @@ +import numpy as np +import unittest +import sys +sys.path.append('../') +from OrderTest import OrderTest + +MESHTYPES = ['uniformTensorMesh', 'uniformLOM'] # , 'rotateLOM' + + +class TestCurl(OrderTest): + name = "Curl" + meshTypes = MESHTYPES + + def getError(self): + fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) + sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + + Ex = fun(self.M.gridEx[:, 1]) + Ey = fun(self.M.gridEy[:, 2]) + Ez = fun(self.M.gridEz[:, 0]) + E = np.concatenate((Ex, Ey, Ez)) + + Fx = sol(self.M.gridFx[:, 2]) + Fy = sol(self.M.gridFy[:, 0]) + Fz = sol(self.M.gridFz[:, 1]) + curlE_anal = np.concatenate((Fx, Fy, Fz)) + + # Generate DIV matrix + CURL = self.M.edgeCurl + + curlE = CURL*E + err = np.linalg.norm((curlE-curlE_anal), np.inf) + return err + + def test_order(self): + self.orderTest() + + +class TestFaceDiv(OrderTest): + name = "Face Divergence" + meshTypes = MESHTYPES + + def getError(self): + DIV = self.M.faceDiv + + #Test function + fun = lambda x: np.sin(x) + Fx = fun(self.M.gridFx[:, 0]) + Fy = fun(self.M.gridFy[:, 1]) + Fz = fun(self.M.gridFz[:, 2]) + + F = np.concatenate((Fx, Fy, Fz)) + divF = DIV*F + sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) + + err = np.linalg.norm((divF-divF_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestFaceDiv2D(OrderTest): + name = "Face Divergence 2D" + meshTypes = MESHTYPES + meshDimension = 2 + + def getError(self): + DIV = self.M.faceDiv + + #Test function + fun = lambda x: np.sin(x) + Fx = fun(self.M.gridFx[:, 0]) + Fy = fun(self.M.gridFy[:, 1]) + + F = np.concatenate((Fx, Fy)) + divF = DIV*F + sol = lambda x, y: (np.cos(x)+np.cos(y)) + divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1]) + + err = np.linalg.norm((divF-divF_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestNodalGrad(OrderTest): + name = "Nodal Gradient" + meshTypes = MESHTYPES + + def getError(self): + GRAD = self.M.nodalGrad + #Test function + fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + + phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) + gradE = GRAD*phi + + Ex = sol(self.M.gridEx[:, 0]) + Ey = sol(self.M.gridEy[:, 1]) + Ez = sol(self.M.gridEz[:, 2]) + + gradE_anal = np.concatenate((Ex, Ey, Ez)) + err = np.linalg.norm((gradE-gradE_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +class TestNodalGrad2D(OrderTest): + name = "Nodal Gradient 2D" + meshTypes = MESHTYPES + meshDimension = 2 + + def getError(self): + GRAD = self.M.nodalGrad + #Test function + fun = lambda x, y: (np.cos(x)+np.cos(y)) + sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + + phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1]) + gradE = GRAD*phi + + Ex = sol(self.M.gridEx[:, 0]) + Ey = sol(self.M.gridEy[:, 1]) + + gradE_anal = np.concatenate((Ex, Ey)) + err = np.linalg.norm((gradE-gradE_anal), np.inf) + + return err + + def test_order(self): + self.orderTest() + + +if __name__ == '__main__': + unittest.main() diff --git a/SimPEG/tests/test_tensorMesh.py b/SimPEG/tests/test_tensorMesh.py index bc034e0b..32d47353 100644 --- a/SimPEG/tests/test_tensorMesh.py +++ b/SimPEG/tests/test_tensorMesh.py @@ -58,84 +58,6 @@ class BasicTensorMeshTests(unittest.TestCase): self.assertTrue(t1) -class TestCurl(OrderTest): - name = "Curl" - - def getError(self): - fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) - sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) - - Ex = fun(self.M.gridEx[:, 1]) - Ey = fun(self.M.gridEy[:, 2]) - Ez = fun(self.M.gridEz[:, 0]) - E = np.concatenate((Ex, Ey, Ez)) - - Fx = sol(self.M.gridFx[:, 2]) - Fy = sol(self.M.gridFy[:, 0]) - Fz = sol(self.M.gridFz[:, 1]) - curlE_anal = np.concatenate((Fx, Fy, Fz)) - - # Generate DIV matrix - CURL = self.M.edgeCurl - - curlE = CURL*E - err = np.linalg.norm((curlE-curlE_anal), np.inf) - return err - - def test_order(self): - self.orderTest() - - -class TestFaceDiv(OrderTest): - name = "Face Divergence" - - def getError(self): - DIV = self.M.faceDiv - - #Test function - fun = lambda x: np.sin(x) - Fx = fun(self.M.gridFx[:, 0]) - Fy = fun(self.M.gridFy[:, 1]) - Fz = fun(self.M.gridFz[:, 2]) - - F = np.concatenate((Fx, Fy, Fz)) - divF = DIV*F - sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) - - err = np.linalg.norm((divF-divF_anal), np.inf) - - return err - - def test_order(self): - self.orderTest() - - -class TestNodalGrad(OrderTest): - name = "Nodal Gradient" - - def getError(self): - GRAD = self.M.nodalGrad - #Test function - fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) - - phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) - gradE = GRAD*phi - - Ex = sol(self.M.gridEx[:, 0]) - Ey = sol(self.M.gridEy[:, 1]) - Ez = sol(self.M.gridEz[:, 2]) - - gradE_anal = np.concatenate((Ex, Ey, Ez)) - err = np.linalg.norm((gradE-gradE_anal), np.inf) - - return err - - def test_order(self): - self.orderTest() - - class TestPoissonEqn(OrderTest): name = "Poisson Equation" meshSizes = [16, 20, 24] @@ -168,5 +90,7 @@ class TestPoissonEqn(OrderTest): self.name = "Poisson Equation - Backward" self.forward = False self.orderTest() + + if __name__ == '__main__': unittest.main() diff --git a/SimPEG/tests/test_utils.py b/SimPEG/tests/test_utils.py index 59b70147..393cd78d 100644 --- a/SimPEG/tests/test_utils.py +++ b/SimPEG/tests/test_utils.py @@ -3,6 +3,7 @@ import unittest import sys sys.path.append('../') from utils import mkvc, ndgrid, indexCube +from sputils import sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal, sp class TestSequenceFunctions(unittest.TestCase): @@ -62,5 +63,29 @@ class TestSequenceFunctions(unittest.TestCase): self.assertTrue(np.all(indexCube('G', nN) == np.array([13, 14, 16, 17, 22, 23, 25, 26]))) self.assertTrue(np.all(indexCube('H', nN) == np.array([10, 11, 13, 14, 19, 20, 22, 23]))) + def test_invXXXBlockDiagonal(self): + + a = [np.random.rand(5, 1) for i in range(4)] + + B = inv2X2BlockDiagonal(*a) + + A = sp.vstack((sp.hstack((sdiag(a[0]), sdiag(a[1]))), + sp.hstack((sdiag(a[2]), sdiag(a[3]))))) + + Z2 = B*A - sp.eye(10, 10) + self.assertTrue(np.linalg.norm(Z2.todense().ravel(), 2) < 1e-12) + + a = [np.random.rand(5, 1) for i in range(9)] + B = inv3X3BlockDiagonal(*a) + + A = sp.vstack((sp.hstack((sdiag(a[0]), sdiag(a[1]), sdiag(a[2]))), + sp.hstack((sdiag(a[3]), sdiag(a[4]), sdiag(a[5]))), + sp.hstack((sdiag(a[6]), sdiag(a[7]), sdiag(a[8]))))) + + Z3 = B*A - sp.eye(15, 15) + + self.assertTrue(np.linalg.norm(Z3.todense().ravel(), 2) < 1e-12) + + if __name__ == '__main__': unittest.main() diff --git a/SimPEG/utils.py b/SimPEG/utils.py index 0741b7bb..1b5be6bd 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils.py @@ -319,4 +319,12 @@ def sub2ind(shape, subs): def getSubArray(A, ind): """subArray""" - return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] + assert type(ind) == list, "ind must be a list of vectors" + assert len(A.shape) == len(ind), "ind must have the same length as the dimension of A" + + if len(A.shape) == 2: + return A[ind[0], :][:, ind[1]] + elif len(A.shape) == 3: + return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] + else: + raise Exception("getSubArray does not support dimension asked.") From 3d936e07a1328cffa8cde7dee7da108c9e60fcfc Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 5 Aug 2013 12:16:55 -0700 Subject: [PATCH 088/359] Edge Inner products in 2D NOTE: still has bugs. --- SimPEG/InnerProducts.py | 71 ++++++++++++++++++++++++++++++- SimPEG/exampleGrid.py | 2 +- SimPEG/tests/OrderTest.py | 6 ++- SimPEG/tests/test_massMatrices.py | 34 +++++++-------- 4 files changed, 92 insertions(+), 21 deletions(-) diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 5cc391c4..5105295b 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -26,8 +26,10 @@ class InnerProducts(object): pass elif self._meshType == 'LOM': pass # todo: we should be doing something slightly different here! - return getEdgeInnerProduct(self, sigma, returnP) - + if self.dim == 2: + return getEdgeInnerProduct2D(self, sigma, returnP) + elif self.dim == 3: + return getEdgeInnerProduct(self, sigma, returnP) # ------------------------ Geometries ------------------------------ # @@ -275,6 +277,71 @@ def getEdgeInnerProduct(mesh, sigma=None, returnP=False): return A +def getEdgeInnerProduct2D(mesh, sigma=None, returnP=False): + + if sigma is None: # default is ones + sigma = np.ones((mesh.nC, 1)) + + m = np.array([mesh.nCx, mesh.nCy]) + nc = mesh.nC + + i, j = np.int64(range(m[0])), np.int64(range(m[1])) + + iijj = ndgrid(i, j) + ii, jj = iijj[:, 0], iijj[:, 1] + + if mesh._meshType == 'LOM': + eT1 = mesh.r(mesh.tangents, 'E', 'Ex', 'M') + eT2 = mesh.r(mesh.tangents, 'E', 'Ey', 'M') + + def Pxx(pos): + ind1 = sub2ind(mesh.nEx, np.c_[ii + pos[0][0], jj + pos[0][1]]) + ind2 = sub2ind(mesh.nEy, np.c_[ii + pos[1][0], jj + pos[1][1]]) + mesh.nE[0] + + IND = np.r_[ind1, ind2].flatten() + + PXX = sp.coo_matrix((np.ones(2*nc), (range(2*nc), IND)), shape=(2*nc, np.sum(mesh.nE))).tocsr() + + if mesh._meshType == 'LOM': + I2x2 = inv2X2BlockDiagonal(getSubArray(eT1[0], [i + pos[0][0], j + pos[0][1]]), getSubArray(eT1[1], [i + pos[0][0], j + pos[0][1]]), + getSubArray(eT2[0], [i + pos[1][0], j + pos[1][1]]), getSubArray(eT2[1], [i + pos[1][0], j + pos[1][1]])) + PXX = I2x2 * PXX + + return PXX + + # no | node | e1 | e2 + # 00 | i ,j | i ,j | i ,j + # 10 | i+1,j | i ,j | i+1,j + # 01 | i ,j+1 | i ,j+1 | i ,j + # 11 | i+1,j+1 | i ,j+1 | i+1,j + + # Square root of cell volume multiplied by 1/4 + v = np.sqrt(0.25*mesh.vol) + V2 = sdiag(np.r_[v, v]) # We will multiply on each side to keep symmetry + + P00 = V2*Pxx([[0, 0], [0, 0]]) + P10 = V2*Pxx([[0, 0], [1, 0]]) + P01 = V2*Pxx([[0, 1], [0, 0]]) + P11 = V2*Pxx([[0, 1], [1, 0]]) + + if sigma.size == mesh.nC: # Isotropic! + sigma = mkvc(sigma) # ensure it is a vector. + Sigma = sdiag(np.r_[sigma, sigma]) + elif sigma.shape[1] == 2: # Diagonal tensor + Sigma = sdiag(np.r_[sigma[:, 0], sigma[:, 1]]) + elif sigma.shape[1] == 3: # Fully anisotropic + row1 = sp.hstack((sdiag(sigma[:, 0]), sdiag(sigma[:, 2]))) + row2 = sp.hstack((sdiag(sigma[:, 2]), sdiag(sigma[:, 1]))) + Sigma = sp.vstack((row1, row2)) + + A = P00.T*Sigma*P00 + P10.T*Sigma*P10 + P01.T*Sigma*P01 + P11.T*Sigma*P11 + P = [P00, P10, P01, P11] + if returnP: + return A, P + else: + return A + + if __name__ == '__main__': from TensorMesh import TensorMesh h = [np.array([1, 2, 3, 4]), np.array([1, 2, 1, 4, 2]), np.array([1, 1, 4, 1])] diff --git a/SimPEG/exampleGrid.py b/SimPEG/exampleGrid.py index a49326df..2179a17c 100644 --- a/SimPEG/exampleGrid.py +++ b/SimPEG/exampleGrid.py @@ -1,5 +1,5 @@ import numpy as np -from utils import mkvc, ndgrid +from utils import ndgrid def exampleLomGird(nC, exType): diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 107a8d9f..238c3216 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -140,7 +140,11 @@ class OrderTest(unittest.TestCase): max_h_old = max_h print '---------------------------------------------' passTest = np.mean(np.array(order)) > self.tolerance*self.expectedOrder - # passTest = len(np.where(np.array(order) > self.tolerance*self.expectedOrder)[0]) > np.floor(0.75*len(order)) + if passTest: + print ['The test be workin!', 'You get a gold star!', 'Yay passed!', 'Happy little convergence test!', 'That was easy!'][np.random.randint(5)] + else: + print 'Failed to pass test on ' + self._meshType + '.' + print '' self.assertTrue(passTest) if __name__ == '__main__': diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 83d8bf3e..c1276403 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -165,23 +165,23 @@ class TestInnerProducts2D(OrderTest): err = np.abs(numeric - analytic) return err - # def test_order1_edges(self): - # self.name = "2D Edge Inner Product - Isotropic" - # self.location = 'edges' - # self.sigmaTest = 1 - # self.orderTest() + def test_order1_edges(self): + self.name = "2D Edge Inner Product - Isotropic" + self.location = 'edges' + self.sigmaTest = 1 + self.orderTest() - # def test_order3_edges(self): - # self.name = "2D Edge Inner Product - Anisotropic" - # self.location = 'edges' - # self.sigmaTest = 2 - # self.orderTest() + def test_order3_edges(self): + self.name = "2D Edge Inner Product - Anisotropic" + self.location = 'edges' + self.sigmaTest = 2 + self.orderTest() - # def test_order6_edges(self): - # self.name = "2D Edge Inner Product - Full Tensor" - # self.location = 'edges' - # self.sigmaTest = 3 - # self.orderTest() + def test_order6_edges(self): + self.name = "2D Edge Inner Product - Full Tensor" + self.location = 'edges' + self.sigmaTest = 3 + self.orderTest() def test_order1_faces(self): self.name = "2D Face Inner Product - Isotropic" @@ -189,13 +189,13 @@ class TestInnerProducts2D(OrderTest): self.sigmaTest = 1 self.orderTest() - def test_order3_faces(self): + def test_order2_faces(self): self.name = "2D Face Inner Product - Anisotropic" self.location = 'faces' self.sigmaTest = 2 self.orderTest() - def test_order6_faces(self): + def test_order3_faces(self): self.name = "2D Face Inner Product - Full Tensor" self.location = 'faces' self.sigmaTest = 3 From 83fe9df7431473c149dcd860fba50370e632bcd9 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 5 Aug 2013 16:48:05 -0700 Subject: [PATCH 089/359] Ha. Not a bug, the test was wrong. Must project the components of the field. --- SimPEG/tests/test_massMatrices.py | 102 +++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 15 deletions(-) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index c1276403..bfcc80c5 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -32,7 +32,7 @@ from OrderTest import OrderTest class TestInnerProducts(OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" - meshTypes = ['uniformTensorMesh', 'uniformLOM'] + meshTypes = ['uniformTensorMesh', 'uniformLOM', 'rotateLOM'] meshDimension = 3 meshSizes = [16, 32] @@ -64,17 +64,61 @@ class TestInnerProducts(OrderTest): analytic = 69881./21600 # Found using matlab symbolic toolbox. if self.location == 'edges': - Ex = call(ex, self.M.gridEx) - Ey = call(ey, self.M.gridEy) - Ez = call(ez, self.M.gridEz) - E = np.matrix(np.r_[Ex, Ey, Ez]).T + if self.M._meshType == 'TENSOR': + Ex = call(ex, self.M.gridEx) + Ey = call(ey, self.M.gridEy) + Ez = call(ez, self.M.gridEz) + E = np.matrix(np.r_[Ex, Ey, Ez]).T + elif self.M._meshType == 'LOM': + Tx = self.M.r(self.M.tangents, 'E', 'Ex', 'V') + Ty = self.M.r(self.M.tangents, 'E', 'Ey', 'V') + Tz = self.M.r(self.M.tangents, 'E', 'Ez', 'V') + + EX_x = call(ex, self.M.gridEx) + EY_x = call(ey, self.M.gridEx) + EZ_x = call(ez, self.M.gridEx) + Ex = np.sum(np.c_[EX_x, EY_x, EZ_x]*np.c_[Tx[0], Tx[1], Tx[2]], 1) + + EX_y = call(ex, self.M.gridEy) + EY_y = call(ey, self.M.gridEy) + EZ_y = call(ez, self.M.gridEy) + Ey = np.sum(np.c_[EX_y, EY_y, EZ_y]*np.c_[Ty[0], Ty[1], Ty[2]], 1) + + EX_z = call(ex, self.M.gridEz) + EY_z = call(ey, self.M.gridEz) + EZ_z = call(ez, self.M.gridEz) + Ez = np.sum(np.c_[EX_z, EY_z, EZ_z]*np.c_[Tz[0], Tz[1], Tz[2]], 1) + + E = np.matrix(np.r_[Ex, Ey, Ez]).T A = self.M.getEdgeInnerProduct(sigma) numeric = E.T*A*E elif self.location == 'faces': - Fx = call(ex, self.M.gridFx) - Fy = call(ey, self.M.gridFy) - Fz = call(ez, self.M.gridFz) - F = np.matrix(np.r_[Fx, Fy, Fz]).T + if self.M._meshType == 'TENSOR': + Fx = call(ex, self.M.gridFx) + Fy = call(ey, self.M.gridFy) + Fz = call(ez, self.M.gridFz) + F = np.matrix(np.r_[Fx, Fy, Fz]).T + elif self.M._meshType == 'LOM': + Nx = self.M.r(self.M.normals, 'F', 'Fx', 'V') + Ny = self.M.r(self.M.normals, 'F', 'Fy', 'V') + Nz = self.M.r(self.M.normals, 'F', 'Fz', 'V') + + FX_x = call(ex, self.M.gridFx) + FY_x = call(ey, self.M.gridFx) + FZ_x = call(ez, self.M.gridFx) + Fx = np.sum(np.c_[FX_x, FY_x, FZ_x]*np.c_[Nx[0], Nx[1], Nx[2]], 1) + + FX_y = call(ex, self.M.gridFy) + FY_y = call(ey, self.M.gridFy) + FZ_y = call(ez, self.M.gridFy) + Fy = np.sum(np.c_[FX_y, FY_y, FZ_y]*np.c_[Ny[0], Ny[1], Ny[2]], 1) + + FX_z = call(ex, self.M.gridFz) + FY_z = call(ey, self.M.gridFz) + FZ_z = call(ez, self.M.gridFz) + Fz = np.sum(np.c_[FX_z, FY_z, FZ_z]*np.c_[Nz[0], Nz[1], Nz[2]], 1) + + F = np.matrix(np.r_[Fx, Fy, Fz]).T A = self.M.getFaceInnerProduct(sigma) numeric = F.T*A*F @@ -150,15 +194,43 @@ class TestInnerProducts2D(OrderTest): analytic = 781427./360 # Found using matlab symbolic toolbox. z=5 if self.location == 'edges': - Ex = call(ex, self.M.gridEx) - Ey = call(ey, self.M.gridEy) - E = np.matrix(np.r_[Ex, Ey]).T + if self.M._meshType == 'TENSOR': + Ex = call(ex, self.M.gridEx) + Ey = call(ey, self.M.gridEy) + E = np.matrix(np.r_[Ex, Ey]).T + elif self.M._meshType == 'LOM': + Tx = self.M.r(self.M.tangents, 'E', 'Ex', 'V') + Ty = self.M.r(self.M.tangents, 'E', 'Ey', 'V') + + EX_x = call(ex, self.M.gridEx) + EY_x = call(ey, self.M.gridEx) + Ex = np.sum(np.c_[EX_x, EY_x]*np.c_[Tx[0], Tx[1]], 1) + + EX_y = call(ex, self.M.gridEy) + EY_y = call(ey, self.M.gridEy) + Ey = np.sum(np.c_[EX_y, EY_y]*np.c_[Ty[0], Ty[1]], 1) + + E = np.matrix(np.r_[Ex, Ey]).T A = self.M.getEdgeInnerProduct(sigma) numeric = E.T*A*E elif self.location == 'faces': - Fx = call(ex, self.M.gridFx) - Fy = call(ey, self.M.gridFy) - F = np.matrix(np.r_[Fx, Fy]).T + if self.M._meshType == 'TENSOR': + Fx = call(ex, self.M.gridFx) + Fy = call(ey, self.M.gridFy) + F = np.matrix(np.r_[Fx, Fy]).T + elif self.M._meshType == 'LOM': + Nx = self.M.r(self.M.normals, 'F', 'Fx', 'V') + Ny = self.M.r(self.M.normals, 'F', 'Fy', 'V') + + FX_x = call(ex, self.M.gridFx) + FY_x = call(ey, self.M.gridFx) + Fx = np.sum(np.c_[FX_x, FY_x]*np.c_[Nx[0], Nx[1]], 1) + + FX_y = call(ex, self.M.gridFy) + FY_y = call(ey, self.M.gridFy) + Fy = np.sum(np.c_[FX_y, FY_y]*np.c_[Ny[0], Ny[1]], 1) + + F = np.matrix(np.r_[Fx, Fy]).T A = self.M.getFaceInnerProduct(sigma) numeric = F.T*A*F From 4b545fb1b75e375917f013743397ada5fda568da Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 5 Aug 2013 17:16:01 -0700 Subject: [PATCH 090/359] Cleaned up projection code and put it in LOM. --- SimPEG/LogicallyOrthogonalMesh.py | 13 ++++- SimPEG/tests/test_massMatrices.py | 80 +++++++------------------------ 2 files changed, 30 insertions(+), 63 deletions(-) diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 1c29c947..71788230 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -207,7 +207,7 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): volTetra(self.gridN, A, E, F, H) + # cutted edge top volTetra(self.gridN, A, H, F, C) + # middle volTetra(self.gridN, C, H, D, A) + # cutted edge bottom - volTetra(self.gridN, C, G, H, F)) # cutted edge bottom + volTetra(self.gridN, C, G, H, F)) # cutted edge bottom self._vol = (vol1 + vol2)/2 return self._vol @@ -319,6 +319,17 @@ NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') _tangents = None tangents = property(**tangents()) + def projectFaceVector(self, fV): + """Given a vector, fV, in cartesian coordinates, this will project it onto the mesh using the normals""" + assert type(fV) == np.ndarray, 'fV must be an ndarray' + assert len(fV.shape) == 2 and fV.shape[0] == np.sum(self.nF) and fV.shape[1] == self.dim, 'fV must be an ndarray of shape (nF x dim)' + return mkvc(np.sum(fV*self.normals, 1), 2) + + def projectEdgeVector(self, eV): + """Given a vector, eV, in cartesian coordinates, this will project it onto the mesh using the tangents""" + assert type(eV) == np.ndarray, 'eV must be an ndarray' + assert len(eV.shape) == 2 and eV.shape[0] == np.sum(self.nE) and eV.shape[1] == self.dim, 'eV must be an ndarray of shape (nE x dim)' + return mkvc(np.sum(eV*self.tangents, 1), 2) if __name__ == '__main__': nc = 5 diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index bfcc80c5..07d67e9c 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -70,26 +70,11 @@ class TestInnerProducts(OrderTest): Ez = call(ez, self.M.gridEz) E = np.matrix(np.r_[Ex, Ey, Ez]).T elif self.M._meshType == 'LOM': - Tx = self.M.r(self.M.tangents, 'E', 'Ex', 'V') - Ty = self.M.r(self.M.tangents, 'E', 'Ey', 'V') - Tz = self.M.r(self.M.tangents, 'E', 'Ez', 'V') - - EX_x = call(ex, self.M.gridEx) - EY_x = call(ey, self.M.gridEx) - EZ_x = call(ez, self.M.gridEx) - Ex = np.sum(np.c_[EX_x, EY_x, EZ_x]*np.c_[Tx[0], Tx[1], Tx[2]], 1) - - EX_y = call(ex, self.M.gridEy) - EY_y = call(ey, self.M.gridEy) - EZ_y = call(ez, self.M.gridEy) - Ey = np.sum(np.c_[EX_y, EY_y, EZ_y]*np.c_[Ty[0], Ty[1], Ty[2]], 1) - - EX_z = call(ex, self.M.gridEz) - EY_z = call(ey, self.M.gridEz) - EZ_z = call(ez, self.M.gridEz) - Ez = np.sum(np.c_[EX_z, EY_z, EZ_z]*np.c_[Tz[0], Tz[1], Tz[2]], 1) - - E = np.matrix(np.r_[Ex, Ey, Ez]).T + cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] + Ec = np.vstack((cart(self.M.gridEx), + cart(self.M.gridEy), + cart(self.M.gridEz))) + E = np.matrix(self.M.projectEdgeVector(Ec)) A = self.M.getEdgeInnerProduct(sigma) numeric = E.T*A*E elif self.location == 'faces': @@ -99,26 +84,11 @@ class TestInnerProducts(OrderTest): Fz = call(ez, self.M.gridFz) F = np.matrix(np.r_[Fx, Fy, Fz]).T elif self.M._meshType == 'LOM': - Nx = self.M.r(self.M.normals, 'F', 'Fx', 'V') - Ny = self.M.r(self.M.normals, 'F', 'Fy', 'V') - Nz = self.M.r(self.M.normals, 'F', 'Fz', 'V') - - FX_x = call(ex, self.M.gridFx) - FY_x = call(ey, self.M.gridFx) - FZ_x = call(ez, self.M.gridFx) - Fx = np.sum(np.c_[FX_x, FY_x, FZ_x]*np.c_[Nx[0], Nx[1], Nx[2]], 1) - - FX_y = call(ex, self.M.gridFy) - FY_y = call(ey, self.M.gridFy) - FZ_y = call(ez, self.M.gridFy) - Fy = np.sum(np.c_[FX_y, FY_y, FZ_y]*np.c_[Ny[0], Ny[1], Ny[2]], 1) - - FX_z = call(ex, self.M.gridFz) - FY_z = call(ey, self.M.gridFz) - FZ_z = call(ez, self.M.gridFz) - Fz = np.sum(np.c_[FX_z, FY_z, FZ_z]*np.c_[Nz[0], Nz[1], Nz[2]], 1) - - F = np.matrix(np.r_[Fx, Fy, Fz]).T + cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] + Fc = np.vstack((cart(self.M.gridFx), + cart(self.M.gridFy), + cart(self.M.gridFz))) + F = np.matrix(self.M.projectFaceVector(Fc)) A = self.M.getFaceInnerProduct(sigma) numeric = F.T*A*F @@ -199,18 +169,11 @@ class TestInnerProducts2D(OrderTest): Ey = call(ey, self.M.gridEy) E = np.matrix(np.r_[Ex, Ey]).T elif self.M._meshType == 'LOM': - Tx = self.M.r(self.M.tangents, 'E', 'Ex', 'V') - Ty = self.M.r(self.M.tangents, 'E', 'Ey', 'V') + cart = lambda g: np.c_[call(ex, g), call(ey, g)] + Ec = np.vstack((cart(self.M.gridEx), + cart(self.M.gridEy))) + E = np.matrix(self.M.projectEdgeVector(Ec)) - EX_x = call(ex, self.M.gridEx) - EY_x = call(ey, self.M.gridEx) - Ex = np.sum(np.c_[EX_x, EY_x]*np.c_[Tx[0], Tx[1]], 1) - - EX_y = call(ex, self.M.gridEy) - EY_y = call(ey, self.M.gridEy) - Ey = np.sum(np.c_[EX_y, EY_y]*np.c_[Ty[0], Ty[1]], 1) - - E = np.matrix(np.r_[Ex, Ey]).T A = self.M.getEdgeInnerProduct(sigma) numeric = E.T*A*E elif self.location == 'faces': @@ -219,18 +182,11 @@ class TestInnerProducts2D(OrderTest): Fy = call(ey, self.M.gridFy) F = np.matrix(np.r_[Fx, Fy]).T elif self.M._meshType == 'LOM': - Nx = self.M.r(self.M.normals, 'F', 'Fx', 'V') - Ny = self.M.r(self.M.normals, 'F', 'Fy', 'V') + cart = lambda g: np.c_[call(ex, g), call(ey, g)] + Fc = np.vstack((cart(self.M.gridFx), + cart(self.M.gridFy))) + F = np.matrix(self.M.projectFaceVector(Fc)) - FX_x = call(ex, self.M.gridFx) - FY_x = call(ey, self.M.gridFx) - Fx = np.sum(np.c_[FX_x, FY_x]*np.c_[Nx[0], Nx[1]], 1) - - FX_y = call(ex, self.M.gridFy) - FY_y = call(ey, self.M.gridFy) - Fy = np.sum(np.c_[FX_y, FY_y]*np.c_[Ny[0], Ny[1]], 1) - - F = np.matrix(np.r_[Fx, Fy]).T A = self.M.getFaceInnerProduct(sigma) numeric = F.T*A*F From f01b4370b9f68379684161962dbef2e74630e43f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 5 Aug 2013 17:28:55 -0700 Subject: [PATCH 091/359] Added example of plotting the grid for a Lom --- SimPEG/InnerProducts.py | 15 ----- notebooks/exLomPlots.ipynb | 120 +++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 15 deletions(-) create mode 100644 notebooks/exLomPlots.ipynb diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 5105295b..267a9bb0 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -12,20 +12,12 @@ class InnerProducts(object): raise Exception('InnerProducts is a base class providing inner product matrices for meshes and cannot run on its own. Inherit to your favorite Mesh class.') def getFaceInnerProduct(self, mu=None, returnP=False): - if self._meshType == 'TENSOR': - pass - elif self._meshType == 'LOM': - pass # todo: we should be doing something slightly different here! if self.dim == 2: return getFaceInnerProduct2D(self, mu, returnP) elif self.dim == 3: return getFaceInnerProduct(self, mu, returnP) def getEdgeInnerProduct(self, sigma=None, returnP=False): - if self._meshType == 'TENSOR': - pass - elif self._meshType == 'LOM': - pass # todo: we should be doing something slightly different here! if self.dim == 2: return getEdgeInnerProduct2D(self, sigma, returnP) elif self.dim == 3: @@ -154,17 +146,10 @@ def getFaceInnerProduct2D(mesh, mu=None, returnP=False): PXX = sp.coo_matrix((np.ones(2*nc), (range(2*nc), IND)), shape=(2*nc, np.sum(mesh.nF))).tocsr() if mesh._meshType == 'LOM': - # print fN1[0].shape - # print fN2[0].shape - # print np.c_[i+pos[0][0],j+pos[0][1],i+pos[1][0],j+pos[1][1]] - # print fN1[1].shape I2x2 = inv2X2BlockDiagonal(getSubArray(fN1[0], [i + pos[0][0], j + pos[0][1]]), getSubArray(fN1[1], [i + pos[0][0], j + pos[0][1]]), getSubArray(fN2[0], [i + pos[1][0], j + pos[1][1]]), getSubArray(fN2[1], [i + pos[1][0], j + pos[1][1]])) PXX = I2x2 * PXX - # import matplotlib.pyplot as plt - # plt.spy(PXX) - # plt.show() return PXX # no | node | f1 | f2 diff --git a/notebooks/exLomPlots.ipynb b/notebooks/exLomPlots.ipynb new file mode 100644 index 00000000..e2156396 --- /dev/null +++ b/notebooks/exLomPlots.ipynb @@ -0,0 +1,120 @@ +{ + "metadata": { + "name": "exLomPlots" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "sys.path.append('../')\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from SimPEG import LogicallyOrthogonalMesh, utils, exampleLomGird\n", + "mkvc = utils.mkvc" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 38 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 2D Plots\n", + "\n", + "For 2D nodal or cell-centered plots are supported.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "X, Y = exampleLomGird([3,3],'rotate')\n", + "M = LogicallyOrthogonalMesh([X, Y])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 39 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "M.plotGrid()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 40 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test 3D Plots\n", + "\n", + "Plot x, y, and z coordinates of cell-centred points" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "X, Y, Z = exampleLomGird([3,3,3],'rotate')\n", + "M = LogicallyOrthogonalMesh([X, Y, Z])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 41 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "M.plotGrid()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYFGXW9n8VOk1PgGHIYYiTSYLCKqtiRDGnXXH1fd91\nV/dz17gqRhBQQVExocKKEXUlqMiiIuoCrgRBkMkg2YAKAhM7Vfj+eKY6zHTP9ARGWfu+rrmAobu6\nqqvqrvPc55z7SKZpmiSQQAIJJNAukH/uHUgggQQS+DUhQboJJJBAAu2IBOkmkEACCbQjEqSbQAIJ\nJNCOSJBuAgkkkEA7IkG6CSSQQALtiATpJpBAAgm0IxKkm0ACCSTQjkiQbgIJJJBAOyJBugkkkEAC\n7YgE6SaQQAIJtCMSpJtAAgkk0I5IkG4CCSSQQDsiQboJJJBAAu2IBOkmkEACCbQjEqSbQAIJJNCO\nSJBuAgkkkEA7IkG6CSSQQALtiATpJpBAAgm0IxKkm0CrEQgE0DSNxLi9BBJoGurPvQMJHJ0wTRPT\nNAkEAni9XgzDQJIkABRFwWazoSgKsiwjy3Lw/xJI4NeOBOkm0CyEk21tbS2SJKGq4jKSJAmfz4em\naei6HvE+WZZRFCX4kyDjBH6tSJBuAnEhnGwNwwDAMAwMw8Dr9WKaZpBAJUkKkqoshxQsTdMIBAIR\n202QcQK/NkhmQohLoBGYpolhGGiaFpQQDMPA5/Ph9XpRFAXTdNGjRzKGITFlShVZWRo5OTpdu2qA\nGSThWKRqkXg4EmScwH8rEpFuAlERjWxN08Tj8eD3+7Hb7fj9Dl580cWzzzowDEGGX3+t8tFHTrZu\nVfD5JHJydHJydLKzNbKyNLKzA3Tq5APMiGi4PqlaUbXf748gWouMVVWN+r4EEvilIxHpJhAB0zTR\ndT1YjSBJErqu4/P58Pv9OBwOfD4nzz1nY/ZsmRNP1LjjDp0NG2DNGpUnnqjENE0cDgc//SRRViZT\nViZTXi7+LC2VMU2J3NwQGWdnawwa5Cc9Xcc0myZj6yecaK1o2m63B4lZkqQEGSfwi0Mi0k0AiE62\npmlSW1tLIBDA4XCg62k88oiNOXMUzjrL4L33qhk4UMfhcLBpk4SmRW6zUyeTMWN0xozRwz4H9u8P\nkXFZmY2333ZQXp6Kqprk5RlkZ1tkHGDQoABpadHJOJxUNU3D6/WiaVoE0daXKBJknMDPjQTp/srR\nFNk6nU5qapJ47DEb8+YpnHeewaef+unfHzweA2udpKomUaTZBpAk6NLFpEsXnZNOiiTj77+XKC0V\nUXFhoY0333RSXi7jdpvk5Bh1UoVGVpYg4+TkEBlb+y0+I0SqhmGg63qDyDicjC1CTpBxAu2BBOn+\nShGNbA3DwOPxoGkaTqeTqio3Dz2k8vLLCpdcYrB2rZ/MzOjbU1UaRLrNgSRB9+4m3bvrnHpqJBl/\n840UlCg+/9zOK6842bpVpkMHk9xcg5wcIU8MGhQgJ0fD5Wo6Mk6QcQI/FxKk+yuDaZpomoZWx5DR\nyPbw4WSmTVN54w2FCRN0Nmzw06tXw21Z7wVQlNaRbixIEvTubdK7t84ZZ+iAKDkzDNi715IpFD77\nzMHzz7vYvl2lSxczIoGXnR1gwIAADocRNxnXh0XC4Qm8BBkn0BIkSPdXAotsdV2noqKC5ORkTNPE\n6/Wi6zpOp5ODB5OZNMnGokUy//M/Ops3++nWLb7ty7KJprUfAcky9O1r0revzlln6cEaYLvdxe7d\nEmVlCmVlMp984mD2bBc7dsj06GGSm6vXacYBsrIC9O/vx2Yz6rYZWdYWLltYZOz3+yP2w3q9qqqJ\nyDiBuJAg3f9y1I9sLdTU1GCaJk6nkx9/TOHhh1WWLpX50590Cgv9dO7cvM9RVbACxJ+zIEZRYMAA\nkwEDNM45J/R7TYOdO0X1RFmZzAcfOJk1K4ndu2V69zbqNGNRSaFpJiNH+ujRQ2vQ6BGNjL1eLwA2\nmw0IVVIkIuMEoiFBuv+liEa2uq7j8XgwDAOn08nXXyfx8MMqH3wg85e/6BQX+0lPj/8zwpNXFun+\nUklFVSEryyAry+CCC0K/9/th+3ZBxJs3K/zpT67g/1kSRajOOEBmpg9ZNiLI2PoOmoqMrfeER8UJ\nMv71IUG6/2WIRraapuHxeABwOp2Ulso8/XQyq1apXHedTmmpn7S0ln+m8F8wjoime6Rht8PAgQaf\nfaawcKHKuecG2LNH5uqrA4wYoQdL2xYscFFe7mbfPomBA406ItbJyQkwcKCf3r01dL0mrsjY5/NF\n7EOCjH9dSJDufwmsyCoW2bpcLkpK7Dz0kMpnn0lcf32AZ5/1k5LSNp9/pBJpRxKaBv/8p8qMGQ6y\nsw3eeMPDMccY/OlPTpKSTIYMMRgyJLIOrqYGtm61mj0UXn3VRmmpm4MHZQYNMuo041D3XY8ePsBo\nMRlHa4UO97NI4OhDgnSPclituuEZd8tuEQTZfvmlnRkzVDZvlrn5Zp3HHz9EeroDu93eqs8OlxcE\n6R4dUZlhwFtvqTz4oIOuXQ3mzvVy/PF6xP/HCjDdbjjmGINjjjEA8ZTx+XzU1Ejs3Oms67pT+c9/\n7JSVyVRWSmRlicg4N1eQcVZWgG7dfJhmbDK2UP9BCiEyDteLraaPBH75SJDuUYpYZOvxeJBlmaSk\nJDZssDF9uo2yMom//13jtdc0XC6oqmr7/QlPpP1SYZrw3nsq999vx+mERx7xMnas3oBgDUM8RJqD\n5GQYOdJg5MgQGQMcPkwwKi4rU/n4YzulpTJer+VLYQRbobOzA2RkNI+MLY8Km83WIHkXXk2RwC8H\nCdI9yhCNbP1+P16vt45s3axda2f6dJVduyRuv11j0SIDhyO0jfAIta0Qnkj7pdl5mCZ88onC/fc7\n8Png3nt9nHVWQ7K1YBiiJK0t0KEDjB5tMHp0pExx8CDBsrayMpX33xeRsWFIYQk8ERkPGuSnUyd/\nsJEjnFCBYMmf9ff63YXRytoSZPzzIUG6RwGiedlCiGwVRSEpyc3s2U7uvFOc0vPP1/nXvzQGDDDb\njEAag6qav0hNd80ahalT7fz4o8zdd/u48EKtye+jLUk3FtLT4YQTdE44IXJ5sH+/FCxrKy+38c47\nDsrKhC9Fbm7IlyInJ+RLAQRXOLGc1+qTMSTsM38uJEj3F4xwsq2pqUFVVWw2W9DLVlVV3O5kPvrI\nzvTpCmVl4ma5/nqNrVtlxo2zUVkJeXkmeXkmBQUmBQUGfftKdO3a+mg0UtNtaHjzc+KLL2QeeMDB\nV1/J3HGHj9/9TkON82rX9SNPurHQubPJSSdF96WwWqGLimwsWCB8KZKSTLKyAuTnEyxry8qK9KVo\njIwTxvLtjwTp/gJR38sWhKzg9/upra2tI9sU3n/fzowZCoEA3HGHzrhxBr162Zk5UwfETXvoEJSU\nSJSUSBQXy7z1lkpRUQecTigogIICg/x8k/x8k9xcE7e7Zfv8S9F0S0pkHnjAzqZNCrfe6ueqqwI0\nN19oGBKKEv9DySK3I4VwX4pTTokk4717DQoLDXbtcrFxo5358wUZd+hgBhs+vv1WoqZGYs6cipi+\nFAkybj8kSPcXhFjG4X6/n0AggKIouN2pvPuujRkzFGw2uPNOnXPOMZBlQXo+n7gZrfugY0cYM8Zk\nzBgTEAReXV3D99+r7NjhpLhYZtUqmWeekdi2TaJ7d0HEBQWh6HjgQLPJKFEY3vx8N9+OHTIPPpjK\nf/5j5+ab/cyb58Xlavp90dAe8kJbQJKgZ0+DLl0CuFwq9X0ptmxRuOkmBz/9JA6moCCDjAwz6GVs\nlbUNGBDA6YzuS9EUGVurMYfDkSDjOJEg3V8AYtkrer1efD5fXWbazpIlTh591ElaGkybJiLb8Ota\nUcRPIECj0Z0sS/TsaTBwoMmZZ4YiJ02D7dulYGS8YIHMpEky+/ZBVpYZjIgLCgzy8ky6dZPCDMX1\nnyXS3btX4qGH7Lz3nso119Ty9NOBVtceHy2k2xjWr1eYNs3B6NE63boJaWXGDB+7d0uUlyuUlsqs\nXOng2WeFL0X37maw4cOqpOjfP4Dd3jgZW404iqIkIuM4kSDdnxFNka3dbsflSmXhQhvTp8t06WLy\n2GMap5xixsy8Oxwi2m1JCa6qQk6OSU6OycUXh35fUwNlZSEy/vhjlZISCZ/PTna2jexsjbQ0lT17\nZH74wU9amij0P5LjdL7/XuKRR+wsXGjjT3/ys2FDJW63H1dLw9swhK8UjjasWqVw770OFAXmzPFy\nwgk6s2bZOXhQivClGD8+9B7Ll8Lqvlu+3MHjj7vYvVumVy8zYspHVlaAfv0CqKoRkZTTNC0hU8SJ\nBOn+DIhGtgC1tbXB+WMuVxqvvaYyc6ZK374mTzxRy/HHB3C7kxrdttMJXi+NRnvNLetyu2HkSJOR\nI8V7DCOAz+fj2299lJfb2LXLzYoVIjQ89tgupKQY5OXpdQYyfrKzfWRnGyQlxbZUjBc//SQxa5ad\nV1+1ccUVAb74ooaMDBNNM6l3b7cYP2cirbmwrp/SUpl773WwfbvM5MmiSsP6ar1ecLlin+9wX4rz\nzw/93u8Xso1lLP/uuw7Kylx8/bVM377CJCgrS/gY5+UZZGb6keWQY1t440Z4911T8+/+28k4Qbrt\niFiRrTXs0eFw4HCk8corKo8+qpKTY/LCCwGOP97E49GIhyetSPdI7b/X68Xr9WKz2ejd20Xnzl7G\njze58EIvo0crbN1ayY4dAXbtclNSorB6tZvnnpPZuVO4eeXminKn7Gzx06+fic0WuwnAQkUFPP20\nnblz7Vx8cYC1a2vo0ePI1AM3tzni56xL3rdPYvr0ZD780MGtt/p5442GiUOvF1JTm79tux1ycw1y\ncyNrjL1e+OorERUXF8ssXuxi+nQb330nMWCAUc8+U6N3bx+S1HQrdGNkXL/G+Ggm4wTptgPimT9m\ns6Uxb56NWbMUhg0zeP31AMceG7qZww3DG4PDISKUxhDvtsL3P5xsU1NTURQlOHkBRJ2urkvIMvTp\nI9pezzorvIFD3KglJWIu2sKFwnjnwAGpzjhG6Ig5OX5ycnS6dQNFkfF4ZJ5/3sXs2Q7GjdNZtaqG\nvn2PLMm1RNNtbwKoqoInnrDzj3+4+cMfvHzxRQ0dOkR/rdcr0bVr/Oe7KTidMHiwweDBBhdc4A8m\n0mprw30pZObPT6K8XJzjQYMMwgeRZmUF6NkzPl8KK5lcf8pHfTI+WubfJUj3CCLcODzW/DHDSOLZ\nZ208+aTCb35j8NZbAYYNa0gq8V5IDoeJ1ysBrSemWGQbDbLcuOGN3Q75+Qb5+ZE3f2WlaJMtKVEo\nLXXw8ccuSkpk/H6J6urQMc+adZhzzvGRmirh88lH9Cb7JSfSAgF46SUbDz9s55RTdP797wp69hTD\nQWPB64VG/rvNkJQEw4cbDB8eeY6rqgQZW913L74ouu8OHxa+FEIzDvlSdO/eeCt0fTL2er3BKdBb\ntmxh+/btXH311Uf+gFuIBOkeAVjLpNraWhwOR9SROJrm5oknVGbPVjj5ZINlywIUFDROlPEsY9tC\nXqhPtikpKahN1Iy1tE43NRWOO87guOPEjer3w6uv2rjtthBLXHFFgJdfTuHuu9PIyLDMYyyJws+g\nQQZ2e+gh11pbxF+ipmua8K9/qUye7KB3b4NFizwMHWrg9xtNyk5er4TTeWRWB/Wjz2hISYntSyHI\nWKG0VOWTTwQZezzW6seo674TZNy5c3QytqorFEXh22+/5aeffjoix9pWSJBuGyLcy9bSam02WwTZ\n+v3JPPKIynPPKZx5psGKFQFycpq+IeJNflmJtJZsyzRNfD4fHo8HVVWbJNv6JuZWpNsSjVPXYcEC\nlenTHQwYYPDhh7VceqmL1atr6d3bDL5m926pLipW+fBDO7NmyXz9tUy/fsLbVngWBMjJCdC7t4mq\nNkzmNIXmNkccaXz+ucw99zioqpJ4+GEvp54a2zciGnw+cV380tChA4waZTBqVGxfivJyleXLhUmQ\nrkt1D1yhGVdXm5x6qo/sbNEGfdlllwXNnnr06EF+fj75+fkRbnp//OMfWbZsGV26dKGoqCjqft15\n5528+eabdOzYkddee42cnJw2Pe4E6bYBog17tAxpqqqqcLlceL3JTJ+u8vzzCueea7B6tZ8BA9p+\nX+LRdOujuWQbDRbpNje6NAxYskTlgQfsdOpk8uyzosypqEgmLY0g4ULkKJ7zzgttw+OBsjKToiL4\n6isn8+c7KSmRqaqSyM7Wgsm7rKwAubkanTs3XLaG7/cvRV7YsUNiyhQHn3+ucM89Pi6/XGuQ4Isn\n0vR4pCNGukeiG68xX4qyMpktW2TuuENU8cycmcSuXd+TlJTE448/ziuvvML333/P0qVLmTFjBq++\n+irDhw8PbuP//u//uP7667nqqquifvbnn3/Op59+ysaNG1m+fDm33nor//rXv9r0+BKk2wpEMw4P\nH4kD4PGk8vDDdl56SeHiixsfY94Y4o1045EXwjWx1pKtBVkWEWK8+TnThOXLhfOXVbgfHsGtWqVw\n8snxmTm4XDBkiJAcXK4QAVkRU2mpTGmpk6VLkygrU3A6zToitiop/GRlaSQnCwI2DBdgxkVoFtpS\nVz5wQDR8LFyo8re/BXjuOS9JjVcKNgoR6f5yIveWonNnk02bYN48O+PGaezcKTFlirjYZVkmKyuL\npKQk/vjHP3LmmWdG3cZvf/tbdu/eHfMz1q9fzyWXXEJ6ejqXX34599xzT5sfR4J0W4BYUxq8Xi+G\nYeByudi/386MGTqLF7v4/e8NPv/cT+/eR37f4kmkWdUUFRUVKIrSKrK1IEmgKGZcuu7KlaJbqqYG\n7rnHz/jxWoPl8qpVKhMmtK7wNlrEZJrw7beirrWkRGHtWhvz5sls3y7Tvbsoadu0SeWtt8Bm89K/\nv4nd3nh9cVuVjHk88Mwzdp56ysall2ps3FhLRkbTOn9ThO/1Hjl5oTkPptZg+3aJiROd7Nol8/DD\nXs44Q2fcOBcpKUbE51dVVdEhVhlHHPj888+58sorg//u3LkzO3bsYEAbLksTpNsMRPOyrT9/7Pvv\n7UyaZGPhQpnf/a6WjRs99OzZTEfsKGiLSDc8sgVaTbb196mpZNr69TLTpjn49luZu+7ycfHF0W0W\nAwFYu1bh2WebEKdbtM/Qq5dJr146Z5wRbgAvurJKSmSWLYN3303ivfeS+P57iYED9bDI2F9X7gSq\nqgQTOa0hXl0XY4Puv9/ByJE6H39cy4AB8W+vadL9eRNprUFlJcyc6eDVV1VuuSWyDrmyUiIlJfLz\nKysrSWvFwL9o57Ktjy9BunGgKbJ1uVx8/bWd/PxQxv3GGzVGjQqg6/Y2aSttTSLNIlvLe9flcuH3\n+1sd3daHpevW1x2//FKQ7datMhMnCm2ysY/etEkmM9NoMsprS9hskJ1tkJ1t8MgjOnPmeBk82Khr\ngZYpLVUoLbUzd66zrqQN8vKsulOF3FxRY9yxY+N6cX189JHCpEkO3G54+WVPsIqjLXEkI90jBcMQ\nD6L77nNw6qk669fXNrAjrayUSE2N/F1FRQUdO3Zs8eeOGjWK0tLSoDyxf/9++vfv3+LtRUOCdGMg\nlnF4/flju3bZmTlT5f33Zfr3N9m5U+If/whQXCwxZ04SN9ygYpoSBQVmXUG5yeDBwkaxDWwCGsBu\nDyXSrDpGy+Da7XZjs9nQNK3BEMS2gBXpyrK4EcrKZB580M7nnyv8/e9+Xn89EFe96KpVaoSfbHsj\nPJEmWqCtcqcQLLPx0lKZLVvsLF7sprxcITXVJC9PCzZ7ZGf7yMrSSUqK7KYqLlaYNMnJnj0yU6b4\nOPfchhJLPIhPXji6It0vvpC57TYnpgmvv+5p8N1bEJGu0SDSbY28MGrUKG655Rauuuoqli9fTm5u\nbou3FQsJ0q2Hxsg2fP7Ytm02HnpI5ZNPZK67TqekxE9hocTUqSpXXineV1lZidPp4uBBG8XFEoWF\nwkbx6aclvvpKIjPTDJLw4MHCvat37+hRcXMjXUtGCCfbtoZ1sVv7JewlZb75RuGJJ5z8+98KN97o\nZ86c5iWCVq1SuOGGZpZgtCHiqV4INxsP1WMr7NkjMuwlJQorV9qYPTuZ3bvlui49jY8+slFbKzb+\nwAOV/O//+nA4ZHT9yI1dP1oi3R9/lJgyxc6HH6pMnuxjwoTYUz5MUzRdJCdHkq41Ly4WLr/8clat\nWsWBAwfo3bs3U6ZMCRryXHvttRx33HGMGTOGkSNHkp6ezvz589v0GCFBukFEMw6HyPljbrebkhJb\n3RhzmRtu0Jk9OzTG3O0WjlwWxMVg0q0bdOtmctppkW2xW7dKFBVJFBdLPPusQlGRitdLHQGHIuO8\nPJOkpKZJ1zRNVFXj8GE/Pp/viJFtLBw6JHHttU42bnRz3XUBZs3yNttmsbYWNm1SIqbztjea2xwR\nml0G/fqZ9Ounc/bZof33+eCLLxT+9CdnkHA7dDB58MEUFi1KCitp85Obq9G1q4SixC9RNIVfeiLN\n74e5c2088oidK67Q2LixhqZk2Zoakb+w2UJ5BOv+aGx/3njjjSb3Z8aMGcyYMSPu/W8ufvWka5Ft\nIBCgqqqKlDqWCJ8/5na72bJFjMTZtEnmppt0nn/e32DKgtsN1dWhfzcWndrtBCNcAXHl/PijmPRQ\nWCizdq3M3LkSW7dK9Oxpkp3dgREjlLr3GWRmiqg4XEZQlGTATmpqbG/Hth4euWmTxJgxwlFlxQob\nAwcG2LdP4p//tNV57+pN3kQW1q9XKCgwWu2J2xq0ZXOE3w8vvGBj5kw748bplJWZXHedn0sv1aio\niGyB/vBD0QIty5Cba3XdCae2nByd1NSGevHPLS+0Fh9/rDBxooM+fUw+/NBDVlZ8mraVRIt2/Anv\nhV8ookW2VtmXNX8sOTm5boy5SmmpxC23aMyfr8XUYt1uk9ra0AlvCbl16QJdupiMHRuZWd+2Ddav\n97Jzp43nn5cpLlapqqLOQtFPXp7EMcekIEn2OovDIx8plpdLDBvWPeJ3q1dXs3+/jx073BQVybzx\nho2yMpn0dJP8fIOCAp28PIOCAoOBA40GCbVVqxROOunnHbbWFolP04R33lGZMkV02L37rof8fIMB\nA9z85jfi3KSlNezIsuahCWMgmU2bXMyf72brVpkuXeq3QPsYMMBAkvwNrBBD0s+R815ozYN7506J\nu+5yUF6uMH26l3HjmtdlZyXRwkm3vcrXWotfHenG8rK1EkuappGSksKaNYJsd+6UuO02jYULjSYv\n3GjyQltElDYb5OdD9+5eOnYUjO/3+/n2Wy9bt9rZts1FSYmdN9+U+eILsXwtLZUYMiQkU/TrF1oy\nt3a/9uyB7OzQl7F6tZdhwwIMGeImNdVk4EA/p58eirQNI9S+W1ws8847Kg88oPDdd8LwRJCwTn6+\nwcKFNp57ru1LxZqD1nakrV2rcPfdDvx+mDXLG3yAbt8uOsN69Yr93YfPQxNylNAbdR127Qq1QH/w\ngZ1HH5X55huZ/v31unI2LaIFWlFkNE1EziJyPzKE1Byiq66Gxx6z88ILNq6/PsBLL3lbJH1UVja0\nq/R6vY0a//xS8Ksh3VhkG27sAhLr1iXz0EN2vvtOYuJEjQkTDOKVRevLC0cCPp8v+IDo1ctFv342\nzjoLRGSr8+STCsuXy1x2mUFxscSrr8oUFakcPEjdqB2TggKdfv1s/OY3xL3sB/jhB8jPtwfdv5Yv\n9zNkyEFSU1PRdVEqpusNow5Zhv79Tfr31zj33ND2wsuxiotl3nzTxtdfy1x+uYtjjtHrXMnEnzk5\nxhGp9oiGlhrefPWVxKRJDgoLFe6918dll0UmgtauVYJRbnOhKDBwoMnAgVqE0fiBAzXs3eumvFyl\npMTOyy8Ly8zqaomcHI1evXQ0TWLFCtECnZHRvJK2xtCcyNI0YeFClUmTHIwZo7NmTW2r/JArKiTS\n0syINuSKiopWVS60F/7rSTcW2Xo8nuD8sZSUVD76yMa0aSZVVSp33KFz2WUNl75NwSra9vvF39sq\n0rWqKUCQrsvlwmazRb3gk5JMMjNNLrnE4JJLQr8/fBiKi0XirqhI5tVXU9i61UZGBsGEnYiKTQYM\nMCNqbQ8fhuOOs7N3r/i8RYsCnHOOWBIfOhR6neWpGy/ql2MtW6Yyd66IdIuLRaPCypUqzzwjOsZ6\n9zbqpheHZIrMzNiji1qK5pqY798v88QTTt5+28ZNN/l58cXo0dvatSqjR7et7ONywbBhBsccoxHu\n4HXwIJSWKqxaJQ5k5sw0ysoUkpJMcnK0iORdeAv0kbDM3LJF5vbbHdTWSrz4orfFD55wVFU1lBda\n2xjRXvivJd2myNZut5OSksr779uYPl3B54Mbbqji979XcTha9rVIUkhisEi3OWbh0Y7BKlUT25dw\nu92NNjXEMrzp0CE0Fdg0TQ4dOkSHDuns3BmqoHjzTZm775b58UfIyzPp189k4cIQ+7zwQoAJExoe\nj9/vr5uJ5sLjsSbSGs2OolauVDjpJD24vD799NDy2jJBLy4WtbHz5tmDpjZ5eQZ5eSLhNHy40qzE\nXTTEKy/U1IhpFs884+byywNs2lRDenrs169dq3Ddde1TCpeeDmPG6PTpY/D66zZWrPBgmvDNN6EW\n6M8+s/GPf4gHWs+eRphE4a8bTNl4C3RTke6BAxLTptlZtkzlnnv8XHlloFkPs8YQTdM9fPhwgnR/\nDsQyDrdG4giyTWPJEpUZMxRkWYwxP+88g+pqP7LcuqvCIt2OHVse6dYnWyuyraysbPK9DkfT1o4W\nJMlk4ECxbL3wwtDvDxyAgQPtbNwYYp6UFJNJk1QWLDCCNcU5OX66dzeRZT82m62uI00cr7Xv9Ues\nNEbEq1crPPNM9J2PZYJuRXSFhVBUpLJokfBk7dTJjNCK8/OjJ+6ioSnS1XWYP9/Ggw/aOf54nWXL\nDpCf72yUgH78UeLAAanB6JvWoini8/lCSTRJEq5tvXvrEVOgAwHYvt2a6qHy9tt2SksVfvhBYtAg\n0QItfG0eleR6AAAgAElEQVQFGffoIaZ6hBsnRQ6jhOeft/HQQ3YuvVRjw4YaWtEkFhWVlQ3nACYi\n3XZGNHvF+vPHkpPTWLxY5aGHFNxumDJF56yzQmPM20IOcLtNampaNrkhFtk2J1qM12UsGnQdrrxS\n5a23xINn0iSNTz6RmTRJY8wYk717obBQ4ssvTRYuNCktdbJvn5usLLHsLypS+fTTJLp08dOnjytY\nIWIZBFkNJ5YJdTgh//ijzL59MsOGNY+UrIhu9GgxddblcmEYoaRTSYnM22+rTJumsG+fSNyFa8UF\nBQZdukSeq1ika5qwYoWYttuxo8lrr4luqerqppfL69YpHHec3maRXryIp1zMZos+C626OlTSVlJi\nZ9Uq0QKtadRNewhEjFjq2FHis88c3H23m86dTf71r1ry849MqVq0SLeioiJBuu2BaGRrGEbE/LGk\npDQWLBBk26ULPPywxmmnNdQC24Z0QxUM8W4vXrKNZ3tOp+UyFj9ME/72N5V58wQj3HijxowZooSn\nsFBEaLJs0rNngPR0DyedZNbtI+zbd5A9e1IoKpJ47TUbDzxg57HHOpOURIT+WlBgMGiQgc0WImKr\nPtowDFascDB6tI9AwIthtG4SrCxH9921EndWFcUHH6gUFyuoqhmMhvPzdfbvl6mqEuV7FjZvFtN2\nv/9eYupUH2ed1bwSp9Yk0WIhnmurNY0RycnRW6B//FFIFEVFUFhoZ8GCZDZtCj1NXnyxgnHjvJim\nQU1NwwdsW+jFFRUS/foZDTTdRCLtCKIpsnU6nahqEq+/rvLwwyqZmSazZ2uceGLsxEt7k651DB6P\nB9M0cTqd2O32Ri/IpvYv3nE94vsyue8+MeYd4MordebMicy4Z2TADz8YVFZWBm0rw/fR7YZjjzUY\nMcLgjTdUJk/2M3hwBYcOJVNaqlBUpPD++yozZ8rs3SszcKCILq1lf0GBQdeuJuvXOxg7VozaiRYV\n15/+0JKbNpqPgmmKibrvvqsydaqD6mqRDR0+PJmsLJ2UFNFNBnDLLT7uvtsfdzVLONatU7j//iMz\nprmx7+JINEZ06WLSpYvOCScEqKrSee65VHbtkjl0SOLee31cfLEMJEWsdMIfsFbFQTTZKd7zajVH\nhKOiooLMlphVtzOOOtK1iKq6uhpFUbDb7UHjcGskjqK4eeUVhUcfVcnKMpk3L8AJJ7TdSJzGkJRE\nUF5obCyORbbRiKyx/WsK8U6OeOaZJKZNEzVY48frvPlmQ+cvUbOs8913Bna7PTjvLRYUReh5sizR\nq5dBnz4wblwouhMTHoR2WFys8OGHKkVFItLcv1/m9NNl0tIkCgqE25fLZQZv3HAirn/TKorSovP2\n9dcSb72lsnixjX37JP7whwCXXBLgoouS+Pe/a5g40clHH4kv5Te/0fjnP2384x/2BlpxZqbUoDsx\nHFaEfcwx7d/a7PFwRErtTBOWLLExaVIao0YZ/Oc/Ndx0k5OhQ0PHKEkSiqI0GGbaFBnHM2q9qoqg\nw1gi0j2CsNpdrZNl/dsiW1lOZt48lcceE2PM588PcNxxzfMlbS3pJiebEQ0S9WHJCM0h2+bsX1OJ\ntBdflPl//88GODj+eJ333tMaLD+th1ggEKBLlzS+/tqJ09k0YTTlp+tywTHHGBxzTGhAoWmKpfe4\ncUkcf7zOxx+rPPGEzK5dMv36WVGxWPYXFBh0724CkVpxeFehZfITq/Tphx8k3n5bEO1XX0mcd57G\ntGk+xowReqvPJ6Ko4493M2FCgG3bqunWLfSdHzxIUCveskXmtddUysq6kJFBA614wACRuNu4UbQ2\nt1edcTh8PgmHo20j3ZISUQJ28CDMnl3F2LGCVGtqiMvYKBYZhxNxrNWO9RPLYSyh6bYxJElCVdVg\nVGuaQlvcvTuF886zU1EBp59usHhxgOHDm3+htbbEC8QStrY2tD2LJFtDts1BLHlh0SKZP/xBrItz\ncw2WLj1A9+7JERe+rut4vV78fj9OpxO320337gqbN8fez1jDKeOFJMG2bTKXXRbg738Pheg+n5XE\nEVHx7Nl2iopkDKOhVpyTY+BwBIIOU1Z7t9/vxzRNKioU3n/fxTvvONiyReWsszRuu83HySfrwdpq\nwxDF+1OnilT/Bx/UMmJEw2shPR1++1ud3/5WPF1M06Sqqob9+1NiJu62bFFQFJNPPlGiJu5aivae\nGnHwIDz4oIO33lK56y4/EybU1HW6WaQr4Xa3/NgsQg2HVR1Rn4wPHXLjcHgxTZODBw/y6aefUl1d\nTWr9NrUwrF69mmuvvRZN07jhhhu4/vrrI/7f4/Hwl7/8hcLCQlJTU7nllls4P7wTpY1wVJEuCPKq\nqakJLkGcTidz56rs2ycuvsJCmYcegiFDTIYONRkyxKBXr/h66dtKXrC60iwSj6WHNhctSaR9+KHE\neecJZunWzeSLL/x06gQVFSF92BoPb1V5pKWlBS/+jAyT/fvj21/Rkdb841q9WmHs2Ei2djhg6FCD\noUMjo+Iff5SCjROrV6s8+6yoM+3TxyA3N8DQoRIFBTqZmSZbtsgsXqyydq3K2LF+/u//vJx8sgeH\nQ0RIui7j88msXWtn8uQkQOKZZ7xcfLGLvLz4H75NJe5OOcVNz54mjzxip6QkMnFnyRQ5OcYRcQJr\nC9LVdXjxRRvTp9u54ALhApaeDj5fJOnX1EgkJ7dtVG2tVOqTcXW1Qnq6iiRpHDp0iFdeeYVNmzbx\n7rvvkpeXx6hRo3jqqaci3nPjjTcyZ84cMjMzOfPMM7n88svJyMgI/v/LL7+M2+1m8+bN7Nmzh1NO\nOYXzzjuvzYOjo450bTYbaWlp+Hy+4CSHa6/V+c9/JDZuDLBjh8SWLRKFhRJz5igUFqr4/RYJG0Ey\nzs42GyRE2k5ekCKqERwOR5tEtvHsn2VivmaNxCmn2Ot+Z1JW5qdnz8jXmqZJbW1tsFkknGwtZGTA\nTz/Ft3+KYqJpza+cWLVKYfLkppNMkgRdu5p07apz6qmRjRPl5Qbr10s89VQyu3dH9t9PmBBg9GiT\nzEwFpzOJpCQRPZWWwn33udi6VeHOO6s45xwPqioGU2qav863oHWJu2HDDFJSTFatqqVTJzOYuLOa\nPP79b5Wnn5bZsUM8OIQrW4iM+/RpXcddaxNpn32mcPvtDlJTTd55x8PgwbEfRvHKC22BykrRwi7L\nMgMGDGDx4sWcffbZvPPOO2zdupV9+/ZFvL6iogKAE088EYAzzjiD9evXM378+OBr0tLSqKqqIhAI\ncPDgQZKSko7IavSoI93wm8AioLQ0k8pKCUWBrCyTrCyTSy8Fy2nr+++hqEhiyxaZ5ctlHn5YYu9e\niZwc0fZqRcS5uRJ2e+tI1+k0OHRIo6amBqfTiaZpR0xKiIaVK2W+/TZEuJs2+cnLizwma8lWXV2N\n3W4nNTW1gb5mISPD5MCB+OWF5ka6paUyycmQmdmy793vh3//W2HhQjvLl9s45hiDW2/1c845AXRd\nuHWVlMisW6cwb56NbdtkFIWgf8SYMRpvveVh4EAFcNctY0XjSCAQCD7Ym9PkEY7iYpkePQw6dbKS\nPtCjh0mPHtaMtoYddyUloY676mrRUBGeuLM67uKRF8Qk4OZ/r998I3wkrKqLCy9sONmi/vj12trW\nyQvNQVVVQ03XNE3S09M5/vjjG7x+w4YN5OTkBP+dl5fHunXrIkj38ssvZ+nSpWRkZKBpGmvXrj0i\n+37Uka6FSNIV/gCxYJmIi7ZSgZoay7dWkPGCBSrFxTY6dXIxfHikPBFrmkM4rGoEVXVw+LCIGiVJ\notYSeNsAjUW6X30lMXhwyNkrM9PE6TT5zW9sdOsmHkaDBhn06xegTx8PAwZIDBzowuls3JUpI0N0\nqDVldyj0dqHpNmfFsHp1860cdR0+/VRh8WKVpUtVsrIMLrzQz733VpGZGX48JiefrHPyyYLcLIer\nRx4Rr0lPF8mtc89NorpaIi9PaMSaJlFUlERBgU5ycnRNMTzBA+L8R4uK162Lrz63sY67yMSdjfJy\nq+NOJztbZdgwJSJxFw6Pp3mRrtcLTz5pZ/ZsO9dc4+epp7wxKzPCz7FpClmtsSqOtoKVKHY6GxqY\ntwZPP/00qqqyb98+ioqKGD9+PHv27Gmw+mstjjrStS7o8Bs7OVmUxmgacZvUuN1w3HFmXXWDuND9\nfp2iolp27UqjsFDiH/+QKSwU0xzC5YkhQ0xyckzs9hDZ6rqO0+kkI8PJt9/KSFJkZ9yRinS//hoG\nDQoRzYcf+hk/3sbWrSIppWmwezeUlGiUlYmusXffTWPrVqipkRk40AyuDgYNCv1ptVg6nYIQRIlO\n4/tilYw1BytXqlx6adOj1g0DNmyQWbTIxttvq/TsaXLxxQE+/bSW3r1FCV4gEH3pq2nw8ss2Zsyw\nc9JJOsXF1fz1r05uucUftF08eBCKi0XTBMAdd4hBmt26mcHKCUuD7dvXRJJCpWzRytmsyHjNGkdE\n2VxzUT9xZ30Xu3YJz4zCQqJ23FmGQF99JYyCmoJpCsOhu+5yMGSIzqpVNfTtG1+ZJYiIWlFoUQ1z\ncxHLwLwxGejYY4/ltttuC/67pKSEcePGRbxm9erVXH311SQlJTFq1Ch69OjBtm3bIiLktsBRR7pA\nMMKwKg1kWRBCRQV06tTy7aqqRP/+GiNGRDp0/fBDSJ5YsULmkUck9uyRGDBAJz9fZ9gwNyNGyAwZ\nElm9YO1rW01pCK+u2L8fhgyxc+iQuMiWLfNz6qlCM9Q0gktkXfeTkeFh7FiZ8eOTUFUZ0KiqqsLr\ndbBnj4Nt28TMtqVLZbZtk9i+XaJDB4IkXF0t8dprMmeeKaZVxGplVRSzWfKCpsGaNQpPPx29xs00\nqUuG2XjrLRW32+SSSzSWL49vRLlpwvvvi2m73bubLFzoCbYZJyebVFWFbtD0dDjxRJ0xY3TuvNPB\nqlW1aJoYy24t+efPt1FS4uDQofAlv87AgTBihD245Nd1va6CQmftWoWJEw9TU2O0WWeWlbjLzAxw\n5pkBXC7xXYS37RYXy9x1V0hX2LhRidCKwxN35eUyEyc62LdP4oknvBEG+o1/vyHSq61tnygXQnpu\n+OdbBkuxYJWSrV69mj59+rBixQomT54c8ZpTTz2VpUuXcvrpp7N7924OHjzY5oQLRynpQkMyS0sT\nJ6M1pBuLILt2FQmc007Tg5FtZaXG7t3JlJU5KCyUWbJERB6iMULcFEOHmvTrp5CdbbZJz70kSVRU\nwLHH2tm5U3zOP/8Z4IILjLDXiMx/dbUf0/RgOZNFm5WWlgYjR5qMHNnQe+Cbb4RksW2bBChMnqwy\na5YYJ9SvXyg67tPHSXa2RFaW2WxN98svZXr1MujcOfLzy8tF1cGiRTYMAy6+OMCCBR7y8oxGJY5w\nbNwo2nYPHZJ48EEfp58e2babnBzd+zjcd0FVISvLICvL4KKLQq85fJi6bjuZoiKF118XNpmdOpnB\nMrb8fIPkZBPDkMjNdQIhMm6syaM1/rZW226HDibvv++gb18xQv6yyzTGjtUoKVEiEndpaSY//CAO\n9uSTNd54w0P//i0LEKqr20/PrahoOHq9srKS5OTkRt/3+OOPc+211xIIBLjhhhvIyMhgzpw5gBhK\n+fvf/57S0lJGjhxJ586deeKJJ47I/v8Xka5JRUXLjGbqI5ocYJGtpmm4XC569EimZ0+JE04wsOQJ\nXYe5c2VuvtlGIADz5sl8+WVHvF65TpYw6nRiMYLdHnuMWQN4PHDaaUl88YU4ZXPnBrjqqobLxkAg\ngN1u4/BhL926xTbMaSwCl2Xo0wf69DE59VST5ct1rrnG4OyzDWprxQQEKzpevdrGiy+qbN8uCtbn\nz4dPP4XsbPEjdGQj6rGuXKly4omCpXftkli82MbixSqHDklcdJHG8897OOaY+InW2s7UqQ7WrlW4\n6y4/V1wR3U4wNTUy0rUQj61jhw5w/PE6xx+vB8vtnE43u3dLFBcL/XXBApVly8SD7tRT3UGJwpoZ\nl54e6swKRcZa1GaAeP1tDx6Ehx5y8OabKjff7Oell7z8/e8OcnIMzjjDStyJY3zhBRu33OIkKcnk\noos0fvhBYvz4kLYdXtKWm2tEtcqMjHTbj3TDzW6s6LaysrLRGl2Ak046ibKysojfXXvttcG/p6Wl\nHTGiDcdRSbr1M5aSJJGWJuSFttquBWtumuXnkJycHPPiVxQYOtRk9GiDKVPEBV5ZWUl1dRJlZTa2\nbJH5+GOZxx6T2LVLRIcWCQ8dKiwT61vgBQJw8cU2PvxQXFzTplVz220No9bw5guHIwm7PQW7vW10\nZCuZBqIkyNK1Aaqrq+uIXeaKKxzYbDBiRIDdu+2sW6fy1VeimqJnT5HIGzRIWCwOGmQwdaqDE0/U\nGDs2iT17JC68UOPRR32MHq03e3LDwYMSDz+czKJFTq67LsDTT8dOAIGQF6wKhnC0dGqEooRqda16\n+htuMOnVy+TEE7UgGS9ebKO0VCY11YzwoBg8WCTCFCUycRfe5FG/esIiaL9fWCk+8ohVR1tLRoY4\nPz5fZCLt889lbrvNic0Gq1bVMHx4/Im7+jPuunULva+9kmgQ3cD8aJkaAUcp6UJINA+RbttEutY2\nrQjGIlu32x3Xsi/anLSMDINTTzXraksFPJ7I6om33lIpKpLo1AmGDBEE/OCDodNz110aEyd68Pt9\nQIh0wxN5VvOFyyXh8zXt4xCv1txY2Zi1HVmGHj0MBgwwueoqLzabHjRb9/th1y7RxPDVVxJffCFz\n001CUFy9WuWkkzQ++MAb9yTYcHg8MGeOjSeecHPeeV42bKhtIFdEQ2PyQlvZL65bpzB3rpdhwwxG\njw4dm2HAnj2RM+Puv18kwrKzjToSDrUTi/reSL8Cv9+Prht8+KGDadNc9OtnsGRJFXl5VvRnmfaL\nZOi+fRKTJztYvVphyhQxSija5RwtcafroRl3JSXiWp02TeG775LIyRF1xQcPSmzapLB/vxTX998a\nWPPRjsapEXCUkm60Coa2iHQt1NTUBP0c4iVbC2JOWmRGNRq5uVzheqq4IQ0DduyQmDFDiSDctDST\n//xH5tAhBzk5JqNGSWRlaRiGJ+ghGx6B2+0mfn/bSC0QGek2hljVC3Y7ZGcLExsQ7bbLlxtUVkpc\nc02A2lo4+2wXXbuanH++xgUXaE0SsGHAggUq06Y5GDZM5733qujbV4wyigcpKSE9s/52mxPpxqpM\nOXgQvv1WpqCg4XHIstDF+/XTOOec0O+rq0UHmxUVv/uuSkmJgsslhouG+zp4PHDvvTZ++knmoYc8\njB0rPEm8Xj0iKj582Mmzz6rceKOD//mfABs2eJs93j48ig/vuPvhhxr27hXtz48+KvSjkSPdqKrZ\nYKxSW3bcxXIYS0S67YD6DRIi0m0ZLJMX64Lt0KFDC7uQTFpSmmuasHKlxH33qdTUwIIFAW69VeXD\nD/243aJ6YvNmk9WrbTz7rMzu3S4GDHAwbJiQNCx5Ij09vukRzY10t25tnImsOt2mEmkvvigmCrz7\nrocFC1QcDrj/fj8zZ/pYv17hnXdUzjvPRVqayQUXaJx/vkZubqSu++9/CyNxhwOef17M3NI0o270\nfHyoX71gobWTgC2sX69w7LF6s+bsJScLm8xjj420nvz6aynoQTFvno1160IbvfhiL9u22bDZQr4O\nVlT8wQcKn35qIynJYMWKA/Trp6MoCj5f6wdTmqaJ220ycqTOsccauN0m772n8sILXr77zmpKUfjk\nE5WnnhKJu8xMI0IrzstrWcdd+FDKRKTbzmhOg0QshDtqCVtIpVUdZC0Zw75mjSDb776De+/VufRS\nA1mGe+818Xgk+vYVRf7HHVcbNKMxTSfl5UpQnnjnHZXCQon0dNi7V+KeexT++EfhXZCZGZ/3RCw0\n1QpsSTHgwucLdbzVx1NP2Zg7186yZaLka8QIg5deElKJooSSUzNm+Ni4Ueadd2xceqkLhwMuuCDA\nwIEGixbZ2LlT5r77fJx/fvQlcjxISWm6eqE1WLtWaZMhlJIkEpoZGTpbtihs3apw880+rrsuwJ49\nQisuL3dEGLLv3y8OYOBAQd5LlngoKHA22uQRzU4xnnugfiJNkqBnT5OePUOJOxAS07ZtcrBD8Pnn\n7RQXy9TUhJpSrJK2vDyj0ZrwykqJ7t0bGpj3rN/n/gvFUUm6seSF776Lfxv1yTYpKQlZloPuZS2F\nRbpWB1djpLtpkyDbrVsl7rpL44orIjuKXC6oqTGorQ1NLpYkiaS6BvcRI0xGjIiUJ3btgvx8Bx6P\nxEsvifHrVVUEqyesJFjfvvG3h8bSdK1Ej67rOBwObDYJTRM3ts/nw+/3193AMjNnunn7bRvvvVdD\n797i/SNH6lx/vaNBt5ssw3HHGRx3nI8HHvCxbJnKhAkh2eC66/xxFfw3hliJNMOQWvWAsrB2rco9\n97TetNySUaZMcTBqVGTTQocOGsOGhZzSKivhllucLFggSHfNmhpOOy0JpzO2cUxLvW3ryypN+S7Y\n7QSrN8IRnrj78stQ4i4jI3LGXUGBQf/+4v6orBQdluGoqKggPz+/Rd9xe+OoJF0L4Q0SaWkmpaVN\nhyjh9oX1HbWg9c0MiiKW9x6PuAijba+kRGLqVIXPP5eZOFFj4UIjODzQgmmaOBwG+/fXYJpSsBxG\na6TlSxTNw9ixBrfdpnHKKeJzDxwINXesWiXz5JMSO3Z0oH9/neHDpYjqiWh1zhkZRDiNCe3QWzcB\nWA5OvLDZlLrvQEFVVRRFQdcN7r7byaefqrz99k907KhTWytu4IwMBZcriV27oH//hp9bWQmPP25n\n3jw7f/+7j5tu8rNnj8ySJSp//rOIqs8/X+P88wMMHx7P2QkhJSW2vCDsClsOjweKimRGjmxdpLtm\njcJddzmQJHjpJQ+jRkV/0BgGvPmmyn33OTjlFJ2lS2u59VYHTmcokRYLrfG2tQhbkqQWO4w1lrgr\nLlYoLRU121OnikRj//4GJSUKGzboXHopCXmhvRAr0m1sWG5TZBu+7bYa2VP/yb99u8T99yt88onM\nzTfrvPiiv8FrTNPE5/PV1X6moyhu3O5Q1008++ZwmHXVC+K1GRkwdqwZ0Wl06JCHsjKZbdtcbNki\nkjaFhaITLbyeeOhQkT3/6Sexb16vF6/XG3Ql83q9wfOhquJzQ9GQzM03uygvV3jvvVo6dgwNq7Ta\nZ4cN8/PZZxpdu/qCUZWuy7zyipOZMx2cdprOZ5/V0KuXOBYRrfu55x4/ZWWCgG+4wcnhwy7Gj/dy\n8cUwenTTAyCTk0Vrc320hbywebNCbq7R4hKqnTtFpcEXXyjcd5+PSy7RYu7T5s0Kd96ZhGkSHJS5\nebMcJNqWmpg35m1rnTsgmAc5fFghNVWYBLVGK4bo5XcAH3+scOGF4obJzo40u0kk0toJ9RNphw9H\nXwLH8optapsthUW6nTuL7e3dC7NmqSxdKvPXv+o89ZS/QQbZIluv14uiKKSkpJCcrNSRp9GsfYsn\nkeZySQwdqnH88aHmDsMQPg1btsgUFkq88orwnqioELWRf/6zwciRCiNHplFQICPLDV3GLD3b74e/\n/tXJwYMS77xTi9UsVD+yGjUKioqSmDBBQtcNli5VmTYtiT59dF577SeGDBHL3ECgvt4IeXkGeXl+\n7rzTT2mpwZIlChMnuvj+ezER4vzzNU44IXoyKyUllrzQ+uqFluq5hw/DI484mD9f5W9/CzB3rjfm\ntIkff5SYNMnNxx87uO8+H5dfHiLm8LHrXm/bjesJlyisVWZSUlLdtavidmtHZL7dwYMwaZKDjz5S\nefllD08+aeevf428wI+WUT3wX0C6IXkhMtJtLtmGb7P1pCs8dfftM5k+3cWCBSrXXGNQVOQnPT3y\ntdbIIWvMTHJycrC+1eUSy8PmwumMbzhlfciyWOb3729w4YWhKcXffuslN7czHTuqbNjg4PnnhT/D\ngAEm+fkSgwdrDB8ucfiwhK5LeDzw5z8no6qwYIGn0eXtyJEGkyc72LjRxj33OKmthcce8zF2rIZp\n2iOWuNGaBKybOSvL4KabfNx5p8mOHRLvvmtj8mQHe/dKnHOOxnnnaZx0kh40ZGnr5ohwrF2rcNVV\n8ZdSaJroEHvoITtnn62xfn0tXbtGvwYDAZg7VzRC/O53Xtatq6BTp8jbONxD1+tt+3E9EPmwEW56\nMmlpQmqy/j+e+XbhHXcNPwNef11l8mQHF12k8fnnNaSmwv3320lNNRORbnsilrxw+LDUYrIN33Zr\nR/aUlclcc43Kzp0Sl18eYM2aQ/TvH9kXbhGaxxPbH8Hlih6xNuVaZhmZN4amHi7WvpmmSc+eLgoK\nDK68EoYMEZqy1wtlZRIbN2oUFcl88IGNzz4T0etTT3UG4IUXPHz3nai+iHUKUlJMNmxQuOIKF9Om\niaJ9EQTHl/jx+XwR58vn85GZqXDjjTo33SSxd6+QTqZPd3D11TJnn61xwQUBxozRqa5uaFnZ2uYI\nw4DPP1d45pkmlhqIz16xQuHuu4UhT1Mm4R9/rDBxooM+fUyWL/fQp09tVB/kcA/dthzX0xjqy2nh\nUbEattSoX0ERq/V52zaVW29NwuORWLjQE9E5F20+ms/nCxL+Lx1HJelaCCeOlBSdigqVioqKFpFt\ntG02FxUV8NRT4ib44guZzp1NfvpJ4vXXHQwfLpOba5CZaWIYWtBn1+WK7Y9gJULC9y0eOJ1Nywux\noOs6tbW1ER1uoqsuskHC6YThw01ycvzBpN+0aQozZjjo1Mngqqt8LFxoY9IkBxUVYoTO4MFG3Y9O\nerrJ7Nl2Fi4Ul+DLL3s54YSml+TREj/WA8xKMoZHVZ07y1xzjcJf/iKzb5/CsmUOZs2y8+c/K+i6\nxKJFKuecowWX4K3VdMvKRMtsU3PQSkpk7r7bwddfSzzwgI8zz4w05AnHzp0Sd93loLxcYfp0L+PG\niSoGHSoAACAASURBVNd6PNEfvlakq+siMq6fpG0LNKxeiC+RFn7+rCAjPCqurjZ49FEHr77q4u9/\nr+J//9eLzSbj94cIOZqBubXtowFHJemGR7qGYdQRmI+Kiq6kpqahKC2/a1pCujU18MwzCk8+qTBu\nnOi8uvNOnQEDTIqKDIqLZebOlSktVfjpJ4mBAxVyc+0UFEjk5QltMjOz4c3ucok63Wj719gFFkqk\nxX+c9Uvo6ntMhGalmQ22YxgG338PM2aIu/v++6sZNswgJ0dErZZXbVGRzJo1CrNn2ygvF6R52mka\nH30kM3u2jZyc0ISF5sCKkiRJwhHGMOE2i7quk5ER4Mora7nqKokDB2wMHtyJhx+2c8stTk47TWjA\nAwcarSLdtWsbNy3/8UeJBx6ws3Spyu23+7n66kBMD1rLdP2FF2zccEOAl1/2xkWgVnRrabvtwUU1\nNS33XrCi4hUrbNx6q5Njj9VZt66Wrl0lDMMRUc7m9er4fKmoqr+uykFYMMaafGKhqaGUIKZLXHfd\ndVRXV9O1a1dWrlzZsgNqAkcl6UIo8aTrose/S5c0VBV8PrlVc5qaQ7peL8ybpzBzpsKYMQYrVgTI\nyTG58koVSYJjjzUZPlynuroaRamtW0652LnTQXm5TGmpxJw5MuXlKgcOQHa2SV6ecCDLzTX54QfR\nedPc/YsnkWYhvPyrsRVCYw0Sb7xh529/C33p77/vYOZMle+/F9H90KEiyj3uOJ3//d8Abjekpqbw\nzju1fPedxGefKfzrXzZWr1ZJThYtr0OG6MGouF+/2PJEYxBdcpGXuBVR9ehh0K+fzksvHcbt1li+\n3MkLLzhZuVKEvAsXKpx5pkZqauOMVf9crFsXfRKG1wvPPGPnySdtTJig8cUXNQ3MjULbFK3Skyc7\nOOEEnTVraunRI/6HkVWx0JZJtIb7GPngr62VSEpq2Qrx228lJk50UFys8Pjj3jCPkoarmtpaIUmp\nqoJhGGzatInp06ezY8cOBg8ezJAhQ7jkkku4KNyLk6aHUpqmyR//+EdmzZrFaaedxoF4+t5biKOS\ndE3TpLKyMngy3HWPWKsrrbXD8ZoitUAAXn1VZvp0lSFDDJYsCTB0aOg9SUniyW9Fj4ZhRESPGRmi\n+F/AciOD8nKJsjLxM2eOEnQWW7ZMDhJxZqadY46R6Ncv9jI4nkSaFQVWVFTEHEoZjmgNEsXFEpde\nmsyuXQqjRun84Q9+1q1TefzxKiRJwusV028LC2U2b5Z55RVR+N6rlzj2FStUTjlF4/XXPdx+u4ON\nG2vZs0eiqEhExf/8p8o99whP3Px8vc4IKNS11BJCCV/epqRAIOAkM1Pnz382ufrqWtat83L22Wm8\n/rrMTTclc8IJfs45x89ZZ2mkp0cvhQr/99q1CnfcEfryTRMWLxY1tEOH6nz8ceMG7Fu2yNx+u2hu\nefFFT4RRTn3EWvFYke6RSqJFQ3U1NGFn2wCaJsyKZs60c+21AZ5/3tuk/lxZKRwFrQfqRRddxPjx\n47nkkkt4/PHHKSwsDPKBhXiGUm7cuJEhQ4Zw2mmnAUQQclvjqCRd4SqWFsz8W7AGVDYnKoi27VjQ\ndXjzTZn771fp29dk/vwAo0Y1/Cy32+DgQT+VlVU4HI7gkr0xpKaGjw8C0Hn8cYWyMomrr9YpK5Mo\nLZX4+OMk7rzTxqFDUjAyzskRf4pedpFIi9biCqFqCUtTbmwoZTgyMkxKSgQpf/01TJ2q8uqr4n2P\nPFLN//t/Mq++KkV4L6Smwm9+o0cstwMBMYBx9Gg3+/dLPPWUnc2bFSoqJE49NYkTT9QYPNjg0ksD\nTJxoBuWJkhJBxGvXKsyda+Orr2T69jXqiFgnLw9ycrRgt1s8sCoYwpM+GRky2dk6b78d4NAhP++/\nr7BkiZM77lAZNSrA+PEexo3z0amTIG9LOzZNk2++kfF4CJLqhg0yd9zhJBCA557zMmZMbNnhwAGJ\nadPsLFumcs89fq68MroPcDzwekOrnSOVW2ptpLthg3Ca69TJ5KOPahk4ML73Wl664aioqKBjx44M\nGzaMYcOGRfmspodSLl++HEmS+O1vf0uHDh3429/+xplnnhn38TQHRyXpAnVF9OIibmtP3fqRrmHA\nkiUyU6cqdOgAzz0X4MQTG14kVuWEqtrxeJRgh4yvJfVbCE3XZpMiyLiiogK3201trUpZmUR5uSDj\nZ59VKCtTOXSI4PSKDh2okysMevc20fUAtbW1yLKMy+XC7/fHRbgg5IUdO4SnwwsvKAwbJgZfPvus\nh3PP9QEuVLXpcT02m9Cwu3c3mDrVR48eYsTQ0KFuRozQcbnEzK+pUx38+KNEXl5IarDkiaQkEclv\n3SpTVCRTWKjwwQdOiorcuN1EyBNDhsSWJ6LZO4Yn0jp2lJgwwWDCBB9VVT6WL1dZssTNffelMWKE\nxrnnejnjDA/p6To1NTWsXp3EqFEBdu3SmTYtibVrVSZN8vH738dubtA04YX70EN2LrtMY8OG2LJD\nvLASaa0dv94c1NTEZ2J+6BBMmeLgvfdU7r/fx6WXNs8/I5qBeUVFRZMG5k3B6/Xy5Zdf8tFHH1Fb\nW8vpp59OcXFx3K51zcFRS7oQzVO3bUnXNGH5cpn77lOQJJgxQ+OMMxq6ItXXRTt2dFBbKyHLekzz\nl3iQlNRQm7X2LzUVRo0ywyLtkExx880qixbJ/PADrFypUFqqcOiQRFaWQm6uk4ICyM7WycwMkJ/f\ndLbe54PXX5f55BOZzEyTRx/VuP12lTfe0DjlFC3o7tWcwZSy/P/ZO+/wqurs639OuS099FhAECEk\npBCQpii2QVFD1bErg44489oVURARUXFQHAd0ZhAFGRFFEFERK3aatCQ0K9JbCqm3nfL+8c25Lfcm\nN4DO4PPbz5NHDMnl3HLW2WfttdcKOpJJkljnTU42GTs2eOdSWUmAnli3TmHOHBGh3r59sMPNyTH4\nwx98pKf78fn8HD6cwObN4nfefFNl4kQHZWUS2dlBIA6aqog7o9CKpV5IToaRIzVGjtSorRXUyNKl\nTiZNSiQ3V2PoUJ0FC2wUFyusXGlj9Og6nnqqnKQkKWzyHqpJ/eILIQFr08bk/ffddOvWPKliLHrB\nGqD92p1uKB3VlIm5aQoPiQkTHBQWCs3t0chqrYDU5hiYxxNK2a9fP7xeL+3qndl79erFl19+GVe3\nu2vXLoYNG4au6yQnJ3Prrbdy3XXXxfz5ExZ0o2t1j93I3Hq8zz+XePRRsY31yCM6hYUNY2OircXK\nskxyssThw+HHeTSJwJGSsdDji1UpKXD22cIY5IknvAGDc58vfIC3YoXKtm3pVFbKAXrC4o2zsozA\nbfobb8hMmqQGnnthocGf/6wyf77o9n2+4PEoihk36CqKADirevbUee218DF+amrQeQwEsltuVVaH\n+8knKiUlCg6HSXa2n/x8wugJWRbdlUVPrFmjMHu2AG+PR2LRIhv79nnqu2IjLslYYiIMHSp8f6uq\n/HzyicKsWYmBKCVNg1WrnPz4o4NWrQxatdJp2dKgRQuNli19eDwyL7yQxC+/KDz2WB2FhQayLGEZ\njx9reTwSqalGg9SI41mhn2efT1w4Y8VP/fCDxN13OzlyRGLBArGqfLQVLQm4srKyUd+FeEIp+/bt\ny6OPPkpdXR0ej4eNGzdy1llnxXVMGRkZrF69GpvNRkVFBQUFBRQWFsbsvk9Y0LUqFISsROBjqbVr\nZcaPb8G+fSoPP6xz5ZVGA24tFGxtNlsDXlRspDU00Wku6B7tRprNZlBba1BdXR1mcN6mDYHBjK7r\nVFdXI0lpgeHdtm0SK1YImmLv3uCxDh4sLjpjxti49VaVxYv9Idxz8DlaacDxKCxCO10QjmP33tvQ\ncSyyQt2qrr5aILxpwi+/GGzaZLJ9u4tFi8TkP7LDtegJl0sAxciRLg4dkjhwQA6At5Wu/Oij9gA9\n0alTbPWE02nSq5fG5MniBx55xMull2ocPixx+LDEoUMSpaUKW7eq7NzpZMWK8FPuoYcSeOYZAcyt\nW5u0bm3Spg20aWPStq1YJW/d2qRVKzPueHOr023K7OZ4VawhmtstJG8vvmjjgQd83HKLv1n+wtHK\n8tINrXhWgJsKpWzZsiWjRo0KhFJOnjw5atDlt99+y80338zatWvRNI0+ffqwcOFCsrKyAsciIrNi\na/tOWNCN1ummpR29kfmmTRKPPiriU+68s4pbbjFwOBpuQ1lmNKqqkpyc3ECSBEH1wrFWYzrdaGXR\nHIYBPl9iXAsiqanQt69J377iMYuLDcaPV/F64ZprdDIzTd57T2bMGHHGHzok8dlnMi1aGA2GH6oK\nmhbf6y/LAiytOvlkAWy7dkl06NC87kyS4NRTDdq18zNsWPDiF9rhrl6t8OKL4QO4tWsVcnIM7rvP\nR6tWglt+5x2V668XHr6W6qC0NMgtd+8u/puVZZCQILLZRo5M4eqrRRT63r0ymZkGocndpglvv60y\nYYLKiBF+Jk/2cuqpwuy+tFQKAPTBg3DokMm+fRKbNskcPixTViZTWipTXi6TnGyGALNJWppMRoZC\n69YCpFu3FsnKhw5JdO8e7sFwvCsylDJyiPbJJwr33eckN7f5krfGKpTTjbfThaZDKQFuu+02brvt\ntkYf58wzz6SwsJAJEybgdru5/vrrycrKYvfu3Vx88cVs376dJUuW/D5B16pj7XS3bxc2i6tWyYwd\nq/H66xputwdVDbYVkf4IscDWqqSk5huZR6t4N8siaY709EQ0TUGWY/+bkce0a5dQJHz8scy4cRqL\nFxtUVMATT6isWSPz6KMaCxbIjBxpsG+fxAUX2GjXzmTIELj0Uj85OTQrgl10ukEqSJJEt7tunUKH\nDnFyFE1UejqcfbZerxoQ9EToAG7hQhtr1ij06JFIYqLQB3/4oXhfr7jCz9ix4kJw5EgQvEO55dRU\nkwMHxEWtoMBHWZkUkPlZtWWLkIBVVEj8+9/hCoaEBGFQ3r599PcpPKDSoKzM5PBh6sFY5fBhqKgQ\nPrSlpQqHD8uUlkr8/LMwgLdq5EhXPVgbAcBu1SoI4M3poqNV6BBt/36xPbd+vcLTT3vCjMyPR1VV\nSbRo0TA14rc0MJ84cSK9evXC5XIxY8YMAE499VS2bNnCli1buPDCC+nXrx+tW7eO+vu/K9BNSwue\nBE3Vjh0wZYrKRx8Jm8XZs4M2ix6PFBiANeWPEK0sw5tox9icikYvhA/6gp13KM0RTzClVRUVMG2a\nwty5CrfeqlNSIgZZTz2l8M9/Klx/vU5xsY+WLcXPqio895zG9OnwzTcSb74pcdllaZx0EqSmGuzY\nEd/rryhmGKcLwvxm/XqFESOOD+hGK4fDsoc08Ps9rFsnc9ddPmbMsDNnTpCUHDIkgYoKsb5s6YP7\n9BH0hNMpgDg7O4mUFKFu+Mc/7HzxhTidhg93kZhosnSpjVatDB56yMdNNzX/1jp8ZRZOOUV8WRt2\nXq8XRfE2MJIZPTqFwYM19uxRWLjQxs03++q7aZm9e2WKiqQw+qO8XCI5mTBQtsDY+rP1d61bmyQn\nh3e6tbWiQfjXv2xMnWrnT3/y8/zznmPWy0er6mo47bTwD85v7aVbWlpKbW1tQIefEPJEs7OzOeus\ns9iwYUPMIdwJC7rWGx5qZB5Pp7tnDzz5pMrbb8v85S86W7b4okaD+P1+auvb1cb8EaJVQgJhOWnH\nG3StNFhL/hXZedvtTS9HeDzwr38l8MILdgoLDdavF8A6e7bMU0+pXHSRwapVPjp0CP5Ov34mL78s\nQFVR4JxzTPr18zN5ciVFRcncdZeN3btlBg5MZcgQLyNHmjEXASI5XRDDtCeeiDGNOc713XcyL7wg\n1pE//FBlyBCNZcvqkGWYNMnBxx/Xha0vf/ONwr/+ZeOnn2QyMkx+/lm8DosWVZOT4ycjw45pQmpq\nMpddpjFrlrg4r1tX28BZ7ljLWtDweoNBnKFdsdstkZTkIzVVok8fg3PPrWnUXtEwoKIiCMIWIB8+\nbNEcArCt7/n90KpVQj0gw0cfic/e0qUmH3zgJjPz2AyjGqtQnW5z6IXjWbfeeitTpkzh559/5oEH\nHmDcuHG0aNECl8vFnj172LRpEwMHDoz5+ycs6FoV3unGBt2DB0VH99prCqNHB7u3yLLMUjweT6Cz\nbe4ALFa8d3MrGqdr7aD7/X4SExNRVbXB8TW2kWYY8PrrMpMm2enWTeLjj/106WKycKFQKWRmGrz3\nnp+cnIZg2bevwa23qg0m/JJk0KNHFVOnyjz2WArjx9fw7rtOBg0SCb9Dh2oMG+YP44Aj1QsABQU6\nJSUKfj/HdLsbrUwTtm4Vpudvv61SVSXhdIoFie3bawPD0pUrg7RMixZwzjk655wTpCdqakTiLcCf\n/+xj+nQXJSVJpKYScAjbtEnmjjt8zJ1rO+6AG6tCu2K/XyYlxcHevTKJiRI2my2qvWJoFE+LFjIt\nW0phXHSsqquDXbvc7NuXyB13BHWs77/v/tV9HiorhbFO6Gf+t/TSnTdvHg6Hg6uuugrDMOjfvz9b\ntmzh/vvvR5Ik2rdvz9///vffJ6cbaXoDkJLScJBWXg7PPqvw0ksK11yjs2GDj3opXlhpmhaQV8my\njMPhwB5LA9NEiUTgY6cXQiVj1vFpmoaqqg0MaUIrlvfCp59KPPSQitMJc+b4yMysYOPGltx4ow27\nHWbNir70YVXbttCypcm2bRLZ2SaaJtzSLDPrhASRh3b22Tr9+lUxZUo1q1ervPeek4svdtGmjcmQ\nIX6GDdOidropKWIgtnWrTF7esXdLpilicyyg9XgkhgzRmDnTQ69eBqtWKUyebA9TpzQmGdN1Ycye\nl2dQUlKLzWYtvkjs2+egpERh+XKVuXPtzJ0rfufii11hyxrdujWMZjreJZYiqJeMiXXZSHvFUCOg\nxgIqow1iXS5Yt87G5MkuLrlEbBB+/bXymxjrWLaOofVbeunecMMN3HDDDYC441i9ejUgVovjrRMW\ndK2K1elWVQmbxRdeUBg61GDNGl/UFVHLylDTtIC8qu5oMtRDKlK9cKz0Qk1NDX6/H5fLFZCmNe4y\nFt7pFhUJsN25Ex57TGfoUIMNGySuuqoFBw6oTJ4svhfPSdO/v8nKlXDaabX4fD7sdjumadZnpOno\nuhTiieHkwgtNzj/fz1NPeVm9Wubtt+0MHpzAoUMKTz6p8sgjtXTpEnQJ69nTYN065ahB1zRh40YB\ntEuX2jAMkSQ8a5aHgoLw5xgtPSIW6BqGANwjRyTeeMMd1olLEnTsaNKxo8Y//+nms89Urr7az6RJ\nDh580EdJicxXX6m88ILMzz/LnH66EQbE3bvrze6IG5MgCj9dy/Cm4eeuMSOgUEcvXdcD69HW1y+/\nCCewgwdh3jzhDTFvnu1X4W+jVVUVDQzMa2pqTph8NPidgW5KismBAxLTpys8+6zCRRcZfPWVL2ro\nYWNWhseaHhFJLxzN44nbQDdutx1ZlklLS6s3kfEE1p9jldMprB137oRHH1VZsULmwQc1/vQng127\n4IYbVL75RuauuyoZM8bEbo+vRTFNk4ICL19+KXHttcL/wkoEhugbaaG3vQMHwsCBOk8/XUuLFikc\nPKhQWJhGq1Y6hYUeLr3UTV4erF1r54Yb4s/aMgz49luFt992sGyZE5sNhg3z88orbnJzY19MkpIa\nhlNGS44wTbj/fgc7dki89VbjSRhZWQYzZ8roupBxnXuuzrnnBukJYf4uB0x93nlHRKenpZnk5OiB\nIV9Ojk779g23H+OpoOENjUaZh1Ysn2ILjN1ug+eeszN7dgK3317D6NG1OJ0qPp9MdbUSyPH7tUtw\nuuFeupbT4IlSJ86RRlQ0gCwrkygrE13d9dfrXHON3mCPPTRZIjR6PfKxjwV0nU5h7KLrAoia83iR\n8i8Amy0hcPLF81jffy+xc6dE164OevY0mD3bj8MBN96o8umnMvfco/Ovf/nw+TyoqoOmNqFCVRJn\nnulkxowUEhLEaxaa2hCvZExVJc48U+fJJ7307GmwerUAzJEjEzl4UDzu7bfX0bGjJ2wqH3rra5oS\na9YovP22yjvvqCQmmlx2mYfXX3eTnR1f156c3DCcMjI5wjRFPtf69QpLl9Y16RmbmWnw008ytbVS\nVLWCMH83wpIQRDZd0F1t3jwbxcUOamulwKqz1RVnZhoxN7+sClo7SrRte/Q0jTVw+/JLG/fc46Rb\nN52vv64jI8PA7aY+7VmnqkrHbjeora1t8D5FDu2OtYSBebDTPdZorf9GnbCgC+HeC0Bg+DNrlp+i\nIonHHlMpKpJo3Vp80HNyvHTr5qFXL5mTT469OBDKEx/dcQUphng7jdjyL0ExxDNYEp6tCg89JN7W\nAQMMdB0uuyz8LH36aWFak5zcklatZFq0ENRMixYm6emQnh78b1KSH5fLTYsWJq1aJVNQoFJRIYT8\nbduGXwSaswZs6XQVBc46S+ess3SmTvXy9dcKl1+ewEUXpdOxo8HQoX4KC3106uTH59NZtQrefdfG\n++8Lh6rLL/fx5ptuunbVAxRRvBUtJy2SXnjqKTsffyzSjOO5g3W5oH17g23bZGy2+ABBZNOZdOoU\nnn5bWipRUiI0xZ99pvKPf8j88otM586Wf4REz54K3bvrYT4GoZ3usfDHBw9KjB/vYPVqhWnTPFxy\nibiiGoY472w2GzabDZ/PTlqaicvlCnDFoUO7aDzx0QCxYVjbbyaRWHuipEbACQ66EH7S22zCf+Hy\nyw0E163j9xts3uxj/XqTLVscfPZZKkVFMmlpAojz800KCgx69BDrl1Yd6xXUohhSUhrvTi0tcCz5\nlwW6FnhHeyxdhwULZCZPVsnPN1i50seAATaGDdN56imVa6/VmThRo0MH8cGtrhaa219+qUbTkjly\nRKaiQmxXlZYKb4PycpOyMpOKCjuVlS6OHBFSofR0IS/q0MHBJZfopKUpJCUl0aaNSmmpzPffK3z8\nsY2UFIl27STS08V7Etn1RdPpKgqce65O374aDz7ow+EQZt69ewevXAkJJvfd5+Xdd2s5/XQtRLMq\nHsztdsfdaTmdBCJtrIta6BryjBk2Fi608cEHdc3iXLt3NygqUqLyqc2pVq1MzjtP57zzgvSE2y3o\niaIiiU2bVN57z8GWLSIiyOqK9++XOXRIwu0+Ou8FXYc5c2w8/rigedas8YR1+JF8ck2NRJs2ZtTB\nW6yhXbzhlKFVXS18LyTJxLo7O5r1+v92ndCga51QoV1pWpog29PSgrfpZ5xhIzfXVR/jo2EYwqZw\n40bx9eyzKps2SSQmWh2xg+7dJfr3h4yMozs2odUVG1exOmcLbIGYixexwilBAMQnn0iMH6+SkABz\n5/rp29dkwQIZXZf48EO5gfxLlsXqb2oqpKXpJCfrEdN7EX9kDe4cDgeSJI7d4xFg/dBDKj/+KDF6\ntEFZmcGBA0IbamlXZ81yUlEBlZXCy6CyUlyE0tNN0tJM0tNNVq5Uuf12mcJCf/33rQ7bZP9+mSFD\nErjxRh/vvaeSn6/Trp0A6eJimcWLbei6xLBhCl26GIHX0u/3R5VHhYKwdXKLryDFYIGqxem+9JKN\nWbPsLF9e12jeWaTbFkB2tsHs2TYGDDi+21ggPg8FBSKN46qrfLhcOoYBO3ZIFBcLegLgnHMESr7+\nuo3Nm30BeqJrV6PRu6aiIuFza7ebLFvmJiur6Tu+urrYwQHxDu08Hk+DoV3oewXRV4BramoamJb/\nr9cJDbrQ0MUrJcXk0CEfKSm1qKoa1aRbluGMM0zOOMPkyisB9HrTFNiwQWb9eokXX3Ry++1CSiU4\nOJMePUzy8w1OOaXp3CmxlRY8xtDuNFSeFhr+GK2cTkura4Y91saNgrveswemTBGGNCtWSPTvbwuc\nVIsWaXHrXU3TxO12B+wprcFd+LGIi9CoUToTJqhcdpk4aSora0lLs/HTT34uvlhh0aKg2gJEd11V\nJTpk6+vzz1Wys3USE+HQIZnvvpOoqBArrjt3CuB45RU748Z5ue02X4CbNwwRibNkicpll7lo2VLo\ngC+/3KBjR62BPCr05NY0rUGMe2JiApWVgk4RF0eJDz9U2bxZZtmyOk45pfmdYvfuOvv3O1DV4w+6\nVoV+nmRZGKeffrrGuefC0087aNHCoLxcZvBgP23bGnzyicr06TK7dom4+kj1hCTB4487WLRIZdIk\nL9deG9sDOFooZTxeulY1NbSL9V6Vl9uPynfhf61+F6BrdZKappGYKFFerjfpj9DwcaBjR+jY0aCw\nUKz+JiensGuXkCBt2iTx4osKGzeKxxQgbAT+2759OBAnJjZckAhVTIS6fzVWkVtpO3fKTJyYzMqV\nNsaP17jpJoPiYonBg23s2UNA/tWqlR2vt3Eu2HrdrFXnaI5p0apXL5PNmyXc7nDOUBjeNPx5WRZ3\nIGlpJh07ipPzvPM0brrJH5KHJW7zb7rJiaoKne5f/uLj7bdVcnKS6NNHZ9gwP5deqgXsHp96ysua\nNQpvvaUybFgyaWmJDB+uM2yYFuiAY93yWre7SUkm5eV+Wrf2IcsyixeLE3jx4ho6doSjsVvMzjbq\nX4/fbsijaaI7nzJFvCEbNtQyapSLW26xXmNBT9TViSWRkhLhObxwoY1164Lv95gxwvxn3z6Jk0+O\nTz0RbxJwYxWa3hFaoe/VkSMGSUmCu5ckiXnz5rFjxw48Hg979uzh5JNPbnA+xRNICcI9rF+/fixc\nuLBBvtrxrhMadEM7yOrq6vrNmgT8/kRU9dimtuJqCh06QIcOBkOHgtUR790bBOJXXpG5+24Vnw/y\n84NAfPCgFKbV1TSNqqoqnE4niYmJcfNQLpc4UcrKhB/Cq6/aGT26llmzxDDrT39S+fprmfHjNW68\nMXjraC1IxMqtsjoLa+LcnItUQgJkZ5usWycRajkaC3SjVeRGms8Ho0Y50TSJpUvdPPqogyuu9tCF\nzAAAIABJREFU0LjiCo3qavjgA7HgMG6ckz59dIYP9zN4sBaIA3r88VpWroRlyxK5/HIX6ekmw4Zp\nYQBsVWinlZIioWlOEhNtfPCBzKJFTk47Tee009zU1hoBIGjORP7UU8VnMtIg/XhWaLf3+edBM/RF\ni+oYPjyBFi2im5gnJAiPi169DHbskLjvPidduujcfrufpCSTkhKZ2bPtFBfL+HxSWAJHTo5R/1pG\ndrrHnksYq0LfK69XIS1NvAeqqtKhQweKi4vZvHkzPXv2RNM0Xn/9dS666KLA7zcVSAmiGXrggQe4\n+OKLfxM1xAkNuj6fj5qaGkzTDPCPaWkSR44c+1U31osvSZbxiMHllwe/v3+/WP/csEHi9ddlduyQ\nKCy0M2CAn+7dFXJzHfTv7+SMM6RmaS/FbZ9KcbHE8OEG69a5qa11M2GCizfflLnjDiH/iqS1Ihck\nQit0k8zlcuF0Ops9jOjXz2DVKpmzzgp2qopiOYfF97ws0LUAV9fhP/9x89NPctg6d3IyUQF47Fgn\n/fqJDnjQIJ0+fXwMHOgNdMBLlqgBABaryBpdu4YDcHKy0Op++aXKX//q5PbbfezeLZGQkBC4MIVO\n5CMXBqxNrlAQtF7K7747hiz3OGrnTpnJk52UlCg8/riXyy7TKC0NhlHGMjH3+eAf/7Azc6aNO+/0\ns2CBLyBDGzEi+HMHD0oUF4uu+MMPVaZNk9mzR2TICcN4idxcgwMH5GbRC0dboV66iqJw0UUXoWka\nnTt3Zvz48Rw4cCCM340nkBJgxowZjBw5km+//fZXfw5wgoMuCDMaa2ItSSKyp6rq2B7zaHS6GRmQ\nkWFwySWiC7nxRp3MTA/Z2bB5s4P33lOYOtVBRQXk5ZkhygnBLUfe0eu6iMhZtUpIj9av95ORYTJ9\nuo1//asl119vUFTkI1ZoaTTQjaQ3TNOM6t0QT/XrZzJvntxAMhavtaPV6YYC7rx5Huz2YMBotIoG\nwEuWCADu08fHiBFGWAc8dWoQgAsLGwJwUpLJihUqr7+uMm+ehwMHJPbuFadFtFveSO7RUp/4/f6w\njhhg+/ZfB3Rra2HaNBdz5zr461/9vPRSMEU3tLuNZmL+9dcKd9/toGNHky++qGvUu7htW5OLLtK5\n6KLgm1pbC0VFBiUlCtu22XnjDRs//ihz3nmJDBniD3TFubkGGRlHt9wRq6zUiPDvBR3G2kXs98cT\nSLl3716WLl3KihUr+Pbbb38TJcQJDboOhwNN0/B6vWGRPUeOHNsLd7TLEaG+uy5XCunpjnq/WY3a\n2lpSU1MpKxOG6Rs3yixbJvPYYzKHD0NubhCIS0sl5s2TSU8X5t6TJ2t88onEU0/ZuOACnQ8/LCM3\nt3EBsMNh1ts7mg0y3Kwhmd/vP+rbqb59Df7yFzWMIrDohXheP1kW4v2bbnJiGEHAhegeGtEqFIAr\nKjTef19m2bIEHnjASd++ogOOBOC1a2XeestGYaGL1FST7dvF1e7BB71kZBhs3tz4KREJxLquY7PZ\nAosCFv/YoYPGzp1qQAoY6fJ1NGXW54xNmuSgb18/n312hI4dw0n7UOPy0E738GGJCRMcfPWVwt/+\nJtItjuYwEhOhVy+Nnj39gY66S5dEXnjBQ0WF0BX/+992iopkTJOALaa1bXfGGcZRp0cI9ULDfLRI\nsG1O3XXXXUydOjXwmf0/eiHOCj3JU1OFo9ixPh40TwMYKf9KS7PVS730sONr2RIuuMAMGyBVVAh/\nhJdfVrjlluBb0qePwd69EqNH2zjpJJMlS/z06GFQUdE0cSrMcoRszhqSxZMkEW9lZIjX+vvvJdq2\nFd9rDqer6xI33uhi8GB/GOCCOLF9PprlNpacDMOHe7n2Wpnqali+XFAQFgBbHHCfPgYOhx+7Xdxi\nW/XRRypvvGELyN5WrFADEjbry5K7hX4lJNho1UqmdWuZtDQpAHiZmbBzp2gMLCDWNK1ZxjKhtXGj\nzNixTnw+mDPHTUGBJypAhCYAu93C5nPuXBuTJ9u5+moRCBmL54+3Is8Lr1eioED4R1xxhfUz4fTE\n+++rTJ2qsG+fRLduRtimXXa2QXJy0/+u5bsQaWDepUuXqD8fTyDl+vXrueqqqwDhk7t8+XJsNhuF\nhYXNeUmaVSc06EZbBU5NNY8LlxbJ08WqSKctywoyMZGYkrHIqqyEOXMUvvpKZuZMPzfdZFBXJzri\nP/xBAENyssmFF9rIzjbp1i2Ffv1k8vNNsrPNBmuhpmlis5mUl9fi9xvNVnLEW/37C1536FDq9bDx\nga7PRyChIRJwQXCiVlJvy5bN7zySk+HKKzWuvFKjqkpQEFOmOBgzJritdvPNPr75ppbvv5dZvFjl\ntdeEGHrBApVPP1WZNs0TJnEL/dqzR6akRPy5rEwN6JGPHJGw24XeeM8e8Rm87rpEWrUyA1t+aWkG\naWkGqal64CslxUtCAihKw464tFTm0UftfPihysMP+7juOj+yLF7DaBVKL1h65/R0k6VL3QHryeNd\n0ZKAJQnatTNp104PS4+orhbqCUtTvGCBjW3bhEdx5NCuXbtweqKqSqJdu3D+qjFbx3gCKX/++efA\nn0eNGsXll1/+qwIunOCga5XYxQ92usfK6ULTQBnJj4olguAnJDERSksbf6zSUqFImD9f4a9/1Xn+\neV+gC0lJESbht9+uccopcOedOjU1oiP+5huNr792MmOGxI4dEpmZQkNcUGCQk6PRsWMNdnsqsuwi\nOTn2BehYPSasYZpQdlg8rdRgRTO0fD648UaBCrNmuWP6CKSminSGaJ7H8db27TJvvaWyeLGgQUaP\n9uFyiUWChQuF4Xpens6XXwZPA10XHbu1Bt1UsrR1F6GqKqYpLrQVFRL33OPkww9VCgoMWrUyqagQ\nCQ0//aRQUaE2AHJdF5I6C5QTEkw+/zyox5swoQ6n0+SzzwTtlJgokZ4u0apV+NqyxyOhaTBhgvjd\n0aN93Habv8mE4+ZU6EKIzye62nhdUJOTxR1cnz7BC4CmwY8/yhQVia74+ecFPSHL4fTEG2/YmDhR\ngG5op9uYrWNTgZT/jTqhQTe007Wct44Hp2s9ZjRAijTMiSX/Skw0AyJ/q6zO2e2GmTMV/v53hSuu\nMNi40Re4RY+sUJ1uUhKcdZZJt251pKcLkK+rg+JiiQ0bYOVKgxdeUNmxoxVut8TNN5uMHavRo4dJ\nTo553GU9/fqZPPdcqG9w48O0UMAdMqRxIAgO05p3UfjxR4nFi20sWaJy5IjEsGEa//63h549jYiu\nSVAQS5YIQ/MLLkhg9GgfFRXSUQOUJIn3KCnJJCtL58MPVTp3Nhg2rOn23+OBI0cEAC9cqPLMMwI0\nb7jBS8uWOrt3SxQXS1RUyFRWylRUODhyRKauTiwEWReJ9esFR92tmwC1MWOOL+BCw6gesZp79I+n\nqtSHeRr88Y/BhOf9+wVHXFSkcPPN4i7lvvtcXHttUNrSFOjGE0hp1Zw5c47+STSjTmjQtSqS0/01\nOt3QjS273d4kP5qYGIzssT6gliJh8mSV3r0NvvjC3yBRN7KihVOGUh9Op0FuroeuXb2MGuXE6XTi\n9RpkZtrp3t2kqEjmlVcktm+X6NRJqCUsPfHppzeMs25OZWWJoV9pqRwwXAkO08J/1gJcSYK5cz38\n5S/ORjvieIdpIDrXRYucLFmSxOHDCkOHavz97x569zZiAk5KCvzxjxp//KPGgAEyZ5xh8O67KsuW\nCRJ5wACNSy7ROFpvbE0TCblbtsgMG9b0zzudAsAmTnTw448yb75Zx6BBDa9elnLCWy9N8fut4Ewb\nt98ePNgZM9wsXqw2UMUc76qra942WrwlSXDSSSamafDyy3a6ddPZsUNm0aLwmO3f0sD8eNXvEnSP\nHDl+jxnL/aupCt1IM01YscLBk0/aSU+H+fP99OkT3wfV5Wr4fKxNMkspEXkRcDrhrLMMhg41uOIK\n0fF4vbBli8SmTRIbNsgsWKCydWs6p55qUFAQ3LDLyzPjdkaTZejd22TdOhvt2/vqgxKT8XqF1Z91\nYYgEXLs9ekZaaDUmGwMR1b5kicqSJTZ275a4/HIfkyfXcN55zQeas8/WadPG5O67fTz3nM7UqQ7e\neUflvvucnHWWUEHEAuBYvL/fD3l5Ops3N91mVlXBtGkO/vMflXvu8TF/vj/m7XroEE4EVtp4+WUb\nzz1nZ8wYDyedpPPRRzbKyupwOJKaZQAUb4V3ur8O6BqGGAA+9pidP//Zz3/+4+O88xLCbB0B6urq\nwoIhT4Q6oUE31iDteG0CWYoERVGaPYyyEoHXrRMeCQcOpDBlip/LL2/erZjISWuoE62pqWn0uCJ1\nug4HFBSITvdPfxJAXFlZx/ffK2zd6mLjRjFQKikR65+W14QlY4vVTPTpo/Htt3YGDxZeF3V1Eh6P\n8HwViakKt9ySiiybzJnjxmaTAClqRlpoRQsZ3btX4u23Vd56y8ZPP0kUFmo88oi33lhGw+/3oyjN\n/0jn5+ssXy5+LzERrrrKz7PPesMoiPvvd9K/f+MAHFq6Dvn5Bu+/H/t4DANee01l8mQHF16os2ZN\nHW3bxg9gq1er3H9/AiedZLJiRR2dOpm89ppKYqKCoiTidNIsA6CjqWhDtGOtn36SuP12Jx6PxPvv\nuwNUiRXVE3msx0uR81vVCQ260NBT91g7XdMU2V/Wfne8seuRNXeuwscfy3z8sZ0//lFn8uRKOnd2\n0tyXPCEhSC9YHgnWBp6zkQgDhyP2hNsqm03YEJ55psGNN4oPtqbBd99JbNgguuJ33xXbcG3aEOY1\nkZur43LVkZcnMXVqEjU1JpMni9cpM7M1vXv76N7d5OWXHZx+us6nn5ah6wa1tWb94NOGz2cEMuki\nTyTr4nnggADaJUtUtm9XuPRSjXHjvAwcqIfJyeKVqkWrvDyDJ58U7XFockQoBVFZGVzECAXg884T\nfs2R5fcLnrK0VLisRXqyfPutkIDJMixY4KZnz/iVBeXlMH58EitWOJg61cvQoUHNrWXn6PVKuFw0\n2wAosiuOVqGd7vGkFzQNZs608fe/2xk71sett/rD7loiQfdENDCH3wHoQnin63SKTjLa3nlTFSr/\nUhQFVVWbDbiHD8PUqQpLlohPy6WX6uzfLzF6dCqHDomk27ZtISPDpF07k7ZthbRG/L/YAmrXTnj7\nKop4DnV1JtXV1QFXMsMwmuy6Y4VThla0YaGqCl+F7GyT668H0NF1+OEHYYO5YYPE44/LFBerpKfb\n6dQJ1q1T6NzZzsiRXn78sRy/38/GjTauuaZF/esKWVmtycrSycvTyc3V2LpVJSdHWPpFptOWlSks\nXqxy8KDMU0+ZXHyxxt13+zj/fD3uKXlz6owzDA4eFOBomtEz0lJTowPwffe1on9/nREjBAdsgaum\nCc1uZqYwNO/bV4Dq/v0Sjzzi4MsvFR591MsVV8R284os0xSd8SOPOBgyxMOqVZW0aBH+ObCWIzwe\nKaqBeVMGQLE8b2Mtdhwv34WSEpm//tVJerrJ55/Xcdpp4Z9L0xQ0TORG2vGgS37rOuFBN7LThWC3\nG++iSjT5l9vtbtabWVcngjD/8Q+FK680+OQTH7fdprJ4sWjBqqqqcLlc+Hw2Dh4UJ9+BA8K05sAB\niW++kcP+v7wcWrUSfwZwuZI5+WSFjAyTlBSTU0+VOPVUAeDRwhKCG2nHXooCXbsadOrk55JLBN3i\ncLj4xz9sTJgQRMGPP7axcmUqmZl+VqwQnqzfflvJqaeaVFVR72ylsHKlyqZNKps2JfPGGy7y83Xa\ntzfYuVPiu+9ktm5VqaqSOfVUnW++KScxUQkBi+N/gimKcAYrKVEaTQO2KhSADxxw89lnibz9tp17\n73Vy9tmiAy4vB5vNpHt3nc2bFfLzDZ5/3s6MGTZGjfKzbp2nWUsK27fL3H23A7dbYtEiN1271kZt\nCKzliFihlNEqltViaFfs9XrDfCYElaNQU6McU6fr8cDf/mavX+AQlpLRTru6OiFLU1UT0xQ/oGla\nXPOV/7U64UEXwodewn/BrBdSN/5haEz+Fa+GVdPg1VdlHntMpW/foCJhzx4xZIg8xsRE6NRJxLPE\nkkOZpkl1tYc9e3y89VYSU6Yk0L+/zP79Qli+Z4+TQ4dUDh2SOXBAgK4QoosOum1bk3/+U6FTJ0EF\nWB10WtrRSXusOwDTNElISGDrVpWxY20cPiyxdKmH5cuhZUs/d93lY+dOJ716CZLvzDM1Bg5MwW43\nycnxk5enk5+vU1joIylJXDzKyyXmzg2/JencWaemxmT3boWtW+1kZvpwOsO7r3hug5tT+fl6YHW1\nORRhSorJlVf6ufpqI9ABv/WWjeXLVd5/30Zmps4rr9iZMcNOVpYe4F7jrbo6mDZNgNJDD/n405/E\nLXeo3Wdoeb1B4/tjieppzPPW2rz0+/2Ul0v124/uZvPEq1eL7rZbN4OVK+saPV+jGZhXVlaSEu/U\n93+ofjegC4SAbsMhTGhFGnZHk39ZCoHYjwHLl8uMH6/QqhUsWOCnd+/ghyYpqfkx7KHeDYqi0LVr\nEgMHqqxYYQSGXyBsLB0OR338uVgjPnBA4sAB678SPp+QiT3xhBr4vs8XpDbatjVp3dpFmzY67dvL\nAZojlNqITJE4csTOgw+qvPuuwoMP+rjhBi+a5uHQIRdLloh4+IkT7RQWasyb58NmA9P0s3u3oCU2\nbFCZO9dOUZFCaWnw9R461MvYsW66dDHw+SS2bJF54okEPvvMxgMPJPL99ymcdppIS8jL08jJ0cjK\n8pGQEARi6/WLxRE3VdaSRPfuerNANxQEQjvgoUNdOBwEBnQ7dgjz8FdesZGVZZCVJWwSGwPGDz9U\nuO8+J71766xaFQ5KsVQTHo84jtB14ONVof+eZbyv6yopKTI2my0qTxy57ixJEtXVMHmyg6VLVaZN\n8zJkSNOEvAW64d9rXKP7v1onPOhaH4TQrbRok2+IHf4Y63FjgeTatSIip7RUpDYMHtwwfdZaAzbN\n+LrLWNE9kSbmkccmSSJqpkULk6wssLpn0xQbb08+GdRl1dURRm3s3m1w4IDEypVyALQPHpQoKxOP\n16aNTrt2KbRqJfHWWwo+n8Sppxq88IKHDh3cVFdrpKc7OfdclXvvVbn2WgmbjQDgWsfXvr1J+/Zm\niCexn5QUF3Y73HGHj02bJIYOTUHXoXt3P7m5Gh07avzwg8ynn1bh98O2bQrFxSpFRQpvvuli+/Zk\nTj7ZAmKd7Gwv2dleJMkb1d+gqQyuvDyDGTNksrJia3ubUy6XMPQBaNnS4JNP6ti2TWHrVpkPPlB5\n5hkRMtm+vUF2tkG3bkY9GAve+qGHHGzerPDccx7OPz/+BAorAVjQC8f+PGJVUDImk5RE1EieaNlo\nn33m5IEHUjjnHD+rVlXTooVQszRVwnchfBuuqqrq/zrd/2aFAlFamiWstwAovIOMR/4VDXR/+gkm\nTlRZtUpm4kSN666L7ZhkswnA8fnEbV4sENd1nbq6upjRPdFAN56KZu2YkEB9OoagNrxeYUmYlBTs\nFH0+H9XVbioqbBw54uKll2zMnSue5HnnaSQk6EydqnLoUBqHDsk4nUI2pOsSy5errFvnbtKkRpLg\nr3/VyMgwufNOC1A09u+3hnUKixfb2bdPpnPnNHJy/OTkaPTooXPbbX46dhQpx99/LzjiTZtU3nkn\nkS1bUmjb1iQ/Xyc3Vycvz092tp/UVF+TQJyZabBzp0xNjdiqO9ayliyWLq3jzjudgTidyy4L/ozX\nK9Zft24VX6+8YuPjj4NIOXy4n5ISGU0TnPNJJzVtlRg+SDv+0/2GUT3RB2mSFJ6NVl4O48Y5WLVK\n4bnnahkwQFwcLaP4pgyALC/d0H//yJEj/9fp/jcqGgdrdboW4W8NxZoj/wp9vEOH4MknVRYuFKbh\nL77oi2tia1EM0UA3kk+OFd0jdLrh34+HqhCyofhbtlDeNiUlgT17VMaPD/K2AwYIOsZms+FwOOoz\nq2DcODvz54uPUV6eweDBTjIyTEaO1Bg+XG8whbZKlmmwkZaRIVQcgwfDtdd6uewyBytWeOrN4VWW\nLrXx6KMKlZUS3bv7ycvTyMvTuemmWk47zYeiqOzYYaOoSKWoSOXpp12UlCSTlmaSn6+Rl2fUA7iP\nli3DwxAFnaNTXCwfszHMV1+Ju6dJk7zk5hoxNyQdDgGm2dkG334r89FHKgMHakye7EXTYOtW0Rmv\nWKGyZYuM1yvRrZtOVpZB584mubky3bubYUnF4YO0Y3oacVVtrUSrVo3TcG+9pTJunIMRIzRWr64j\nMVECnPV/3zCkMtIoXlEUqqrkRr10T6Q64UHXqshOt6LCoLq6uoH7V3Mer6bG5PnnFWbOVPjjH3U2\nbfJF1WTGKotiaNEifNhnpRTHs04shhSxn2usaiw5IvRxDMOgpqYmKm/70EN+rr/eg6Z50DSZxMRE\nFEXB54MXX1SZNs3GkCEay5d7+H//z87KlR50Hb7+WmbxYoVzz3XSoYPBiBE6I0boYSGPTW2kWWvA\nbdvCoEEGgwZZf6NRWgobN0qsXy+xbJmNJ59MoKxMJjtbIy9PDOyuv95Lly6C9vnpJ4miIpXiYoXn\nn3dSVJRIYiIBaiInx09uruiKP/rITrdu3sBgKFQqFc/np6RE5sYbnciySY8eOsnJYqgbi2aqqIBH\nH3Xw/vsqU6YICZn1c716hYNZaanEtm2iKy4qUlm61M62bSLq3aIoXnvNRnq6SYcOjfPFR1vROt1Y\nyxH79kncc4+Dn3+Wee01N2ee2RCcGxvYhVITpaUyLpcUAORPP/2UXbt2NdrpNpWPNn/+fP72t78B\nkJ2dzaRJk2LaRB7P+t2Brq7rOJ0ahw6ZgWFTc4cqmgZz56pMmdKSs8+GL7/0cfrpzT+mhAQzEMNu\nHVtlZWV9Nld868QJCUdHL9jtjYOuRSVomobT6cTpTOX55xWeecbGNddorFtXi8vlQdMMnE5n/a2i\nxLvvKowfb6NTJ5NlyzxkZ5u8+qoSEPcrCpx7rsG55xpMn+7niy9kFi1S6dfPRpcuAoCHDRPDqsY2\n0iwPjWhglZ6u06+fm759xZKIqppUVFjm8AorVth49lmF/fslsrI0cnM18vKE2fnEiR4UBX75RaKo\nSPDEs2cLIC4vFxe/v/89iZ49oXt3HxkZfkwzPOQyFIhDL36//CJxxRUupk/38u9/i1RmIXOiQedp\nGZJPmOCgsFD43DZ1p9yqlcmAAToDBujU1tbicrmQJJm9e6UARQHw/PNBGV95OWRlCUDOzjbo3Nk4\nrlrnujrhMRFahgGvvCI8fP/8Zz+vvOJp1gUg1Cjeoii8XhstWwbvat99912++OIL9u/fz8svv0yP\nHj14+umnwzjepvLROnXqxJdffklqaiqvvPIKjz32GP/5z3+O4dWIr0540A03U/ZSV1dHenoKlZUO\nHI7mRWCbJixbJjNhgkLr1iYvv3yE888/esfnpCTBd/r9/oBBSVJSUrMWLpoapMWqaEY5EM5vCxBR\n+PDDBB56yEZmphj4tG/vwe/3o6rBi9amTRLjxtkpK5N45hkfF10URMz16+WoG1WqChdcYHDBBT6e\new4++0wA8OOP2zhyRKJdO4MbbtCiOqypqnjuNTUEDK4tvajf729wQU1Ph/POMznvPBMwALHEUFQk\nUjq++srJzJkye/cqdO3qrwdincJCLw884Oa771QGDgyesPPm2SkqSkDXCUjdcnI0cnL8nHKKAGLr\nPfD7/ZSVKQwblsK994oNsZkz7YE0YKvbtXSzP/wgcffdTiorJRYscDfoaOMpq+OUJDjlFJNTThG+\ntV98ofKXv/jYvFlh5UqFq6/W2LpV5p13VKZOldm9W6ZjRyOgoBCALGigeAaIkZ1uTU14EvBPP0nc\ncYeTujqJZcvcZGUdHw9fKzUChHJi5syZPP744/Tr14/WrVuzcePGZuej9evXL/DnSy+9lIcffvi4\nHGtTdcKDriVr8vl8qKpKamoqLVuqFBU1r7tds0Z4JFRUiIn/oEE6R440sUfbRCUkmJSW1lFbK5zJ\nDMNo9oabzSY6B02jWTEngl4Ifw0iFRJFRfDAAzbKyhSmTatl4EAfPp8PsJOUlIQsiy5q0iQbn36q\nMGGCjxtu0Bscx7p1Mlde6W/0eOx2iybw4fHAwIFOSkpkevRwUVBgMGKExuWX62GZbxbFkJQkuD6P\nx4PNZgscW1OVmio8ic85xwJiYaJdXCyAeM0alWnTFPbvD7/jWLaskvx8HZdLYv9+0REXFSksXGjn\noYdc1NVJ5OUZ5OVpdOvmpmtXuPvuJAoL3Vx9dTVut4Lf70SSNAxDPI/qajFreOYZOy+9ZGPsWB+3\n3OI/6uiaWGV11H4/5OToDBmiMWRI+N9//31weDdnjo1t2xyUl0t07RpUUFhqikgj8ciqqxN3Y5oG\nzz9v49ln7dx/v48xY8JXeI+1KislOnQIB/Dq6moyMjLo3bs3/fv3D/u7ePLRQmvWrFlcHpo0+yvW\nCQ+6IK6+lom4LAubwcZ0uqH1ww8SEycqrF0bVCQoSnDI05zIHqusIZndnojXayM11RnW7TanJCnY\n7VodX1MaYrAGaeLPkRt3R47YGTdO5b33FMaN83LNNdWYpj/g1aDrOmVlXl54IZEXX3QwerSfTZt8\nUd3HvF6xLZWXF39H43RCYaHGZZdJ3Huvnw8/VFi8WOGhh+z07m0wcqTGZZfppKVBeblOWlrwQnGs\nG0jJycKTuH9/kwULJD7/XObqqzWGD9fYuVPivvscXHppKi6XUBvk5PjJz9c5/3w/t9/uISFBbA2W\nlKhs2iSzZImLjz921j+2xJQpKrm5Olu3qvWfAy+JiS7eeAPeeCOBvDyNL7+s5pRTjn59tbG7HGuQ\n5vVGX4N3OoUxeG5u+PtVWSneR2t4t3y5GN6ZpkRWlh6gKLp2NTnjDD1AldTWSuzYITPd6TknAAAg\nAElEQVRxooOUFJPPPqurV8cc3woNpQw1MD8eg7RPPvmEV199lZUrVx7zY8VTJzzoKopCYmJi4LYT\n4vNiPXgQnnhCZdEimTvv1HnppXBFQuh6cbwnR+iQTCxdqPh8MpJkBP7+aCoa6Db1WHa76Grq6urw\ner04nU4UJSHA2157rcb69bU4nZ76KPYEVFVF18WG3ZQpDvr18/HRR6WcfLKGLCu43Upg6GFxmiUl\nMqef3nyDdFkW3ZjLBUOH6gwdKpIxPvhAAPDYsXaqqiReeEFmyhQ7LVs2bxDaWJWUSNxzjx2PBxYu\n9Ibd3m/cKIIsr7pKZ/Nm0RFv3Kgyf77MDz8onHaaWM7IzfXTu7ebjRuTGTzYx/TptWzdKuRrH3yg\n4vVKDBqUTocOQopWXGxn4sRaxoypQ5L0gPHPsWzXRftZSzLmdkukpsZ/IUxNbZjoYJoi0NLqijdt\nkpk/P4Ht25NITYVOnQzWr1dYv17h+efdXHfd0YVdxlPiTiHcYayyspL09PSoPx9PPhpAcXExY8aM\n4YMPPvjN5GcnPOhaFa5eiN3p1tTAc88pPP+8wjXX6I3GmMe7CmzxpHV1dWFLF0lJDY3Mj6aaq9UV\nAnI/brfoiJOTU+rVCDa6dTP49FM3p57qbsDbfv65zIMP2klIMFmwwFc/bU4MDAGtcEXLpEZRFFav\nTqCgQGr2Jlg0a8ekJOpphjpKS3106dKWV191sXSpi3PPFQqISy7RjzpYsbISnnjCxhtvqDz8sJ+b\nbtIa3ALn5xts2iQzapTOmWeanHlmkJrweEyKiw2+/VanpMTBhAmi9W/fXmP8eCf5+Tq9evn50588\nlJSo5OdrLF4cnCAtWODk6acT6NZNDygnunf30bWrH1U9PmvOoZ3usaoXJAnatBFLMgMHivmIz+dD\n103eeSeRW24R7e60aR6uv/4YbN7iqFgbabE63Xjy0Xbt2sWIESOYP38+nTt3/nUOPEqd8KAby1M3\nstMVigSZxx9XGTDA4JtvfHTs2PRjNwW6Fk8qSVKDpYvmhFM2VkJ3GVz2aOyxgsej4vO5+PHHhIBP\nwnPPeTn7bE99ZL0a4Ea//15i/HgbW7fKPPaYn2HD9LCOxRK6R1oE6rrOhg02evf2UVtbGwDi0K9Y\noBFNMqZpWmDA165dAldeqTFokM7FF+u8957C/Pkqd9xh58ILdYYPF7x7PB22acIbbwjVxaBBBuvW\nuWNeaPPzDd54oyHvLp6v8HYtKHAxY4ZCdrbBe+95OHBArDlv3Gjj7bedbN2q4HaLPLSvvirj+ecT\nOessjWuv9VNVZbJ5sxow/vnnP5PYuVOhSxc9sNSRm+una1cfdnt0t6/GyvJc+LV0ujU1MGVKIu+9\n52DePDd33ulk5MhfF3AhSC+EfpY0TWt0RtJUPtrkyZMpLy9nzJgxgPAeXrt27a/7RPgdgC5E99S1\nOl3ThHfflXn4YYV27WDRIj89e8bvvhQL3GKlAIdWYqJJTU3zDHSilcsV7JhjlcXbapqGy+Vi924H\n27cr9O3r4vHHfYwZ48Hvd+P3SwFuVKwJ23jzTZV77hHu/PHaYVogUFRk4+67DVJSUhrYA4Z2xJFA\nHNrpWhy4tZWnqmqYcVFaGlx3nc511+mUlcE77yi8/LLKX/9qZ9Ag0QFfeKEe9di3bhVUQlWVxIIF\nPnr3bvyWOyfHYOtWORD/bq2O+3w+7HY7CQkJzJ+vMmuWyqefemnTRnSDubkmN90EoKNpkJqawJo1\ndXTtqpKcLD6PIurJ5MwzNfr2DZrC1NXB5s1iWLd+vcqcOXZ++imFTp2M+qUOoZzIzPTicmkBPt/j\n8TSQsFmWpr/GRtrHHyvcdVcaZ5/tZ/XqWlq0gJtv5ldJjoisysroXrqN3QU0lY82e/ZsZs+e/Ssc\nbeP1uwBdCAe15GTBAa1cKTFhgkplJfztbxp/+EPTa5RNVaQJTGQKcGhF5qQdK6drVehjhZr3WLzt\nzJkK48cLMebppxs8/riNefMkevZ00rOn8MpduVLmhRdsjBihsX69u1lLH1ZVVcHu3RLduoljsYA4\ntPuIBcR+fxI+n0ptbS2apgUALfS1jGZc1LIljBqlM2qUzqFDsHSpysyZKrfeaueSS3RGjtQ4/3wD\nr1dcUF57TeWhh/yMHt2QSohWyclCgvXddxKZmf5A523dFXzwgczDD9v54AMPJ50U/f1UVcjIMEhP\nl7DZbLRooeDxyGEXptDXRZYNevRQ6NUrCMQeD2zZIgf8Jl57LYHvvkumQwehmsjK8lBQIDbzXK6g\n34THk4gs+3C77cfN8Ka8HB580MnKlQrPPFPN+eeL98vvF3eQv8YSRmQJL93oyxUnWv0uQDeap65h\nSJx/vp1rrtF5+mktbFWyOY8bDdxiOZNFVmIi7N3b/H83siyrvtDjsjSrFo8cydtu3FgX4G3Bzs8/\nu9iwQWbSJKG1BbDbBW2xdKmICs/Obt4W08aNYmW2MdlTNCDWdR2bTUbTjMCGkWWIEtoRp6SI6PJY\n1aYN3HKLxi23CN+Gt99WePppGyNGCHTNyDBYtcpDRkbzwCcvT2ftWo327etwuVyBY1+7VmbMGAdv\nvumla9fGH1PXpYBONyXF5NChoDFTNBNxC4CtLzDIzVXIz/cHKAWfT3TuGzfKFBfbeOcdsZF20kkG\n+fmCI66pkfF4TOrqTMBDba0vqttXPGWasGSJygMPOBg+XGPVqlpU1YckieOprRU8/G+Be5H0wtGo\niv5X6ncBuhC+ZivL4s0YOFAYY59xhp2TTjLp1cukZ0+Tnj1F7ldTnJcFbh6Pp9nBlGDlpMlhx3c0\nFfRfEL+vaVoAdJOSktiyRWHsWBulpYK3HTDAW99RBnlbXZdYsEAlI8Nk7lwv/fsbbNkis2GDzPr1\nMi++qPLzzxKZmQYFBcGvzEwzpoHNhg1ys4X9uq7XH5sDSXIENohCOz8xrNFxOl2UldnxeDwBII61\njpuRYXLeeYL7bdFCbG7t3SvRr5+TwkLhAzFggNFot2sNRLt10ygpsTNqVHLg39q+XeKPf3Qwa5Y3\n6jprZPn9QV11SorJDz/EBrponHk0IDYMg8xM6NZN4sYbbciyF5/P5IcfBDWxcaP4/aysloAIQ33k\nEQ+5uT66d/eTlhbua9BYYGXoCu/8+e4ALeN2//qhlJHl8YgLgKBLpPrveRqNq/pfrt8V6Ab/LIxE\npk3TyMkx0TTYtk3s6q9bJzN/vsr27RJnnCGAuFcvg549TbKyggBj7X43x5ksskIHaVYdzRXaohcs\nRzIrv622NokHHlBZtkxh/HiN664TvK3PF+Rtd+8Wyw2ffy4zcaKf667TA8DTs6cRtklWVye8AzZs\nkPn6a4UZM2zs3CnRvXsQhHv0EFpNRRFLEYWF8W39hXKjDoeDhAQHIAPi96N1xK1by1RXC7CygBho\nwBHX1ko89ZSd//xH5YEH/Cxd6g0A3s6dwpZy/Hg7+/ZJDBumMWKETr9+4RaO1hBPkiTOPNPBk0/a\nAlK/vXslhg518PjjPv7wh/guMppG4LNk0V3NqVAgtl47wQnbA82Azyfc0844QyYzU+Gyy2ReeslJ\nWppY9b31Vg+HD0tMn+6iuFgY/+TlaeTnG/VeEz5atQoHYkmSee01F4895uLmmxtf4bUWI37tqq62\nlAsnvsMY/E5AN1TBYN2ihgZUqirk5Jjk5JjcdJM1hBCbSevXCz/Zf/xDYtcuidxcYVTSvbubvDzo\n0sVGcnLiUd3KRKoXmqv7tcrpNKms9FFVVY3T6USWXUyfrvPPfzq45hoR/eJ0evD5goOomhqJ6dNt\nzJ6tcsstGps2eQI631iVkNBQqyk2uAQQf/KJwt/+ZuPAAYncXIOVK8UE//vvJTp3jr5Gajm9eTwe\nVDXYecuy1KjhDYjV3upqJdDRWHcyVufn9fp45x2VSZNS6N/fz5df1nDSSWK12TTF692hg8ndd2vc\nfbfGjz8KAL7nHjtlZTB8uIjWyctzo2l+nE4nNpuNHj3EczYM8RkaMsTBmDEa11wT/1p5aKcbTU0T\nb4UqOpKTk2NSE+vXww03iDXY5ctL6djRDBuwGQb8/LMU4IhnznRSXJxIQgLk5grlRFKSwZw5dlJS\nTN58s5zMTD+GoeD1BrtiizuGhivAv1ZVVTUM9jxRHcbgdwK6VoUamQej2KN/KJxO6N3brE97ECBT\nUaGzZo2fdetkPvrIxdSpiVRWSvTsSaAb7tnT4JRT4uOxrBj2oy2rw5FlG263GcbbZmZqvP/+ETp0\n8NWfeKIz0jSTefMUnnjCznnnCU4z1N2ruSU2uAzOOisIxEeOwEcfid3+rVtlhg1TKS+XyM8XnbDV\nFbdvr+HxuAMxP6F3CopiYhiNc4uRZvShRii//GLn3nvt7N8v8dJLHvr29aPrZqMdcefOMmPHaowd\nq7FtGyxaJHHbbXbcbgcjRuiMHCmOPz1dmMts3iyUD3/4g85ddzVPFhW6tp2S0vxO15ohWGqUWNKo\nujqJKVNcvP66yu23+5k5UyYnJ7EBLaHrIiGkY0eNYcMssx5xJ7Bhg8pttyXi9wdN1598MjXMb8Iy\n/rE+k8JuUWi6f21+tbIyGNVjXXSOHDnyf6D736zoWt34o9itDzh4OeccB4MGOZAkA4+njgMHDLZv\nT2LdOom5c2Vuv11FlsWteSg10bJlw8dNSGh+ZI9VofrflBQXGzfKXHIJlJWF8rbCb8LhcGCaJp98\nIvHwwy5SUgzmzCmnoMCot2JsXDPb3EpLEyYuF1yg8+qrYne4rIx631u5fqVXpbbWQX6+UEwUFJgU\nFBiceqpQkDRl7QihF85g1dbCtGk2Xn5Z5f77/YwZo9XfxtsCwBTZEUcCsSzLnHKKxl13wbhxLr77\nzsZbb6mMGmVH10UH7PFAv34urrpKY8qUxn0lIss0RRqwBbqW4U18v2uG+UwkJyfHfM8+/VTmjjvs\n9OtnsHatm+pqiZdeUmNyxKG8uaZp6LrOkSN2Zs5MpF8/jWefreO00wz27ZPYtEmhqEjl1VeF8Y/f\nTyCho6DAJCdHo7LSwOkUjmexonmOR1lDtFBw/79O93+kIkE3lnm0VZHxPZGKBEkSBs0XX2xgbRCa\nJuzaJZy11q+XeOYZlY0bJVq0CO+GCwrMo8pJi0ySKC+38cILQv713HO+MN7W6h63bZMYP97ODz9I\nTJnir+dZXYGTyzqJoWH3F69PbGStW6eE8cEtW8L55+sMGOAJAEZlpZOiIoUNG2Tmzxe39boOPXoY\nbNki4XZLPPywREZGdCmfuHBa02p4910xMOzf32DNmtiqhNCOOBSIraGoz+cL3BW53XV07KgwdqzC\nuHEKa9fauPpqF+Xl4t/du1csjlhm45mZTQ9gdR1kOUi3NJXZZ5U1Q7C037FmCKWlwjxe0GI+LrxQ\nvA+HD0f3W7Bek1DfWq8Xpk9XmT1b5ZFHPFx9tRvD0PF6dVq3lhk0SGbw4GCyxoEDwmluwwaZN990\nMGFCAvv2iceaOrVFvTm8n9NO0zDNxjPSmlvRttEqKyv/D3T/FypyK806YSPL6ibq6uoCXFm0D3g0\nkJQk6NABOnQwGD4cQMcw4PvvJdatk1i/XmbJEpXNmwWP5vFI/PvfMj17mnTo0NB71CoLECy9raom\nMmOGwvTpAjT+/GcfV19dic+nB7jHw4clnnjCxpIlKvfe62fBAi1k6BF7iyxa9xe5vNBUrV8vc8st\nwVtuaz0YgsY0IqXYYNCgIDjv3y9O3HvvtVFRIdQFigIFBXrYsK5tW6vTFXaB991nZ9cuiX//28e5\n5zZPMWGaZoAbVVU1wI2GdsRFRfDyy3aWLnXQt6+XDz5w8v/bO+/wKMr1739mZks2gYQWQSX0gKGH\nNJCiB0F4FcXCUfFgQT1HRJpgQwEFUVFROkYFG0XxJypiixBEQNPpRPAQFKUIhGBIstk68/4xmS3J\nbrIptJz9XhfXOTHJ7rOT3Xvu536+5emnzcTGKuzfryM1VWLhQj15eQKtWimuItyli/r/27Z1F1nP\nQzRQO92iIv/FRmNNaAdl5fnK7p+Djz5SDwXvustBVpbFy0A8UOlverrI2LEGOnaUyciwcvnlACbX\nWnx1xI0awbXXwqBBOiTJjiAILFhgJDk5hPBwJ19+aeCFF0ycOSPSrZvTlerRrZuddu3sCELNZc6e\n+Wiena4/34WLHfWi6PobL+TnV/zZ8nHilSVKBDoOEEW46iqFq65SGDVKLQg2G/zwg8Dw4QZ27BBZ\ntkzg4MFmxMTIxMerXXF8vELHjjIOh7XMlczg0ydh3To4flw9GAkNDcVqFZg/X8e8eXruvNPB9u2l\nPscbFdcpVuj+KtuGa/80hZgGRVGLbnKy03Wz0MzQq0rouPxyhRtvdHL2LGzcKLFsmY0jR9RCvH27\nyJIlenbsEAkNVYiOVqly3bubmDzZzpo19mobcFfWPZaWCqxdq2P5chPHjgncf7+DjAwLoaEynTsr\nPPpoKQaDahqudYpOp8ShQ3r279eTmyvx/vsS+/YJnDkjlBmFK7RpI2O1CuTnQ7Nm6ly8pETtgMtT\n1jQlIVTuovb77wITJhg4dUpg7VorvXpVvPFYLG7PXl8oLobnn9fz+ecSc+faueUWZ4UdRvmOWGtO\ndDoder3eqxDr9RI33mhl0qRS1+7izBmBXbvUZIuUFB2vvhrCiRMiXbo4PZI6bHToYEeSfMucyxdi\njb1Qvui2rUrHf5GiXhRdDeU73YMH3R1beXvDypRkvh6vujAYVAvBsDCF5GS1I/zrryIOHAhl1y4D\nqakir7yiJvB27y6SkGDCYBBYs0aiYUOFhQut9OtnLeMjNsDpNGI0CqxdKzFjhp6uXWU2brTQsWPN\nD8kq24a7GQJW145A+zD+8YcOk0mhcWMrxcXWKmePvqDNdAUBoqIUoqKcDB/uLFsDLFmi46mn1Aob\nGqqwbJmOtWslr244Nlb2m7ZQnqLmaXiemyvw7rs61qzRkZAg8+STDq6/3u0T/Pnnevr0kWnSpGL3\nJ4pOOnQopW3bYm64wV2gioslDhzQk5urY9s29X3XrZsJk0mlL8qyQHKyjr59nXTqpJT5aahm8ZXd\nrFSfWh2vv67nscfsjBvn8Mub1iTAvrBxo8j48Qb695fJyrJUKRbyPMjTmpPy33c4dC67RY07HhoK\n/fpJDBhgd72/zp7FldKxebPEggUNOHpU4qqrvP0moqNt6PWOCoX47791FYpuYWFhkDJ2IeGv0z17\ntuK2PSwscPpXbYouuKN2ZFktMg0aCPTu7aBfP1xzW4vFRGpqCA8+6G7hGjVSeOMNkR9+0JOYaMBi\n0bF1q8R114mUlgq8+Wb1t9iBonynAxULcXq6k+7drS4amCq+cFYZc+4JXy5jAL/9JvDEE3ry8kTW\nr7cwcKD6Q7Ksjhm2bxfZsUPkpZf07Nol0qKF4irCvXrJ9OwpYzI5Ksh3LRb4/HPVs+HQIYH77nPy\n008WWrWq+PdNSZG4/nr3KV8g1yQkxErXrma6dRO4/nodP/zQhLy8Yo4f15WFS0p88YXEBx/oyMsT\naNnSSefOOrp3h65d1cJcPr1h1y6BRx81EBEBP/xgoX37yt+LvsYLp0+r899t20QWLXLPfyuDFuZa\n2c1U9YwQCQ9XI5O0a+JL1GE0Qp8+En37ugtxUZHb+CctTcdbbxn4/fdwoqNVvwktzblTJztnzsg0\na6YeZprNZt555x1Onz5d6Xutqnw0gKlTp7JmzRoaN27MqlWrvEzPzyXqRdHVoPF0QVUBFRTIFBYW\nBhQA6e/xalN0RVHzNnWH92mdoza3XbZMndtOmGDniSeshIRYOHJEJjdX7YjfeUciNdX9YX/uORtO\np8rMOF83eq3oCIKAw+Fgxw49CQnqdlgrPBpRX+uIdTpdtVzGLBaYN0/Hm2/qmTTJzurVNq9RgihC\ndLRqoH3nneovOp1w4IAqi92+XeSLL/Ts3StyxRXOMp8J9X2QnS3yxRc6uneXGTfOwQ03OP12i4oC\nGzaIPPFE5YyFygrxmTOqNNpqtRAR4aRvX5FOnXS8+moJ0dFWSkudHD3agAMHDOzdK/Lee6LXiKJ9\ne4V16yQsFoGXXrIxYUJgPrWaraP2Oj77TOKJJwzcfrs6/63KElNrUJxOZ6UHeRrMZpVL7XlNfO2c\nfBVigwESEpwkJbllyWaz6jexa5eOHTt0fPCBgT171DUYjQpjx5Zgt9v5888/SUtL49NPP+Wyyy5j\n8ODBLvcwDVXlo2VmZrJ161ays7NJSUnh8ccf56uvvqr6ItcB6lXRFUURm81WFt1jp7CwYY2UZBpq\nW3RBy0lTkCR1q6uq28L58kvVajAmRmbTplKiorRTdQPR0SY6dhS45RYH4GD1aokJEwwsXWpj+3aR\nl19Wu7wrrtCYEqqyrEcP+ZzY+ZV32tq7N4SbbrJXuK7lfXetVmsFPwVfLmMpKSKPP26ge3eZn36y\nEBUV2DWXJOjcWSEmxsGIEepBlCAYOHDAxMyZBp580l0QQ0MVrrxS4cQJdebYtavscyu+Z49AWBhV\ndpW+oBViUdSh16t5eNo1CQ9XyM+30769qhZr395Mx45WbrnFfV0KCwWWLNHz0ktqwerQQWbOHD0L\nFqjjpK5dZS8WRfn1l5aq44XjxwUmTdJz8KDIRx9ZvcQuvlCeptagQYOAdiyqOKLyxw6kEGszYkmC\n2FiJuDhVcZmeruff/w7j2DGRFStU+kdYWBivvPIKd9xxBz///DP5+fkcLWdwEkg+WkZGBiNGjKBJ\nkyaMHDmSadOmVfl66wr1ouhqbxBZll2n1M2bh1FUJNW44HqiNuTv0FCFEyeKMJkoK1g6pk9XTWc8\n57ayrPOb/XXZZQp9+sjccYeTO+5QuzyHQ/UD0LwTVq82cOCAqgxT5b1O4uNlYmL8eycEAu3DqG3V\nZVlk1y6R2Fjfjk+VeQh4FmKbzUReXgP++U89Bw5IvPGGd9hloPCU75482YAPPjCycqWOmBiZDz6w\nctNN6vXKzRXYvl2lr733no7//legY0elbEasMic6d1b4/nvv0UJN4KlG07rHBg2MOByhrlP48u5r\np07JvPBCBD/9JLJmTRFDhyplXbTAkSMCe/cK7NunqgIXLFBZFK1be7Mo9uwRWbNGZVo89JCDDz+s\nOoU3UJqaL5jN/uPXK4OvQqytxel0Ulzs5MUXQ/jsMyNz5vzN0KEqBS0nJ4fIyEj27NlDbm4uJpOJ\nTp060alTJ6/HDyQfLTMzk3vuucf1dWRkJHl5ebSvSex3NVEviq6iKBQXF2O328vEBOE0bSoETEj3\nh9o4GmnFICSkEbIcSkmJyIwZIt99p+Pxx0u45x4rguDEahUqVRyB72RfnQ66dlXo2tXJvfc6ATsW\ni+qdkJMjkpYmsWSJnj/+EOjWTfbqiP1Jdj2hGdPIsuw66AG1eF1xhRLwaMNXIbZYFBYvNrJvn46b\nby5h6dIijEYoKQmcQ+x2WbOzeXNDPvjAyK5dEnff7SAlpeIBY2ysQmysgwcfVL8uLYW9e9WxREaG\nRHKynkOHVO5w69ZqhlhsrHrTqu59W1OjaZxgo9FI48YSxcUATq/RhKLAJ59ITJ2qL3PyKsJkcmKx\naLaPIk2bSgwcKDF4sPu62GzqaGXfPpF9+0RmzNDx66/qH/Wrryx061Z5p+7Z3VZGU6sMxcU1K7r+\nIIoiOTmqTWe3bjJpaWZCQqyIoto8ffbZZ6SkpHDq1CkSEhJ49tlnmTFjRo2oY1q37Ynz5VpWL4qu\nIAgYjUZCQkIoLi5GEIRqKdKqeuzqQOscbDZb2QGDyEsvGdm2TWLUKAc5OeobyeFwlHkEKJjN5koT\nF1QT86rXERICCQmylwvW2bOqUiwnR+TrryVmzdJTWCgQGyu7DG/i4mSuvFIVKFR26g/+49YDxcaN\nIlOmGDh8WJ1fTpsmAN4G6JVxiAVBtYE8eNDGxx83YNWqxrRrp/DAAw4++SRwE3aTqeK1On5coEMH\nEw8+6GDLFon58/UcOVLR8KdjR6VStzKrVfXIdTqdrt2LLynwH38ITJyoGvF88omtzLHNPcj21RFr\nhViSJDp2lIiOljhxwsjp0zoiIxVuvdVRZcH17G5rE/ZZly5jVqsapfThhzrmzrVyww0lZUwjtfv+\n+uuv2bt3L++99x5xcXHs2LGDnJwcQn047gSSj5aUlERubi5DhgwB4NSpU7Rr165OXktVqBdFF8Bo\nNOJwOFx3L5NJnRnWNisq0Lmup7rNk2974IDIgQMiffs6ad3axv79Vrp3lwgPD/XqpH1lkGmHUTqd\nntLSahJUyxAeDgMGyAwY4C4uJ0+qXrg5OSIffqhj4kQRQVDo1ctJt24WevWS6NOnAeHhFdvhmhbd\nP/8UeOopPbt3i8yda0OSYPFid3cfCIfYanWQmmpk5cpQcnLCueMOO+vXW+jcuQYXxgfS00UGD3Yy\nZYpb9KHdtLZvF0lJkXj5ZT0nT6oR7J6sifbtFQRBpYEVFSkYDCav7tFT0ux0wptv6nj1VT3jx9uZ\nNMk3Dawq1sTu3TBxoomwMJmvvz7Nl1+asFpFHA6HTyZJoCKMQFFSUjed7u7dAv/+t5E2bWR++qmY\nhg3NKIrq7Hf27FmefPJJJEkiJSXF1dUOGjSIQYMG+Xy8QPLRkpKSmDx5Mvfeey8pKSnExMTU/oUE\niHpTdMHbU1frdgsLVbPr2j6mP3iq2zQLyD17RJ58Us/p0wLJyVY6dLCRlSWTlWXknXca88cfqvm3\nKhtW/7ddO8Gvekyns2E2mzh79qyXYKE6FC1PXHYZDBmiKcUcOBxO/vtfKzt26Ni3z0Ryso6HHxZp\n3Fj1ltDGEj17ymRnS4waZQv4uWw2WLRIx4IFeh55xM6776rdaGqq6JMypsFz7nfypJ7ly2HFCiOX\nXy7zwAN23n33DEajen2KikSfHXF18f33EkOGeM9zfd20zpyhLCVY5MsvJZ5/Xqf9l7AAACAASURB\nVN09dOtmIzY2FJ1O4tgxEc37Fdz+C3v2qDSwsDBITbUQHV29TlFlkEi8+moIy5bpmDXLxj33OFAU\nI59+KmEwuBkIntxqQRDKDhqFOomyh9p3unY7zJ2r46239Lz0kpVbbikpc3tTnfI2b97MzJkzeeaZ\nZxg+fHi1/qZV5aMlJibSr18/4uPjadKkCStXrqzx66guBKW2x/MXCbTkgYKCAho3bowgCHTubGDd\nOnu139ieOHv2rN+Za/mctIICPTNnSl7+tg6HOoxVKWK6ssfERXPKzlb/lZQI9OollynV1IOw5s3V\n5/nrL+jTJ4S8PLPrpNcd9VLzgqMoboJ++VGCLMN//6vKmj3XqSgCI0Y4uPpqdZ1du/pPm9i0SR0l\ntG8v89prdtq2df8dfvhBZO5cPV9/bfX5u7KsjiKWLZP46SeJW2+18u9/K/ToUfE1eN6ganpdFAU6\ndAjh+++t1WIuaFv1kycVDhwIY9cuPcnJajfcpIni6oRXrVILcWSkwsyZNu69t6IaLBCkp4s8+qiB\n6GiZefPsXv4Tzzyj57LLFCZNcriui+a9oY1ravN+KY+YmBC+/dZKmzbV/3zl5gr85z8GmjaFhQvN\nNGmiCnBMJhOlpaVMnz6dgoIClixZQmRNsqQuYtSbTre8QEIQBBo1UgIyGqnqccvfl8rPbRXFwMKF\nKt/WPbe1YLP5lsaGh8M118heAocTJyAnRyI7WyQ5Wcf27QbCwtROs0MHhZMnRYqLRcLD/c/8PLmy\nWifsiyvrz+PWE6IInTopdOrkdPnIbtsmMnSokQEDZHJyRN59VyX6x8S4Z8O9esmEh8Ozz+rJyRF5\n7TU7N9xQkQ3gz2XsxAlYsULHu+/qiIhwcu+9pbz9NjRq5PutGohwIRAOcXWpYuW36m3aGGnbVmDo\nUAf9+sk895yelSut7NghMn++vqzzhVOn1HikP/8UXcyJFi2qfr7iYpg5U89nn/mX8Hoq0rTXpcY1\n4foba4XY13WpbiGuSafrdMLChTrmz9fz3HM2Ro4swW63YTSqTUlGRgbPPPMMEyZM4O677z5vh1vn\nE/Wm6GrwLJLl/Vhr+3haZ6id+FbFt62ONLZ5c7jhBqerQCmKajqdnS3y88/qB7Z9exOtWyteHXHX\nrgIGg3fBqYwrqx1EAdWmCO3eLfLgg46yf+p/M5th1y61C05JkRgzxt32/vvfdsxmVWXWpo23k5gn\nT1eW4ccf1SK+aZPETTdZeeutAhITpQoHeYHAXyGu7Lp8+20ogwY5AmKqVOWXoBneGI2wfr2O334T\n+OQTKzfc4OTYMbfPxFtvqTdXo1HBMyIpNlb2CgpNTVUlvP36yWRmWvz6bKjiCLfnrc1mq3DTr+y6\nVLcQFxdTpeDCE//9r8DDDxsICYEffighMrIEWVapiDabjeeee45ff/2Vzz77jCuvvDLwB77EUG+K\nrvaG0O7mkiSVdbr+jcwDfVwtGsXf3DZQvm31nlftutq3V7m5y5fr+PPPUg4cEMjOVjvi5ctVSWvn\nzt7z4Q4dhApcWbvd7io02uuyWq2uQ5dA3MVyckSuuca7PQ0NhT59ZGw2eP99HYMHO5k+3c7ff6sZ\nap9+qtKhrFZvxoTNBidPqsY9776rw2SC0aOtzJlTQKNGKo2uttfQ+3pWziH+/nsd48cXc/aspUKx\n0Tpiz3FMVX4JW7ZIxMeHMHy4k+xsC2VRcFx5pcKVVzpd/GHVKtRdiBcu1LN9uyqvbdtWYcsWtUC+\n/76Vf/6zcv6w1QoGg0xxcbGXBLo218VfIQYddrt/rwdPyDIkJ+t45RU9Tz9t4777SnA41O5Wr9ez\na9cupkyZwujRo3nttdfq9O9+MaLezHS1DqaoqMg1n/zPf3T06SMzenTNKU7FxcWuTDLN3/b55yW+\n+cZ7bqsoiisq51wgMtLEb7+VVugsiovV0/XsbPfs9e+/BdfhV1ycykho2lRVG4WEhLhuJJ4fLO01\neo4lync3PXuGsGqVlS5d3G+Z48cFnnlGT3q6yKuv2hk2zPes8vhxocyDWP3nKW2+4QYHDzxQQteu\nFlq0CKmUs3wu8PffcNVV6vUNCVG8VFJOp9PlDavdzNWoe99b8CNHBGJiQpBlgdRUC717V/+9J8uq\n1+1zz6mjpJ49ZQ4eFIiMVLy64Z49ZVeMjaIojByp5+abSxgxQqjS7a26KF+Iz5yR6dWrGXl5+X6p\njqC6oz3yiAGbDd58s5QrrjAD6i7L6XQyd+5c0tPTeeutt6pF2XrggQf4+uuvueyyy9izZ4/Pn7lQ\n3gpVod51up7jAHenW314zm1VW7sG1Zrb1jW0cMryRbdBA+jXT6ZfP29K2PbtIllZAsuWCezYEY7R\nGO7qhtXZKzRq5N9drDwntLhYx/HjJjp1kgEBu12lPc2dq+eBBxwsXmyplD50+eUKw4Y5GTZM7da2\nbhUZOjSEZcuKycoSmDs3lD17wrn8cre0OT5eFSmc6/DDH36Q6N1bk1B7d37a+8DhcKDX6128avDm\nEIPE8uUGXn5ZT48eMk2bUqOCe/y4wGOP6fn1V9GraDud6vZcM/xZv17Pnj2qFLxnTyddu1rYvFnH\n7bebMBjq3gypfEdcWKjOwENCQnyObERRYuVKE7NnG3nsMTsPP2zG4bCi16sN0YEDB5g0aRK33nor\n3333XbXZFKNHj2b8+PHce++9Pr9/Ib0VqkK9KboaajvT9ZzbGo1GjMYQvvxSYtYsY63ntrVBSIh3\nDHtlaNZMZsAAM1df7ShjTTj44w+1C87JcXs3XHml4irC8fEy3boJhIRUPJByOBzk5Ah062anpOQs\nmZkhTJ3akBYtFDZsKKFjx+qnT4SEOOje3c5NN5m54w4TkmTH4bB7SZs//ljP/v2il7Q5Lk72Sm2u\nC/iS/pb3IwgPD/fiVXt2frt2OZk82YROB198cYaDB/WsXRvi2pIHAkWBDz6QeP55Aw8+6KiQwitJ\nmmez+2DTblfYvdtOTo7Avn0hFBWJ3H9/CK++6p1V161b3XtyaPNcX6OJP/6QGTcuhIIC+OyzAqKj\n7djt8PXXX1NaWsrvv/9OZmYmb7/9do35sf379+f333/3+/0L6a1QFep10W3UCA4dCuz3/PFtn3hC\nT36+wssvn+Gaa+xlPyeel+7WE1qnW9Vr8DxR97whtGmj0KaNkxEj3N4Naiy9SHa2xIcfqn4EV13l\nSVuT6dhRwGiU2LdPR5s2IpMnR7Jtm8js2WZuuMGC0+ng7FnFixVQmYRXk+/abAqK4m21WVHajF9p\nc9eu3oq6QKTNvq8ZfP+9yOOPu13Fqjoo016bzSby2muhLFumY/p0G/fdZ0NRRH75BUTRSVFRUUAH\nUocOCYwfb+DsWVi/vmoJL2hJHaXExEjExoYgik727VPn6Y0aKa4Z8YoVbk8Oz8O6Ll38U/0Cga/4\ndUWB1at1PPusgTFj7Iwfb8bpdGAwGJEkCbPZzNq1a9m/fz/FxcWMHj2aN998k9jY2JovxA8upLdC\nVag3Rde3p65CYWHVn8TyaRKnT+t44gkd33wjMW2ag1GjrNhsDhRFNa3xVJ/5Eiuci0JsMlX0X/CE\npzFNIOR3dyy9k/vvVwucJxMhNVXilVfUSKBu3dS4dYA773SQk2OhQQMRUD91gUp4NbWd6tMahqJU\nHdVSmbR5+3aRb76ReOEFPX//Lbi6O60Qt2zpO3vNE55Usaok0J746SeRceMMxMTIpKdreW3qmEEQ\nJEJCJMLDwysd2YDEW2+ZmDfPyOTJqkF5VUcCnod55fnjFotqZdmjh0KPHk5Gj3Z7cuzbJ7p2EO+8\no1L9rrpK9irE1TFHKh+/fuIEjBtn4I8/RL74opTo6BIURXHdVN977z3WrFnD4sWLiY2NpaioiB07\ndtC6devAnrCauJDeClWh3hRdDZ6eulUFAsqyjNlsdr2B/fFtrVbfc1ste8tfsamNaqw8TCbf4wVP\nHb2nMU1NoDER+vRxF7hvvpH45z/dLdEPP0h0725yuZjFx8vExkKTJr4lvNqsT7s2muk5OH3ydAOB\nL5XYqVO4isqKFToee0y92WojCW1O7GGpCrhHC5pBUVWn/n//DdOn6/nuO4nXX9dCQL3hdKo3tco4\nxLt3K4wfb8JkUvjyy1O0b69gs0nIsn8f4qrMxS0WwWf3GhKC6xpoMJvVHcT27SI//SSxeLGew4cF\nunTxpq516uTb8MdTAvzpp6pv7/3323nvvWJk2YIkGTAajRw7dowJEybQs2dPNm3ahLFsgQ0bNnRZ\nL54LXEhvhapQb4qu/07XV8Cf99w2PDyCdetEnn1WT+fO3nNbQajcPV+vrxj9rRViX3JMrehUtxCX\nHy+U97itrY6+PE6ehOnTDWzaJPL++1ZGjHCWGeKoJ/SaQm3uXDXT7LLLFC/aWvfuMiEhgivGxWg0\notPpXJ2f3W7FbjdSVFTkV7BQHURGekubtXVqbIn589V1Nm6seI0lPvtMYurUEsxms4t94u/5162T\nmDJFz403qjQwf2G0ntaO5WGzCbz2WgjvvKPj+edtZbuMsEo5xKKo+ik4HA7CwsL8MmQqi+spj9BQ\nSEqSvbx2i4pULvb27WrSxdy5eo4dE+je3dtnIjpaoaREwGKBe+4xsG+fyJo1pXTpUuIy0REEgY8+\n+ohly5bxxhtv0KdPn/PaaV5Ib4WqUG+KLrhnbf46XW3mqY0FyvNtFy2y0q+f+n2nU6q2Rl17foOh\nomqsvArIc9utfdAre1Nq9o7lk23rghPsCacTli3T8dJLev71Lwfbt1to2NDzNbozzW691TvBQStw\nH32kHYA56NVLJDFRID5eISZGcaVBNGwoIAgSJpPJb7HxR0MKBJ7rvOUWdZ2e0mbV7Ef18n3qqTD6\n9TMRF6cW5G7dvOedx44JTJ6sMgo++MBG376VswMcDgG9vuJcNiNDTeFt314mLc3CFVdoP+OfK2uz\n2Vwpy6DaRfq7NtUpur7QsCH07St7vb7CQnWUs2OHOsqZPVv9rGjpxhMn2lmypAgoRZLUm/+pU6eY\nPHkyLVu2ZNOmTT6dwGqLkSNH8uOPP5Kfn09UVBQzZ850iX4utLdCVag3PF0Am82G3W6npKSEiIgI\nfvsNhg41cOCAzWtuazKZOH1ax8yZ3nNbu730nPNtAa+tt9bhQOUJvP/6l4Fbb7UzdGjROVtjZqbI\npEkGwsMVXn/d5sXHDRRah282yxw82ICdO/Vlh3Uix48L9OypdpiNGinMnq2nsLDUa+4ayLUJRMhR\nGbSRzLp1elatasBLL9ldB4o5OaJr3hkbK7Nrl0hOjsSTT9p5+ml7QIdPb76p4+BBgddfV4tAcTHM\nmqXn0091vPaajdtuq9p3wXNspP2tfV0bTze6Dh0asWOHmWbNzs25AqhmPw8+aCQlRSoLfz2N0+nE\nZDIhSRJffvkl8+bN4+WXX2bgwIEXzRz1YkK96nShYjhlYSEug3OVkK1nwQKJefMqzm2rOjypyzWW\n72y0bbfW8ZVP4NXrRf7+W03eres15ufDjBkGUlJEXnzRzp13Vt+MpfwhVLNmBiIjBfr0cdsknjmD\n61T9//5Ph9Mp0LatqYyT63Q5mjVr5vva+Jqdl2dMVLVGT3bH1q1h3Hij7Dp4euAB94HiJ59IPPqo\nu8IuXarjp59ELzP4tm19H9R5jhc0CW/fvjJZWaV+Jbyea/RnLl7Z+0ZNbhZwOksoKlLq9CalYcMG\n1Wxn2DAnR48WI4qlCIIa7/P333/zxBNPYDKZ2LBhg8teMYiKqFdFV9uia7NVvd7C2bMGQPQ5t23V\nylpmd1f9CPG6hi8/Wc/tpcFgxGIRsNttFeZ9NV2306lKd194Qc+dd6qjhJp8VspH+vj7gDduDNdd\nJ3PddWr00JAhRlJTra5OeMECVQLbpIn3fLhHDwgLC1zI4YueVZ4GJooSGzZITJni7XJmtcL8+TqS\nk/XMm2fjoYcciKL3DWPtWolnntFjsQhebIm4ONW8xumEoiLVZ+DHH9UU3kCiiGpiLq69b3Q6PRYL\nNG3aAElS/N6kalKIi4pg6lQDqakib71lJSmpxBXNLkkSqampzJ49m+nTpzNs2LBgd1sF6lXR1aAo\nCoWFheh0OkJDISfHxAsv6CkowDW3tVgsOByB0asuBLRsLVCLRESEHkWRCAkRXIVG+35NPkw5OSKT\nJunLTFkC44b6W6PD4agycqg8RFGdsWpeBBoLwHPump0t8umnenJzRdq3V8rYEppAoqLRj+duwdMv\nQFurtpMRRZE9ewRCQ6FDB/frTktTaWDazPXKK93f87xhaPjrL9UZLidHNa/ZscNASIjichQbM8ZO\nVpb3TNwX6iI6x+FQr6leLwC+gyC1sYTGJgmEQ/zjjyKPPGLg2mtVg3GdzgzoaNiwIcXFxUybNo2S\nkhK++eYbr7TdQFBVTHppaSljxoxh9+7dhIeHM3nyZIYPH16t57gYUa9muqWlpRQVFbliUiRJR1iY\nKsUZNcrB3LmlCII6t60tvepcQRMPlDdVmT5dT3i4whNPOCr8fPlU1co+TKdPqxaBX32lY/ZsGyNH\n1myU4LlNNxqN1S4Sx44JDBhg5ODBSsjHZbBa1TwzTVGXkyPy55/qqbo2koiPr7jd1yhWmhm6LMuu\nXcKiRWGcOqVj7lw7RUUCzz1n4KuvJF57zbdtYiBQFNVRrVs39T1XUmKu8nc02iLgmovWBEVFEB1t\n4q+/qlDQuNZauQ+xxSIxe3Yo69frWbTIxjXXlLiolTqdjp9//plp06bx2GOPceedd9aou42NjWXB\nggWumPRt27Z5Fe7k5GR2797N0qVLOXz4MAMHDuTgwYOXfCddrzpdh0Pl05aUlJSxGNTuacgQB7t3\nQ9u2YXTubCIxUSEhQSYxUa5gOXih4FnIfPEwQ0M1nq43fI0lfHnJCoLExx+H8tJLodx2mzrLbty4\n+i/cM323NrsEUVRwOgN7fqOxIs+0sNAdOfTFFxLTpukpLdW2+066dy+lWzcrrVp5d+DatUlNNTBh\nQgmffqrw7LPhXHedjW3bimnaVERRJASh+jNQQYB27RSeesruk73gCc+/d12cJWjx64Gv1T+H+Oef\nYezYUHr1srFx40kaNVKw2wXWrl3LVVddxeeff86RI0f44osvuPzyy2u03kBi0iMiIigqKsJut1NQ\nUFDntMgLhXpVdLWcNJ1O55Jgnjhhxul0otfrcTiM7N6tJztbZN061QfX4RCIj3eSmOiWvp7vM4BA\nCpnJVDHY0Bd8fZi2b1dNVADWrCkkJsaKoiiUlOgCHkt4jhLqQgItimpnWFNERMC118pce627EB87\nBpmZMpmZ8M47JnbuDKdhQ8VL1tyzJzidImlpesLDG3LokMDy5Rb69LHjcMhYrVXPh6uCw1FRIuuJ\nqmTGNYHVKmA01m7TarUKzJoVwscf65g3z8r115ux2RSMRiM2m43U1FTmzJnDyZMn6dmzJy+++CIL\nFy6s0SFdIDHpI0eOZP369TRr1gyHw0FaWlqtXt/FgnpTdGVZ5uGHH+avv/6iV69eNGjQgD179vDy\nyy8TGhpaFlppJzZWR3y8xKOPqh+k48clMjNFsrLcRjCtW6sf1MRE9US9c+fK019rs+ZAC1lISNXe\nC+Vx5oxKVfriCx0zZ9oYNcqJKBoBY4Vu2J+1I+Bl/FJXB47+kiNqCqfTSXh4Kdddp3DTTaFIkgNZ\ndpCX5+blrlunBmNaLOr6s7NFPvnESlwcFUQulR3UVSXk0CLYy6M6MuPqorYc3Zwckf/8R5U1//xz\nMWFhZmRZpGHDhjgcDhYuXEhJSQlbt26lWbNm7Nixg/37959T79vFixej0+k4fvw4e/bs4cYbb+Tw\n4cOXvN9uvSm6oiiyfPly0tLSGD9+PEeOHGHAgAHcddddREdHk5CQQO/evV2GF9phQni4yJAhEjfc\noH6YnE6R3FyRrCyJn3+WWLBAz19/ufPLEhNlEhLc+WU1QWXGNP6gyoADe7PJMqxaJTFjhoHhwx3k\n5JTSpIn3z1Q1lvDM1dIEH3U5A5c8kiNqg8oKmShCdLRCdLSTu+5y8uuvAmPGGMjIUG8mN97oZMIE\nA7/9phroeDIm2rcXKmy9K1ONeavHKhZdp9PpogHWtaAFal50bTaYM0fPe+/pePVVK8OGmV3xOXq9\nntzcXNfc9ttvv3Wtu3///vTv37/G6w0kJn3Lli08+OCDhIaGkpSUxBVXXMGvv/560fji1hT1puiC\nWkiKi4u5//77eeSRR9Dr9TidTg4cOEBaWhpvv/02ubm5hISEEBsbS0JCAklJSURERHjNPzt0kOjU\nSeL++9WO5u+/1U4pK0tk2TIdY8YYaNhQcRmxJCbK9OghB/Smr64xjQZNkVYVdu8WeOwxAw4HrF1r\npVevwCqb51hCk0k7nU5XEdMOfLRCUz6Drbqoi043UL8Emw3mzdOxdKmep56ys2GD1WvnUlSkqq5y\nckS+/lpi5kw9Z89WDApt0cJ/woInm8RsjgBk7HYHoihit9t9RufUJWoyXtizR40+b9lSZtu2EsLD\n3fE5siwzf/58Nm7cyPLly+nUqVOdrjeQmPTrrruO9evXM3jwYH7//XcKCgou+YIL9azoAgwZMsRl\ncgEqnapz58507tyZBx98EEVRKC4uJjs7m7S0NFavXs3JkyeJiooiPj6epKQkunTpUmbdp3IcdTq4\n+mqJAQO0baVEXp5ahLOyRD7+2MCvv6oBjZ6F2PM0XeNgauqdyjT+vlCVtePff8Ps2XrWrtUxY4aN\n++5zVtvqsLzEuGHDhhUKWV0JFWrT6QYamwOqym7cOANRUQrbtlmIiqpYmBo2hP79Zfr3r2gEn50t\n8c476o3WZHLPhzVTmPBwtRBrRi6yLKMoIpIkVzD60a5dXZkgeaI6na7DoSZTLF2q54UXbIwYUeLV\n3R48eJBJkyYxZMgQNmzYcM7UmVXFpN91113k5uYSHx9PZGQkCxYsOCfrON+oV5SxmkKWZQ4fPkxa\nWhrp6ens2rULRVHo3r078fHx9O7dm+bNm3sVnPKJuxaLyK5d6nw4O1skM1PEalUP6WJjbfToYSEp\nSSAysmZzvA0bRBYt0vPll95kfkWBjz6SmD5dz//7fzIzZ9qqVD35gibf9ZSdBoKqqEf+5p9mM0RF\nmTh9unqDao0GptPpMJlMfq9lUZFKjfv8c4lXXrFz++01o4G5X6caPaPR1rKzRXbvFomK8jaC79pV\nZtIkPb16WbnzzmKX0Y+/61OTgzpfSE1VTX3Wr/cdaa9h/341+jwiAhYvLqVpU3d8DsCyZctYu3Yt\nS5YsoXv37jVeTxD+ESy6PqDNCXfu3ElaWhoZGRkcPnyYpk2bkpiYSGJiIj179sRgMLjMbKCiSOHP\nP2XS0pxs325k504jO3eqH1J3N+wkJsa3dV55bN0qMmuWng0b3B+qvXvVUUJpKcybZ/fynK3ua63L\nw53yeVpOp9Nr/qnT6XA4JK64IowzZwIrur68CPzh229FHnvMwD/+IfPii7YK8+y6gmYErzquuX0b\nzGaBBg1kXn/dRkKCQnS0t8F6+RuV5sRWG6Ofr7+WeP99if/7P5vP7zudsHixjjfe0DN9uo1Ro8zY\nbG662pEjRxg/fjyJiYnMmDHDy7QpiLpFsOgGCEVROHHiBOnp6aSnp5OdnU1paSlXXXWVqxtu06YN\niqJQVFTk2vJqWnl1eynyyy8imZnujvjoUdV827MQt2hR8fmzs1UF2bZtVs6ehRdf1LNmjY5p0+yM\nHu2oEbvCc75c1+m75eGpiFK7aidt2zbn+PF8r464fJGpjhDjxAl44gkDO3eKLFxo86KTnWtoI4/C\nQgfXXBNJZKRChw4K2dkiBQXuJGRtPOF2GHP/flU3Ku36+Hr9n34qsW6dxIoVFYtuXp4qSZYkWLrU\nQvPmJQCuncLq1at57733mD9/PklJSefmAgXhQrDo1gIOh4N9+/a5uuHc3FwKCws5deoUc+bMYciQ\nITRs2LDSD1Fhoarnz8xUi3F2tkhoqFLGklD/9ewpc+iQwL33GnnySTvPPqtn8GCZWbNsREZWf921\nke/WFZxOhYiIUAoKCv1uu7WYeC2J2d+ho6LAihUqW+Peex1MnWqv80ywylB+5HHPPUZuvdXJ7ber\n89z8fFXI4dkRS5I3f7hXL5lGjcq/Lu8bVWUeCqtWSfzwg8SyZe6iK8vw9ts6Xn5Zz5NP2njwwVJs\nNouruz158iSTJk2iXbt2vPTSS5iqedGqkvGCyscdO3YsxcXFNG/enM2bN1fv4tZDBItuHeG3336j\nf//+DBgwgFtuuYVffvmFjIwMCgoKaNu2rYuy1qlTJwRB8PoQeTMBJA4dch/SZWaKHDggYja7u5t3\n3rFeMPluXUFRoEGDUIqLza7X4ek9rDFJwLflpbbugwcFJkwwUFQES5bY6N79/L2dFUVxJQV73rzu\nusvA3Xc7faZKqL8Hf/zh9pfIyRHZuVPk8svdRj9xcZoRvPfzlaeuOZ1OBEFg1aoG7NmjZ+FCa9lo\nS/VMMJvhzTctREW5bU1FUeTzzz9n0aJFvPLKK1xzzTXnRMarnYvMmzePQYMGkZ+fX21/hvqIesde\nuFBo3bo169evrxCyJ8syeXl5pKWlsWrVKvbs2YMoivTo0cNFWWvWrBmyLLu4sS1aSNxyi8Ttt6uF\nxmoVWb9exwMPGBk+3MHMmXqeftpAfLzKGU5M1Dxq/a+vruS7dQVBAEFQkGVcoxHNIc5msyFJkiuB\nQCswnrQsWZZ4880wli5Vu/+xY53nRMDiD5VF5/gTR2gQBGjdWqF1aye33eY2gt+/312IV65UGTGd\nOslehbhTJwW9viK/2m4XMRplSkstrFxp4OWXwxk7tpRHHy1Flu0Igp7Q0FDOnDnDlClTiIiIYMOG\nDYSHh9fo9Qci483OzqZ79+4MGjQIIFhwy3DJFN1AtjJTp05lzZo1NG7cGI8wJQAAFkRJREFUmFWr\nVp1XTp8oij5TTUVRJDo6mujoaO69914URcFsNrN9+3bS0tKYOnUqR48epUWLFiQkJJCYmEj37t0R\nBMGryAwbJnH6tLvb++svdyf82mtqFM2VV3of0nXurCCKdSvfrUtotDH1f/2PPDw9ZBVFIStLYPx4\nI82bO0lJKeDKK+2YzXXLBvAHbZ1Op5PQ0FCfB3p2u4BOV72OW5KgSxeFLl20JGQ7paVqfE52tsjm\nzWp8zokT7gBObTzRsqWAw6Hj7FmRe+9tysmTsH59Ce3amV1OawMHDkSSJP766y/+9a9/8dBDD9Gg\nQYMaX4dAZLwpKSkIgkD//v1p1KgR48aN86Jz/q/ikim6EydO5K233nJtZUaOHOl158zMzGTr1q1k\nZ2eTkpLC448/zldffXUBV+wbWqfpqehRFIUjR46Qnp7Ot99+y4svvojNZqNr166ubrhly5YuBzKz\n2UyDBiKDBkkMHaqOJmRZZP9+dS6clSXy5ps6jhwR6NrVTny8RJ8+AklJSllq7cUBUQSHQ0FRApMZ\nFxfDCy8Y+OQTHXPm2LjjDieCEOrX1rE2bIDy8LRf1OtV425/j6UFU9YWJlPFHLOCAvd8+KOPJCZP\nVlkGJ0+qa5k2zcbEiaU4HKXo9eoIqaioiLi4OOx2O7fccotL/fXNN9/QuXPn2i/UDywWCzt37mTj\nxo2YzWYGDx7M3r17qz07rm+4JIpuIFuZjIwMRowYQZMmTRg5ciTTpk27IGutCQRBICoqiqioKP75\nz38CavTQ7t27SU9P55VXXiEvL49GjRoRFxdHUlIScXFxGAwGL0lq27YS0dE6Ro1ShR1nz4rk5oaR\nk6NjxQqJCRNEQkIUl7lPYqJ6SHcOIqwCgiRBcbGZkBDZb9eo4fvvRSZONNCvn5rA4LlT9VTTaVQn\nf2qxmngPe9LVqlonVB5MWVs0aeLt63viBIwYYeTkSYlevZxMnHjW1YVLksTWrVuZMWMGTz75JLff\nfnuddf+ByHj79OmD1WqlRRkdJz4+ni1btvzPd7uXRNENZCuTmZnJPffc4/o6MjKSvLw8l9fCpQaD\nwUB8fDzx8fGMGzcORVE4ffo0GRkZpKWlsXjxYs6ePevyldC06enp6cTFxSGKIg0bKvTta2bAAPch\n3W+/uQ/pPvtMzy+/iHTsqJCY6HSNJjp0OLd2l9rcVhBCEAQdDRr45wafPAlPPWUgM1Nk8WKbl4l4\nZfCk63mqxdzRNlUbedfUXNzhgPNBCPn8c7XTveceB99+W4wsu+NzSktLef755zl27Bjr16+neW3M\nQnwgEBlv7969mTlzJmazGYvFwo4dO+jbt2+druNSxCVRdAOBdrLriYtldlkXEASBZs2aceONN7pu\nNpqvxM8//8wzzzxDWloaCQkJJCQkuCTNERERyLLs2nI3by4xfLjEbbeps2GrVWD3bpU3/N13Ei+8\noKe4WCAuTnYV4rg4uc4EBp5+CTqdgF5v9FngFQVWr5aYNs3AyJEOMjMthIXV7rkD9R7WOmAt+DGQ\n7tYT57LTBdWIfsoUlY/88ccWunVzx+fodDoyMzN5+umnGTt2LKNGjTpn/OuqZLxNmzZl9OjRLhnv\nrFmzajVHri+4JChjhYWFXHvttezYsQOA8ePHM3ToUK9Od9GiRTgcDh577DEA2rdvT15e3gVZ7/nG\nV199xdNPP82SJUvo1auXy1ciIyODkydP0rJlS9chXdeuXV0FpTzvU6OunTwpkJXltrzcsUOkRQu3\n8XtCgpMuXZRqdXO+/BJatgxlz56KDmiHDglMnGjg9GmBpUut9Ox5/t6i2tzcZrMhiqLrZl7e8rKy\nQnb11SEsWWIlNrbu1/3NNxITJui5/XYnzz5bCphd/GCbzcacOXPYs2cPycnJtGrVqs6fP4ja45Io\nuuDmBLZq1YqhQ4dW4ARmZmYyefJk1q1bR0pKCqtXr74oD9LOBbRuzZfIoTJfibi4OHr37k2LFi0q\n+Ep4FmFFUZV0qqeEKuA4fFigRw/ZoxDLXplinvAUD4SEhLgKVqtWJrZvd89nHQ5YtEjHvHl6Jk+2\nM26c45x2jOXhaS7uKcYo7y3hz3tY21klJYWwbJm1Rrlz/lBYCE8+aWDbNpHkZCvx8WZXfI5er2f3\n7t1MnjyZUaNGMWbMmEvec7Y+45Ipuj/++CNjxoxxbWUmTJjgtZUBePrpp1mzZg1NmjRh5cqVxMTE\n1MlzV0VXW7VqFa+++ioAXbp04fnnn6djx4518tx1jap8JRISEoiNjcVoNFZQ0nkWmaIit/GLKmmW\n0Ovd3bCa4utAFP37JbRpYyIjo5TmzWHHDoFHHzXStKnCwoU22rY9vyKH6kTnVGbyo9PpuPrqRqxc\naaFz57oZcaWmiowda2DoUCczZ5YiSaVIkoTJZMLhcDB//ny2bNlCcnIy0dHRtX6+IM4tLpmieyFR\nlfImLS2Nzp07ExERwQcffMDGjRtZsWLFBVxx9eDLV8JsNnPVVVe5lHSar4S/Tk8UJQ4fFl0jicxM\ngdxckehomcREN2PC0/ylXTsTGzZYWL5cx0cf6XjxxZoFZdYGnt1taGhojTtET7ZEXFw4q1adoU0b\ne628h4uK4Nln9aSkSCxdauXqq7272wMHDjBp0iSGDRvG5MmTL7jgJYjAECy6VaD8PHnChAkMGTLE\na57sifz8fHr16sUff/xxPpdZ5yjvK3HgwAEaNGhAXFwc8fHxJCQk0LBhQ5ds1/MASivKgmAiN9fg\nZXdZWCiUKelkXn5Zk806mDOnZj4SNYWnu1pdi0ZiYkL49lsrrVo5K3TDEJj38NatImPGGOjfX+bF\nF80YDKUuYyJFUXjrrbf48ssvWbp0KV27dq32GgMRG4HKHOrTpw+ffPIJt912W7WfZ+fOnYwdO5ai\noiKuuOIKHnvssQrUsv811Bv2wrlCIHQ1T7z99tvcdNNN52t55ww6nY4ePXrQo0cPxowZg6IoFBYW\nkpmZSVpaGsuXL/fylejZsye7du0iISGB6OjosgMoM126WOneXWLMGPchXXa2REaGu+PLyhKZOtXg\n4g537SpzLp0Fz3V0jkYZCzQSyXOGbrVKzJoVwuefSyxcaGPgQHOZ7aZ6Yzh8+DATJ06kb9++pKam\n1tisqCqxEajX6amnnmLo0KEVmEGBIiwsjBUrVtC+fXsOHjzIDTfcwK+//lqjx6ovCBbdOsTGjRtZ\nuXIlP//884VeSp1DEAQaNWrE9ddfz/XXXw+4fSXeffddbrvtNtq2bct3333nGkskJSURGRnpMkhX\nSfsi//iHxODBOp57Tj2kO3DAfUj33ns6fvtNoFs32UvE0bJl7bnD57K79YTD4VsG7C/2XCvC6ekw\nbpyJbt3spKaeoVEjJyUlDoqKimjZsiUffPABK1euZMGCBSQkJNR4fYGIjUBlBI0YMYKsrKyAHjcr\nK4uHHnqIzMxMHA4HSUlJfPLJJy7VW4cOHTAajfz222+0bdu2xuu/1BEsulUgEOUNwO7duxkzZgzf\nffcdjSpznqlHEEWRVq1a8eOPP/Lhhx9y0003eflKPP300xw7dowWLVq4eMPdu3dHkiQvJV2bNjra\nt5e4+261IJWUqHaXWVkia9ZIPP64AVH0PqTr1UumOpTPQPPU6gIOh9vEpyqohj46Zs82sXKljjfe\nsDJ0qBmbzYlOp+PQoUMMHz4cp9NJs2bNuOeeeyguLq7V+gLZvR09epR169axadMmsrKyAro5JSQk\ncPPNNzNt2jRKS0u55557vGTG27ZtQ5Kk/+mCC8GiWyUCUd788ccf3H777axatYoOHTpciGVeMBiN\nRn766SfXh7K6vhIJCQm0bt3axY/VttsJCRK9e7sP6f78062ke+45PXv3irRrpyrptELcqZN3QoP2\n/Bo/+Hx5B1dHkbZjh8B//mOkQweZtLQSGjQw43Ti8qA4ePAg7du35/HHH8fpdJKVlcX777/PP/7x\nj3P6GiZNmsScOXNczm+BjhdmzJhBfHw8JpOJRYsWuf770aNHefDBB1m5cuW5WvIlg+BBWgCoiq72\n0EMP8fnnn7vI6Hq9nszMzFo/7/k67DjfsNls7Nq1i4yMDNLT08nLyyMiIoL4+HgSExNdH1pf5u/a\n7NNmE9i7V/LyHS4oUJV0mstabKwdk6mkAj/4XKNZMxOHD5dWqqCz2+HVV/W8846OOXOs3HJLqVd8\nzunTp5kyZQqRkZG88sorNGzYsM7WF4jYqF27dq5Cm5+fT2hoKO+88w4333xzpY99/Phx+vfvT0hI\nCJmZmYSGhnL27FmuvfZapk2bdkm8P881gkX3IkZVVDVQDzsGDx5MaGgoo0eP5vbbb79Aq605yvtK\nZGVluXwltLFEx44dveafUJEFkJ+v5pVlZYmkp8OOHTqaNlVISlJcs+Fu3c7tIR1Ao0YmTp4s9fs8\ne/eq3W2LFgqLFlmIiHDH54iiyDfffMNrr73G7NmzGTx48DmZO1clNvLE6NGjuemmmwIqmDfffDN3\n3303hw4d4vjx47zxxhsMHTqU4cOHM2HChLp+GZckguOFixTn6rDjYkRlvhJpaWksW7aM3NxcjEYj\nvXr1ch3SNWrUyIsFEBIiMmCAyNVXO3j8cT0GQwj//a+7G37/fQOHDlU8pIuKqjuDH0XR/HQrfs/h\ngPnzdSxapGfmTBsjR5ZitVrQ69Xu9uzZszz11FMIgkBKSgqNGzeum0X5QFW+CTXBhx9+iNFo5K67\n7kKWZa6++mo+/vhjtm7dSkFBAe+99x4AH3zwwf900nCw071IsXHjRpYvX85HH30EQHJyMkePHuWF\nF15w/czRo0cZNWoUmzZt4oEHHgi4G7kUoQV+Zmdnk56eTkZGBidOnCAqKoqEhARiYmLYsmULd955\nJ61atUKWZZ+eCWaz+5BOHUtIKApeLmu9esnUdDfvdEJEhIniYu+U419/VaPPGzSAxYstREZ6x+ds\n3ryZ559/nmeeeYZbbrmlXpk1BeGNYKd7CaOmhx2XIgRBIDw8nIEDBzJw4EDA7Ssxf/58Zs2aRVxc\nHDk5OcTExLjGEldccUWFQ7r4eImkJC1vTeTIEXcRnjVLz+7d6iGdWoTVYnzVVRUP6Xyh/CGaLMOS\nJTpee03Ps8/auO8+NRxSklSDcbPZzPTp0ykoKOCbb74h8nwqRIK4IAh2uhcpzuVhR31CYWEhw4YN\n49VXX6V3795+fSU0pkSvXr18+kp4zocdDpG9e92S5qwskVOn3Id0CQky8fFOLrus4nqKi6FtWxOn\nTpVy6JDAmDEGFEWNPr/iCrPLCF0URdLT03nmmWeYMGECd999d7C7/R9BsOhexDhXhx3/S1AUhb/+\n+ss1kijvK5GUlETbtm2rPKQ7fVoNjczMVC0vc3JEGjdWXA5rCQlqem9pKcTEmJg1y87s2XqmTLHz\nn/+UYrOVuhKYrVYrL774Ir/++ivJyclceeWVF/gqBXE+ESy6FzECcVbTcC6KbiCUtaysLMaOHUtx\ncTHNmzdn8+bNdfb85wq+fCXCwsKIi4tzdcTh4eE+HcTcijKR//7X7SmRmSmRlydgNMKZMwLx8U7e\nestCq1alOJ1Ol8vazp07mTJlCqNHj+ahhx6qEY2tPrne/S8iWHSD8IuqKGuaL++8efMYNGgQ+fn5\nl2TMdnlfiYyMDC9ficTERGJiYlzm7w6HA6iYt2Y2i2zZIvHPfxrJzy/Eblcj2kNCQnA4HMydO5f0\n9HSSk5NrFSNV313v6juCRTcInwjEXS0rK4v58+ezatWqC7XMcwZZljl48CBpaWlkZmaye/duRFGk\nZ8+eXr4Smsuap3GNNis2GAyYTCb279/PxIkTue2225gwYUKtLBj/V13v6hOC7IUgfCIQfX5KSgqC\nINC/f38aNWrEuHHj6k3SqyiKdOzYkY4dO3LfffehKIpPX4nmzZu7umGHw8GJEycYOnQohYWFxMfH\nEx0dTX5+Pk888QQjRoyoteft/6rrXX1CsOgGUWNYLBZ27tzJxo0bMZvNDB48mL1792IymS700uoc\ngiD49ZXYvHkzTz75JHl5eQwYMIC0tDTatGlDUlISnTt3plmzZnz//fe8/PLLHDp06Lxdn/rsencp\nI1h06zGGDh1KRkYG/fr1Y/369dX63UDc1fr06YPVaqVFixYAxMfHs2XLlnrT7VYFQRCIiori4MGD\ndOvWjU2bNhEWFsauXbtYsWIFkyZN8uoyFUWpNS0s6HpXD6AEUW+RmpqqrF+/Xhk2bFiNfr9nz57K\njz/+qPz2229Kp06dlFOnTnl9Pz8/X0lISFBKSkqU06dPK9HR0UpRUVFdLP2SgsPhOK/PV9Xf5fDh\nw0qHDh2U9PT087quIAJDMDK0HiArK4sePXpgtVopKSmha9eu5ObmMnDgQBpUx3S2HDR9/qBBgxg7\ndqxLn6/R1po2bcro0aOJj4/n1ltvZdasWbV6vvLYsmULMTExREdHe9kEaigtLeW+++4jNjaWa665\nhnXr1tXZc1cH5zubrKq/y6xZsygoKGDMmDHExsaSmJh4XtcXROUIshfqCaZPn47FYqG0tJSoqCie\neuopADZv3szrr79e7fHCxYCqqFHJycns3r2bpUuXcvjwYQYOHMjBgweDyq4gLmoEZ7r1BP7Moy9V\nBOKyFhERQVFREXa7nYKCAkJDQ4MFN4iLHsHxQj1Bfn4+JSUlFBcXuyLFgUu2CPmjRnli5MiRrhib\nfv361Uu+cBD1D8GiW0/w8MMPM3v2bO6++27XaAGo185jixcvRqfTcfz4cTZt2sSNN96ILMsXellB\nBFEpgkW3HsDTPPrpp58mKyuLH374gQEDBnDHHXeQmppKVFQUGzZsuNBLDRgJCQns37/f9fW+ffvo\n3bu3189s2bKFf/3rX4SGhrpsHC/meO+qDgYBpk6dSrt27YiLi/N6/UHUI1xg9kQQQfhFVdSo5ORk\n5dFHH1WcTqeSl5endOjQ4QKtNDBor+f333/3+XoyMjKUvn37KqdPn1ZWr16t3HjjjRdopUGcSwQ7\n3SAuWlRFjbrrrruQJIn4+HgeeeQRFixYUGfP/cADD9C8eXO6devm92eq05V6Hgy2bt3adTDoiYyM\nDEaMGEGTJk0YOXIkv/zyS+1fSBAXHy501Q8iiIsRW7ZsUbZv36507drV5/er25Vu2LBBueuuu1xf\nv/nmm8q0adO8fmbUqFFKSkqK6+ukpCTl4MGDtXgVQVyMCHa6QQThA/379680GPJcdKWKj8ilS5V9\nEoR/BItuEEHUAJmZmXTu3Nn1dWRkJHl5eX5/PpCDwaSkJHJzc11fnzp1inbt2tXhqoO4GBAsukEE\nUQNUtyuNiIgAVAbD77//zoYNG0hKSvL6maSkJNauXcvp06dZvXo1MTExdb/wIC44goq0IIKoAbSu\nVHNUC6Qr1Q4Gtfgl7WAQVJ51YmIi/fr1Iz4+niZNmrBy5cpz/jqCOP8Iei8EEYQf/P7779x0003s\n2bOnwvcyMzOZPHky69atIyUlhdWrV/PVV19dgFUGcakh2OkGEYQPjBw5kh9//JH8/HyioqKYOXMm\ndrsdCHalQdQOwU43iCCCCOI8IniQFkQQQQRxHhEsukEEEUQQ5xHBohtEEEEEcR7x/wF6xDF4iqLE\njwAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 42 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 42 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From a510755926ceb8a9ec89fa946932bbc7ecfd9399 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 15:07:32 -0700 Subject: [PATCH 092/359] Moved projectFace/EdgeVector to the base mesh class, along with some default normal and tangents. --- SimPEG/BaseMesh.py | 45 +++++++++++++++++++++++++++++++ SimPEG/LogicallyOrthogonalMesh.py | 12 --------- SimPEG/TensorMesh.py | 7 ----- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/SimPEG/BaseMesh.py b/SimPEG/BaseMesh.py index 9d8982e6..c5a7121a 100644 --- a/SimPEG/BaseMesh.py +++ b/SimPEG/BaseMesh.py @@ -308,6 +308,51 @@ class BaseMesh(object): return locals() nF = property(**nF()) + def normals(): + doc = "Face Normals" + + def fget(self): + if self.dim == 2: + nX = np.c_[np.ones(self.nF[0]), np.zeros(self.nF[0])] + nY = np.c_[np.zeros(self.nF[1]), np.ones(self.nF[1])] + return np.r_[nX, nY] + elif self.dim == 3: + nX = np.c_[np.ones(self.nF[0]), np.zeros(self.nF[0]), np.zeros(self.nF[0])] + nY = np.c_[np.zeros(self.nF[1]), np.ones(self.nF[1]), np.zeros(self.nF[1])] + nZ = np.c_[np.zeros(self.nF[2]), np.zeros(self.nF[2]), np.ones(self.nF[2])] + return np.r_[nX, nY, nZ] + return locals() + normals = property(**normals()) + + def tangents(): + doc = "Edge Tangents" + + def fget(self): + if self.dim == 2: + tX = np.c_[np.ones(self.nE[0]), np.zeros(self.nE[0])] + tY = np.c_[np.zeros(self.nE[1]), np.ones(self.nE[1])] + return np.r_[tX, tY] + elif self.dim == 3: + tX = np.c_[np.ones(self.nE[0]), np.zeros(self.nE[0]), np.zeros(self.nE[0])] + tY = np.c_[np.zeros(self.nE[1]), np.ones(self.nE[1]), np.zeros(self.nE[1])] + tZ = np.c_[np.zeros(self.nE[2]), np.zeros(self.nE[2]), np.ones(self.nE[2])] + return np.r_[tX, tY, tZ] + return locals() + tangents = property(**tangents()) + + def projectFaceVector(self, fV): + """Given a vector, fV, in cartesian coordinates, this will project it onto the mesh using the normals""" + assert type(fV) == np.ndarray, 'fV must be an ndarray' + assert len(fV.shape) == 2 and fV.shape[0] == np.sum(self.nF) and fV.shape[1] == self.dim, 'fV must be an ndarray of shape (nF x dim)' + return np.sum(fV*self.normals, 1) + + def projectEdgeVector(self, eV): + """Given a vector, eV, in cartesian coordinates, this will project it onto the mesh using the tangents""" + assert type(eV) == np.ndarray, 'eV must be an ndarray' + assert len(eV.shape) == 2 and eV.shape[0] == np.sum(self.nE) and eV.shape[1] == self.dim, 'eV must be an ndarray of shape (nE x dim)' + return np.sum(eV*self.tangents, 1) + + if __name__ == '__main__': m = BaseMesh([3, 2, 4]) print m.n diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index 71788230..cfa8b7ed 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -319,18 +319,6 @@ NyX, NyY, NyZ = M.r(M.normals, 'F', 'Fy', 'M') _tangents = None tangents = property(**tangents()) - def projectFaceVector(self, fV): - """Given a vector, fV, in cartesian coordinates, this will project it onto the mesh using the normals""" - assert type(fV) == np.ndarray, 'fV must be an ndarray' - assert len(fV.shape) == 2 and fV.shape[0] == np.sum(self.nF) and fV.shape[1] == self.dim, 'fV must be an ndarray of shape (nF x dim)' - return mkvc(np.sum(fV*self.normals, 1), 2) - - def projectEdgeVector(self, eV): - """Given a vector, eV, in cartesian coordinates, this will project it onto the mesh using the tangents""" - assert type(eV) == np.ndarray, 'eV must be an ndarray' - assert len(eV.shape) == 2 and eV.shape[0] == np.sum(self.nE) and eV.shape[1] == self.dim, 'eV must be an ndarray of shape (nE x dim)' - return mkvc(np.sum(eV*self.tangents, 1), 2) - if __name__ == '__main__': nc = 5 h1 = np.cumsum(np.r_[0, np.ones(nc)/(nc)]) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index 5218aec1..67581e10 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -184,13 +184,6 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): _gridEz = None # Store grid by default gridEz = property(**gridEz()) - def getBoundaryIndex(self, gridType): - """Needed for faces edges and cells""" - pass - - def getCellNumbering(self): - pass - # --------------- Geometries --------------------- def vol(): doc = "Construct cell volumes of the 3D model as 1d array." From 262aacce85ae2095d92632ac726be07850339db2 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 15:09:01 -0700 Subject: [PATCH 093/359] Update tests with new calls. Note that there seem to be problems with rotateLOM on some operator tests. --- SimPEG/tests/test_massMatrices.py | 68 +++++++------------ SimPEG/tests/test_operators.py | 106 ++++++++++++++++-------------- 2 files changed, 79 insertions(+), 95 deletions(-) diff --git a/SimPEG/tests/test_massMatrices.py b/SimPEG/tests/test_massMatrices.py index 07d67e9c..13037156 100644 --- a/SimPEG/tests/test_massMatrices.py +++ b/SimPEG/tests/test_massMatrices.py @@ -64,33 +64,21 @@ class TestInnerProducts(OrderTest): analytic = 69881./21600 # Found using matlab symbolic toolbox. if self.location == 'edges': - if self.M._meshType == 'TENSOR': - Ex = call(ex, self.M.gridEx) - Ey = call(ey, self.M.gridEy) - Ez = call(ez, self.M.gridEz) - E = np.matrix(np.r_[Ex, Ey, Ez]).T - elif self.M._meshType == 'LOM': - cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] - Ec = np.vstack((cart(self.M.gridEx), - cart(self.M.gridEy), - cart(self.M.gridEz))) - E = np.matrix(self.M.projectEdgeVector(Ec)) + cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] + Ec = np.vstack((cart(self.M.gridEx), + cart(self.M.gridEy), + cart(self.M.gridEz))) + E = self.M.projectEdgeVector(Ec) A = self.M.getEdgeInnerProduct(sigma) - numeric = E.T*A*E + numeric = E.T.dot(A.dot(E)) elif self.location == 'faces': - if self.M._meshType == 'TENSOR': - Fx = call(ex, self.M.gridFx) - Fy = call(ey, self.M.gridFy) - Fz = call(ez, self.M.gridFz) - F = np.matrix(np.r_[Fx, Fy, Fz]).T - elif self.M._meshType == 'LOM': - cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] - Fc = np.vstack((cart(self.M.gridFx), - cart(self.M.gridFy), - cart(self.M.gridFz))) - F = np.matrix(self.M.projectFaceVector(Fc)) + cart = lambda g: np.c_[call(ex, g), call(ey, g), call(ez, g)] + Fc = np.vstack((cart(self.M.gridFx), + cart(self.M.gridFy), + cart(self.M.gridFz))) + F = self.M.projectFaceVector(Fc) A = self.M.getFaceInnerProduct(sigma) - numeric = F.T*A*F + numeric = F.T.dot(A.dot(F)) err = np.abs(numeric - analytic) return err @@ -164,31 +152,19 @@ class TestInnerProducts2D(OrderTest): analytic = 781427./360 # Found using matlab symbolic toolbox. z=5 if self.location == 'edges': - if self.M._meshType == 'TENSOR': - Ex = call(ex, self.M.gridEx) - Ey = call(ey, self.M.gridEy) - E = np.matrix(np.r_[Ex, Ey]).T - elif self.M._meshType == 'LOM': - cart = lambda g: np.c_[call(ex, g), call(ey, g)] - Ec = np.vstack((cart(self.M.gridEx), - cart(self.M.gridEy))) - E = np.matrix(self.M.projectEdgeVector(Ec)) - + cart = lambda g: np.c_[call(ex, g), call(ey, g)] + Ec = np.vstack((cart(self.M.gridEx), + cart(self.M.gridEy))) + E = self.M.projectEdgeVector(Ec) A = self.M.getEdgeInnerProduct(sigma) - numeric = E.T*A*E + numeric = E.T.dot(A.dot(E)) elif self.location == 'faces': - if self.M._meshType == 'TENSOR': - Fx = call(ex, self.M.gridFx) - Fy = call(ey, self.M.gridFy) - F = np.matrix(np.r_[Fx, Fy]).T - elif self.M._meshType == 'LOM': - cart = lambda g: np.c_[call(ex, g), call(ey, g)] - Fc = np.vstack((cart(self.M.gridFx), - cart(self.M.gridFy))) - F = np.matrix(self.M.projectFaceVector(Fc)) - + cart = lambda g: np.c_[call(ex, g), call(ey, g)] + Fc = np.vstack((cart(self.M.gridFx), + cart(self.M.gridFy))) + F = self.M.projectFaceVector(Fc) A = self.M.getFaceInnerProduct(sigma) - numeric = F.T*A*F + numeric = F.T.dot(A.dot(F)) err = np.abs(numeric - analytic) return err diff --git a/SimPEG/tests/test_operators.py b/SimPEG/tests/test_operators.py index 03ea36d1..315aedf6 100644 --- a/SimPEG/tests/test_operators.py +++ b/SimPEG/tests/test_operators.py @@ -4,7 +4,15 @@ import sys sys.path.append('../') from OrderTest import OrderTest -MESHTYPES = ['uniformTensorMesh', 'uniformLOM'] # , 'rotateLOM' +MESHTYPES = ['uniformTensorMesh', 'uniformLOM', 'rotateLOM'] +call2 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1]) +call3 = lambda fun, xyz: fun(xyz[:, 0], xyz[:, 1], xyz[:, 2]) +cart_row2 = lambda g, xfun, yfun: np.c_[call2(xfun, g), call2(yfun, g)] +cart_row3 = lambda g, xfun, yfun, zfun: np.c_[call3(xfun, g), call3(yfun, g), call3(zfun, g)] +cartF2 = lambda M, fx, fy: np.vstack((cart_row2(M.gridFx, fx, fy), cart_row2(M.gridFy, fx, fy))) +cartE2 = lambda M, ex, ey: np.vstack((cart_row2(M.gridEx, ex, ey), cart_row2(M.gridEy, ex, ey))) +cartF3 = lambda M, fx, fy, fz: np.vstack((cart_row3(M.gridFx, fx, fy, fz), cart_row3(M.gridFy, fx, fy, fz), cart_row3(M.gridFz, fx, fy, fz))) +cartE3 = lambda M, ex, ey, ez: np.vstack((cart_row3(M.gridEx, ex, ey, ez), cart_row3(M.gridEy, ex, ey, ez), cart_row3(M.gridEz, ex, ey, ez))) class TestCurl(OrderTest): @@ -12,24 +20,26 @@ class TestCurl(OrderTest): meshTypes = MESHTYPES def getError(self): - fun = lambda x: np.cos(x) # i (cos(y)) + j (cos(z)) + k (cos(x)) - sol = lambda x: np.sin(x) # i (sin(z)) + j (sin(x)) + k (sin(y)) + # fun: i (cos(y)) + j (cos(z)) + k (cos(x)) + # sol: i (sin(z)) + j (sin(x)) + k (sin(y)) - Ex = fun(self.M.gridEx[:, 1]) - Ey = fun(self.M.gridEy[:, 2]) - Ez = fun(self.M.gridEz[:, 0]) - E = np.concatenate((Ex, Ey, Ez)) + funX = lambda x, y, z: np.cos(y) + funY = lambda x, y, z: np.cos(z) + funZ = lambda x, y, z: np.cos(x) - Fx = sol(self.M.gridFx[:, 2]) - Fy = sol(self.M.gridFy[:, 0]) - Fz = sol(self.M.gridFz[:, 1]) - curlE_anal = np.concatenate((Fx, Fy, Fz)) + solX = lambda x, y, z: np.sin(z) + solY = lambda x, y, z: np.sin(x) + solZ = lambda x, y, z: np.sin(y) + + Ec = cartE3(self.M, funX, funY, funZ) + E = self.M.projectEdgeVector(Ec) + + Fc = cartF3(self.M, solX, solY, solZ) + curlE_anal = self.M.projectFaceVector(Fc) # Generate DIV matrix - CURL = self.M.edgeCurl - - curlE = CURL*E - err = np.linalg.norm((curlE-curlE_anal), np.inf) + curlE = self.M.edgeCurl.dot(E) + err = np.linalg.norm((curlE - curlE_anal), np.inf) return err def test_order(self): @@ -41,18 +51,17 @@ class TestFaceDiv(OrderTest): meshTypes = MESHTYPES def getError(self): - DIV = self.M.faceDiv - #Test function - fun = lambda x: np.sin(x) - Fx = fun(self.M.gridFx[:, 0]) - Fy = fun(self.M.gridFy[:, 1]) - Fz = fun(self.M.gridFz[:, 2]) - - F = np.concatenate((Fx, Fy, Fz)) - divF = DIV*F + fx = lambda x, y, z: np.sin(x) + fy = lambda x, y, z: np.sin(y) + fz = lambda x, y, z: np.sin(z) sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1], self.M.gridCC[:, 2]) + + Fc = cartF3(self.M, fx, fy, fz) + F = self.M.projectFaceVector(Fc) + + divF = self.M.faceDiv.dot(F) + divF_anal = call3(sol, self.M.gridCC) err = np.linalg.norm((divF-divF_anal), np.inf) @@ -68,17 +77,16 @@ class TestFaceDiv2D(OrderTest): meshDimension = 2 def getError(self): - DIV = self.M.faceDiv - #Test function - fun = lambda x: np.sin(x) - Fx = fun(self.M.gridFx[:, 0]) - Fy = fun(self.M.gridFy[:, 1]) - - F = np.concatenate((Fx, Fy)) - divF = DIV*F + fx = lambda x, y: np.sin(x) + fy = lambda x, y: np.sin(y) sol = lambda x, y: (np.cos(x)+np.cos(y)) - divF_anal = sol(self.M.gridCC[:, 0], self.M.gridCC[:, 1]) + + Fc = cartF2(self.M, fx, fy) + F = self.M.projectFaceVector(Fc) + + divF = self.M.faceDiv.dot(F) + divF_anal = call2(sol, self.M.gridCC) err = np.linalg.norm((divF-divF_anal), np.inf) @@ -93,19 +101,19 @@ class TestNodalGrad(OrderTest): meshTypes = MESHTYPES def getError(self): - GRAD = self.M.nodalGrad #Test function fun = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) - sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + # i (sin(x)) + j (sin(y)) + k (sin(z)) + solX = lambda x, y, z: -np.sin(x) + solY = lambda x, y, z: -np.sin(y) + solZ = lambda x, y, z: -np.sin(z) - phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1], self.M.gridN[:, 2]) - gradE = GRAD*phi + phi = call3(fun, self.M.gridN) + gradE = self.M.nodalGrad.dot(phi) - Ex = sol(self.M.gridEx[:, 0]) - Ey = sol(self.M.gridEy[:, 1]) - Ez = sol(self.M.gridEz[:, 2]) + Ec = cartE3(self.M, solX, solY, solZ) + gradE_anal = self.M.projectEdgeVector(Ec) - gradE_anal = np.concatenate((Ex, Ey, Ez)) err = np.linalg.norm((gradE-gradE_anal), np.inf) return err @@ -120,18 +128,18 @@ class TestNodalGrad2D(OrderTest): meshDimension = 2 def getError(self): - GRAD = self.M.nodalGrad #Test function fun = lambda x, y: (np.cos(x)+np.cos(y)) - sol = lambda x: -np.sin(x) # i (sin(x)) + j (sin(y)) + k (sin(z)) + # i (sin(x)) + j (sin(y)) + k (sin(z)) + solX = lambda x, y: -np.sin(x) + solY = lambda x, y: -np.sin(y) - phi = fun(self.M.gridN[:, 0], self.M.gridN[:, 1]) - gradE = GRAD*phi + phi = call2(fun, self.M.gridN) + gradE = self.M.nodalGrad.dot(phi) - Ex = sol(self.M.gridEx[:, 0]) - Ey = sol(self.M.gridEy[:, 1]) + Ec = cartE2(self.M, solX, solY) + gradE_anal = self.M.projectEdgeVector(Ec) - gradE_anal = np.concatenate((Ex, Ey)) err = np.linalg.norm((gradE-gradE_anal), np.inf) return err From 43d2512aea477559c52b8fa651b22214cd46e50b Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 17:18:04 -0700 Subject: [PATCH 094/359] Updated the test_operators code to work for LOM. need to be careful in which error metric you consider (because some only make sense under integration) i.e. the l-2 norm rather than the infinity norm, and you need to multiply by the integration length/area/volume it you are looking at the l-2 norm. --- SimPEG/tests/OrderTest.py | 18 +++++++++++--- SimPEG/tests/test_operators.py | 44 +++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index 238c3216..c522eb34 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -62,7 +62,8 @@ class OrderTest(unittest.TestCase): """ name = "Order Test" - expectedOrder = 2 + expectedOrders = 2. # This can be a list of orders, must be the same length as meshTypes + _expectedOrder = 2. tolerance = 0.85 meshSizes = [4, 8, 16, 32] meshTypes = ['uniformTensorMesh'] @@ -118,8 +119,19 @@ class OrderTest(unittest.TestCase): """ - for meshType in self.meshTypes: + assert type(self.meshTypes) == list, 'meshTypes must be a list' + + # if we just provide one expected order, repeat it for each mesh type + if type(self.expectedOrders) == float or type(self.expectedOrders) == int: + self.expectedOrders = [self.expectedOrders for i in self.meshTypes] + + assert type(self.expectedOrders) == list, 'expectedOrders must be a list' + assert len(self.expectedOrders) == len(self.meshTypes), 'expectedOrders must have the same length as the meshTypes' + + for ii_meshType, meshType in enumerate(self.meshTypes): self._meshType = meshType + self._expectedOrder = self.expectedOrders[ii_meshType] + order = [] err_old = 0. max_h_old = 0. @@ -139,7 +151,7 @@ class OrderTest(unittest.TestCase): err_old = err max_h_old = max_h print '---------------------------------------------' - passTest = np.mean(np.array(order)) > self.tolerance*self.expectedOrder + passTest = np.mean(np.array(order)) > self.tolerance*self._expectedOrder if passTest: print ['The test be workin!', 'You get a gold star!', 'Yay passed!', 'Happy little convergence test!', 'That was easy!'][np.random.randint(5)] else: diff --git a/SimPEG/tests/test_operators.py b/SimPEG/tests/test_operators.py index 315aedf6..38d289c3 100644 --- a/SimPEG/tests/test_operators.py +++ b/SimPEG/tests/test_operators.py @@ -23,13 +23,13 @@ class TestCurl(OrderTest): # fun: i (cos(y)) + j (cos(z)) + k (cos(x)) # sol: i (sin(z)) + j (sin(x)) + k (sin(y)) - funX = lambda x, y, z: np.cos(y) - funY = lambda x, y, z: np.cos(z) - funZ = lambda x, y, z: np.cos(x) + funX = lambda x, y, z: np.cos(2*np.pi*y) + funY = lambda x, y, z: np.cos(2*np.pi*z) + funZ = lambda x, y, z: np.cos(2*np.pi*x) - solX = lambda x, y, z: np.sin(z) - solY = lambda x, y, z: np.sin(x) - solZ = lambda x, y, z: np.sin(y) + solX = lambda x, y, z: 2*np.pi*np.sin(2*np.pi*z) + solY = lambda x, y, z: 2*np.pi*np.sin(2*np.pi*x) + solZ = lambda x, y, z: 2*np.pi*np.sin(2*np.pi*y) Ec = cartE3(self.M, funX, funY, funZ) E = self.M.projectEdgeVector(Ec) @@ -37,9 +37,13 @@ class TestCurl(OrderTest): Fc = cartF3(self.M, solX, solY, solZ) curlE_anal = self.M.projectFaceVector(Fc) - # Generate DIV matrix curlE = self.M.edgeCurl.dot(E) - err = np.linalg.norm((curlE - curlE_anal), np.inf) + if self._meshType == 'rotateLOM': + # Really it is the integration we should be caring about: + # So, let us look at the l2 norm. + err = np.linalg.norm(self.M.area*(curlE - curlE_anal), 2) + else: + err = np.linalg.norm((curlE - curlE_anal), np.inf) return err def test_order(self): @@ -49,13 +53,14 @@ class TestCurl(OrderTest): class TestFaceDiv(OrderTest): name = "Face Divergence" meshTypes = MESHTYPES + meshSizes = [8, 16, 32] def getError(self): #Test function - fx = lambda x, y, z: np.sin(x) - fy = lambda x, y, z: np.sin(y) - fz = lambda x, y, z: np.sin(z) - sol = lambda x, y, z: (np.cos(x)+np.cos(y)+np.cos(z)) + fx = lambda x, y, z: np.sin(2*np.pi*x) + fy = lambda x, y, z: np.sin(2*np.pi*y) + fz = lambda x, y, z: np.sin(2*np.pi*z) + sol = lambda x, y, z: (2*np.pi*np.cos(2*np.pi*x)+2*np.pi*np.cos(2*np.pi*y)+2*np.pi*np.cos(2*np.pi*z)) Fc = cartF3(self.M, fx, fy, fz) F = self.M.projectFaceVector(Fc) @@ -63,8 +68,12 @@ class TestFaceDiv(OrderTest): divF = self.M.faceDiv.dot(F) divF_anal = call3(sol, self.M.gridCC) - err = np.linalg.norm((divF-divF_anal), np.inf) - + if self._meshType == 'rotateLOM': + # Really it is the integration we should be caring about: + # So, let us look at the l2 norm. + err = np.linalg.norm(self.M.vol*(divF-divF_anal), 2) + else: + err = np.linalg.norm((divF-divF_anal), np.inf) return err def test_order(self): @@ -75,12 +84,13 @@ class TestFaceDiv2D(OrderTest): name = "Face Divergence 2D" meshTypes = MESHTYPES meshDimension = 2 + meshSizes = [8, 16, 32, 64] def getError(self): #Test function - fx = lambda x, y: np.sin(x) - fy = lambda x, y: np.sin(y) - sol = lambda x, y: (np.cos(x)+np.cos(y)) + fx = lambda x, y: np.sin(2*np.pi*x) + fy = lambda x, y: np.sin(2*np.pi*y) + sol = lambda x, y: 2*np.pi*(np.cos(2*np.pi*x)+np.cos(2*np.pi*y)) Fc = cartF2(self.M, fx, fy) F = self.M.projectFaceVector(Fc) From 7e5ea835e321c664db45ca22aa436c41a0e54f59 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 17:56:21 -0700 Subject: [PATCH 095/359] Removed eldadCode directory as it is now integrated. Added GaussNewton to the main directory. --- SimPEG/EldadsCode/MFDdriver.py | 36 ---- SimPEG/EldadsCode/getCellVolume.py | 58 ------ SimPEG/EldadsCode/getDiffOps.py | 106 ----------- SimPEG/EldadsCode/getEdgeInnerProduct.py | 213 ---------------------- SimPEG/EldadsCode/getEdgeTangent.py | 60 ------ SimPEG/EldadsCode/getFaceInnerProduct.py | 86 --------- SimPEG/EldadsCode/getFaceNormals.py | 73 -------- SimPEG/EldadsCode/getVolume.py | 34 ---- SimPEG/EldadsCode/inv3X3BlockDiagonal.py | 36 ---- SimPEG/EldadsCode/meshUtils.py | 94 ---------- SimPEG/EldadsCode/sputils.py | 77 -------- SimPEG/EldadsCode/tools.py | 222 ----------------------- SimPEG/EldadsCode/utils.py | 87 --------- SimPEG/EldadsCode/zevel.py | 119 ------------ SimPEG/{EldadsCode => }/GaussNewton.py | 0 15 files changed, 1301 deletions(-) delete mode 100644 SimPEG/EldadsCode/MFDdriver.py delete mode 100644 SimPEG/EldadsCode/getCellVolume.py delete mode 100644 SimPEG/EldadsCode/getDiffOps.py delete mode 100644 SimPEG/EldadsCode/getEdgeInnerProduct.py delete mode 100644 SimPEG/EldadsCode/getEdgeTangent.py delete mode 100644 SimPEG/EldadsCode/getFaceInnerProduct.py delete mode 100644 SimPEG/EldadsCode/getFaceNormals.py delete mode 100644 SimPEG/EldadsCode/getVolume.py delete mode 100644 SimPEG/EldadsCode/inv3X3BlockDiagonal.py delete mode 100644 SimPEG/EldadsCode/meshUtils.py delete mode 100644 SimPEG/EldadsCode/sputils.py delete mode 100644 SimPEG/EldadsCode/tools.py delete mode 100644 SimPEG/EldadsCode/utils.py delete mode 100644 SimPEG/EldadsCode/zevel.py rename SimPEG/{EldadsCode => }/GaussNewton.py (100%) diff --git a/SimPEG/EldadsCode/MFDdriver.py b/SimPEG/EldadsCode/MFDdriver.py deleted file mode 100644 index 16d18fe3..00000000 --- a/SimPEG/EldadsCode/MFDdriver.py +++ /dev/null @@ -1,36 +0,0 @@ -import numpy as np -from numpy.random import randn -from utils import ndgrid -from getDiffOps import getCurlMatrix, getNodalGradient -from getFaceInnerProduct import getFaceInnerProduct -from getEdgeInnerProduct import getEdgeInnerProduct -from scipy.sparse.linalg import dsolve -from pylab import norm - -n = np.array([14, 14, 15]) - -X, Y, Z = ndgrid(*[np.linspace(0, 1, x) for x in n]) -sigma = 1e-2*np.ones(n-1) -sigma[:, :, (n[2]-1)/2:] = 1e-6 -mu = 4*np.pi*1e-7*np.ones(n-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 = np.shape(A) -b = np.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 diff --git a/SimPEG/EldadsCode/getCellVolume.py b/SimPEG/EldadsCode/getCellVolume.py deleted file mode 100644 index bb536842..00000000 --- a/SimPEG/EldadsCode/getCellVolume.py +++ /dev/null @@ -1,58 +0,0 @@ -from sputils import * -from utils import * -from sputils import * -from numpy import * -from getEdgeTangent import * - - -def volTetra(y, m, I, A, B, C, D): - - a11 = array(y[A, 0]-y[B, 0]); a12 = array(y[A, 0]-y[C, 0]); a13 = array(y[A, 0]-y[D, 0]) - a21 = array(y[A, 1]-y[B, 1]); a22 = array(y[A, 1]-y[C, 1]); a23 = array(y[A, 1]-y[D, 1]) - a31 = array(y[A, 2]-y[B, 2]); a32 = array(y[A, 2]-y[C, 2]); a33 = array(y[A, 2]-y[D, 2]) - - return abs(a11*a22*a33 + a12*a23*a31 + a13*a21*a32 - a31*a22*a13 - a32*a23*a11 - a33*a21*a12) - - -def getCellVolume(X, Y, Z): - - m = array(shape(X))-1 - y = hstack3(mkvc(X), mkvc(Y), mkvc(Z)) - - i = int64(linspace(0, m[0]-1, m[0])) - j = int64(linspace(0, m[1]-1, m[1])) - k = int64(linspace(0, m[2]-1, m[2])) - - ii, jj, kk = ndgrid(i, j, k) - ii = mkvc(ii) - jj = mkvc(jj) - kk = mkvc(kk) - - I = int64(sub2ind(m, hstack3(ii, jj, kk))) - A = int64(sub2ind(m+1, hstack3(ii, jj, kk))) - B = int64(sub2ind(m+1, hstack3(ii, jj+1, kk))) - C = int64(sub2ind(m+1, hstack3(ii+1, jj+1, kk))) - D = int64(sub2ind(m+1, hstack3(ii+1, jj, kk))) - E = int64(sub2ind(m+1, hstack3(ii, jj, kk+1))) - F = int64(sub2ind(m+1, hstack3(ii, jj+1, kk+1))) - G = int64(sub2ind(m+1, hstack3(ii+1, jj+1, kk+1))) - H = int64(sub2ind(m+1, hstack3(ii+1, jj, kk+1))) - - v1 = volTetra(y, m, I, A, B, D, E) - v2 = volTetra(y, m, I, B, E, F, G) - v3 = volTetra(y, m, I, B, D, E, G) - v4 = volTetra(y, m, I, B, C, D, G) - v5 = volTetra(y, m, I, D, E, G, H) - - v = 1.0/6.0 * (v1 + v2 + v3 + v4 + v5) - return v.flatten() - - -if __name__ == '__main__': - - X, Y, Z = ndgrid(linspace(0, 2, 3), linspace(0, 2, 3), linspace(0, 2, 3)) - Z[2, 2, 2] = 2.5; Z[0, 0, 0] = -0.5 - X[2, 2, 2] = 2.5; X[0, 0, 0] = -0.5 - - v = getCellVolume(X, Y, Z) - print v diff --git a/SimPEG/EldadsCode/getDiffOps.py b/SimPEG/EldadsCode/getDiffOps.py deleted file mode 100644 index dbb4e5b0..00000000 --- a/SimPEG/EldadsCode/getDiffOps.py +++ /dev/null @@ -1,106 +0,0 @@ -from sputils import * -from utils import * -from numpy import * -from getEdgeTangent import * -from getCellVolume import getCellVolume -from getFaceNormals import getFaceNormals - - -def getDivMatrix(X, Y, Z): - """Face DIV""" - - n = array(shape(X))-1 - n1 = n[0] - n2 = n[1] - n3 = n[2] - - n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, area1, area2, area3 = getFaceNormals(X, Y, Z) - - area = hstack((hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) - S = sdiag(area) - V = getCellVolume(X, Y, Z) - - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3), speye(n2), d1) - D2 = kron3(speye(n3), d2, speye(n1)) - D3 = kron3(d3, speye(n2), speye(n1)) - - # divergence on faces - D = appendRight3(D1, D2, D3) - - return sdiag(1/V)*D*S - - -def getCurlMatrix(X, Y, Z): - """Edge CURL """ - - n = array(shape(X))-1 - n1 = n[0]; n2 = n[1]; n3 = n[2] - - d1 = ddx(n1); d2 = ddx(n2); d3 = ddx(n3) - # derivatives on x-edge variables - D32 = kron3(d3, speye(n2), speye(n1+1)) - D23 = kron3(speye(n3), d2, speye(n1+1)) - D31 = kron3(d3, speye(n2+1), speye(n1)) - D13 = kron3(speye(n3), speye(n2+1), d1) - D21 = kron3(speye(n3+1), d2, speye(n1)) - D12 = kron3(speye(n3+1), speye(n2), d1) - - O1 = spzeros(shape(D32)[0], shape(D31)[1]) - O2 = spzeros(shape(D31)[0], shape(D32)[1]) - O3 = spzeros(shape(D21)[0], shape(D13)[1]) - - CURL = appendBottom3( - appendRight3(O1, -D32, D23), - appendRight3(D31, O2, -D13), - appendRight3(-D21, D12, O3)) - - # scale for non-uniform mesh - e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, norme1, norme2, norme3 = getEdgeTangent(X, Y, Z) - n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, area1, area2, area3 = getFaceNormals(X, Y, Z) - - area = hstack((hstack((mkvc(area1), mkvc(area2))), mkvc(area3))) - S = sdiag(1/area) - lngth = hstack((hstack((mkvc(norme1), mkvc(norme2))), mkvc(norme3))) - L = sdiag(lngth) - - return S*(CURL*L) - - -def getNodalGradient(X, Y, Z): - """Nodal Gradients""" - - n = array(shape(X))-1 - n1 = n[0]; n2 = n[1]; n3 = n[2] - - D1 = kron3(speye(n3+1), speye(n2+1), ddx(n1)) - D2 = kron3(speye(n3+1), ddx(n2), speye(n1+1)) - D3 = kron3(ddx(n3), speye(n2+1), speye(n1+1)) - - # topological gradient - GRAD = appendBottom3(D1, D2, D3) - - # scale for non-uniform mesh - e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, norme1, norme2, norme3 = getEdgeTangent(X, Y, Z) - lngth = hstack((hstack((mkvc(norme1), mkvc(norme2))), mkvc(norme3))) - L = sdiag(1/lngth) - - return L*GRAD - - -if __name__ == '__main__': - - X, Y, Z = ndgrid(linspace(0, 2, 3), linspace(0, 2, 3), linspace(0, 2, 3)) - Z[2, 2, 2] = 2.5 - Z[0, 0, 0] = -0.5 - X[2, 2, 2] = 2.5 - X[0, 0, 0] = -0.5 - sig = ones([2, 2, 2]) - C = getCurlMatrix(X, Y, Z) - - G = getNodalGradient(X, Y, Z) - - tt = C*G - print(tt) diff --git a/SimPEG/EldadsCode/getEdgeInnerProduct.py b/SimPEG/EldadsCode/getEdgeInnerProduct.py deleted file mode 100644 index 776f31f7..00000000 --- a/SimPEG/EldadsCode/getEdgeInnerProduct.py +++ /dev/null @@ -1,213 +0,0 @@ -from scipy.sparse import linalg -from scipy import sparse -from sputils import * -from utils import * -from sputils import * -from numpy import * -from getEdgeTangent import * -from inv3X3BlockDiagonal import * -from getCellVolume import getCellVolume - - -def subarray(T, i1, i2, i3): - return take(take(take(T, i1, 0), i2, 1), i3, 2) - - -def getEdgeInnerProduct(X, Y, Z, sigma): - """A = getEdgeInnerProduct(X, Y, Z, sigma) - - - node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - / / - / / | - edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - / / | - / / | - node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - | | | - | | node(i+1,j+1,k+1) - | | / - edge1(i,j,k) face3(i,j,k) edge1(i,j+1,k) - | | / - | | / - | |/ - node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - - no | node | e1 | e2 | e3 - 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k - 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k - 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k - """ - m = array(shape(X))-1 - nc = prod(m) - - me1 = m + array([0, 1, 1]); ne1 = prod(me1) - me2 = m + array([1, 0, 1]); ne2 = prod(me2) - me3 = m + array([1, 1, 0]); ne3 = prod(me3) - - e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,norme1,norme2,norme3 = getEdgeTangent(X,Y,Z) - - i = int64(linspace(0,m[0]-1,m[0])) - j = int64(linspace(0,m[1]-1,m[1])) - k = int64(linspace(0,m[2]-1,m[2])) - - ii,jj,kk = ndgrid(i,j,k) - ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) - - ## -------- - # no | node | e1 | e2 | e3 - # 000 | i ,j ,k | i ,j ,k | i ,j ,k | i ,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk)) - ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 - ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P000 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT000 = inv3X3BlockDiagonal(subarray(e1x,i,j,k) , subarray(e1y,i,j,k), subarray(e1z,i,j,k), - subarray(e2x,i,j,k) , subarray(e2y,i,j,k), subarray(e2z,i,j,k) , - subarray(e3x,i,j,k) , subarray(e3y,i,j,k), subarray(e3z,i,j,k) ) - - ## -------- - # no | node | e1 | e2 | e3 - # 100 | i+1,j ,k | i ,j ,k | i+1,j ,k | i+1,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk)) - ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 - ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P100 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT100 = inv3X3BlockDiagonal(subarray(e1x,i,j,k), subarray(e1y,i,j,k), subarray(e1z,i,j,k), - subarray(e2x,i+1,j,k), subarray(e2y,i+1,j,k), subarray(e2z,i+1,j,k), - subarray(e3x,i+1,j,k) , subarray(e3y,i+1,j,k), subarray(e3z,i+1,j,k)) - - ## -------- - # no | node | e1 | e2 | e3 - # 010 | i ,j+1,k | i ,j+1,k | i ,j ,k | i ,j+1,k - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) - ind2 = sub2ind(me2,hstack3(ii,jj,kk)) + ne1 - ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P010 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT010 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) , subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , - subarray(e2x,i,j,k) , subarray(e2y,i,j,k) , subarray(e2z,i,j,k) , - subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) ,subarray( e3z,i,j+1,k) ) - - ## -------- - # no | node | e1 | e2 | e3 - # 110 | i+1,j+1,k | i ,j+1,k | i+1,j ,k | i+1,j+1,k - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk)) - ind2 = sub2ind(me2,hstack3(ii+1,jj,kk)) + ne1 - ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P110 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT110 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k) ,subarray(e1y,i,j+1,k) , subarray(e1z,i,j+1,k) , - subarray(e2x,i+1,j,k) ,subarray(e2y,i+1,j,k) , subarray(e2z,i+1,j,k), - subarray(e3x,i+1,j+1,k) ,subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) - - ###### - - ## -------- - # no | node | e1 | e2 | e3 - # 001 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k+1 | i ,j ,k - ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) - ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 - ind3 = sub2ind(me3,hstack3(ii,jj,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P001 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT001 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1) ,subarray(e1y,i,j,k+1) , subarray(e1z,i,j,k+1) , - subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , - subarray(e3x,i,j,k) , subarray(e3y,i,j,k) , subarray(e3z,i,j,k) ) - - ## -------- - # no | node | e1 | e2 | e3 - # 101 | i+1,j ,k+1 | i ,j ,k+1 | i+1,j ,k+1 | i+1,j ,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj,kk+1)) - ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 - ind3 = sub2ind(me3,hstack3(ii+1,jj,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P101 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT101 = inv3X3BlockDiagonal(subarray(e1x,i,j,k+1), subarray(e1y,i,j,k+1), subarray(e1z,i,j,k+1) , - subarray(e2x,i+1,j,k+1), subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , - subarray(e3x,i+1,j,k), subarray(e3y,i+1,j,k) , subarray(e3z,i+1,j,k) ) - - ## -------- - # no | node | e1 | e2 | e3 - # 011 | i ,j+1,k+1 | i ,j+1,k+1 | i ,j ,k+1 | i ,j+1,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) - ind2 = sub2ind(me2,hstack3(ii,jj,kk+1)) + ne1 - ind3 = sub2ind(me3,hstack3(ii,jj+1,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P011 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT011 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , - subarray(e2x,i,j,k+1) , subarray(e2y,i,j,k+1) , subarray(e2z,i,j,k+1) , - subarray(e3x,i,j+1,k) , subarray(e3y,i,j+1,k) , subarray(e3z,i,j+1,k) ) - - ## -------- - # no | node | e1 | e2 | e3 - # 111 | i+1,j+1,k+1 | i ,j+1,k+1 | i+1,j ,k+1 | i+1,j+1,k+1 - ind1 = sub2ind(me1,hstack3(ii,jj+1,kk+1)) - ind2 = sub2ind(me2,hstack3(ii+1,jj,kk+1)) + ne1 - ind3 = sub2ind(me3,hstack3(ii+1,jj+1,kk)) + ne1 + ne2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P111 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,ne1+ne2+ne3)).tocsr() - - invT111 = inv3X3BlockDiagonal(subarray(e1x,i,j+1,k+1) , subarray(e1y,i,j+1,k+1) , subarray(e1z,i,j+1,k+1) , - subarray(e2x,i+1,j,k+1) , subarray(e2y,i+1,j,k+1) , subarray(e2z,i+1,j,k+1) , - subarray(e3x,i+1,j+1,k) , subarray(e3y,i+1,j+1,k) , subarray(e3z,i+1,j+1,k) ) - - # Cell volume - v = mkvc(getCellVolume(X,Y,Z)) #mkvc(getVolume(X,Y,Z)) - vsig = v*mkvc(sigma) - v3 = vstack((vstack((vsig,vsig)),vsig)) - v3 = v3.flatten() - - V = sdiag(v3) - - A = P000.T*invT000.T*V*invT000*P000 + P001.T*invT001.T*V*invT001*P001 + P010.T*invT010.T*V*invT010*P010 + P011.T*invT011.T*V*invT011*P011 + P100.T*invT100.T*V*invT100*P100 + P101.T*invT101.T*V*invT101*P101 + P110.T*invT110.T*V*invT110*P110 + P111.T*invT111.T*V*invT111*P111 - - A = 0.125*A - - return A - - -if __name__ == '__main__': - - X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) - Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 - X[2,2,2] = 2.5; X[0,0,0] = -0.5 - sig = ones([2,2,2]) - A = getEdgeInnerProduct(X,Y,Z,sig) \ No newline at end of file diff --git a/SimPEG/EldadsCode/getEdgeTangent.py b/SimPEG/EldadsCode/getEdgeTangent.py deleted file mode 100644 index a8426df3..00000000 --- a/SimPEG/EldadsCode/getEdgeTangent.py +++ /dev/null @@ -1,60 +0,0 @@ -from numpy import * -from utils import diff - -#function[t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,normt1,normt2,normt3] = getEdgeTangent(X,Y,Z) -#%[t1x,t1y,t1z,t2x,t2y,t2z,t3x,t3y,t3z,normt1,normt2,normt3] = getEdgeTangent(X,Y,Z) -#% -#% node(i,j,k+1) ------ edgt2(i,j,k+1) ----- node(i,j+1,k+1) -#% / / -#% / / | -#% edgt3(i,j,k) fact1(i,j,k) edgt3(i,j+1,k) -#% / / | -#% / / | -#% node(i,j,k) ------ edgt2(i,j,k) ----- node(i,j+1,k) -#% | | | -#% | | node(i+1,j+1,k+1) -#% | | / -#% edgt1(i,j,k) fact3(i,j,k) edgt1(i,j+1.k) -#% | | / -#% | | / -#% | |/ -#% node(i+1,j,k) ------ edgt2(i+1,j,k) ----- node(i+1,j+1,k) - - -def getEdgeTangent(X, Y, Z): - - t1x = diff(X, 1) - t1y = diff(Y, 1) - t1z = diff(Z, 1) - - normt1 = sqrt(t1x**2+t1y**2+t1z**2) - t1x = t1x/normt1 - t1y = t1y/normt1 - t1z = t1z/normt1 - - t2x = diff(X, 2) - t2y = diff(Y, 2) - t2z = diff(Z, 2) - normt2 = sqrt(t2x**2 + t2y**2 + t2z**2) - t2x = t2x/normt2 - t2y = t2y/normt2 - t2z = t2z/normt2 - - t3x = diff(X, 3) - t3y = diff(Y, 3) - t3z = diff(Z, 3) - normt3 = sqrt(t3x**2+t3y**2+t3z**2) - t3x = t3x/normt3 - t3y = t3y/normt3 - t3z = t3z/normt3 - - # print t3x - - return (t1x, t1y, t1z, t2x, t2y, t2z, t3x, t3y, t3z, normt1, normt2, normt3) - - -if __name__ == '__main__': - - X, Y, Z = mgrid[0:4, 0:5, 0:6] - - t = getEdgeTangent(X, Y, Z) diff --git a/SimPEG/EldadsCode/getFaceInnerProduct.py b/SimPEG/EldadsCode/getFaceInnerProduct.py deleted file mode 100644 index 2870eb88..00000000 --- a/SimPEG/EldadsCode/getFaceInnerProduct.py +++ /dev/null @@ -1,86 +0,0 @@ -from scipy.sparse import linalg -from scipy import sparse -from sputils import * -from utils import * -from numpy import * -from getEdgeTangent import * -from inv3X3BlockDiagonal import * -from getCellVolume import getCellVolume -from getFaceNormals import getFaceNormals - - -#----------------------- -def subarray(T,i1,i2,i3): - return take(take(take(T,i1,0),i2,1),i3,2) - -#----------------------- - -def getFaceInnerProduct(X,Y,Z,sigma): - - m = array(shape(X))-1 - nc = prod(m) - mf1 = m+[1, 0, 0] - mf2 = m+[0, 1, 0] - mf3 = m+[0, 0, 1] - - nf1 = prod(m+[1, 0, 0]) - nf2 = prod(m+[0, 1, 0]) - nf3 = prod(m+[0, 0, 1]) - - # compute the normals - n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3 = getFaceNormals(X,Y,Z) - - i = int64(linspace(0,m[0]-1,m[0])) - j = int64(linspace(0,m[1]-1,m[1])) - k = int64(linspace(0,m[2]-1,m[2])) - - ii,jj,kk = ndgrid(i,j,k) - ii = mkvc(ii); jj = mkvc(jj); kk = mkvc(kk) - - ind1 = sub2ind(mf1,hstack3(ii,jj,kk)) - ind2 = sub2ind(mf2,hstack3(ii,jj,kk)) + nf1 - ind3 = sub2ind(mf3,hstack3(ii,jj,kk)) + nf1 + nf2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P1 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,nf1+nf2+nf3)).tocsr() - - ind1 = sub2ind(mf1,hstack3(ii+1,jj,kk)) - ind2 = sub2ind(mf2,hstack3(ii,jj+1,kk)) + nf1 - ind3 = sub2ind(mf3,hstack3(ii,jj,kk+1)) + nf1 + nf2 - - IND = vstack((vstack((ind1,ind2)),ind3)) - IND = array(IND).flatten() - - P2 = sparse.coo_matrix((ones(3*nc),(linspace(0,3*nc-1,3*nc),IND)),shape=(3*nc,nf1+nf2+nf3)).tocsr() - - - invN1 = inv3X3BlockDiagonal(subarray(n1x,i,j,k) , subarray(n1y,i,j,k), subarray(n1z,i,j,k), - subarray(n2x,i,j,k) , subarray(n2y,i,j,k), subarray(n2z,i,j,k), - subarray(n3x,i,j,k) , subarray(n3y,i,j,k), subarray(n3z,i,j,k) ) - - - invN2 = inv3X3BlockDiagonal(subarray(n1x,i+1,j,k) , subarray(n1y,i+1,j,k), subarray(n1z,i+1,j,k), - subarray(n2x,i,j+1,k) , subarray(n2y,i,j+1,k), subarray(n2z,i,j+1,k), - subarray(n3x,i,j,k+1) , subarray(n3y,i,j,k+1), subarray(n3z,i,j,k+1) ) - - # Cell volume - v = mkvc(getCellVolume(X,Y,Z)) #mkvc(getVolume(X,Y,Z)) - vsig = v*mkvc(sigma) - v3 = vstack((vstack((vsig,vsig)),vsig)) - v3 = v3.flatten() - - V = sdiag(v3) - - return (P1.T*invN1.T*V*invN1*P1 + P2.T*invN2.T*V*invN2*P2)/2.0 - - -if __name__ == '__main__': - - X,Y,Z = ndgrid(linspace(0,2,3),linspace(0,2,3),linspace(0,2,3)) - Z[2,2,2] = 2.5; Z[0,0,0] = -0.5 - X[2,2,2] = 2.5; X[0,0,0] = -0.5 - sigma = ones([2,2,2]) - A = getFaceInnerProduct(X,Y,Z,sigma) - print(A) \ No newline at end of file diff --git a/SimPEG/EldadsCode/getFaceNormals.py b/SimPEG/EldadsCode/getFaceNormals.py deleted file mode 100644 index 2038a301..00000000 --- a/SimPEG/EldadsCode/getFaceNormals.py +++ /dev/null @@ -1,73 +0,0 @@ -from numpy import * -from utils import * - - -def getFaceNormals(X, Y, Z): -# compute the x normals - d1xp = diffp(X,2,3) - d1yp = diffp(Y,2,3) - d1zp = diffp(Z,2,3) - - d1xm = diffm(X,3,2) - d1ym = diffm(Y,3,2) - d1zm = diffm(Z,3,2) - - # normals - n1x = d1yp*d1zm - d1zp*d1ym - n1y = d1zp*d1xm - d1xp*d1zm - n1z = d1xp*d1ym - d1yp*d1xm - normn1 = sqrt(n1x**2 + n1y**2 + n1z**2) - n1x = n1x / normn1; - n1y = n1y / normn1; - n1z = n1z / normn1; - - area1 = normn1/2 - - - # compute the y normals - d2xp = diffp(X,1,3) - d2yp = diffp(Y,1,3) - d2zp = diffp(Z,1,3) - - d2xm = diffm(X,1,3) - d2ym = diffm(Y,1,3) - d2zm = diffm(Z,1,3) - - # normals - n2x = d2yp*d2zm - d2zp*d2ym - n2y = d2zp*d2xm - d2xp*d2zm - n2z = d2xp*d2ym - d2yp*d2xm - normn2 = sqrt(n2x**2 + n2y**2 + n2z**2) - n2x = n2x / normn2 - n2y = n2y / normn2 - n2z = n2z / normn2 - - area2 = normn2/2 - - # compute the z normals - d3xp = diffp(X,1,2) - d3yp = diffp(Y,1,2) - d3zp = diffp(Z,1,2) - - d3xm = diffm(X,2,1) - d3ym = diffm(Y,2,1) - d3zm = diffm(Z,2,1) - - # normals - n3x = d3yp*d3zm - d3zp*d3ym - n3y = d3zp*d3xm - d3xp*d3zm - n3z = d3xp*d3ym - d3yp*d3xm; - normn3 = sqrt(n3x**2 + n3y**2 + n3z**2); - n3x = n3x / normn3; - n3y = n3y / normn3; - n3z = n3z / normn3; - - area3 = normn3/2; - - return (n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,area1,area2,area3) - -if __name__ == '__main__': - - X, Y, Z = mgrid[0:4, 0:5, 0:6] - - t = getFaceNormals(X, Y, Z) diff --git a/SimPEG/EldadsCode/getVolume.py b/SimPEG/EldadsCode/getVolume.py deleted file mode 100644 index 3b4cd250..00000000 --- a/SimPEG/EldadsCode/getVolume.py +++ /dev/null @@ -1,34 +0,0 @@ -from numpy import * -from utils import diff, ave - - -def getVolume(X,Y,Z): - - # compute edge vectors - t1x = ave(ave(diff(X, 1),2),3) - t1y = ave(ave(diff(Y, 1),2),3) - t1z = ave(ave(diff(Z, 1),2),3) - - t2x = ave(ave(diff(X, 2),1),3) - t2y = ave(ave(diff(Y, 2),1),3) - t2z = ave(ave(diff(Z, 2),1),3) - - t3x = ave(ave(diff(X, 3),1),2) - t3y = ave(ave(diff(Y, 3),1),2) - t3z = ave(ave(diff(Z, 3),1),2) - - # v = [t1x t1y t1z][i j k] - # [t2x t2y t2z] - # [t3x t3y t3z] - - v = t1x*(t2y*t3z - t2z*t3y) - t1y*(t2x*t3z - t2z*t3x) + t1z*(t2x*t3y-t2y*t3x) - - return v - - -if __name__ == '__main__': - - X, Y, Z = mgrid[0:4, 0:5, 0:6] - X = (1.0*X)/2 - v = getVolume(X, Y, Z) - print v \ No newline at end of file diff --git a/SimPEG/EldadsCode/inv3X3BlockDiagonal.py b/SimPEG/EldadsCode/inv3X3BlockDiagonal.py deleted file mode 100644 index 2bfd86c4..00000000 --- a/SimPEG/EldadsCode/inv3X3BlockDiagonal.py +++ /dev/null @@ -1,36 +0,0 @@ -from utils import * -from sputils import * - - -def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): - - a11 = mkvc(a11) - a12 = mkvc(a12) - a13 = mkvc(a13) - a21 = mkvc(a21) - a22 = mkvc(a22) - a23 = mkvc(a23) - a31 = mkvc(a31) - a32 = mkvc(a32) - a33 = mkvc(a33) - - detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 - - b11 = +(a22*a33 - a23*a32)/detA - b12 = -(a12*a33 - a13*a32)/detA - b13 = +(a12*a23 - a13*a22)/detA - - b21 = +(a31*a23 - a21*a33)/detA - b22 = -(a31*a13 - a11*a33)/detA - b23 = +(a21*a13 - a11*a23)/detA - - b31 = -(a31*a22 - a21*a32)/detA - b32 = +(a31*a12 - a11*a32)/detA - b33 = -(a21*a12 - a11*a22)/detA - - B = appendBottom3( - appendRight3(sdiag(b11), sdiag(b12), sdiag(b13)), - appendRight3(sdiag(b21), sdiag(b22), sdiag(b23)), - appendRight3(sdiag(b31), sdiag(b32), sdiag(b33))) - - return B diff --git a/SimPEG/EldadsCode/meshUtils.py b/SimPEG/EldadsCode/meshUtils.py deleted file mode 100644 index 5d3f071d..00000000 --- a/SimPEG/EldadsCode/meshUtils.py +++ /dev/null @@ -1,94 +0,0 @@ -from sputils import * -from utils import * -from numpy import * - - -def getCellCenterFromNodal(X, Y, Z): - """Cell Centers from Nodal locations""" - XC = 1.0/8.0 * (X[:-1, :-1, :-1] + X[1:, :-1, :-1] + X[:-1, 1:, :-1] + X[1:, 1:, :-1] + - X[:-1, :-1, 1:] + X[1:, :-1, 1:] + X[:-1, 1:, 1:] + X[1:, 1:, 1:]) - - YC = 1.0/8.0 * (Y[:-1, :-1, :-1] + Y[1:, :-1, :-1] + Y[:-1, 1:, :-1] + Y[1:, 1:, :-1] + - Y[:-1, :-1, 1:] + Y[1:, :-1, 1:] + Y[:-1, 1:, 1:] + Y[1:, 1:, 1:]) - - ZC = 1.0/8.0 * (Z[:-1, :-1, :-1] + Z[1:, :-1, :-1] + Z[:-1, 1:, :-1] + Z[1:, 1:, :-1] + - Z[:-1, :-1, 1:] + Z[1:, :-1, 1:] + Z[:-1, 1:, 1:] + Z[1:, 1:, 1:]) - - return (XC, YC, ZC) - - -def getEdgesFromNodal(X, Y, Z): - """Edges from Nodal locations - - node(i,j,k+1) ------ edge2(i,j,k+1) ----- node(i,j+1,k+1) - / / - / / | - edge3(i,j,k) face1(i,j,k) edge3(i,j+1,k) - / / | - / / | - node(i,j,k) ------ edge2(i,j,k) ----- node(i,j+1,k) - | | | - | | node(i+1,j+1,k+1) - | | / - edge1(i,j,k) face3(i,j,k) edge1(i,j+1.k) - | | / - | | / - | |/ - node(i+1,j,k) ------ edge2(i+1,j,k) ----- node(i+1,j+1,k) - """ - - XE1 = (X[1:, :, :]+X[:-1, :, :])/2.0 - YE1 = (Y[1:, :, :]+Y[:-1, :, :])/2.0 - ZE1 = (Z[1:, :, :]+Z[:-1, :, :])/2.0 - - XE2 = (X[:, 1:, :]+X[:, :-1, :])/2.0 - YE2 = (Y[:, 1:, :]+Y[:, :-1, :])/2.0 - ZE2 = (Z[:, 1:, :]+Z[:, :-1, :])/2.0 - - XE3 = (X[:, :, 1:]+X[:, :, :-1])/2.0 - YE3 = (Y[:, :, 1:]+Y[:, :, :-1])/2.0 - ZE3 = (Z[:, :, 1:]+Z[:, :, :-1])/2.0 - - return (XE1, YE1, ZE1, XE2, YE2, ZE2, XE3, YE3, ZE3) - - -def getFacesFromNodal(X, Y, Z): - """Get faces from nodal --""" - - XF1 = 1.0/4.0*(X[:, :-1, :-1]+X[:, 1:, :-1]+X[:, :-1, 1:]+X[:, 1:, 1:]) - YF1 = 1.0/4.0*(Y[:, :-1, :-1]+Y[:, 1:, :-1]+Y[:, :-1, 1:]+Y[:, 1:, 1:]) - ZF1 = 1.0/4.0*(Z[:, :-1, :-1]+Z[:, 1:, :-1]+Z[:, :-1, 1:]+Z[:, 1:, 1:]) - - XF2 = 1.0/4.0*(X[:-1, :, :-1]+X[1:, :, :-1]+X[:-1, :, 1:]+X[1:, :, 1:]) - YF2 = 1.0/4.0*(Y[:-1, :, :-1]+Y[1:, :, :-1]+Y[:-1, :, 1:]+Y[1:, :, 1:]) - ZF2 = 1.0/4.0*(Z[:-1, :, :-1]+Z[1:, :, :-1]+Z[:-1, :, 1:]+Z[1:, :, 1:]) - - XF3 = 1.0/4.0*(X[:-1, :-1, :]+X[1:, :-1, :]+X[:-1, 1:, :]+X[1:, 1:, :]) - YF3 = 1.0/4.0*(Y[:-1, :-1, :]+Y[1:, :-1, :]+Y[:-1, 1:, :]+Y[1:, 1:, :]) - ZF3 = 1.0/4.0*(Z[:-1, :-1, :]+Z[1:, :-1, :]+Z[:-1, 1:, :]+Z[1:, 1:, :]) - - return (XF1, YF1, ZF1, XF2, YF2, ZF2, XF3, YF3, ZF3) - - -def projectEdgeVectorField(EV1, EV2, EV3, X, Y, Z): - """Project Edge vector field""" - - t1x, t1y, t1z, t2x, t2y, t2z, t3x, t3y, t3z, nrm1, nrm2, nrm3 = getEdgeTangent(X, Y, Z) - - E1 = EV1[:, 0]*mkvc(t1x) + EV1[:, 1]*mkvc(t1y) + EV1[:, 2]*mkvc(t1z) - E2 = EV2[:, 0]*mkvc(t2x) + EV2[:, 1]*mkvc(t2y) + EV2[:, 2]*mkvc(t2z) - E3 = EV3[:, 0]*mkvc(t3x) + EV3[:, 1]*mkvc(t3y) + EV3[:, 2]*mkvc(t3z) - - return hstack((hstack((mkvc(E1), mkvc(E2))), mkvc(E3))) - - -def projectFaceVectorField(FV1, FV2, FV3, X, Y, Z): - """Prolect Face vector field""" - - n1x, n1y, n1z, n2x, n2y, n2z, n3x, n3y, n3z, ar1, ar2, ar3 = getFaceNormals(X, Y, Z) - - F1 = FV1[:, 0]*mkvc(n1x) + FV1[:, 1]*mkvc(n1y) + FV1[:, 2]*mkvc(n1z) - F2 = FV2[:, 0]*mkvc(n2x) + FV2[:, 1]*mkvc(n2y) + FV2[:, 2]*mkvc(n2z) - F3 = FV3[:, 0]*mkvc(n3x) + FV3[:, 1]*mkvc(n3y) + FV3[:, 2]*mkvc(n3z) - - return hstack((hstack((mkvc(F1), mkvc(F2))), mkvc(F3))) diff --git a/SimPEG/EldadsCode/sputils.py b/SimPEG/EldadsCode/sputils.py deleted file mode 100644 index bf54b15a..00000000 --- a/SimPEG/EldadsCode/sputils.py +++ /dev/null @@ -1,77 +0,0 @@ -from scipy import sparse -from numpy import * - - -def ddx(n): - """Define 1D derivatives""" - # ddx = lambda n: sparse.spdiags((np.ones((n+1, 1))*[-1, 1]).T, [0, 1], n, n+1, format='csr') - return sparse.spdiags(-ones(n), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1) - - -def av(n): - """Define 1D average""" - return 0.5*(sparse.spdiags(ones(n+1), 0, n, n+1) + sparse.spdiags(ones(n+1), 1, n, n+1)) - - -def sdiag(h): - """Diagonal matrix""" - return sparse.spdiags(h, 0, size(h), size(h)) - - -def speye(n): - """sparse identity""" - return sparse.spdiags(ones(n), 0, n, n) - - -def kron3(A, B, C): - """two kron prods""" - return sparse.kron(sparse.kron(A, B), C) - - -def appendBottom(A, B): - """append on bottom""" - C = sparse.vstack((A, B)) - C = C.tocsr() - return C - - -def appendBottom3(A, B, C): - """append on bottom""" - C = appendBottom(appendBottom(A, B), C) - C = C.tocsr() - return C - - -def appendRight(A, B): - """append on right""" - C = sparse.hstack((A, B)) - C = C.tocsr() - return C - - -def appendRight3(A, B, C): - """append on right""" - C = appendRight(appendRight(A, B), C) - C = C.tocsr() - return C - - -def blkDiag(A, B): - """blockdigonal""" - O12 = sparse.coo_matrix((shape(A)[0], shape(B)[1])) - O21 = sparse.coo_matrix((shape(B)[0], shape(A)[1])) - C = sparse.vstack((sparse.hstack((A, O12)), sparse.hstack((O21, B)))) - C = C.tocsr() - return C - - -def blkDiag3(A, B, C): - """blockdigonal 3""" - ABC = blkDiag(blkDiag(A, B), C) - ABC = ABC.tocsr() - return ABC - - -def spzeros(n1, n2): - """spzeros""" - return sparse.coo_matrix((n1, n2)) diff --git a/SimPEG/EldadsCode/tools.py b/SimPEG/EldadsCode/tools.py deleted file mode 100644 index 132962a7..00000000 --- a/SimPEG/EldadsCode/tools.py +++ /dev/null @@ -1,222 +0,0 @@ -import numpy; -import cmath; -import math; - -def prod(arg): - """ returns the product of elements in arg. - arg can be list, tuple, set, and array with numerical values. """ - ret = 1; - for i in range(0,len(arg)): - ret = ret * arg[i]; - return ret; - - -def allIndices(dim): - """ From the given shape of dimenions (e.g. (2,3,4)), - generate a numpy.array of all, sorted indices.""" - - length = len(dim); - - sub = numpy.arange(dim[length-1]).reshape(dim[length-1],1); - - for d in range(length-2, -1, -1): - for i in range(0, dim[d]): - temp = numpy.ndarray([len(sub), 1]); - temp.fill(i); - temp = numpy.concatenate((temp,sub), axis=1); - if(i == 0): - newsub = temp; - else: - newsub = numpy.concatenate((newsub, temp), axis = 0); - - sub = newsub; - - return sub; - -def find(nda, obj): - """returns the index of the obj in the given nda(ndarray, list, or tuple)""" - for i in range(0, len(nda)): - if(nda[i] == obj): - return i; - return -1; - - -def notin(n, vector): - """returns a numpy.array object that contains - elements in [0,1, ... n-1] but not in vector.""" - ret = numpy.arange(n).tolist(); - for i in vector: - if (0 <= i and i < n): - ret.remove(i); - return numpy.array(ret); - - - -def getelts(nda, indices): - """From the given nda(ndarray, list, or tuple), returns the list located at the given indices""" - ret = []; - for i in indices: - ret.extend([nda[i]]); - return numpy.array(ret); - -def sub2ind(shape, subs): - """ From the given shape, returns the index of the given subscript""" - revshp = list(shape); - revshp.reverse(); - mult = [1]; - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]); - mult.reverse(); - mult = numpy.array(mult).reshape(len(mult),1); - - idx = numpy.dot((subs) , (mult)); - return idx; - -def ind2sub(shape, ind): - """ From the given shape, returns the subscrips of the given index""" - revshp = []; - revshp.extend(shape); - revshp.reverse(); - mult = [1]; - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]); - mult.reverse(); - mult = numpy.array(mult).reshape(len(mult)); - - sub = []; - - for i in range(0,len(shape)): - sub.extend([math.floor(ind / mult[i])]); - ind = ind - (math.floor(ind/mult[i]) * mult[i]); - return sub; - -def tt_dimscehck(dims, N, M = None, exceptdims = False): - """Checks whether the specified dimensions are valid in a tensor of N-dimension. - If M is given, then it will also retuns an index for M multiplicands. - If exceptdims == True, then it will compute for the dimensions not specified.""" - - # if exceptdims is true - if(exceptdims): - dims = listdiff(range(0,N), dims); - - #check vals in between 0 and N-1 - for i in range(0, len(dims)): - if(dims[i] < 0 or dims[i] >= N): - raise ValueError("invalid dimensions specified"); - - # number of dimensions in dims - p = len(dims); - - sdims = []; - sdims.extend(dims); - sdims.sort(); - - #indices of the elements in the sorted array - sidx = []; - #table that denotes whether the index is used - table = numpy.ndarray([len(sdims)]); - table.fill(0); - - for i in range(0, len(sdims)): - for j in range(0, len(dims)): - if(sdims[i] == dims[j] and table[j] == 0): - sidx.extend([j]); - table[j] = 1; - break; - - if (M == None): - return sdims - - if(M > N): - raise ValueError("Cannot have more multiplicands than dimensions"); - - if(M != N and M != p): - raise ValueError("invalid number of multiplicands"); - - if(M == p): - vidx = sidx; - else: - vidx = sdims; - - return (sdims, vidx); - -def listtimes(list, c): - """multiplies the elements in the list by the given scalar value c""" - ret = [] - for i in range(0, len(list)): - ret.extend([list[i]]*c); - return ret; - -def listdiff(list1, list2): - """returns the list of elements that are in list 1 but not in list2""" - if(list1.__class__ == numpy.ndarray): - list1 = list1.tolist(); - if(list2.__class__ == numpy.ndarray): - list2 = list2.tolist(); - ret = [] - for i in range(0,len(list1)): - ok = true - for j in range(0, len(list2)): - if(list[i] == list[j]): - ok = false; - break; - if(ok): - ret.extend([list[i]]); - return ret; - - - -def tt_subscheck(subs): - """Check whether the given list of subscripts are valid. Used for sptensor""" - isOk = True; - if(subs.size == 0): - isOk = True; - - elif(subs.ndim != 2): - isOk = False; - - else: - for i in range(0, (subs.size / subs[0].size)): - for j in range(0, (subs[0].size)): - val = subs[i][j]; - if( cmath.isnan(val) or cmath.isinf(val) or val < 0 or val != round(val) ): - isOk = False; - - if(not isOk): - raise ValueError("Subscripts must be a matrix of non-negative integers"); - - return isOk; - - -def tt_valscheck(vals): - """Check whether the given list of values are valid. Used for sptensor""" - isOk = True; - - if(vals.size == 0): - isOk = True; - - elif(vals.ndim != 2 or vals[0].size != 1): - isOk = False; - - if(not isOk): - raise ValueError("values must be a column array"); - - return isOk; - -def tt_sizecheck(size): - """Check whether the given size is valid. Used for sptensor""" - size = numpy.array(size); - isOk = True; - - if(size.ndim != 1): - isOk = False; - else: - for i in range(0, len(size)): - val = size[i]; - if(cmath.isnan(val) or cmath.isinf(val) - or val <= 0 or val != round(val)): - isOk = False; - - if(not isOk): - raise ValueError("size must be a row vector of real positive integers"); - return isOk; diff --git a/SimPEG/EldadsCode/utils.py b/SimPEG/EldadsCode/utils.py deleted file mode 100644 index e912c5b8..00000000 --- a/SimPEG/EldadsCode/utils.py +++ /dev/null @@ -1,87 +0,0 @@ -from numpy import * -import numpy as np - - -def diff(A, d): - if(d == 1): - return A[1:, :, :] - A[:-1, :, :] - elif(d == 2): - return A[:, 1:, :] - A[:, :-1, :] - else: - return A[:, :, 1:] - A[:, :, :-1] - #else: - # print('d must be 1,2 or 3') - - -def diffp(A, d1, d2): - if(d1 == 1 and d2 == 2): - return A[1:, 1:, :] - A[:-1, :-1, :] - elif(d1 == 1 and d2 == 3): - return A[1:, :, 1:] - A[:-1, :, :-1] - else: - return A[:, 1:, 1:] - A[:, :-1, :-1] - - -def diffm(A, d1, d2): - if(d1 == 3 and d2 == 2): - return A[:, :-1, 1:] - A[:, 1:, :-1] - elif(d1 == 1 and d2 == 3): - return A[1:, :, :-1] - A[:-1, :, 1:] - elif(d1 == 2 and d2 == 1): - return A[:-1, 1:, :] - A[1:, :-1, :] - else: - print('d must be 1, 2 or 3') - - -def ave(A, d): - if(d == 1): - return 0.5*(A[1:, :, :] + A[:-1, :, :]) - elif(d == 2): - return 0.5*(A[:, 1:, :] + A[:, :-1, :]) - elif(d == 3): - return 0.5*(A[:, :, 1:] + A[:, :, :-1]) - else: - print('d must be 1,2 or 3') - - -def mkmat(x): - return reshape(matrix(x), (size(x), 1), 'F') - - -def hstack3(a, b, c): - a = mkvc(a) - b = mkvc(b) - c = mkvc(c) - a = mkmat(a) - b = mkmat(b) - c = mkmat(c) - return hstack((hstack((a, b)), c)) - - -def ind2sub(shape, ind): - """From the given shape, returns the subscrips of the given index""" - revshp = [] - revshp.extend(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult)) - - sub = [] - - for i in range(0, len(shape)): - sub.extend([math.floor(ind / mult[i])]) - ind = ind - (math.floor(ind/mult[i]) * mult[i]) - return sub - - -def sub2ind(shape, subs): - """From the given shape, returns the index of the given subscript""" - revshp = list(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = array(mult).reshape(len(mult), 1) - - idx = dot((subs), (mult)) - return idx diff --git a/SimPEG/EldadsCode/zevel.py b/SimPEG/EldadsCode/zevel.py deleted file mode 100644 index c3e9ae2d..00000000 --- a/SimPEG/EldadsCode/zevel.py +++ /dev/null @@ -1,119 +0,0 @@ -#============= Nodal Gradients =========================== -def getNodalGradient(h1,h2,h3): - - n1 = size(h1) - n2 = size(h2) - n3 = size(h3) - D1 = kron3(speye(n3+1),speye(n2+1),ddx(n1)) - D2 = kron3(speye(n3+1),ddx(n2),speye(n1+1)) - D3 = kron3(ddx(n3),speye(n2+1),speye(n1+1)) - - # topological gradient - GRAD = appendBottom3(D1,D2,D3) - - # scale for non-uniform mesh - L = blkDiag3(kron3(speye(n3+1),speye(n2+1),sdiag(1/h1)), - kron3(speye(n3+1),sdiag(1/h2),speye(n1+1)), - kron3(sdiag(1/h3),speye(n2+1),speye(n1+1))) - - return L*GRAD - -#============= Edge CURL =========================== -def getCurlMatrix(h1,h2,h3): - - n1 = size(h1) - n2 = size(h2) - n3 = size(h3) - - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - # derivatives on x-edge variables - D32 = kron3(d3,speye(n2),speye(n1+1)) - D23 = kron3(speye(n3),d2,speye(n1+1)) - D31 = kron3(d3,speye(n2+1),speye(n1)) - D13 = kron3(speye(n3),speye(n2+1),d1) - D21 = kron3(speye(n3+1),d2,speye(n1)) - D12 = kron3(speye(n3+1),speye(n2),d1) - - O1 = spzeros(shape(D32)[0],shape(D31)[1]) - O2 = spzeros(shape(D31)[0],shape(D32)[1]) - O3 = spzeros(shape(D21)[0],shape(D13)[1]) - - CURL = appendBottom3( - appendRight3(O1, -D32, D23), - appendRight3(D31, O2, -D13), - appendRight3(-D21, D12, O3)) - - # scale for non-uniform mesh - F = blkDiag3(kron3(sdiag(1/h3),sdiag(1/h2),speye(n1+1)), - kron3(sdiag(1/h3),speye(n2+1),sdiag(1/h1)), - kron3(speye(n3+1),sdiag(1/h2),sdiag(1/h1))) - - L = blkDiag3(kron3(speye(n3+1),speye(n2+1),sdiag(h1)), - kron3(speye(n3+1),sdiag(h2),speye(n1+1)), - kron3(sdiag(h3),speye(n2+1),speye(n1+1))) - - - return F*(CURL*L) - -#============= Face DIV =========================== -def getDivMatrix(h1,h2,h3): - - n1 = size(h1) - n2 = size(h2) - n3 = size(h3) - - d1 = ddx(n1) - d2 = ddx(n2) - d3 = ddx(n3) - D1 = kron3(speye(n3),speye(n2),d1) - D2 = kron3(speye(n3),d2,speye(n1)) - D3 = kron3(d3,speye(n2),speye(n1)) - - # divergence on faces - D = appendRight3(D1, D2, D3) - - # scale for non-uniform mesh - F = blkDiag3(kron3(sdiag(h3),sdiag(h2),speye(n1+1)), - kron3(sdiag(h3),speye(n2+1),sdiag(h1)), - kron3(speye(n3+1),sdiag(h2),sdiag(h1))) - - V = kron3(sdiag(1/h3),sdiag(1/h2),sdiag(1/h1)) - - return V*(D*F) - -#====== Face Averageing ================= -def getFaceAverage(n1,n2,n3): - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - Af = appendRight3(kron3(speye(n3),speye(n2),av1), - kron3(speye(n3),av2,speye(n1)), - kron3(av3,speye(n2),speye(n1))) - return Af - -#====== Edge Averageing ================= -def getEdgeAverage(n1,n2,n3): - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - Ae = appendRight3(kron3(av3,av2,speye(n1)), - kron3(av3,speye(n2),av1), - kron3(speye(n3),av2,av1)) - return Ae - -#====== Node Averageing ================= -def getNodeAverage(n1,n2,n3): - - av1 = av(n1) - av2 = av(n2) - av3 = av(n3) - - return kron3(av3,av2,av1) - - diff --git a/SimPEG/EldadsCode/GaussNewton.py b/SimPEG/GaussNewton.py similarity index 100% rename from SimPEG/EldadsCode/GaussNewton.py rename to SimPEG/GaussNewton.py From c3476321a87f8da1289fa4520d2aef77fdc859c0 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 18:07:21 -0700 Subject: [PATCH 096/359] Removed EMforward code for merging into master. (This is still being developed in branch: eldadsWork) --- SimPEG/EMforward.py | 79 ------------------------------------- SimPEG/interpmat.py | 94 --------------------------------------------- SimPEG/ops.py | 62 ------------------------------ 3 files changed, 235 deletions(-) delete mode 100644 SimPEG/EMforward.py delete mode 100644 SimPEG/interpmat.py delete mode 100644 SimPEG/ops.py diff --git a/SimPEG/EMforward.py b/SimPEG/EMforward.py deleted file mode 100644 index 9c332c9b..00000000 --- a/SimPEG/EMforward.py +++ /dev/null @@ -1,79 +0,0 @@ -import numpy as np -from utils import mkvc -import scipy.sparse.linalg.dsolve as dsl -from InnerProducts import getFaceInnerProduct, getEdgeInnerProduct - -def getMisfit(m,mesh,forward,param): - - mu0 = 4*np.pi*1e-7 - omega = forward['omega'] #[param['indomega']] - rhs = forward['rhs'] #[:,param['indrhs']] - mis = 0 - dmis = m*0 - - # Maxwell's system for E - for i in range(len(omega)): - for j in range(rhs.shape[1]): - Curl = mesh.edgeCurl - #Grad = mesh.nodalGrad - sigma = np.exp(m) - Me,PP = getEdgeInnerProduct(mesh,sigma) - Mf = 1/mu0 * getFaceInnerProduct(mesh) # assume mu = mu0 - - A = Curl.T * Mf * Curl - 1j * omega[i] * Me - b = mkvc(np.array(rhs[:,j])) - e = dsl.spsolve(A,b) - e = mkvc(e,2) - #print np.linalg.norm(A*e-b)/np.linalg.norm(b) - P = forward['projection'] - d = P*e - r = mkvc(d - param.dobs[i,j,:],2) - - mis = mis + 0.5*(r.T*r) - # get derivatives - lam = dsl.spsolve(A.T,P.T*r) - lam = mkvc(lam,2) - Gij = - 1j * omega[i] * PP.T*sp.diag((PP*e)*mesh.vol) - dmis = dmis - Gij.T*lam - - - return mis, dmis, d - - - -if __name__ == '__main__': - from TensorMesh import TensorMesh - from interpmat import interpmat - from scipy import sparse as sp - - h = [np.ones(7),np.ones(8),np.ones(9)] - mesh = TensorMesh(h) - xs = np.array([3.1,4.3,5.4,6.5]) - ys = np.array([3.2,4.1,5.4,6.2]) - zs = np.array([4.3,4.2,4.1,4.1]); - - xyz = mesh.gridEx - x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] - x = list(set(x)); y = list(set(y)); z = list(set(z)) - Px = interpmat(x,y,z,xs,ys,zs) - xyz = mesh.gridEy - x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] - x = list(set(x)); y = list(set(y)); z = list(set(z)) - Py = interpmat(x,y,z,xs,ys,zs) - xyz = mesh.gridEz - x = xyz[:,0]; y = xyz[:,1]; z = xyz[:,2] - x = list(set(x)); y = list(set(y)); z = list(set(z)) - Pz = interpmat(x,y,z,xs,ys,zs) - P = sp.hstack((Px,Py,Pz)) - - ne = np.sum(mesh.nE) - Q = np.matrix(np.random.randn(ne,5)) - omega = [1,2,3] - forward = {'omega':omega, 'rhs':Q,'projection':P} - dobs = np.ones([np.size(xs),5,np.size(omega)]) - param = {'dobs':dobs} - - - - m = np.ones(mesh.nC) - getMisfit(m,mesh,forward,param) diff --git a/SimPEG/interpmat.py b/SimPEG/interpmat.py deleted file mode 100644 index bfb80291..00000000 --- a/SimPEG/interpmat.py +++ /dev/null @@ -1,94 +0,0 @@ -from scipy import sparse as sp -import numpy as np - - -def interpmat(x,y,z,xr,yr,zr): -# -# This function does local linear interpolation -# computed for each receiver point in turn -# -# [Q] = linint(x,y,z,xr,yr,zr) -# Interpolation matrix -# - - nx = np.size(x) - ny = np.size(y) - nz = np.size(z) - - nps = np.size(xr) - - #Q = spalloc(np,nx*ny*nz,8*np); - Q = sp.lil_matrix((nps,nx*ny*nz)) - ind_x = np.array([0,0]) - ind_y = np.array([0,0]) - ind_z = np.array([0,0]) - dx, dy, dz = np.zeros(2), np.zeros(2), np.zeros(2) - for i in range(0, nps): - im = np.argmin(abs(xr[i]-x)) - print i,im - if xr[i] - x[im] >= 0: # Point on the left - ind_x[0] = im; ind_x[1] = im+1 - else: # Point on the right - ind_x[0] = im-1; ind_x[1] = im - - - dx[0] = xr[i] - x[ind_x[0]] - dx[1] = x[ind_x[1]] - xr[i] - - im = np.argmin(abs(yr[i] - y)) - if yr[i] - y[im] >= 0: # Point on the left - ind_y[0] = im; ind_y[1] = im+1 - else: # Point on the right - ind_y[0] = im-1; ind_y[1] = im - - - dy[0] = yr[i] - y[ind_y[0]] - dy[1] = y[ind_y[1]] - yr[i]; - - im = np.argmin(abs(zr[i] - z)); - if zr[i] -z[im] >= 0: # Point on the left - ind_z[0] = im; ind_z[1] = im+1 - else: # Point on the right - ind_z[0] = im-1; ind_z[1] = im; - - dz[0] = zr[i] - z[ind_z[0]]; dz[1] = z[ind_z[1]] - zr[i] - - Dx = x[ind_x[1]] - x[ind_x[0]] - Dy = y[ind_y[1]] - y[ind_y[0]] - Dz = z[ind_z[1]] - z[ind_z[0]] - #dv = Dx*Dy*Dz - - # Get the row in the matrix - v = np.zeros([nx, ny,nz]) - - v[ ind_x[0], ind_y[0], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz) - v[ ind_x[0], ind_y[1], ind_z[0]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz) - v[ ind_x[1], ind_y[0], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[0]/Dz) - v[ ind_x[1], ind_y[1], ind_z[0]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[0]/Dz) - v[ ind_x[0], ind_y[0], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz) - v[ ind_x[0], ind_y[1], ind_z[1]] = (1-dx[0]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz) - v[ ind_x[1], ind_y[0], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[0]/Dy)*(1-dz[1]/Dz) - v[ ind_x[1], ind_y[1], ind_z[1]] = (1-dx[1]/Dx)*(1-dy[1]/Dy)*(1-dz[1]/Dz) - - - print(np.shape(v.flatten('F'))) - print(np.shape(Q)) - - Q[i,:] = v.flatten('F') - - - return Q.tocsr() - - -if __name__ == '__main__': - - x = np.array([1.1, 2.1, 3.6, 4.9]) - y = np.array([1.2, 2.2, 3.3, 4.9, 5.6]) - z = np.array([0.8, 1.7, 4.9, 6.5]) - - xr = np.array([2.5,3.2]) - yr = np.array([2.4,3.6]) - zr = np.array([2.5,3.9]) - - A = interpmat(x,y,z,xr,yr,zr) - \ No newline at end of file diff --git a/SimPEG/ops.py b/SimPEG/ops.py deleted file mode 100644 index 4997cde9..00000000 --- a/SimPEG/ops.py +++ /dev/null @@ -1,62 +0,0 @@ -import numpy as np -from utils import mkvc -import scipy.sparse.linalg as spla -import scipy.sparse as sp - - -def matmul(A,B): - - # first check shape - if np.shape(A)[1] != np.shape(B)[0]: - print 'error in sizes' - return - - # Check types - sA = sp.issparse(A) - sB = sp.issparse(B) - - if ((sA == False) & (sB == True)): # doesno't work unless we trick it - return (B.T.dot(A.T)).T - else: - return A.dot(B) - - -def dot(A,B): - A = mkvc(A,1) - B = mkvc(B,1) - return np.dot(A,B) - -def inner(A,B): - A = mkvc(A,1) - B = mkvc(B,1) - return np.dot(A,B) - - -if __name__ == '__main__': - import numpy as np - from utils import mkvc - import scipy.sparse as sp - - # generate sparse and dense matrices - A = sp.rand(100, 200, density=0.05, format='csr', dtype=None) - B = sp.rand(200, 150, density=0.05, format='csr', dtype=None) - C = np.random.rand(200,150) - D = np.random.rand(150,100) - b = mkvc(np.arange(200),1) - c = np.reshape(b,(1,200)) - matmul(A,B) - matmul(A,C) - matmul(C,D) - matmul(D,A) - matmul(A,b) - dot(c,b) - dot(C,C) - print np.shape(c), np.shape(b)[0] - print matmul(c,b),dot(c,b) - - - - - - - From deb3f656cd63fe30fde8b7f7fd7878cf4a969c23 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 6 Aug 2013 18:26:49 -0700 Subject: [PATCH 097/359] I have added an MIT license to the code, including all authors who have contributed to Master at this point in time. Each of you should approve this commit and then we can merge it into master. --- SimPEG/license.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 SimPEG/license.txt diff --git a/SimPEG/license.txt b/SimPEG/license.txt new file mode 100644 index 00000000..d8367834 --- /dev/null +++ b/SimPEG/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Eldad Haber, Rowan Cockett, Lars Ruthotto, Dave Marchant, Seogi Kang, Luz Angelica Caudillo Mata + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file From b0760f577f63ff4525c89a8ea4da4590e92a003d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 9 Aug 2013 17:30:57 -0700 Subject: [PATCH 098/359] Put utils in their own folder. Increases organization, and everything will be available under SimPEG.utils MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NOTE: if you add a new function (or file), you must register it in __init__.py for it to be available under: e.g. ... from utils import mkvc, … ... from MYNEWFILE import MYNEWFUNCTION --- SimPEG/DiffOperators.py | 3 +- SimPEG/InnerProducts.py | 3 +- SimPEG/__init__.py | 1 - SimPEG/exampleGrid.py | 25 --- SimPEG/sputils.py | 98 ------------ SimPEG/tests/OrderTest.py | 6 +- SimPEG/tests/test_operators.py | 2 - SimPEG/utils/__init__.py | 3 + SimPEG/{utils.py => utils/lomutils.py} | 213 ++++++++++--------------- SimPEG/utils/sputils.py | 22 +++ SimPEG/utils/utils.py | 140 ++++++++++++++++ 11 files changed, 258 insertions(+), 258 deletions(-) delete mode 100644 SimPEG/exampleGrid.py delete mode 100644 SimPEG/sputils.py create mode 100644 SimPEG/utils/__init__.py rename SimPEG/{utils.py => utils/lomutils.py} (61%) create mode 100644 SimPEG/utils/sputils.py create mode 100644 SimPEG/utils/utils.py diff --git a/SimPEG/DiffOperators.py b/SimPEG/DiffOperators.py index d02b26bf..f8c1feb9 100644 --- a/SimPEG/DiffOperators.py +++ b/SimPEG/DiffOperators.py @@ -1,7 +1,6 @@ import numpy as np from scipy import sparse as sp -from sputils import sdiag, speye, kron3, spzeros -from utils import mkvc +from utils import mkvc, sdiag, speye, kron3, spzeros def ddx(n): diff --git a/SimPEG/InnerProducts.py b/SimPEG/InnerProducts.py index 267a9bb0..1add3e72 100644 --- a/SimPEG/InnerProducts.py +++ b/SimPEG/InnerProducts.py @@ -1,6 +1,5 @@ from scipy import sparse as sp -from sputils import sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal -from utils import sub2ind, ndgrid, mkvc, getSubArray +from utils import sub2ind, ndgrid, mkvc, getSubArray, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal import numpy as np diff --git a/SimPEG/__init__.py b/SimPEG/__init__.py index 7cb2b76d..ca9b9f7b 100644 --- a/SimPEG/__init__.py +++ b/SimPEG/__init__.py @@ -1,4 +1,3 @@ from TensorMesh import TensorMesh from LogicallyOrthogonalMesh import LogicallyOrthogonalMesh import utils -from exampleGrid import exampleLomGird diff --git a/SimPEG/exampleGrid.py b/SimPEG/exampleGrid.py deleted file mode 100644 index 2179a17c..00000000 --- a/SimPEG/exampleGrid.py +++ /dev/null @@ -1,25 +0,0 @@ -import numpy as np -from utils import ndgrid - - -def exampleLomGird(nC, exType): - assert type(nC) == list, "nC must be a list containing the number of nodes" - assert len(nC) == 2 or len(nC) == 3, "nC must either two or three dimensions" - exType = exType.lower() - - possibleTypes = ['rect', 'rotate'] - assert exType in possibleTypes, "Not a possible example type." - - if exType == 'rect': - return ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) - elif exType == 'rotate': - if len(nC) == 2: - X, Y = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) - amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2) - amt[amt < 0] = 0 - return X + (-(Y - 0.5))*amt, Y + (+(X - 0.5))*amt - elif len(nC) == 3: - X, Y, Z = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) - amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2 + (Z - 0.5)**2) - amt[amt < 0] = 0 - return X + (-(Y - 0.5))*amt, Y + (-(Z - 0.5))*amt, Z + (-(X - 0.5))*amt diff --git a/SimPEG/sputils.py b/SimPEG/sputils.py deleted file mode 100644 index 79a1abf9..00000000 --- a/SimPEG/sputils.py +++ /dev/null @@ -1,98 +0,0 @@ -from scipy import sparse as sp -from utils import mkvc - - -def sdiag(h): - """Sparse diagonal matrix""" - return sp.spdiags(mkvc(h), 0, h.size, h.size, format="csr") - - -def speye(n): - """Sparse identity""" - return sp.identity(n, format="csr") - - -def kron3(A, B, C): - """Three kron prods""" - return sp.kron(sp.kron(A, B), C, format="csr") - - -def spzeros(n1, n2): - """spzeros""" - return sp.coo_matrix((n1, n2)).tocsr() - - -def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): - """ B = inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33) - - inverts a stack of 3x3 matrices - - Input: - A - a11, a12, a13, a21, a22, a23, a31, a32, a33 - - Output: - B - inverse - """ - - a11 = mkvc(a11) - a12 = mkvc(a12) - a13 = mkvc(a13) - a21 = mkvc(a21) - a22 = mkvc(a22) - a23 = mkvc(a23) - a31 = mkvc(a31) - a32 = mkvc(a32) - a33 = mkvc(a33) - - detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 - - b11 = +(a22*a33 - a23*a32)/detA - b12 = -(a12*a33 - a13*a32)/detA - b13 = +(a12*a23 - a13*a22)/detA - - b21 = +(a31*a23 - a21*a33)/detA - b22 = -(a31*a13 - a11*a33)/detA - b23 = +(a21*a13 - a11*a23)/detA - - b31 = -(a31*a22 - a21*a32)/detA - b32 = +(a31*a12 - a11*a32)/detA - b33 = -(a21*a12 - a11*a22)/detA - - B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12), sdiag(b13))), - sp.hstack((sdiag(b21), sdiag(b22), sdiag(b23))), - sp.hstack((sdiag(b31), sdiag(b32), sdiag(b33))))) - - return B - - -def inv2X2BlockDiagonal(a11, a12, a21, a22): - """ B = inv2X2BlockDiagonal(a11, a12, a21, a22) - - Inverts a stack of 2x2 matrices by using the inversion formula - - inv(A) = (1/det(A)) * cof(A)^T - - Input: - A - a11, a12, a13, a21, a22, a23, a31, a32, a33 - - Output: - B - inverse - """ - - a11 = mkvc(a11) - a12 = mkvc(a12) - a21 = mkvc(a21) - a22 = mkvc(a22) - - # compute inverse of the determinant. - detAinv = 1./(a11*a22 - a21*a12) - - b11 = +detAinv*a22 - b12 = -detAinv*a12 - b21 = -detAinv*a21 - b22 = +detAinv*a11 - - B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12))), - sp.hstack((sdiag(b21), sdiag(b22))))) - - return B diff --git a/SimPEG/tests/OrderTest.py b/SimPEG/tests/OrderTest.py index c522eb34..fb305d32 100644 --- a/SimPEG/tests/OrderTest.py +++ b/SimPEG/tests/OrderTest.py @@ -1,6 +1,6 @@ import sys sys.path.append('../../') -from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh, exampleLomGird +from SimPEG import TensorMesh, utils, LogicallyOrthogonalMesh import numpy as np import unittest @@ -100,10 +100,10 @@ class OrderTest(unittest.TestCase): else: raise Exception('Unexpected meshType') if self.meshDimension == 2: - X, Y = exampleLomGird([nc, nc], kwrd) + X, Y = utils.exampleLomGird([nc, nc], kwrd) self.M = LogicallyOrthogonalMesh([X, Y]) if self.meshDimension == 3: - X, Y, Z = exampleLomGird([nc, nc, nc], kwrd) + X, Y, Z = utils.exampleLomGird([nc, nc, nc], kwrd) self.M = LogicallyOrthogonalMesh([X, Y, Z]) return 1./nc diff --git a/SimPEG/tests/test_operators.py b/SimPEG/tests/test_operators.py index 38d289c3..ab377089 100644 --- a/SimPEG/tests/test_operators.py +++ b/SimPEG/tests/test_operators.py @@ -1,7 +1,5 @@ import numpy as np import unittest -import sys -sys.path.append('../') from OrderTest import OrderTest MESHTYPES = ['uniformTensorMesh', 'uniformLOM', 'rotateLOM'] diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py new file mode 100644 index 00000000..f8bf9716 --- /dev/null +++ b/SimPEG/utils/__init__.py @@ -0,0 +1,3 @@ +from utils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind +from sputils import spzeros, kron3, speye, sdiag +from lomUtils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird diff --git a/SimPEG/utils.py b/SimPEG/utils/lomutils.py similarity index 61% rename from SimPEG/utils.py rename to SimPEG/utils/lomutils.py index 1b5be6bd..ddfebfb9 100644 --- a/SimPEG/utils.py +++ b/SimPEG/utils/lomutils.py @@ -1,101 +1,30 @@ import numpy as np +from scipy import sparse as sp +from utils import mkvc, ndgrid, sub2ind +from sputils import sdiag -def mkvc(x, numDims=1): - """Creates a vector with the number of dimension specified +def exampleLomGird(nC, exType): + assert type(nC) == list, "nC must be a list containing the number of nodes" + assert len(nC) == 2 or len(nC) == 3, "nC must either two or three dimensions" + exType = exType.lower() - e.g.: + possibleTypes = ['rect', 'rotate'] + assert exType in possibleTypes, "Not a possible example type." - a = np.array([1, 2, 3]) - - mkvc(a, 1).shape - > (3, ) - - mkvc(a, 2).shape - > (3, 1) - - mkvc(a, 3).shape - > (3, 1, 1) - - """ - if type(x) == np.matrix: - x = np.array(x) - - assert type(x) == np.ndarray, "Vector must be a numpy array" - - if numDims == 1: - return x.flatten(order='F') - elif numDims == 2: - return x.flatten(order='F')[:, np.newaxis] - elif numDims == 3: - return x.flatten(order='F')[:, np.newaxis, np.newaxis] - - -def ndgrid(*args, **kwargs): - """ - Form tensorial grid for 1, 2, or 3 dimensions. - - Returns as column vectors by default. - - To return as matrix input: - - ndgrid(..., vector=False) - - The inputs can be a list or separate arguments. - - e.g. - - a = np.array([1, 2, 3]) - b = np.array([1, 2]) - - XY = ndgrid(a, b) - > [[1 1] - [2 1] - [3 1] - [1 2] - [2 2] - [3 2]] - - X, Y = ndgrid(a, b, vector=False) - > X = [[1 1] - [2 2] - [3 3]] - > Y = [[1 2] - [1 2] - [1 2]] - - """ - - # Read the keyword arguments, and only accept a vector=True/False - vector = kwargs.pop('vector', True) - assert type(vector) == bool, "'vector' keyword must be a bool" - assert len(kwargs) == 0, "Only 'vector' keyword accepted" - - # you can either pass a list [x1, x2, x3] or each seperately - if type(args[0]) == list: - xin = args[0] - else: - xin = args - - # Each vector needs to be a numpy array - assert np.all([type(x) == np.ndarray for x in xin]), "All vectors must be numpy arrays." - - if len(xin) == 1: - return xin[0] - elif len(xin) == 2: - XY = np.broadcast_arrays(mkvc(xin[1], 1), mkvc(xin[0], 2)) - if vector: - X2, X1 = [mkvc(x) for x in XY] - return np.c_[X1, X2] - else: - return XY[1], XY[0] - elif len(xin) == 3: - XYZ = np.broadcast_arrays(mkvc(xin[2], 1), mkvc(xin[1], 2), mkvc(xin[0], 3)) - if vector: - X3, X2, X1 = [mkvc(x) for x in XYZ] - return np.c_[X1, X2, X3] - else: - return XYZ[2], XYZ[1], XYZ[0] + if exType == 'rect': + return ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + elif exType == 'rotate': + if len(nC) == 2: + X, Y = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2) + amt[amt < 0] = 0 + return X + (-(Y - 0.5))*amt, Y + (+(X - 0.5))*amt + elif len(nC) == 3: + X, Y, Z = ndgrid([np.cumsum(np.r_[0, np.ones(nx)/nx]) for nx in nC], vector=False) + amt = 0.5-np.sqrt((X - 0.5)**2 + (Y - 0.5)**2 + (Z - 0.5)**2) + amt[amt < 0] = 0 + return X + (-(Y - 0.5))*amt, Y + (-(Z - 0.5))*amt, Z + (-(X - 0.5))*amt def volTetra(xyz, A, B, C, D): @@ -288,43 +217,77 @@ def faceInfo(xyz, A, B, C, D, average=True, normalizeNormals=True): return N, area -def ind2sub(shape, ind): - """From the given shape, returns the subscrips of the given index""" - revshp = [] - revshp.extend(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = np.array(mult).reshape(len(mult)) +def inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33): + """ B = inv3X3BlockDiagonal(a11, a12, a13, a21, a22, a23, a31, a32, a33) - sub = [] + inverts a stack of 3x3 matrices - for i in range(0, len(shape)): - sub.extend([np.math.floor(ind / mult[i])]) - ind = ind - (np.math.floor(ind/mult[i]) * mult[i]) - return sub + Input: + A - a11, a12, a13, a21, a22, a23, a31, a32, a33 + + Output: + B - inverse + """ + + a11 = mkvc(a11) + a12 = mkvc(a12) + a13 = mkvc(a13) + a21 = mkvc(a21) + a22 = mkvc(a22) + a23 = mkvc(a23) + a31 = mkvc(a31) + a32 = mkvc(a32) + a33 = mkvc(a33) + + detA = a31*a12*a23 - a31*a13*a22 - a21*a12*a33 + a21*a13*a32 + a11*a22*a33 - a11*a23*a32 + + b11 = +(a22*a33 - a23*a32)/detA + b12 = -(a12*a33 - a13*a32)/detA + b13 = +(a12*a23 - a13*a22)/detA + + b21 = +(a31*a23 - a21*a33)/detA + b22 = -(a31*a13 - a11*a33)/detA + b23 = +(a21*a13 - a11*a23)/detA + + b31 = -(a31*a22 - a21*a32)/detA + b32 = +(a31*a12 - a11*a32)/detA + b33 = -(a21*a12 - a11*a22)/detA + + B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12), sdiag(b13))), + sp.hstack((sdiag(b21), sdiag(b22), sdiag(b23))), + sp.hstack((sdiag(b31), sdiag(b32), sdiag(b33))))) + + return B -def sub2ind(shape, subs): - """From the given shape, returns the index of the given subscript""" - revshp = list(shape) - mult = [1] - for i in range(0, len(revshp)-1): - mult.extend([mult[i]*revshp[i]]) - mult = np.array(mult).reshape(len(mult), 1) +def inv2X2BlockDiagonal(a11, a12, a21, a22): + """ B = inv2X2BlockDiagonal(a11, a12, a21, a22) - idx = np.dot((subs), (mult)) - return idx + Inverts a stack of 2x2 matrices by using the inversion formula + inv(A) = (1/det(A)) * cof(A)^T -def getSubArray(A, ind): - """subArray""" - assert type(ind) == list, "ind must be a list of vectors" - assert len(A.shape) == len(ind), "ind must have the same length as the dimension of A" + Input: + A - a11, a12, a13, a21, a22, a23, a31, a32, a33 - if len(A.shape) == 2: - return A[ind[0], :][:, ind[1]] - elif len(A.shape) == 3: - return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] - else: - raise Exception("getSubArray does not support dimension asked.") + Output: + B - inverse + """ + + a11 = mkvc(a11) + a12 = mkvc(a12) + a21 = mkvc(a21) + a22 = mkvc(a22) + + # compute inverse of the determinant. + detAinv = 1./(a11*a22 - a21*a12) + + b11 = +detAinv*a22 + b12 = -detAinv*a12 + b21 = -detAinv*a21 + b22 = +detAinv*a11 + + B = sp.vstack((sp.hstack((sdiag(b11), sdiag(b12))), + sp.hstack((sdiag(b21), sdiag(b22))))) + + return B diff --git a/SimPEG/utils/sputils.py b/SimPEG/utils/sputils.py new file mode 100644 index 00000000..0cefa26c --- /dev/null +++ b/SimPEG/utils/sputils.py @@ -0,0 +1,22 @@ +from scipy import sparse as sp +from utils import mkvc + + +def sdiag(h): + """Sparse diagonal matrix""" + return sp.spdiags(mkvc(h), 0, h.size, h.size, format="csr") + + +def speye(n): + """Sparse identity""" + return sp.identity(n, format="csr") + + +def kron3(A, B, C): + """Three kron prods""" + return sp.kron(sp.kron(A, B), C, format="csr") + + +def spzeros(n1, n2): + """spzeros""" + return sp.coo_matrix((n1, n2)).tocsr() diff --git a/SimPEG/utils/utils.py b/SimPEG/utils/utils.py new file mode 100644 index 00000000..20cc33df --- /dev/null +++ b/SimPEG/utils/utils.py @@ -0,0 +1,140 @@ +import numpy as np + + +def mkvc(x, numDims=1): + """Creates a vector with the number of dimension specified + + e.g.: + + a = np.array([1, 2, 3]) + + mkvc(a, 1).shape + > (3, ) + + mkvc(a, 2).shape + > (3, 1) + + mkvc(a, 3).shape + > (3, 1, 1) + + """ + if type(x) == np.matrix: + x = np.array(x) + + assert type(x) == np.ndarray, "Vector must be a numpy array" + + if numDims == 1: + return x.flatten(order='F') + elif numDims == 2: + return x.flatten(order='F')[:, np.newaxis] + elif numDims == 3: + return x.flatten(order='F')[:, np.newaxis, np.newaxis] + + +def ndgrid(*args, **kwargs): + """ + Form tensorial grid for 1, 2, or 3 dimensions. + + Returns as column vectors by default. + + To return as matrix input: + + ndgrid(..., vector=False) + + The inputs can be a list or separate arguments. + + e.g. + + a = np.array([1, 2, 3]) + b = np.array([1, 2]) + + XY = ndgrid(a, b) + > [[1 1] + [2 1] + [3 1] + [1 2] + [2 2] + [3 2]] + + X, Y = ndgrid(a, b, vector=False) + > X = [[1 1] + [2 2] + [3 3]] + > Y = [[1 2] + [1 2] + [1 2]] + + """ + + # Read the keyword arguments, and only accept a vector=True/False + vector = kwargs.pop('vector', True) + assert type(vector) == bool, "'vector' keyword must be a bool" + assert len(kwargs) == 0, "Only 'vector' keyword accepted" + + # you can either pass a list [x1, x2, x3] or each seperately + if type(args[0]) == list: + xin = args[0] + else: + xin = args + + # Each vector needs to be a numpy array + assert np.all([type(x) == np.ndarray for x in xin]), "All vectors must be numpy arrays." + + if len(xin) == 1: + return xin[0] + elif len(xin) == 2: + XY = np.broadcast_arrays(mkvc(xin[1], 1), mkvc(xin[0], 2)) + if vector: + X2, X1 = [mkvc(x) for x in XY] + return np.c_[X1, X2] + else: + return XY[1], XY[0] + elif len(xin) == 3: + XYZ = np.broadcast_arrays(mkvc(xin[2], 1), mkvc(xin[1], 2), mkvc(xin[0], 3)) + if vector: + X3, X2, X1 = [mkvc(x) for x in XYZ] + return np.c_[X1, X2, X3] + else: + return XYZ[2], XYZ[1], XYZ[0] + + +def ind2sub(shape, ind): + """From the given shape, returns the subscrips of the given index""" + revshp = [] + revshp.extend(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = np.array(mult).reshape(len(mult)) + + sub = [] + + for i in range(0, len(shape)): + sub.extend([np.math.floor(ind / mult[i])]) + ind = ind - (np.math.floor(ind/mult[i]) * mult[i]) + return sub + + +def sub2ind(shape, subs): + """From the given shape, returns the index of the given subscript""" + revshp = list(shape) + mult = [1] + for i in range(0, len(revshp)-1): + mult.extend([mult[i]*revshp[i]]) + mult = np.array(mult).reshape(len(mult), 1) + + idx = np.dot((subs), (mult)) + return idx + + +def getSubArray(A, ind): + """subArray""" + assert type(ind) == list, "ind must be a list of vectors" + assert len(A.shape) == len(ind), "ind must have the same length as the dimension of A" + + if len(A.shape) == 2: + return A[ind[0], :][:, ind[1]] + elif len(A.shape) == 3: + return A[ind[0], :, :][:, ind[1], :][:, :, ind[2]] + else: + raise Exception("getSubArray does not support dimension asked.") From 3e21ba86a7246e336c343b6b40d1607591a2a8b5 Mon Sep 17 00:00:00 2001 From: Lars Ruthotto Date: Mon, 12 Aug 2013 17:04:15 -0700 Subject: [PATCH 099/359] fixed typo in util's __init__.py --- SimPEG/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py index f8bf9716..a2463636 100644 --- a/SimPEG/utils/__init__.py +++ b/SimPEG/utils/__init__.py @@ -1,3 +1,3 @@ from utils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind from sputils import spzeros, kron3, speye, sdiag -from lomUtils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird +from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird From e11a3ccf65be91aaf7fdab0136842be1928e161f Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 21:34:15 -0700 Subject: [PATCH 100/359] Bug Fixes in TensorView and test_utils Updated ipnbs --- SimPEG/TensorView.py | 15 ++-- SimPEG/parameters.py | 128 +++++++++++++-------------- SimPEG/tests/test_utils.py | 4 +- notebooks/exLomPlots.ipynb | 28 +++--- notebooks/exPlotImage2D.ipynb | 159 ++++++++++++++++++++-------------- 5 files changed, 184 insertions(+), 150 deletions(-) diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index e98fb93e..01cad4e4 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -13,7 +13,7 @@ class TensorView(object): def __init__(self): pass - def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True): + def plotImage(self, I, imageType='CC', figNum=1,ax=None,direction='z',numbering=True,annotationColor='w'): """ Mesh.plotImage(I) @@ -126,11 +126,11 @@ class TensorView(object): nY = np.ceil(self.nCz/nX) # allocate space for montage - C = np.zeros((nX*self.nCx,nY*self.nCz)) - - nCx = self.nCx nCy = self.nCy + + C = np.zeros((nX*nCx,nY*nCy)) + for iy in range(int(nY)): for ix in range(int(nX)): iz = ix + iy*nX @@ -142,6 +142,7 @@ class TensorView(object): C = np.ma.masked_where(np.isnan(C), C) xx = np.r_[0, np.cumsum(np.kron(np.ones((nX, 1)), self.hx).ravel())] yy = np.r_[0, np.cumsum(np.kron(np.ones((nY, 1)), self.hy).ravel())] + # Plot the mesh ph = ax.pcolormesh(xx, yy, C.T) # Plot the lines gx = np.arange(nX+1)*self.vectorNx[-1] @@ -151,8 +152,8 @@ class TensorView(object): gxY = np.kron(np.ones((nX+1, 1)), np.array([0, sum(self.hy)*nY, np.nan])).ravel() gyX = np.kron(np.ones((nY+1, 1)), np.array([0, sum(self.hx)*nX, np.nan])).ravel() gyY = np.c_[gy, gy, gy+np.nan].ravel() - ax.plot(gxX, gxY, 'w-', linewidth=2) - ax.plot(gyX, gyY, 'w-', linewidth=2) + ax.plot(gxX, gxY, annotationColor+'-', linewidth=2) + ax.plot(gyX, gyY, annotationColor+'-', linewidth=2) if numbering: pad = np.sum(self.hx)*0.04 @@ -161,7 +162,7 @@ class TensorView(object): iz = ix + iy*nX if iz < self.nCz: ax.text((ix+1)*self.vectorNx[-1]-pad,(iy)*self.vectorNy[-1]+pad, - '#%i'%iz,color='w',verticalalignment='bottom',horizontalalignment='right',size='x-large') + '#%i'%iz,color=annotationColor,verticalalignment='bottom',horizontalalignment='right',size='x-large') plt.show() return ph diff --git a/SimPEG/parameters.py b/SimPEG/parameters.py index c90686b0..842c96e9 100644 --- a/SimPEG/parameters.py +++ b/SimPEG/parameters.py @@ -5,64 +5,64 @@ import TensorView as tv def getIndecesBlock(p0,p1,ccMesh): """ - Creates a vector containing the block indexes in the cell centerd mesh. - Returns a tuple - + Creates a vector containing the block indexes in the cell centerd mesh. + Returns a tuple + The block is defined by the points - p0 : describe the position of the left upper front corner, and + p0 : describe the position of the left upper front corner, and p1 : describe the position of the right bottom back corner. - + ccMesh represents the cell-centered mesh - - The points p0 and p1 must live in the the same dimensional space as the mesh. + + The points p0 and p1 must live in the the same dimensional space as the mesh. """ - + # Validation of the input assert type(p0) == np.ndarray, "Vector must be a numpy array" assert type(p1) == np.ndarray, "Vector must be a numpy array" - + # Validation: p0 and p1 live in the same dimensional space assert len(p0) == len(p1), "Dimension mismatch. len(p0) != len(p1)" # Validation: mesh and points live in the same dimensional space dimMesh = np.size(ccMesh[0,:]) assert len(p0) == dimMesh, "Dimension mismatch. len(p0) != dimMesh" - + if dimMesh == 1: # Define the reference points - x1 = p0[0] - x2 = p1[0] - + x1 = p0[0] + x2 = p1[0] + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) ind = np.where(indX) - + elif dimMesh == 2: # Define the reference points - x1 = p0[0] - y1 = p0[1] - - x2 = p1[0] - y2 = p1[1] - + x1 = p0[0] + y1 = p0[1] + + x2 = p1[0] + y2 = p1[1] + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) indY = (y1 <= ccMesh[:,1]) & (ccMesh[:,1] <= y2) - + ind = np.where(indX & indY) - + else: # Define the points - x1 = p0[0] - y1 = p0[1] + x1 = p0[0] + y1 = p0[1] z1 = p0[2] - - x2 = p1[0] - y2 = p1[1] + + x2 = p1[0] + y2 = p1[1] z2 = p1[2] - + indX = (x1 <= ccMesh[:,0]) & (ccMesh[:,0] <= x2) indY = (y1 <= ccMesh[:,1]) & (ccMesh[:,1] <= y2) indZ = (z1 <= ccMesh[:,2]) & (ccMesh[:,2] <= z2) - + ind = np.where(indX & indY & indZ) # Return a tuple @@ -76,28 +76,28 @@ def defineBlockConductivity(p0,p1,ccMesh,condVals): """ sigma = np.zeros(ccMesh.shape[0]) + condVals[1] ind = getIndecesBlock(p0,p1,ccMesh) - + sigma[ind] = condVals[0] - + return sigma - + def defineTwoLayeredConductivity(depth,ccMesh,condVals): """ Define a two layered model. Depth of the first layer must be specified. CondVals vector with the conductivity values of the layers. Eg: - - Convention to number the layers: + + Convention to number the layers: <----------------------------|------------------------------------> 0 depth zf 1st layer 2nd layer """ sigma = np.zeros(ccMesh.shape[0]) + condVals[1] - + dim = np.size(ccMesh[0,:]) - + p0 = np.zeros(dim) p1 = np.zeros(dim) - + # Identify 1st cell centered reference point p0[0] = ccMesh[0,0] p0[1] = ccMesh[0,1] @@ -107,30 +107,30 @@ def defineTwoLayeredConductivity(depth,ccMesh,condVals): p1[0] = ccMesh[-1,0] p1[1] = ccMesh[-1,1] p1[2] = ccMesh[-1,2] - depth; - + ind = getIndecesBlock(p0,p1,ccMesh) - + sigma[ind] = condVals[0]; - + return sigma - + def scalarConductivity(ccMesh,pFunction): """ - Define the distribution conductivity in the mesh according to the - analytical expression given in pFunction + Define the distribution conductivity in the mesh according to the + analytical expression given in pFunction """ xCC = ccMesh[:,0] yCC = ccMesh[:,1] zCC = ccMesh[:,2] - + sigma = pFunction(xCC,yCC,zCC) - + return sigma if __name__ == '__main__': - + # Define the mesh - + testDim = 3 h1 = 0.3*np.ones(7) h1[0] = 0.5 @@ -149,44 +149,44 @@ if __name__ == '__main__': h = [h1, h2, h3] M = tm.TensorMesh(h, x0) - + ccMesh = M.gridCC - + # ------------------- Test conductivities! -------------------------- print('Testing 1 block conductivity') - + p0 = np.array([0.5,0.5,0.5]) p1 = np.array([1.0,1.0,1.0]) condVals = np.array([100,1e-6]) - - sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) + + sigma = defineBlockConductivity(p0,p1,ccMesh,condVals) # Plot sigma model - #M.plotImage(sigma) - print sigma + print sigma.shape + M.plotImage(sigma) print 'Done with block! :)' - + # ----------------------------------------- - print('Testing the two layered model') + print('Testing the two layered model') condVals = np.array([100,1e-5]); depth = 1.0; - + sigma = defineTwoLayeredConductivity(depth,ccMesh,condVals) - - #M.plotImage(sigma) + + M.plotImage(sigma) print sigma print 'layer model!' - + # ----------------------------------------- print('Testing scalar conductivity') - + pFunction = lambda x,y,z: np.exp(x+y+z) - + sigma = scalarConductivity(ccMesh,pFunction) - + # Plot sigma model M.plotImage(sigma) print sigma print 'Scalar conductivity defined!' - + # ----------------------------------------- diff --git a/SimPEG/tests/test_utils.py b/SimPEG/tests/test_utils.py index 393cd78d..0dcdd362 100644 --- a/SimPEG/tests/test_utils.py +++ b/SimPEG/tests/test_utils.py @@ -2,8 +2,7 @@ import numpy as np import unittest import sys sys.path.append('../') -from utils import mkvc, ndgrid, indexCube -from sputils import sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal, sp +from utils import mkvc, ndgrid, indexCube, sdiag, inv3X3BlockDiagonal, inv2X2BlockDiagonal class TestSequenceFunctions(unittest.TestCase): @@ -64,6 +63,7 @@ class TestSequenceFunctions(unittest.TestCase): self.assertTrue(np.all(indexCube('H', nN) == np.array([10, 11, 13, 14, 19, 20, 22, 23]))) def test_invXXXBlockDiagonal(self): + import scipy.sparse as sp a = [np.random.rand(5, 1) for i in range(4)] diff --git a/notebooks/exLomPlots.ipynb b/notebooks/exLomPlots.ipynb index e2156396..3170f831 100644 --- a/notebooks/exLomPlots.ipynb +++ b/notebooks/exLomPlots.ipynb @@ -1,6 +1,6 @@ { "metadata": { - "name": "exLomPlots" + "name": "" }, "nbformat": 3, "nbformat_minor": 0, @@ -16,13 +16,13 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from SimPEG import LogicallyOrthogonalMesh, utils, exampleLomGird\n", + "from SimPEG import LogicallyOrthogonalMesh, utils\n", "mkvc = utils.mkvc" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 38 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -37,13 +37,13 @@ "cell_type": "code", "collapsed": false, "input": [ - "X, Y = exampleLomGird([3,3],'rotate')\n", + "X, Y = utils.exampleLomGird([3,3],'rotate')\n", "M = LogicallyOrthogonalMesh([X, Y])" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 39 + "prompt_number": 4 }, { "cell_type": "code", @@ -55,14 +55,15 @@ "metadata": {}, "outputs": [ { + "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\n", "text": [ - "" + "" ] } ], - "prompt_number": 40 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -77,13 +78,13 @@ "cell_type": "code", "collapsed": false, "input": [ - "X, Y, Z = exampleLomGird([3,3,3],'rotate')\n", + "X, Y, Z = utils.exampleLomGird([3,3,3],'rotate')\n", "M = LogicallyOrthogonalMesh([X, Y, Z])" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 41 + "prompt_number": 8 }, { "cell_type": "code", @@ -95,14 +96,15 @@ "metadata": {}, "outputs": [ { + "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYFGXW9n8VOk1PgGHIYYiTSYLCKqtiRDGnXXH1fd91\nV/dz17gqRhBQQVExocKKEXUlqMiiIuoCrgRBkMkg2YAKAhM7Vfj+eKY6zHTP9ARGWfu+rrmAobu6\nqqvqrvPc55z7SKZpmiSQQAIJJNAukH/uHUgggQQS+DUhQboJJJBAAu2IBOkmkEACCbQjEqSbQAIJ\nJNCOSJBuAgkkkEA7IkG6CSSQQALtiATpJpBAAgm0IxKkm0ACCSTQjkiQbgIJJJBAOyJBugkkkEAC\n7YgE6SaQQAIJtCMSpJtAAgkk0I5IkG4CCSSQQDsiQboJJJBAAu2IBOkmkEACCbQjEqSbQAIJJNCO\nSJBuAgkkkEA7IkG6CSSQQALtiATpJpBAAgm0IxKkm0CrEQgE0DSNxLi9BBJoGurPvQMJHJ0wTRPT\nNAkEAni9XgzDQJIkABRFwWazoSgKsiwjy3Lw/xJI4NeOBOkm0CyEk21tbS2SJKGq4jKSJAmfz4em\naei6HvE+WZZRFCX4kyDjBH6tSJBuAnEhnGwNwwDAMAwMw8Dr9WKaZpBAJUkKkqoshxQsTdMIBAIR\n202QcQK/NkhmQohLoBGYpolhGGiaFpQQDMPA5/Ph9XpRFAXTdNGjRzKGITFlShVZWRo5OTpdu2qA\nGSThWKRqkXg4EmScwH8rEpFuAlERjWxN08Tj8eD3+7Hb7fj9Dl580cWzzzowDEGGX3+t8tFHTrZu\nVfD5JHJydHJydLKzNbKyNLKzA3Tq5APMiGi4PqlaUbXf748gWouMVVWN+r4EEvilIxHpJhAB0zTR\ndT1YjSBJErqu4/P58Pv9OBwOfD4nzz1nY/ZsmRNP1LjjDp0NG2DNGpUnnqjENE0cDgc//SRRViZT\nViZTXi7+LC2VMU2J3NwQGWdnawwa5Cc9Xcc0myZj6yecaK1o2m63B4lZkqQEGSfwi0Mi0k0AiE62\npmlSW1tLIBDA4XCg62k88oiNOXMUzjrL4L33qhk4UMfhcLBpk4SmRW6zUyeTMWN0xozRwz4H9u8P\nkXFZmY2333ZQXp6Kqprk5RlkZ1tkHGDQoABpadHJOJxUNU3D6/WiaVoE0daXKBJknMDPjQTp/srR\nFNk6nU5qapJ47DEb8+YpnHeewaef+unfHzweA2udpKomUaTZBpAk6NLFpEsXnZNOiiTj77+XKC0V\nUXFhoY0333RSXi7jdpvk5Bh1UoVGVpYg4+TkEBlb+y0+I0SqhmGg63qDyDicjC1CTpBxAu2BBOn+\nShGNbA3DwOPxoGkaTqeTqio3Dz2k8vLLCpdcYrB2rZ/MzOjbU1UaRLrNgSRB9+4m3bvrnHpqJBl/\n840UlCg+/9zOK6842bpVpkMHk9xcg5wcIU8MGhQgJ0fD5Wo6Mk6QcQI/FxKk+yuDaZpomoZWx5DR\nyPbw4WSmTVN54w2FCRN0Nmzw06tXw21Z7wVQlNaRbixIEvTubdK7t84ZZ+iAKDkzDNi715IpFD77\nzMHzz7vYvl2lSxczIoGXnR1gwIAADocRNxnXh0XC4Qm8BBkn0BIkSPdXAotsdV2noqKC5ORkTNPE\n6/Wi6zpOp5ODB5OZNMnGokUy//M/Ops3++nWLb7ty7KJprUfAcky9O1r0revzlln6cEaYLvdxe7d\nEmVlCmVlMp984mD2bBc7dsj06GGSm6vXacYBsrIC9O/vx2Yz6rYZWdYWLltYZOz3+yP2w3q9qqqJ\nyDiBuJAg3f9y1I9sLdTU1GCaJk6nkx9/TOHhh1WWLpX50590Cgv9dO7cvM9RVbACxJ+zIEZRYMAA\nkwEDNM45J/R7TYOdO0X1RFmZzAcfOJk1K4ndu2V69zbqNGNRSaFpJiNH+ujRQ2vQ6BGNjL1eLwA2\nmw0IVVIkIuMEoiFBuv+liEa2uq7j8XgwDAOn08nXXyfx8MMqH3wg85e/6BQX+0lPj/8zwpNXFun+\nUklFVSEryyAry+CCC0K/9/th+3ZBxJs3K/zpT67g/1kSRajOOEBmpg9ZNiLI2PoOmoqMrfeER8UJ\nMv71IUG6/2WIRraapuHxeABwOp2Ulso8/XQyq1apXHedTmmpn7S0ln+m8F8wjoime6Rht8PAgQaf\nfaawcKHKuecG2LNH5uqrA4wYoQdL2xYscFFe7mbfPomBA406ItbJyQkwcKCf3r01dL0mrsjY5/NF\n7EOCjH9dSJDufwmsyCoW2bpcLkpK7Dz0kMpnn0lcf32AZ5/1k5LSNp9/pBJpRxKaBv/8p8qMGQ6y\nsw3eeMPDMccY/OlPTpKSTIYMMRgyJLIOrqYGtm61mj0UXn3VRmmpm4MHZQYNMuo041D3XY8ePsBo\nMRlHa4UO97NI4OhDgnSPclituuEZd8tuEQTZfvmlnRkzVDZvlrn5Zp3HHz9EeroDu93eqs8OlxcE\n6R4dUZlhwFtvqTz4oIOuXQ3mzvVy/PF6xP/HCjDdbjjmGINjjjEA8ZTx+XzU1Ejs3Oms67pT+c9/\n7JSVyVRWSmRlicg4N1eQcVZWgG7dfJhmbDK2UP9BCiEyDteLraaPBH75SJDuUYpYZOvxeJBlmaSk\nJDZssDF9uo2yMom//13jtdc0XC6oqmr7/QlPpP1SYZrw3nsq999vx+mERx7xMnas3oBgDUM8RJqD\n5GQYOdJg5MgQGQMcPkwwKi4rU/n4YzulpTJer+VLYQRbobOzA2RkNI+MLY8Km83WIHkXXk2RwC8H\nCdI9yhCNbP1+P16vt45s3axda2f6dJVduyRuv11j0SIDhyO0jfAIta0Qnkj7pdl5mCZ88onC/fc7\n8Png3nt9nHVWQ7K1YBiiJK0t0KEDjB5tMHp0pExx8CDBsrayMpX33xeRsWFIYQk8ERkPGuSnUyd/\nsJEjnFCBYMmf9ff63YXRytoSZPzzIUG6RwGiedlCiGwVRSEpyc3s2U7uvFOc0vPP1/nXvzQGDDDb\njEAag6qav0hNd80ahalT7fz4o8zdd/u48EKtye+jLUk3FtLT4YQTdE44IXJ5sH+/FCxrKy+38c47\nDsrKhC9Fbm7IlyInJ+RLAQRXOLGc1+qTMSTsM38uJEj3F4xwsq2pqUFVVWw2W9DLVlVV3O5kPvrI\nzvTpCmVl4ma5/nqNrVtlxo2zUVkJeXkmeXkmBQUmBQUGfftKdO3a+mg0UtNtaHjzc+KLL2QeeMDB\nV1/J3HGHj9/9TkON82rX9SNPurHQubPJSSdF96WwWqGLimwsWCB8KZKSTLKyAuTnEyxry8qK9KVo\njIwTxvLtjwTp/gJR38sWhKzg9/upra2tI9sU3n/fzowZCoEA3HGHzrhxBr162Zk5UwfETXvoEJSU\nSJSUSBQXy7z1lkpRUQecTigogIICg/x8k/x8k9xcE7e7Zfv8S9F0S0pkHnjAzqZNCrfe6ueqqwI0\nN19oGBKKEv9DySK3I4VwX4pTTokk4717DQoLDXbtcrFxo5358wUZd+hgBhs+vv1WoqZGYs6cipi+\nFAkybj8kSPcXhFjG4X6/n0AggKIouN2pvPuujRkzFGw2uPNOnXPOMZBlQXo+n7gZrfugY0cYM8Zk\nzBgTEAReXV3D99+r7NjhpLhYZtUqmWeekdi2TaJ7d0HEBQWh6HjgQLPJKFEY3vx8N9+OHTIPPpjK\nf/5j5+ab/cyb58Xlavp90dAe8kJbQJKgZ0+DLl0CuFwq9X0ptmxRuOkmBz/9JA6moCCDjAwz6GVs\nlbUNGBDA6YzuS9EUGVurMYfDkSDjOJEg3V8AYtkrer1efD5fXWbazpIlTh591ElaGkybJiLb8Ota\nUcRPIECj0Z0sS/TsaTBwoMmZZ4YiJ02D7dulYGS8YIHMpEky+/ZBVpYZjIgLCgzy8ky6dZPCDMX1\nnyXS3btX4qGH7Lz3nso119Ty9NOBVtceHy2k2xjWr1eYNs3B6NE63boJaWXGDB+7d0uUlyuUlsqs\nXOng2WeFL0X37maw4cOqpOjfP4Dd3jgZW404iqIkIuM4kSDdnxFNka3dbsflSmXhQhvTp8t06WLy\n2GMap5xixsy8Oxwi2m1JCa6qQk6OSU6OycUXh35fUwNlZSEy/vhjlZISCZ/PTna2jexsjbQ0lT17\nZH74wU9amij0P5LjdL7/XuKRR+wsXGjjT3/ys2FDJW63H1dLw9swhK8UjjasWqVw770OFAXmzPFy\nwgk6s2bZOXhQivClGD8+9B7Ll8Lqvlu+3MHjj7vYvVumVy8zYspHVlaAfv0CqKoRkZTTNC0hU8SJ\nBOn+DIhGtgC1tbXB+WMuVxqvvaYyc6ZK374mTzxRy/HHB3C7kxrdttMJXi+NRnvNLetyu2HkSJOR\nI8V7DCOAz+fj2299lJfb2LXLzYoVIjQ89tgupKQY5OXpdQYyfrKzfWRnGyQlxbZUjBc//SQxa5ad\nV1+1ccUVAb74ooaMDBNNM6l3b7cYP2cirbmwrp/SUpl773WwfbvM5MmiSsP6ar1ecLlin+9wX4rz\nzw/93u8Xso1lLP/uuw7Kylx8/bVM377CJCgrS/gY5+UZZGb6keWQY1t440Z4911T8+/+28k4Qbrt\niFiRrTXs0eFw4HCk8corKo8+qpKTY/LCCwGOP97E49GIhyetSPdI7b/X68Xr9WKz2ejd20Xnzl7G\njze58EIvo0crbN1ayY4dAXbtclNSorB6tZvnnpPZuVO4eeXminKn7Gzx06+fic0WuwnAQkUFPP20\nnblz7Vx8cYC1a2vo0ePI1AM3tzni56xL3rdPYvr0ZD780MGtt/p5442GiUOvF1JTm79tux1ycw1y\ncyNrjL1e+OorERUXF8ssXuxi+nQb330nMWCAUc8+U6N3bx+S1HQrdGNkXL/G+Ggm4wTptgPimT9m\ns6Uxb56NWbMUhg0zeP31AMceG7qZww3DG4PDISKUxhDvtsL3P5xsU1NTURQlOHkBRJ2urkvIMvTp\nI9pezzorvIFD3KglJWIu2sKFwnjnwAGpzjhG6Ig5OX5ycnS6dQNFkfF4ZJ5/3sXs2Q7GjdNZtaqG\nvn2PLMm1RNNtbwKoqoInnrDzj3+4+cMfvHzxRQ0dOkR/rdcr0bVr/Oe7KTidMHiwweDBBhdc4A8m\n0mprw30pZObPT6K8XJzjQYMMwgeRZmUF6NkzPl8KK5lcf8pHfTI+WubfJUj3CCLcODzW/DHDSOLZ\nZ208+aTCb35j8NZbAYYNa0gq8V5IDoeJ1ysBrSemWGQbDbLcuOGN3Q75+Qb5+ZE3f2WlaJMtKVEo\nLXXw8ccuSkpk/H6J6urQMc+adZhzzvGRmirh88lH9Cb7JSfSAgF46SUbDz9s55RTdP797wp69hTD\nQWPB64VG/rvNkJQEw4cbDB8eeY6rqgQZW913L74ouu8OHxa+FEIzDvlSdO/eeCt0fTL2er3BKdBb\ntmxh+/btXH311Uf+gFuIBOkeAVjLpNraWhwOR9SROJrm5oknVGbPVjj5ZINlywIUFDROlPEsY9tC\nXqhPtikpKahN1Iy1tE43NRWOO87guOPEjer3w6uv2rjtthBLXHFFgJdfTuHuu9PIyLDMYyyJws+g\nQQZ2e+gh11pbxF+ipmua8K9/qUye7KB3b4NFizwMHWrg9xtNyk5er4TTeWRWB/Wjz2hISYntSyHI\nWKG0VOWTTwQZezzW6seo674TZNy5c3QytqorFEXh22+/5aeffjoix9pWSJBuGyLcy9bSam02WwTZ\n+v3JPPKIynPPKZx5psGKFQFycpq+IeJNflmJtJZsyzRNfD4fHo8HVVWbJNv6JuZWpNsSjVPXYcEC\nlenTHQwYYPDhh7VceqmL1atr6d3bDL5m926pLipW+fBDO7NmyXz9tUy/fsLbVngWBMjJCdC7t4mq\nNkzmNIXmNkccaXz+ucw99zioqpJ4+GEvp54a2zciGnw+cV380tChA4waZTBqVGxfivJyleXLhUmQ\nrkt1D1yhGVdXm5x6qo/sbNEGfdlllwXNnnr06EF+fj75+fkRbnp//OMfWbZsGV26dKGoqCjqft15\n5528+eabdOzYkddee42cnJw2Pe4E6bYBog17tAxpqqqqcLlceL3JTJ+u8vzzCueea7B6tZ8BA9p+\nX+LRdOujuWQbDRbpNje6NAxYskTlgQfsdOpk8uyzosypqEgmLY0g4ULkKJ7zzgttw+OBsjKToiL4\n6isn8+c7KSmRqaqSyM7Wgsm7rKwAubkanTs3XLaG7/cvRV7YsUNiyhQHn3+ucM89Pi6/XGuQ4Isn\n0vR4pCNGukeiG68xX4qyMpktW2TuuENU8cycmcSuXd+TlJTE448/ziuvvML333/P0qVLmTFjBq++\n+irDhw8PbuP//u//uP7667nqqquifvbnn3/Op59+ysaNG1m+fDm33nor//rXv9r0+BKk2wpEMw4P\nH4kD4PGk8vDDdl56SeHiixsfY94Y4o1045EXwjWx1pKtBVkWEWK8+TnThOXLhfOXVbgfHsGtWqVw\n8snxmTm4XDBkiJAcXK4QAVkRU2mpTGmpk6VLkygrU3A6zToitiop/GRlaSQnCwI2DBdgxkVoFtpS\nVz5wQDR8LFyo8re/BXjuOS9JjVcKNgoR6f5yIveWonNnk02bYN48O+PGaezcKTFlirjYZVkmKyuL\npKQk/vjHP3LmmWdG3cZvf/tbdu/eHfMz1q9fzyWXXEJ6ejqXX34599xzT5sfR4J0W4BYUxq8Xi+G\nYeByudi/386MGTqLF7v4/e8NPv/cT+/eR37f4kmkWdUUFRUVKIrSKrK1IEmgKGZcuu7KlaJbqqYG\n7rnHz/jxWoPl8qpVKhMmtK7wNlrEZJrw7beirrWkRGHtWhvz5sls3y7Tvbsoadu0SeWtt8Bm89K/\nv4nd3nh9cVuVjHk88Mwzdp56ysall2ps3FhLRkbTOn9ThO/1Hjl5oTkPptZg+3aJiROd7Nol8/DD\nXs44Q2fcOBcpKUbE51dVVdEhVhlHHPj888+58sorg//u3LkzO3bsYEAbLksTpNsMRPOyrT9/7Pvv\n7UyaZGPhQpnf/a6WjRs99OzZTEfsKGiLSDc8sgVaTbb196mpZNr69TLTpjn49luZu+7ycfHF0W0W\nAwFYu1bh2WebEKdbtM/Qq5dJr146Z5wRbgAvurJKSmSWLYN3303ivfeS+P57iYED9bDI2F9X7gSq\nqgQTOa0hXl0XY4Puv9/ByJE6H39cy4AB8W+vadL9eRNprUFlJcyc6eDVV1VuuSWyDrmyUiIlJfLz\nKysrSWvFwL9o57Ktjy9BunGgKbJ1uVx8/bWd/PxQxv3GGzVGjQqg6/Y2aSttTSLNIlvLe9flcuH3\n+1sd3daHpevW1x2//FKQ7datMhMnCm2ysY/etEkmM9NoMsprS9hskJ1tkJ1t8MgjOnPmeBk82Khr\ngZYpLVUoLbUzd66zrqQN8vKsulOF3FxRY9yxY+N6cX189JHCpEkO3G54+WVPsIqjLXEkI90jBcMQ\nD6L77nNw6qk669fXNrAjrayUSE2N/F1FRQUdO3Zs8eeOGjWK0tLSoDyxf/9++vfv3+LtRUOCdGMg\nlnF4/flju3bZmTlT5f33Zfr3N9m5U+If/whQXCwxZ04SN9ygYpoSBQVmXUG5yeDBwkaxDWwCGsBu\nDyXSrDpGy+Da7XZjs9nQNK3BEMS2gBXpyrK4EcrKZB580M7nnyv8/e9+Xn89EFe96KpVaoSfbHsj\nPJEmWqCtcqcQLLPx0lKZLVvsLF7sprxcITXVJC9PCzZ7ZGf7yMrSSUqK7KYqLlaYNMnJnj0yU6b4\nOPfchhJLPIhPXji6It0vvpC57TYnpgmvv+5p8N1bEJGu0SDSbY28MGrUKG655Rauuuoqli9fTm5u\nbou3FQsJ0q2Hxsg2fP7Ytm02HnpI5ZNPZK67TqekxE9hocTUqSpXXineV1lZidPp4uBBG8XFEoWF\nwkbx6aclvvpKIjPTDJLw4MHCvat37+hRcXMjXUtGCCfbtoZ1sVv7JewlZb75RuGJJ5z8+98KN97o\nZ86c5iWCVq1SuOGGZpZgtCHiqV4INxsP1WMr7NkjMuwlJQorV9qYPTuZ3bvlui49jY8+slFbKzb+\nwAOV/O//+nA4ZHT9yI1dP1oi3R9/lJgyxc6HH6pMnuxjwoTYUz5MUzRdJCdHkq41Ly4WLr/8clat\nWsWBAwfo3bs3U6ZMCRryXHvttRx33HGMGTOGkSNHkp6ezvz589v0GCFBukFEMw6HyPljbrebkhJb\n3RhzmRtu0Jk9OzTG3O0WjlwWxMVg0q0bdOtmctppkW2xW7dKFBVJFBdLPPusQlGRitdLHQGHIuO8\nPJOkpKZJ1zRNVFXj8GE/Pp/viJFtLBw6JHHttU42bnRz3XUBZs3yNttmsbYWNm1SIqbztjea2xwR\nml0G/fqZ9Ounc/bZof33+eCLLxT+9CdnkHA7dDB58MEUFi1KCitp85Obq9G1q4SixC9RNIVfeiLN\n74e5c2088oidK67Q2LixhqZk2Zoakb+w2UJ5BOv+aGx/3njjjSb3Z8aMGcyYMSPu/W8ufvWka5Ft\nIBCgqqqKlDqWCJ8/5na72bJFjMTZtEnmppt0nn/e32DKgtsN1dWhfzcWndrtBCNcAXHl/PijmPRQ\nWCizdq3M3LkSW7dK9Oxpkp3dgREjlLr3GWRmiqg4XEZQlGTATmpqbG/Hth4euWmTxJgxwlFlxQob\nAwcG2LdP4p//tNV57+pN3kQW1q9XKCgwWu2J2xq0ZXOE3w8vvGBj5kw748bplJWZXHedn0sv1aio\niGyB/vBD0QIty5Cba3XdCae2nByd1NSGevHPLS+0Fh9/rDBxooM+fUw+/NBDVlZ8mraVRIt2/Anv\nhV8ookW2VtmXNX8sOTm5boy5SmmpxC23aMyfr8XUYt1uk9ra0AlvCbl16QJdupiMHRuZWd+2Ddav\n97Jzp43nn5cpLlapqqLOQtFPXp7EMcekIEn2OovDIx8plpdLDBvWPeJ3q1dXs3+/jx073BQVybzx\nho2yMpn0dJP8fIOCAp28PIOCAoOBA40GCbVVqxROOunnHbbWFolP04R33lGZMkV02L37rof8fIMB\nA9z85jfi3KSlNezIsuahCWMgmU2bXMyf72brVpkuXeq3QPsYMMBAkvwNrBBD0s+R815ozYN7506J\nu+5yUF6uMH26l3HjmtdlZyXRwkm3vcrXWotfHenG8rK1EkuappGSksKaNYJsd+6UuO02jYULjSYv\n3GjyQltElDYb5OdD9+5eOnYUjO/3+/n2Wy9bt9rZts1FSYmdN9+U+eILsXwtLZUYMiQkU/TrF1oy\nt3a/9uyB7OzQl7F6tZdhwwIMGeImNdVk4EA/p58eirQNI9S+W1ws8847Kg88oPDdd8LwRJCwTn6+\nwcKFNp57ru1LxZqD1nakrV2rcPfdDvx+mDXLG3yAbt8uOsN69Yr93YfPQxNylNAbdR127Qq1QH/w\ngZ1HH5X55huZ/v31unI2LaIFWlFkNE1EziJyPzKE1Byiq66Gxx6z88ILNq6/PsBLL3lbJH1UVja0\nq/R6vY0a//xS8Ksh3VhkG27sAhLr1iXz0EN2vvtOYuJEjQkTDOKVRevLC0cCPp8v+IDo1ctFv342\nzjoLRGSr8+STCsuXy1x2mUFxscSrr8oUFakcPEjdqB2TggKdfv1s/OY3xL3sB/jhB8jPtwfdv5Yv\n9zNkyEFSU1PRdVEqpusNow5Zhv79Tfr31zj33ND2wsuxiotl3nzTxtdfy1x+uYtjjtHrXMnEnzk5\nxhGp9oiGlhrefPWVxKRJDgoLFe6918dll0UmgtauVYJRbnOhKDBwoMnAgVqE0fiBAzXs3eumvFyl\npMTOyy8Ly8zqaomcHI1evXQ0TWLFCtECnZHRvJK2xtCcyNI0YeFClUmTHIwZo7NmTW2r/JArKiTS\n0syINuSKiopWVS60F/7rSTcW2Xo8nuD8sZSUVD76yMa0aSZVVSp33KFz2WUNl75NwSra9vvF39sq\n0rWqKUCQrsvlwmazRb3gk5JMMjNNLrnE4JJLQr8/fBiKi0XirqhI5tVXU9i61UZGBsGEnYiKTQYM\nMCNqbQ8fhuOOs7N3r/i8RYsCnHOOWBIfOhR6neWpGy/ql2MtW6Yyd66IdIuLRaPCypUqzzwjOsZ6\n9zbqpheHZIrMzNiji1qK5pqY798v88QTTt5+28ZNN/l58cXo0dvatSqjR7et7ONywbBhBsccoxHu\n4HXwIJSWKqxaJQ5k5sw0ysoUkpJMcnK0iORdeAv0kbDM3LJF5vbbHdTWSrz4orfFD55wVFU1lBda\n2xjRXvivJd2myNZut5OSksr779uYPl3B54Mbbqji979XcTha9rVIUkhisEi3OWbh0Y7BKlUT25dw\nu92NNjXEMrzp0CE0Fdg0TQ4dOkSHDuns3BmqoHjzTZm775b58UfIyzPp189k4cIQ+7zwQoAJExoe\nj9/vr5uJ5sLjsSbSGs2OolauVDjpJD24vD799NDy2jJBLy4WtbHz5tmDpjZ5eQZ5eSLhNHy40qzE\nXTTEKy/U1IhpFs884+byywNs2lRDenrs169dq3Ddde1TCpeeDmPG6PTpY/D66zZWrPBgmvDNN6EW\n6M8+s/GPf4gHWs+eRphE4a8bTNl4C3RTke6BAxLTptlZtkzlnnv8XHlloFkPs8YQTdM9fPhwgnR/\nDsQyDrdG4giyTWPJEpUZMxRkWYwxP+88g+pqP7LcuqvCIt2OHVse6dYnWyuyraysbPK9DkfT1o4W\nJMlk4ECxbL3wwtDvDxyAgQPtbNwYYp6UFJNJk1QWLDCCNcU5OX66dzeRZT82m62uI00cr7Xv9Ues\nNEbEq1crPPNM9J2PZYJuRXSFhVBUpLJokfBk7dTJjNCK8/OjJ+6ioSnS1XWYP9/Ggw/aOf54nWXL\nDpCf72yUgH78UeLAAanB6JvWoini8/lCSTRJEq5tvXvrEVOgAwHYvt2a6qHy9tt2SksVfvhBYtAg\n0QItfG0eleR6AAAgAElEQVQFGffoIaZ6hBsnRQ6jhOeft/HQQ3YuvVRjw4YaWtEkFhWVlQ3nACYi\n3XZGNHvF+vPHkpPTWLxY5aGHFNxumDJF56yzQmPM20IOcLtNampaNrkhFtk2J1qM12UsGnQdrrxS\n5a23xINn0iSNTz6RmTRJY8wYk717obBQ4ssvTRYuNCktdbJvn5usLLHsLypS+fTTJLp08dOnjytY\nIWIZBFkNJ5YJdTgh//ijzL59MsOGNY+UrIhu9GgxddblcmEYoaRTSYnM22+rTJumsG+fSNyFa8UF\nBQZdukSeq1ika5qwYoWYttuxo8lrr4luqerqppfL69YpHHec3maRXryIp1zMZos+C626OlTSVlJi\nZ9Uq0QKtadRNewhEjFjq2FHis88c3H23m86dTf71r1ry849MqVq0SLeioiJBuu2BaGRrGEbE/LGk\npDQWLBBk26ULPPywxmmnNdQC24Z0QxUM8W4vXrKNZ3tOp+UyFj9ME/72N5V58wQj3HijxowZooSn\nsFBEaLJs0rNngPR0DyedZNbtI+zbd5A9e1IoKpJ47TUbDzxg57HHOpOURIT+WlBgMGiQgc0WImKr\nPtowDFascDB6tI9AwIthtG4SrCxH9921EndWFcUHH6gUFyuoqhmMhvPzdfbvl6mqEuV7FjZvFtN2\nv/9eYupUH2ed1bwSp9Yk0WIhnmurNY0RycnRW6B//FFIFEVFUFhoZ8GCZDZtCj1NXnyxgnHjvJim\nQU1NwwdsW+jFFRUS/foZDTTdRCLtCKIpsnU6nahqEq+/rvLwwyqZmSazZ2uceGLsxEt7k651DB6P\nB9M0cTqd2O32Ri/IpvYv3nE94vsyue8+MeYd4MordebMicy4Z2TADz8YVFZWBm0rw/fR7YZjjzUY\nMcLgjTdUJk/2M3hwBYcOJVNaqlBUpPD++yozZ8rs3SszcKCILq1lf0GBQdeuJuvXOxg7VozaiRYV\n15/+0JKbNpqPgmmKibrvvqsydaqD6mqRDR0+PJmsLJ2UFNFNBnDLLT7uvtsfdzVLONatU7j//iMz\nprmx7+JINEZ06WLSpYvOCScEqKrSee65VHbtkjl0SOLee31cfLEMJEWsdMIfsFbFQTTZKd7zajVH\nhKOiooLMlphVtzOOOtK1iKq6uhpFUbDb7UHjcGskjqK4eeUVhUcfVcnKMpk3L8AJJ7TdSJzGkJRE\nUF5obCyORbbRiKyx/WsK8U6OeOaZJKZNEzVY48frvPlmQ+cvUbOs8913Bna7PTjvLRYUReh5sizR\nq5dBnz4wblwouhMTHoR2WFys8OGHKkVFItLcv1/m9NNl0tIkCgqE25fLZQZv3HAirn/TKorSovP2\n9dcSb72lsnixjX37JP7whwCXXBLgoouS+Pe/a5g40clHH4kv5Te/0fjnP2384x/2BlpxZqbUoDsx\nHFaEfcwx7d/a7PFwRErtTBOWLLExaVIao0YZ/Oc/Ndx0k5OhQ0PHKEkSiqI0GGbaFBnHM2q9qoqg\nw1gi0j2CsNpdrZNl/dsiW1lOZt48lcceE2PM588PcNxxzfMlbS3pJiebEQ0S9WHJCM0h2+bsX1OJ\ntBdflPl//88GODj+eJ333tMaLD+th1ggEKBLlzS+/tqJ09k0YTTlp+tywTHHGBxzTGhAoWmKpfe4\ncUkcf7zOxx+rPPGEzK5dMv36WVGxWPYXFBh0724CkVpxeFehZfITq/Tphx8k3n5bEO1XX0mcd57G\ntGk+xowReqvPJ6Ko4493M2FCgG3bqunWLfSdHzxIUCveskXmtddUysq6kJFBA614wACRuNu4UbQ2\nt1edcTh8PgmHo20j3ZISUQJ28CDMnl3F2LGCVGtqiMvYKBYZhxNxrNWO9RPLYSyh6bYxJElCVdVg\nVGuaQlvcvTuF886zU1EBp59usHhxgOHDm3+htbbEC8QStrY2tD2LJFtDts1BLHlh0SKZP/xBrItz\ncw2WLj1A9+7JERe+rut4vV78fj9OpxO320337gqbN8fez1jDKeOFJMG2bTKXXRbg738Pheg+n5XE\nEVHx7Nl2iopkDKOhVpyTY+BwBIIOU1Z7t9/vxzRNKioU3n/fxTvvONiyReWsszRuu83HySfrwdpq\nwxDF+1OnilT/Bx/UMmJEw2shPR1++1ud3/5WPF1M06Sqqob9+1NiJu62bFFQFJNPPlGiJu5aivae\nGnHwIDz4oIO33lK56y4/EybU1HW6WaQr4Xa3/NgsQg2HVR1Rn4wPHXLjcHgxTZODBw/y6aefUl1d\nTWr9NrUwrF69mmuvvRZN07jhhhu4/vrrI/7f4/Hwl7/8hcLCQlJTU7nllls4P7wTpY1wVJEuCPKq\nqakJLkGcTidz56rs2ycuvsJCmYcegiFDTIYONRkyxKBXr/h66dtKXrC60iwSj6WHNhctSaR9+KHE\neecJZunWzeSLL/x06gQVFSF92BoPb1V5pKWlBS/+jAyT/fvj21/Rkdb841q9WmHs2Ei2djhg6FCD\noUMjo+Iff5SCjROrV6s8+6yoM+3TxyA3N8DQoRIFBTqZmSZbtsgsXqyydq3K2LF+/u//vJx8sgeH\nQ0RIui7j88msXWtn8uQkQOKZZ7xcfLGLvLz4H75NJe5OOcVNz54mjzxip6QkMnFnyRQ5OcYRcQJr\nC9LVdXjxRRvTp9u54ALhApaeDj5fJOnX1EgkJ7dtVG2tVOqTcXW1Qnq6iiRpHDp0iFdeeYVNmzbx\n7rvvkpeXx6hRo3jqqaci3nPjjTcyZ84cMjMzOfPMM7n88svJyMgI/v/LL7+M2+1m8+bN7Nmzh1NO\nOYXzzjuvzYOjo450bTYbaWlp+Hy+4CSHa6/V+c9/JDZuDLBjh8SWLRKFhRJz5igUFqr4/RYJG0Ey\nzs42GyRE2k5ekCKqERwOR5tEtvHsn2VivmaNxCmn2Ot+Z1JW5qdnz8jXmqZJbW1tsFkknGwtZGTA\nTz/Ft3+KYqJpza+cWLVKYfLkppNMkgRdu5p07apz6qmRjRPl5Qbr10s89VQyu3dH9t9PmBBg9GiT\nzEwFpzOJpCQRPZWWwn33udi6VeHOO6s45xwPqioGU2qav863oHWJu2HDDFJSTFatqqVTJzOYuLOa\nPP79b5Wnn5bZsUM8OIQrW4iM+/RpXcddaxNpn32mcPvtDlJTTd55x8PgwbEfRvHKC22BykrRwi7L\nMgMGDGDx4sWcffbZvPPOO2zdupV9+/ZFvL6iogKAE088EYAzzjiD9evXM378+OBr0tLSqKqqIhAI\ncPDgQZKSko7IavSoI93wm8AioLQ0k8pKCUWBrCyTrCyTSy8Fy2nr+++hqEhiyxaZ5ctlHn5YYu9e\niZwc0fZqRcS5uRJ2e+tI1+k0OHRIo6amBqfTiaZpR0xKiIaVK2W+/TZEuJs2+cnLizwma8lWXV2N\n3W4nNTW1gb5mISPD5MCB+OWF5ka6paUyycmQmdmy793vh3//W2HhQjvLl9s45hiDW2/1c845AXRd\nuHWVlMisW6cwb56NbdtkFIWgf8SYMRpvveVh4EAFcNctY0XjSCAQCD7Ym9PkEY7iYpkePQw6dbKS\nPtCjh0mPHtaMtoYddyUloY676mrRUBGeuLM67uKRF8Qk4OZ/r998I3wkrKqLCy9sONmi/vj12trW\nyQvNQVVVQ03XNE3S09M5/vjjG7x+w4YN5OTkBP+dl5fHunXrIkj38ssvZ+nSpWRkZKBpGmvXrj0i\n+37Uka6FSNIV/gCxYJmIi7ZSgZoay7dWkPGCBSrFxTY6dXIxfHikPBFrmkM4rGoEVXVw+LCIGiVJ\notYSeNsAjUW6X30lMXhwyNkrM9PE6TT5zW9sdOsmHkaDBhn06xegTx8PAwZIDBzowuls3JUpI0N0\nqDVldyj0dqHpNmfFsHp1860cdR0+/VRh8WKVpUtVsrIMLrzQz733VpGZGX48JiefrHPyyYLcLIer\nRx4Rr0lPF8mtc89NorpaIi9PaMSaJlFUlERBgU5ycnRNMTzBA+L8R4uK162Lrz63sY67yMSdjfJy\nq+NOJztbZdgwJSJxFw6Pp3mRrtcLTz5pZ/ZsO9dc4+epp7wxKzPCz7FpClmtsSqOtoKVKHY6GxqY\ntwZPP/00qqqyb98+ioqKGD9+PHv27Gmw+mstjjrStS7o8Bs7OVmUxmgacZvUuN1w3HFmXXWDuND9\nfp2iolp27UqjsFDiH/+QKSwU0xzC5YkhQ0xyckzs9hDZ6rqO0+kkI8PJt9/KSFJkZ9yRinS//hoG\nDQoRzYcf+hk/3sbWrSIppWmwezeUlGiUlYmusXffTWPrVqipkRk40AyuDgYNCv1ptVg6nYIQRIlO\n4/tilYw1BytXqlx6adOj1g0DNmyQWbTIxttvq/TsaXLxxQE+/bSW3r1FCV4gEH3pq2nw8ss2Zsyw\nc9JJOsXF1fz1r05uucUftF08eBCKi0XTBMAdd4hBmt26mcHKCUuD7dvXRJJCpWzRytmsyHjNGkdE\n2VxzUT9xZ30Xu3YJz4zCQqJ23FmGQF99JYyCmoJpCsOhu+5yMGSIzqpVNfTtG1+ZJYiIWlFoUQ1z\ncxHLwLwxGejYY4/ltttuC/67pKSEcePGRbxm9erVXH311SQlJTFq1Ch69OjBtm3bIiLktsBRR7pA\nMMKwKg1kWRBCRQV06tTy7aqqRP/+GiNGRDp0/fBDSJ5YsULmkUck9uyRGDBAJz9fZ9gwNyNGyAwZ\nElm9YO1rW01pCK+u2L8fhgyxc+iQuMiWLfNz6qlCM9Q0gktkXfeTkeFh7FiZ8eOTUFUZ0KiqqsLr\ndbBnj4Nt28TMtqVLZbZtk9i+XaJDB4IkXF0t8dprMmeeKaZVxGplVRSzWfKCpsGaNQpPPx29xs00\nqUuG2XjrLRW32+SSSzSWL49vRLlpwvvvi2m73bubLFzoCbYZJyebVFWFbtD0dDjxRJ0xY3TuvNPB\nqlW1aJoYy24t+efPt1FS4uDQofAlv87AgTBihD245Nd1va6CQmftWoWJEw9TU2O0WWeWlbjLzAxw\n5pkBXC7xXYS37RYXy9x1V0hX2LhRidCKwxN35eUyEyc62LdP4oknvBEG+o1/vyHSq61tnygXQnpu\n+OdbBkuxYJWSrV69mj59+rBixQomT54c8ZpTTz2VpUuXcvrpp7N7924OHjzY5oQLRynpQkMyS0sT\nJ6M1pBuLILt2FQmc007Tg5FtZaXG7t3JlJU5KCyUWbJERB6iMULcFEOHmvTrp5CdbbZJz70kSVRU\nwLHH2tm5U3zOP/8Z4IILjLDXiMx/dbUf0/RgOZNFm5WWlgYjR5qMHNnQe+Cbb4RksW2bBChMnqwy\na5YYJ9SvXyg67tPHSXa2RFaW2WxN98svZXr1MujcOfLzy8tF1cGiRTYMAy6+OMCCBR7y8oxGJY5w\nbNwo2nYPHZJ48EEfp58e2babnBzd+zjcd0FVISvLICvL4KKLQq85fJi6bjuZoiKF118XNpmdOpnB\nMrb8fIPkZBPDkMjNdQIhMm6syaM1/rZW226HDibvv++gb18xQv6yyzTGjtUoKVEiEndpaSY//CAO\n9uSTNd54w0P//i0LEKqr20/PrahoOHq9srKS5OTkRt/3+OOPc+211xIIBLjhhhvIyMhgzpw5gBhK\n+fvf/57S0lJGjhxJ586deeKJJ47I/v8Xka5JRUXLjGbqI5ocYJGtpmm4XC569EimZ0+JE04wsOQJ\nXYe5c2VuvtlGIADz5sl8+WVHvF65TpYw6nRiMYLdHnuMWQN4PHDaaUl88YU4ZXPnBrjqqobLxkAg\ngN1u4/BhL926xTbMaSwCl2Xo0wf69DE59VST5ct1rrnG4OyzDWprxQQEKzpevdrGiy+qbN8uCtbn\nz4dPP4XsbPEjdGQj6rGuXKly4omCpXftkli82MbixSqHDklcdJHG8897OOaY+InW2s7UqQ7WrlW4\n6y4/V1wR3U4wNTUy0rUQj61jhw5w/PE6xx+vB8vtnE43u3dLFBcL/XXBApVly8SD7tRT3UGJwpoZ\nl54e6swKRcZa1GaAeP1tDx6Ehx5y8OabKjff7Oell7z8/e8OcnIMzjjDStyJY3zhBRu33OIkKcnk\noos0fvhBYvz4kLYdXtKWm2tEtcqMjHTbj3TDzW6s6LaysrLRGl2Ak046ibKysojfXXvttcG/p6Wl\nHTGiDcdRSbr1M5aSJJGWJuSFttquBWtumuXnkJycHPPiVxQYOtRk9GiDKVPEBV5ZWUl1dRJlZTa2\nbJH5+GOZxx6T2LVLRIcWCQ8dKiwT61vgBQJw8cU2PvxQXFzTplVz220No9bw5guHIwm7PQW7vW10\nZCuZBqIkyNK1Aaqrq+uIXeaKKxzYbDBiRIDdu+2sW6fy1VeimqJnT5HIGzRIWCwOGmQwdaqDE0/U\nGDs2iT17JC68UOPRR32MHq03e3LDwYMSDz+czKJFTq67LsDTT8dOAIGQF6wKhnC0dGqEooRqda16\n+htuMOnVy+TEE7UgGS9ebKO0VCY11YzwoBg8WCTCFCUycRfe5FG/esIiaL9fWCk+8ohVR1tLRoY4\nPz5fZCLt889lbrvNic0Gq1bVMHx4/Im7+jPuunULva+9kmgQ3cD8aJkaAUcp6UJINA+RbttEutY2\nrQjGIlu32x3Xsi/anLSMDINTTzXraksFPJ7I6om33lIpKpLo1AmGDBEE/OCDodNz110aEyd68Pt9\nQIh0wxN5VvOFyyXh8zXt4xCv1txY2Zi1HVmGHj0MBgwwueoqLzabHjRb9/th1y7RxPDVVxJffCFz\n001CUFy9WuWkkzQ++MAb9yTYcHg8MGeOjSeecHPeeV42bKhtIFdEQ2PyQlvZL65bpzB3rpdhwwxG\njw4dm2HAnj2RM+Puv18kwrKzjToSDrUTi/reSL8Cv9+Prht8+KGDadNc9OtnsGRJFXl5VvRnmfaL\nZOi+fRKTJztYvVphyhQxSija5RwtcafroRl3JSXiWp02TeG775LIyRF1xQcPSmzapLB/vxTX998a\nWPPRjsapEXCUkm60Coa2iHQt1NTUBP0c4iVbC2JOWmRGNRq5uVzheqq4IQ0DduyQmDFDiSDctDST\n//xH5tAhBzk5JqNGSWRlaRiGJ+ghGx6B2+0mfn/bSC0QGek2hljVC3Y7ZGcLExsQ7bbLlxtUVkpc\nc02A2lo4+2wXXbuanH++xgUXaE0SsGHAggUq06Y5GDZM5733qujbV4wyigcpKSE9s/52mxPpxqpM\nOXgQvv1WpqCg4XHIstDF+/XTOOec0O+rq0UHmxUVv/uuSkmJgsslhouG+zp4PHDvvTZ++knmoYc8\njB0rPEm8Xj0iKj582Mmzz6rceKOD//mfABs2eJs93j48ig/vuPvhhxr27hXtz48+KvSjkSPdqKrZ\nYKxSW3bcxXIYS0S67YD6DRIi0m0ZLJMX64Lt0KFDC7uQTFpSmmuasHKlxH33qdTUwIIFAW69VeXD\nD/243aJ6YvNmk9WrbTz7rMzu3S4GDHAwbJiQNCx5Ij09vukRzY10t25tnImsOt2mEmkvvigmCrz7\nrocFC1QcDrj/fj8zZ/pYv17hnXdUzjvPRVqayQUXaJx/vkZubqSu++9/CyNxhwOef17M3NI0o270\nfHyoX71gobWTgC2sX69w7LF6s+bsJScLm8xjj420nvz6aynoQTFvno1160IbvfhiL9u22bDZQr4O\nVlT8wQcKn35qIynJYMWKA/Trp6MoCj5f6wdTmqaJ220ycqTOsccauN0m772n8sILXr77zmpKUfjk\nE5WnnhKJu8xMI0IrzstrWcdd+FDKRKTbzmhOg0QshDtqCVtIpVUdZC0Zw75mjSDb776De+/VufRS\nA1mGe+818Xgk+vYVRf7HHVcbNKMxTSfl5UpQnnjnHZXCQon0dNi7V+KeexT++EfhXZCZGZ/3RCw0\n1QpsSTHgwucLdbzVx1NP2Zg7186yZaLka8QIg5deElKJooSSUzNm+Ni4Ueadd2xceqkLhwMuuCDA\nwIEGixbZ2LlT5r77fJx/fvQlcjxISWm6eqE1WLtWaZMhlJIkEpoZGTpbtihs3apw880+rrsuwJ49\nQisuL3dEGLLv3y8OYOBAQd5LlngoKHA22uQRzU4xnnugfiJNkqBnT5OePUOJOxAS07ZtcrBD8Pnn\n7RQXy9TUhJpSrJK2vDyj0ZrwykqJ7t0bGpj3rN/n/gvFUUm6seSF776Lfxv1yTYpKQlZloPuZS2F\nRbpWB1djpLtpkyDbrVsl7rpL44orIjuKXC6oqTGorQ1NLpYkiaS6BvcRI0xGjIiUJ3btgvx8Bx6P\nxEsvifHrVVUEqyesJFjfvvG3h8bSdK1Ej67rOBwObDYJTRM3ts/nw+/3193AMjNnunn7bRvvvVdD\n797i/SNH6lx/vaNBt5ssw3HHGRx3nI8HHvCxbJnKhAkh2eC66/xxFfw3hliJNMOQWvWAsrB2rco9\n97TetNySUaZMcTBqVGTTQocOGsOGhZzSKivhllucLFggSHfNmhpOOy0JpzO2cUxLvW3ryypN+S7Y\n7QSrN8IRnrj78stQ4i4jI3LGXUGBQf/+4v6orBQdluGoqKggPz+/Rd9xe+OoJF0L4Q0SaWkmpaVN\nhyjh9oX1HbWg9c0MiiKW9x6PuAijba+kRGLqVIXPP5eZOFFj4UIjODzQgmmaOBwG+/fXYJpSsBxG\na6TlSxTNw9ixBrfdpnHKKeJzDxwINXesWiXz5JMSO3Z0oH9/neHDpYjqiWh1zhkZRDiNCe3QWzcB\nWA5OvLDZlLrvQEFVVRRFQdcN7r7byaefqrz99k907KhTWytu4IwMBZcriV27oH//hp9bWQmPP25n\n3jw7f/+7j5tu8rNnj8ySJSp//rOIqs8/X+P88wMMHx7P2QkhJSW2vCDsClsOjweKimRGjmxdpLtm\njcJddzmQJHjpJQ+jRkV/0BgGvPmmyn33OTjlFJ2lS2u59VYHTmcokRYLrfG2tQhbkqQWO4w1lrgr\nLlYoLRU121OnikRj//4GJSUKGzboXHopCXmhvRAr0m1sWG5TZBu+7bYa2VP/yb99u8T99yt88onM\nzTfrvPiiv8FrTNPE5/PV1X6moyhu3O5Q1008++ZwmHXVC+K1GRkwdqwZ0Wl06JCHsjKZbdtcbNki\nkjaFhaITLbyeeOhQkT3/6Sexb16vF6/XG3Ql83q9wfOhquJzQ9GQzM03uygvV3jvvVo6dgwNq7Ta\nZ4cN8/PZZxpdu/qCUZWuy7zyipOZMx2cdprOZ5/V0KuXOBYRrfu55x4/ZWWCgG+4wcnhwy7Gj/dy\n8cUwenTTAyCTk0Vrc320hbywebNCbq7R4hKqnTtFpcEXXyjcd5+PSy7RYu7T5s0Kd96ZhGkSHJS5\nebMcJNqWmpg35m1rnTsgmAc5fFghNVWYBLVGK4bo5XcAH3+scOGF4obJzo40u0kk0toJ9RNphw9H\nXwLH8optapsthUW6nTuL7e3dC7NmqSxdKvPXv+o89ZS/QQbZIluv14uiKKSkpJCcrNSRp9GsfYsn\nkeZySQwdqnH88aHmDsMQPg1btsgUFkq88orwnqioELWRf/6zwciRCiNHplFQICPLDV3GLD3b74e/\n/tXJwYMS77xTi9UsVD+yGjUKioqSmDBBQtcNli5VmTYtiT59dF577SeGDBHL3ECgvt4IeXkGeXl+\n7rzTT2mpwZIlChMnuvj+ezER4vzzNU44IXoyKyUllrzQ+uqFluq5hw/DI484mD9f5W9/CzB3rjfm\ntIkff5SYNMnNxx87uO8+H5dfHiLm8LHrXm/bjesJlyisVWZSUlLdtavidmtHZL7dwYMwaZKDjz5S\nefllD08+aeevf428wI+WUT3wX0C6IXkhMtJtLtmGb7P1pCs8dfftM5k+3cWCBSrXXGNQVOQnPT3y\ntdbIIWvMTHJycrC+1eUSy8PmwumMbzhlfciyWOb3729w4YWhKcXffuslN7czHTuqbNjg4PnnhT/D\ngAEm+fkSgwdrDB8ucfiwhK5LeDzw5z8no6qwYIGn0eXtyJEGkyc72LjRxj33OKmthcce8zF2rIZp\n2iOWuNGaBKybOSvL4KabfNx5p8mOHRLvvmtj8mQHe/dKnHOOxnnnaZx0kh40ZGnr5ohwrF2rcNVV\n8ZdSaJroEHvoITtnn62xfn0tXbtGvwYDAZg7VzRC/O53Xtatq6BTp8jbONxD1+tt+3E9EPmwEW56\nMmlpQmqy/j+e+XbhHXcNPwNef11l8mQHF12k8fnnNaSmwv3320lNNRORbnsilrxw+LDUYrIN33Zr\nR/aUlclcc43Kzp0Sl18eYM2aQ/TvH9kXbhGaxxPbH8Hlih6xNuVaZhmZN4amHi7WvpmmSc+eLgoK\nDK68EoYMEZqy1wtlZRIbN2oUFcl88IGNzz4T0etTT3UG4IUXPHz3nai+iHUKUlJMNmxQuOIKF9Om\niaJ9EQTHl/jx+XwR58vn85GZqXDjjTo33SSxd6+QTqZPd3D11TJnn61xwQUBxozRqa5uaFnZ2uYI\nw4DPP1d45pkmlhqIz16xQuHuu4UhT1Mm4R9/rDBxooM+fUyWL/fQp09tVB/kcA/dthzX0xjqy2nh\nUbEattSoX0ERq/V52zaVW29NwuORWLjQE9E5F20+ms/nCxL+Lx1HJelaCCeOlBSdigqVioqKFpFt\ntG02FxUV8NRT4ib44guZzp1NfvpJ4vXXHQwfLpOba5CZaWIYWtBn1+WK7Y9gJULC9y0eOJ1Nywux\noOs6tbW1ER1uoqsuskHC6YThw01ycvzBpN+0aQozZjjo1Mngqqt8LFxoY9IkBxUVYoTO4MFG3Y9O\nerrJ7Nl2Fi4Ul+DLL3s54YSml+TREj/WA8xKMoZHVZ07y1xzjcJf/iKzb5/CsmUOZs2y8+c/K+i6\nxKJFKuecowWX4K3VdMvKRMtsU3PQSkpk7r7bwddfSzzwgI8zz4w05AnHzp0Sd93loLxcYfp0L+PG\niSoGHSoAACAASURBVNd6PNEfvlakq+siMq6fpG0LNKxeiC+RFn7+rCAjPCqurjZ49FEHr77q4u9/\nr+J//9eLzSbj94cIOZqBubXtowFHJemGR7qGYdQRmI+Kiq6kpqahKC2/a1pCujU18MwzCk8+qTBu\nnOi8uvNOnQEDTIqKDIqLZebOlSktVfjpJ4mBAxVyc+0UFEjk5QltMjOz4c3ucok63Wj719gFFkqk\nxX+c9Uvo6ntMhGalmQ22YxgG338PM2aIu/v++6sZNswgJ0dErZZXbVGRzJo1CrNn2ygvF6R52mka\nH30kM3u2jZyc0ISF5sCKkiRJwhHGMOE2i7quk5ER4Mora7nqKokDB2wMHtyJhx+2c8stTk47TWjA\nAwcarSLdtWsbNy3/8UeJBx6ws3Spyu23+7n66kBMD1rLdP2FF2zccEOAl1/2xkWgVnRrabvtwUU1\nNS33XrCi4hUrbNx6q5Njj9VZt66Wrl0lDMMRUc7m9er4fKmoqr+uykFYMMaafGKhqaGUIKZLXHfd\ndVRXV9O1a1dWrlzZsgNqAkcl6UIo8aTrose/S5c0VBV8PrlVc5qaQ7peL8ybpzBzpsKYMQYrVgTI\nyTG58koVSYJjjzUZPlynuroaRamtW0652LnTQXm5TGmpxJw5MuXlKgcOQHa2SV6ecCDLzTX54QfR\nedPc/YsnkWYhvPyrsRVCYw0Sb7xh529/C33p77/vYOZMle+/F9H90KEiyj3uOJ3//d8Abjekpqbw\nzju1fPedxGefKfzrXzZWr1ZJThYtr0OG6MGouF+/2PJEYxBdcpGXuBVR9ehh0K+fzksvHcbt1li+\n3MkLLzhZuVKEvAsXKpx5pkZqauOMVf9crFsXfRKG1wvPPGPnySdtTJig8cUXNQ3MjULbFK3Skyc7\nOOEEnTVraunRI/6HkVWx0JZJtIb7GPngr62VSEpq2Qrx228lJk50UFys8Pjj3jCPkoarmtpaIUmp\nqoJhGGzatInp06ezY8cOBg8ezJAhQ7jkkku4KNyLk6aHUpqmyR//+EdmzZrFaaedxoF4+t5biKOS\ndE3TpLKyMngy3HWPWKsrrbXD8ZoitUAAXn1VZvp0lSFDDJYsCTB0aOg9SUniyW9Fj4ZhRESPGRmi\n+F/AciOD8nKJsjLxM2eOEnQWW7ZMDhJxZqadY46R6Ncv9jI4nkSaFQVWVFTEHEoZjmgNEsXFEpde\nmsyuXQqjRun84Q9+1q1TefzxKiRJwusV028LC2U2b5Z55RVR+N6rlzj2FStUTjlF4/XXPdx+u4ON\nG2vZs0eiqEhExf/8p8o99whP3Px8vc4IKNS11BJCCV/epqRAIOAkM1Pnz382ufrqWtat83L22Wm8\n/rrMTTclc8IJfs45x89ZZ2mkp0cvhQr/99q1CnfcEfryTRMWLxY1tEOH6nz8ceMG7Fu2yNx+u2hu\nefFFT4RRTn3EWvFYke6RSqJFQ3U1NGFn2wCaJsyKZs60c+21AZ5/3tuk/lxZKRwFrQfqRRddxPjx\n47nkkkt4/PHHKSwsDPKBhXiGUm7cuJEhQ4Zw2mmnAUQQclvjqCRd4SqWFsz8W7AGVDYnKoi27VjQ\ndXjzTZn771fp29dk/vwAo0Y1/Cy32+DgQT+VlVU4HI7gkr0xpKaGjw8C0Hn8cYWyMomrr9YpK5Mo\nLZX4+OMk7rzTxqFDUjAyzskRf4pedpFIi9biCqFqCUtTbmwoZTgyMkxKSgQpf/01TJ2q8uqr4n2P\nPFLN//t/Mq++KkV4L6Smwm9+o0cstwMBMYBx9Gg3+/dLPPWUnc2bFSoqJE49NYkTT9QYPNjg0ksD\nTJxoBuWJkhJBxGvXKsyda+Orr2T69jXqiFgnLw9ycrRgt1s8sCoYwpM+GRky2dk6b78d4NAhP++/\nr7BkiZM77lAZNSrA+PEexo3z0amTIG9LOzZNk2++kfF4CJLqhg0yd9zhJBCA557zMmZMbNnhwAGJ\nadPsLFumcs89fq68MroPcDzwekOrnSOVW2ptpLthg3Ca69TJ5KOPahk4ML73Wl664aioqKBjx44M\nGzaMYcOGRfmspodSLl++HEmS+O1vf0uHDh3429/+xplnnhn38TQHRyXpAnVF9OIibmtP3fqRrmHA\nkiUyU6cqdOgAzz0X4MQTG14kVuWEqtrxeJRgh4yvJfVbCE3XZpMiyLiiogK3201trUpZmUR5uSDj\nZ59VKCtTOXSI4PSKDh2okysMevc20fUAtbW1yLKMy+XC7/fHRbgg5IUdO4SnwwsvKAwbJgZfPvus\nh3PP9QEuVLXpcT02m9Cwu3c3mDrVR48eYsTQ0KFuRozQcbnEzK+pUx38+KNEXl5IarDkiaQkEclv\n3SpTVCRTWKjwwQdOiorcuN1EyBNDhsSWJ6LZO4Yn0jp2lJgwwWDCBB9VVT6WL1dZssTNffelMWKE\nxrnnejnjDA/p6To1NTWsXp3EqFEBdu3SmTYtibVrVSZN8vH738dubtA04YX70EN2LrtMY8OG2LJD\nvLASaa0dv94c1NTEZ2J+6BBMmeLgvfdU7r/fx6WXNs8/I5qBeUVFRZMG5k3B6/Xy5Zdf8tFHH1Fb\nW8vpp59OcXFx3K51zcFRS7oQzVO3bUnXNGH5cpn77lOQJJgxQ+OMMxq6ItXXRTt2dFBbKyHLekzz\nl3iQlNRQm7X2LzUVRo0ywyLtkExx880qixbJ/PADrFypUFqqcOiQRFaWQm6uk4ICyM7WycwMkJ/f\ndLbe54PXX5f55BOZzEyTRx/VuP12lTfe0DjlFC3o7tWcwZSy/P/ZO+/wqurs639OuS099FhAECEk\npBCQpii2QVFD1bErg44489oVURARUXFQHAd0ZhAFGRFFEFERK3aatCQ0K9JbCqm3nfL+8c25Lfcm\nN4DO4PPbz5NHDMnl3HLW2WfttdcKOpJJkljnTU42GTs2eOdSWUmAnli3TmHOHBGh3r59sMPNyTH4\nwx98pKf78fn8HD6cwObN4nfefFNl4kQHZWUS2dlBIA6aqog7o9CKpV5IToaRIzVGjtSorRXUyNKl\nTiZNSiQ3V2PoUJ0FC2wUFyusXGlj9Og6nnqqnKQkKWzyHqpJ/eILIQFr08bk/ffddOvWPKliLHrB\nGqD92p1uKB3VlIm5aQoPiQkTHBQWCs3t0chqrYDU5hiYxxNK2a9fP7xeL+3qndl79erFl19+GVe3\nu2vXLoYNG4au6yQnJ3Prrbdy3XXXxfz5ExZ0o2t1j93I3Hq8zz+XePRRsY31yCM6hYUNY2OircXK\nskxyssThw+HHeTSJwJGSsdDji1UpKXD22cIY5IknvAGDc58vfIC3YoXKtm3pVFbKAXrC4o2zsozA\nbfobb8hMmqQGnnthocGf/6wyf77o9n2+4PEoihk36CqKADirevbUee218DF+amrQeQwEsltuVVaH\n+8knKiUlCg6HSXa2n/x8wugJWRbdlUVPrFmjMHu2AG+PR2LRIhv79nnqu2IjLslYYiIMHSp8f6uq\n/HzyicKsWYmBKCVNg1WrnPz4o4NWrQxatdJp2dKgRQuNli19eDwyL7yQxC+/KDz2WB2FhQayLGEZ\njx9reTwSqalGg9SI41mhn2efT1w4Y8VP/fCDxN13OzlyRGLBArGqfLQVLQm4srKyUd+FeEIp+/bt\ny6OPPkpdXR0ej4eNGzdy1llnxXVMGRkZrF69GpvNRkVFBQUFBRQWFsbsvk9Y0LUqFISsROBjqbVr\nZcaPb8G+fSoPP6xz5ZVGA24tFGxtNlsDXlRspDU00Wku6B7tRprNZlBba1BdXR1mcN6mDYHBjK7r\nVFdXI0lpgeHdtm0SK1YImmLv3uCxDh4sLjpjxti49VaVxYv9Idxz8DlaacDxKCxCO10QjmP33tvQ\ncSyyQt2qrr5aILxpwi+/GGzaZLJ9u4tFi8TkP7LDtegJl0sAxciRLg4dkjhwQA6At5Wu/Oij9gA9\n0alTbPWE02nSq5fG5MniBx55xMull2ocPixx+LDEoUMSpaUKW7eq7NzpZMWK8FPuoYcSeOYZAcyt\nW5u0bm3Spg20aWPStq1YJW/d2qRVKzPueHOr023K7OZ4VawhmtstJG8vvmjjgQd83HKLv1n+wtHK\n8tINrXhWgJsKpWzZsiWjRo0KhFJOnjw5atDlt99+y80338zatWvRNI0+ffqwcOFCsrKyAsciIrNi\na/tOWNCN1ummpR29kfmmTRKPPiriU+68s4pbbjFwOBpuQ1lmNKqqkpyc3ECSBEH1wrFWYzrdaGXR\nHIYBPl9iXAsiqanQt69J377iMYuLDcaPV/F64ZprdDIzTd57T2bMGHHGHzok8dlnMi1aGA2GH6oK\nmhbf6y/LAiytOvlkAWy7dkl06NC87kyS4NRTDdq18zNsWPDiF9rhrl6t8OKL4QO4tWsVcnIM7rvP\nR6tWglt+5x2V668XHr6W6qC0NMgtd+8u/puVZZCQILLZRo5M4eqrRRT63r0ymZkGocndpglvv60y\nYYLKiBF+Jk/2cuqpwuy+tFQKAPTBg3DokMm+fRKbNskcPixTViZTWipTXi6TnGyGALNJWppMRoZC\n69YCpFu3FsnKhw5JdO8e7sFwvCsylDJyiPbJJwr33eckN7f5krfGKpTTjbfThaZDKQFuu+02brvt\ntkYf58wzz6SwsJAJEybgdru5/vrrycrKYvfu3Vx88cVs376dJUuW/D5B16pj7XS3bxc2i6tWyYwd\nq/H66xputwdVDbYVkf4IscDWqqSk5huZR6t4N8siaY709EQ0TUGWY/+bkce0a5dQJHz8scy4cRqL\nFxtUVMATT6isWSPz6KMaCxbIjBxpsG+fxAUX2GjXzmTIELj0Uj85OTQrgl10ukEqSJJEt7tunUKH\nDnFyFE1UejqcfbZerxoQ9EToAG7hQhtr1ij06JFIYqLQB3/4oXhfr7jCz9ix4kJw5EgQvEO55dRU\nkwMHxEWtoMBHWZkUkPlZtWWLkIBVVEj8+9/hCoaEBGFQ3r599PcpPKDSoKzM5PBh6sFY5fBhqKgQ\nPrSlpQqHD8uUlkr8/LMwgLdq5EhXPVgbAcBu1SoI4M3poqNV6BBt/36xPbd+vcLTT3vCjMyPR1VV\nSbRo0TA14rc0MJ84cSK9evXC5XIxY8YMAE499VS2bNnCli1buPDCC+nXrx+tW7eO+vu/K9BNSwue\nBE3Vjh0wZYrKRx8Jm8XZs4M2ix6PFBiANeWPEK0sw5tox9icikYvhA/6gp13KM0RTzClVRUVMG2a\nwty5CrfeqlNSIgZZTz2l8M9/Klx/vU5xsY+WLcXPqio895zG9OnwzTcSb74pcdllaZx0EqSmGuzY\nEd/rryhmGKcLwvxm/XqFESOOD+hGK4fDsoc08Ps9rFsnc9ddPmbMsDNnTpCUHDIkgYoKsb5s6YP7\n9BH0hNMpgDg7O4mUFKFu+Mc/7HzxhTidhg93kZhosnSpjVatDB56yMdNNzX/1jp8ZRZOOUV8WRt2\nXq8XRfE2MJIZPTqFwYM19uxRWLjQxs03++q7aZm9e2WKiqQw+qO8XCI5mTBQtsDY+rP1d61bmyQn\nh3e6tbWiQfjXv2xMnWrnT3/y8/zznmPWy0er6mo47bTwD85v7aVbWlpKbW1tQIefEPJEs7OzOeus\ns9iwYUPMIdwJC7rWGx5qZB5Pp7tnDzz5pMrbb8v85S86W7b4okaD+P1+auvb1cb8EaJVQgJhOWnH\nG3StNFhL/hXZedvtTS9HeDzwr38l8MILdgoLDdavF8A6e7bMU0+pXHSRwapVPjp0CP5Ov34mL78s\nQFVR4JxzTPr18zN5ciVFRcncdZeN3btlBg5MZcgQLyNHmjEXASI5XRDDtCeeiDGNOc713XcyL7wg\n1pE//FBlyBCNZcvqkGWYNMnBxx/Xha0vf/ONwr/+ZeOnn2QyMkx+/lm8DosWVZOT4ycjw45pQmpq\nMpddpjFrlrg4r1tX28BZ7ljLWtDweoNBnKFdsdstkZTkIzVVok8fg3PPrWnUXtEwoKIiCMIWIB8+\nbNEcArCt7/n90KpVQj0gw0cfic/e0qUmH3zgJjPz2AyjGqtQnW5z6IXjWbfeeitTpkzh559/5oEH\nHmDcuHG0aNECl8vFnj172LRpEwMHDoz5+ycs6FoV3unGBt2DB0VH99prCqNHB7u3yLLMUjweT6Cz\nbe4ALFa8d3MrGqdr7aD7/X4SExNRVbXB8TW2kWYY8PrrMpMm2enWTeLjj/106WKycKFQKWRmGrz3\nnp+cnIZg2bevwa23qg0m/JJk0KNHFVOnyjz2WArjx9fw7rtOBg0SCb9Dh2oMG+YP44Aj1QsABQU6\nJSUKfj/HdLsbrUwTtm4Vpudvv61SVSXhdIoFie3bawPD0pUrg7RMixZwzjk655wTpCdqakTiLcCf\n/+xj+nQXJSVJpKYScAjbtEnmjjt8zJ1rO+6AG6tCu2K/XyYlxcHevTKJiRI2my2qvWJoFE+LFjIt\nW0phXHSsqquDXbvc7NuXyB13BHWs77/v/tV9HiorhbFO6Gf+t/TSnTdvHg6Hg6uuugrDMOjfvz9b\ntmzh/vvvR5Ik2rdvz9///vffJ6cbaXoDkJLScJBWXg7PPqvw0ksK11yjs2GDj3opXlhpmhaQV8my\njMPhwB5LA9NEiUTgY6cXQiVj1vFpmoaqqg0MaUIrlvfCp59KPPSQitMJc+b4yMysYOPGltx4ow27\nHWbNir70YVXbttCypcm2bRLZ2SaaJtzSLDPrhASRh3b22Tr9+lUxZUo1q1ervPeek4svdtGmjcmQ\nIX6GDdOidropKWIgtnWrTF7esXdLpilicyyg9XgkhgzRmDnTQ69eBqtWKUyebA9TpzQmGdN1Ycye\nl2dQUlKLzWYtvkjs2+egpERh+XKVuXPtzJ0rfufii11hyxrdujWMZjreJZYiqJeMiXXZSHvFUCOg\nxgIqow1iXS5Yt87G5MkuLrlEbBB+/bXymxjrWLaOofVbeunecMMN3HDDDYC441i9ejUgVovjrRMW\ndK2K1elWVQmbxRdeUBg61GDNGl/UFVHLylDTtIC8qu5oMtRDKlK9cKz0Qk1NDX6/H5fLFZCmNe4y\nFt7pFhUJsN25Ex57TGfoUIMNGySuuqoFBw6oTJ4svhfPSdO/v8nKlXDaabX4fD7sdjumadZnpOno\nuhTiieHkwgtNzj/fz1NPeVm9Wubtt+0MHpzAoUMKTz6p8sgjtXTpEnQJ69nTYN065ahB1zRh40YB\ntEuX2jAMkSQ8a5aHgoLw5xgtPSIW6BqGANwjRyTeeMMd1olLEnTsaNKxo8Y//+nms89Urr7az6RJ\nDh580EdJicxXX6m88ILMzz/LnH66EQbE3bvrze6IG5MgCj9dy/Cm4eeuMSOgUEcvXdcD69HW1y+/\nCCewgwdh3jzhDTFvnu1X4W+jVVUVDQzMa2pqTph8NPidgW5KismBAxLTpys8+6zCRRcZfPWVL2ro\nYWNWhseaHhFJLxzN44nbQDdutx1ZlklLS6s3kfEE1p9jldMprB137oRHH1VZsULmwQc1/vQng127\n4IYbVL75RuauuyoZM8bEbo+vRTFNk4ICL19+KXHttcL/wkoEhugbaaG3vQMHwsCBOk8/XUuLFikc\nPKhQWJhGq1Y6hYUeLr3UTV4erF1r54Yb4s/aMgz49luFt992sGyZE5sNhg3z88orbnJzY19MkpIa\nhlNGS44wTbj/fgc7dki89VbjSRhZWQYzZ8roupBxnXuuzrnnBukJYf4uB0x93nlHRKenpZnk5OiB\nIV9Ojk779g23H+OpoOENjUaZh1Ysn2ILjN1ug+eeszN7dgK3317D6NG1OJ0qPp9MdbUSyPH7tUtw\nuuFeupbT4IlSJ86RRlQ0gCwrkygrE13d9dfrXHON3mCPPTRZIjR6PfKxjwV0nU5h7KLrAoia83iR\n8i8Amy0hcPLF81jffy+xc6dE164OevY0mD3bj8MBN96o8umnMvfco/Ovf/nw+TyoqoOmNqFCVRJn\nnulkxowUEhLEaxaa2hCvZExVJc48U+fJJ7307GmwerUAzJEjEzl4UDzu7bfX0bGjJ2wqH3rra5oS\na9YovP22yjvvqCQmmlx2mYfXX3eTnR1f156c3DCcMjI5wjRFPtf69QpLl9Y16RmbmWnw008ytbVS\nVLWCMH83wpIQRDZd0F1t3jwbxcUOamulwKqz1RVnZhoxN7+sClo7SrRte/Q0jTVw+/JLG/fc46Rb\nN52vv64jI8PA7aY+7VmnqkrHbjeora1t8D5FDu2OtYSBebDTPdZorf9GnbCgC+HeC0Bg+DNrlp+i\nIonHHlMpKpJo3Vp80HNyvHTr5qFXL5mTT469OBDKEx/dcQUphng7jdjyL0ExxDNYEp6tCg89JN7W\nAQMMdB0uuyz8LH36aWFak5zcklatZFq0ENRMixYm6emQnh78b1KSH5fLTYsWJq1aJVNQoFJRIYT8\nbduGXwSaswZs6XQVBc46S+ess3SmTvXy9dcKl1+ewEUXpdOxo8HQoX4KC3106uTH59NZtQrefdfG\n++8Lh6rLL/fx5ptuunbVAxRRvBUtJy2SXnjqKTsffyzSjOO5g3W5oH17g23bZGy2+ABBZNOZdOoU\nnn5bWipRUiI0xZ99pvKPf8j88otM586Wf4REz54K3bvrYT4GoZ3usfDHBw9KjB/vYPVqhWnTPFxy\nibiiGoY472w2GzabDZ/PTlqaicvlCnDFoUO7aDzx0QCxYVjbbyaRWHuipEbACQ66EH7S22zCf+Hy\nyw0E163j9xts3uxj/XqTLVscfPZZKkVFMmlpAojz800KCgx69BDrl1Yd6xXUohhSUhrvTi0tcCz5\nlwW6FnhHeyxdhwULZCZPVsnPN1i50seAATaGDdN56imVa6/VmThRo0MH8cGtrhaa219+qUbTkjly\nRKaiQmxXlZYKb4PycpOyMpOKCjuVlS6OHBFSofR0IS/q0MHBJZfopKUpJCUl0aaNSmmpzPffK3z8\nsY2UFIl27STS08V7Etn1RdPpKgqce65O374aDz7ow+EQZt69ewevXAkJJvfd5+Xdd2s5/XQtRLMq\nHsztdsfdaTmdBCJtrIta6BryjBk2Fi608cEHdc3iXLt3NygqUqLyqc2pVq1MzjtP57zzgvSE2y3o\niaIiiU2bVN57z8GWLSIiyOqK9++XOXRIwu0+Ou8FXYc5c2w8/rigedas8YR1+JF8ck2NRJs2ZtTB\nW6yhXbzhlKFVXS18LyTJxLo7O5r1+v92ndCga51QoV1pWpog29PSgrfpZ5xhIzfXVR/jo2EYwqZw\n40bx9eyzKps2SSQmWh2xg+7dJfr3h4yMozs2odUVG1exOmcLbIGYixexwilBAMQnn0iMH6+SkABz\n5/rp29dkwQIZXZf48EO5gfxLlsXqb2oqpKXpJCfrEdN7EX9kDe4cDgeSJI7d4xFg/dBDKj/+KDF6\ntEFZmcGBA0IbamlXZ81yUlEBlZXCy6CyUlyE0tNN0tJM0tNNVq5Uuf12mcJCf/33rQ7bZP9+mSFD\nErjxRh/vvaeSn6/Trp0A6eJimcWLbei6xLBhCl26GIHX0u/3R5VHhYKwdXKLryDFYIGqxem+9JKN\nWbPsLF9e12jeWaTbFkB2tsHs2TYGDDi+21ggPg8FBSKN46qrfLhcOoYBO3ZIFBcLegLgnHMESr7+\nuo3Nm30BeqJrV6PRu6aiIuFza7ebLFvmJiur6Tu+urrYwQHxDu08Hk+DoV3oewXRV4BramoamJb/\nr9cJDbrQ0MUrJcXk0CEfKSm1qKoa1aRbluGMM0zOOMPkyisB9HrTFNiwQWb9eokXX3Ry++1CSiU4\nOJMePUzy8w1OOaXp3CmxlRY8xtDuNFSeFhr+GK2cTkura4Y91saNgrveswemTBGGNCtWSPTvbwuc\nVIsWaXHrXU3TxO12B+wprcFd+LGIi9CoUToTJqhcdpk4aSora0lLs/HTT34uvlhh0aKg2gJEd11V\nJTpk6+vzz1Wys3USE+HQIZnvvpOoqBArrjt3CuB45RU748Z5ue02X4CbNwwRibNkicpll7lo2VLo\ngC+/3KBjR62BPCr05NY0rUGMe2JiApWVgk4RF0eJDz9U2bxZZtmyOk45pfmdYvfuOvv3O1DV4w+6\nVoV+nmRZGKeffrrGuefC0087aNHCoLxcZvBgP23bGnzyicr06TK7dom4+kj1hCTB4487WLRIZdIk\nL9deG9sDOFooZTxeulY1NbSL9V6Vl9uPynfhf61+F6BrdZKappGYKFFerjfpj9DwcaBjR+jY0aCw\nUKz+JiensGuXkCBt2iTx4osKGzeKxxQgbAT+2759OBAnJjZckAhVTIS6fzVWkVtpO3fKTJyYzMqV\nNsaP17jpJoPiYonBg23s2UNA/tWqlR2vt3Eu2HrdrFXnaI5p0apXL5PNmyXc7nDOUBjeNPx5WRZ3\nIGlpJh07ipPzvPM0brrJH5KHJW7zb7rJiaoKne5f/uLj7bdVcnKS6NNHZ9gwP5deqgXsHp96ysua\nNQpvvaUybFgyaWmJDB+uM2yYFuiAY93yWre7SUkm5eV+Wrf2IcsyixeLE3jx4ho6doSjsVvMzjbq\nX4/fbsijaaI7nzJFvCEbNtQyapSLW26xXmNBT9TViSWRkhLhObxwoY1164Lv95gxwvxn3z6Jk0+O\nTz0RbxJwYxWa3hFaoe/VkSMGSUmCu5ckiXnz5rFjxw48Hg979uzh5JNPbnA+xRNICcI9rF+/fixc\nuLBBvtrxrhMadEM7yOrq6vrNmgT8/kRU9dimtuJqCh06QIcOBkOHgtUR790bBOJXXpG5+24Vnw/y\n84NAfPCgFKbV1TSNqqoqnE4niYmJcfNQLpc4UcrKhB/Cq6/aGT26llmzxDDrT39S+fprmfHjNW68\nMXjraC1IxMqtsjoLa+LcnItUQgJkZ5usWycRajkaC3SjVeRGms8Ho0Y50TSJpUvdPPqogyuu9tCF\nzAAAIABJREFU0LjiCo3qavjgA7HgMG6ckz59dIYP9zN4sBaIA3r88VpWroRlyxK5/HIX6ekmw4Zp\nYQBsVWinlZIioWlOEhNtfPCBzKJFTk47Tee009zU1hoBIGjORP7UU8VnMtIg/XhWaLf3+edBM/RF\ni+oYPjyBFi2im5gnJAiPi169DHbskLjvPidduujcfrufpCSTkhKZ2bPtFBfL+HxSWAJHTo5R/1pG\ndrrHnksYq0LfK69XIS1NvAeqqtKhQweKi4vZvHkzPXv2RNM0Xn/9dS666KLA7zcVSAmiGXrggQe4\n+OKLfxM1xAkNuj6fj5qaGkzTDPCPaWkSR44c+1U31osvSZbxiMHllwe/v3+/WP/csEHi9ddlduyQ\nKCy0M2CAn+7dFXJzHfTv7+SMM6RmaS/FbZ9KcbHE8OEG69a5qa11M2GCizfflLnjDiH/iqS1Ihck\nQit0k8zlcuF0Ops9jOjXz2DVKpmzzgp2qopiOYfF97ws0LUAV9fhP/9x89NPctg6d3IyUQF47Fgn\n/fqJDnjQIJ0+fXwMHOgNdMBLlqgBABaryBpdu4YDcHKy0Op++aXKX//q5PbbfezeLZGQkBC4MIVO\n5CMXBqxNrlAQtF7K7747hiz3OGrnTpnJk52UlCg8/riXyy7TKC0NhlHGMjH3+eAf/7Azc6aNO+/0\ns2CBLyBDGzEi+HMHD0oUF4uu+MMPVaZNk9mzR2TICcN4idxcgwMH5GbRC0dboV66iqJw0UUXoWka\nnTt3Zvz48Rw4cCCM340nkBJgxowZjBw5km+//fZXfw5wgoMuCDMaa2ItSSKyp6rq2B7zaHS6GRmQ\nkWFwySWiC7nxRp3MTA/Z2bB5s4P33lOYOtVBRQXk5ZkhygnBLUfe0eu6iMhZtUpIj9av95ORYTJ9\nuo1//asl119vUFTkI1ZoaTTQjaQ3TNOM6t0QT/XrZzJvntxAMhavtaPV6YYC7rx5Huz2YMBotIoG\nwEuWCADu08fHiBFGWAc8dWoQgAsLGwJwUpLJihUqr7+uMm+ehwMHJPbuFadFtFveSO7RUp/4/f6w\njhhg+/ZfB3Rra2HaNBdz5zr461/9vPRSMEU3tLuNZmL+9dcKd9/toGNHky++qGvUu7htW5OLLtK5\n6KLgm1pbC0VFBiUlCtu22XnjDRs//ihz3nmJDBniD3TFubkGGRlHt9wRq6zUiPDvBR3G2kXs98cT\nSLl3716WLl3KihUr+Pbbb38TJcQJDboOhwNN0/B6vWGRPUeOHNsLd7TLEaG+uy5XCunpjnq/WY3a\n2lpSU1MpKxOG6Rs3yixbJvPYYzKHD0NubhCIS0sl5s2TSU8X5t6TJ2t88onEU0/ZuOACnQ8/LCM3\nt3EBsMNh1ts7mg0y3Kwhmd/vP+rbqb59Df7yFzWMIrDohXheP1kW4v2bbnJiGEHAhegeGtEqFIAr\nKjTef19m2bIEHnjASd++ogOOBOC1a2XeestGYaGL1FST7dvF1e7BB71kZBhs3tz4KREJxLquY7PZ\nAosCFv/YoYPGzp1qQAoY6fJ1NGXW54xNmuSgb18/n312hI4dw0n7UOPy0E738GGJCRMcfPWVwt/+\nJtItjuYwEhOhVy+Nnj39gY66S5dEXnjBQ0WF0BX/+992iopkTJOALaa1bXfGGcZRp0cI9ULDfLRI\nsG1O3XXXXUydOjXwmf0/eiHOCj3JU1OFo9ixPh40TwMYKf9KS7PVS730sONr2RIuuMAMGyBVVAh/\nhJdfVrjlluBb0qePwd69EqNH2zjpJJMlS/z06GFQUdE0cSrMcoRszhqSxZMkEW9lZIjX+vvvJdq2\nFd9rDqer6xI33uhi8GB/GOCCOLF9PprlNpacDMOHe7n2Wpnqali+XFAQFgBbHHCfPgYOhx+7Xdxi\nW/XRRypvvGELyN5WrFADEjbry5K7hX4lJNho1UqmdWuZtDQpAHiZmbBzp2gMLCDWNK1ZxjKhtXGj\nzNixTnw+mDPHTUGBJypAhCYAu93C5nPuXBuTJ9u5+moRCBmL54+3Is8Lr1eioED4R1xxhfUz4fTE\n+++rTJ2qsG+fRLduRtimXXa2QXJy0/+u5bsQaWDepUuXqD8fTyDl+vXrueqqqwDhk7t8+XJsNhuF\nhYXNeUmaVSc06EZbBU5NNY8LlxbJ08WqSKctywoyMZGYkrHIqqyEOXMUvvpKZuZMPzfdZFBXJzri\nP/xBAENyssmFF9rIzjbp1i2Ffv1k8vNNsrPNBmuhpmlis5mUl9fi9xvNVnLEW/37C1536FDq9bDx\nga7PRyChIRJwQXCiVlJvy5bN7zySk+HKKzWuvFKjqkpQEFOmOBgzJritdvPNPr75ppbvv5dZvFjl\ntdeEGHrBApVPP1WZNs0TJnEL/dqzR6akRPy5rEwN6JGPHJGw24XeeM8e8Rm87rpEWrUyA1t+aWkG\naWkGqal64CslxUtCAihKw464tFTm0UftfPihysMP+7juOj+yLF7DaBVKL1h65/R0k6VL3QHryeNd\n0ZKAJQnatTNp104PS4+orhbqCUtTvGCBjW3bhEdx5NCuXbtweqKqSqJdu3D+qjFbx3gCKX/++efA\nn0eNGsXll1/+qwIunOCga5XYxQ92usfK6ULTQBnJj4olguAnJDERSksbf6zSUqFImD9f4a9/1Xn+\neV+gC0lJESbht9+uccopcOedOjU1oiP+5huNr792MmOGxI4dEpmZQkNcUGCQk6PRsWMNdnsqsuwi\nOTn2BehYPSasYZpQdlg8rdRgRTO0fD648UaBCrNmuWP6CKSminSGaJ7H8db27TJvvaWyeLGgQUaP\n9uFyiUWChQuF4Xpens6XXwZPA10XHbu1Bt1UsrR1F6GqKqYpLrQVFRL33OPkww9VCgoMWrUyqagQ\nCQ0//aRQUaE2AHJdF5I6C5QTEkw+/zyox5swoQ6n0+SzzwTtlJgokZ4u0apV+NqyxyOhaTBhgvjd\n0aN93Habv8mE4+ZU6EKIzye62nhdUJOTxR1cnz7BC4CmwY8/yhQVia74+ecFPSHL4fTEG2/YmDhR\ngG5op9uYrWNTgZT/jTqhQTe007Wct44Hp2s9ZjRAijTMiSX/Skw0AyJ/q6zO2e2GmTMV/v53hSuu\nMNi40Re4RY+sUJ1uUhKcdZZJt251pKcLkK+rg+JiiQ0bYOVKgxdeUNmxoxVut8TNN5uMHavRo4dJ\nTo553GU9/fqZPPdcqG9w48O0UMAdMqRxIAgO05p3UfjxR4nFi20sWaJy5IjEsGEa//63h549jYiu\nSVAQS5YIQ/MLLkhg9GgfFRXSUQOUJIn3KCnJJCtL58MPVTp3Nhg2rOn23+OBI0cEAC9cqPLMMwI0\nb7jBS8uWOrt3SxQXS1RUyFRWylRUODhyRKauTiwEWReJ9esFR92tmwC1MWOOL+BCw6gesZp79I+n\nqtSHeRr88Y/BhOf9+wVHXFSkcPPN4i7lvvtcXHttUNrSFOjGE0hp1Zw5c47+STSjTmjQtSqS0/01\nOt3QjS273d4kP5qYGIzssT6gliJh8mSV3r0NvvjC3yBRN7KihVOGUh9Op0FuroeuXb2MGuXE6XTi\n9RpkZtrp3t2kqEjmlVcktm+X6NRJqCUsPfHppzeMs25OZWWJoV9pqRwwXAkO08J/1gJcSYK5cz38\n5S/ORjvieIdpIDrXRYucLFmSxOHDCkOHavz97x569zZiAk5KCvzxjxp//KPGgAEyZ5xh8O67KsuW\nCRJ5wACNSy7ROFpvbE0TCblbtsgMG9b0zzudAsAmTnTw448yb75Zx6BBDa9elnLCWy9N8fut4Ewb\nt98ePNgZM9wsXqw2UMUc76qra942WrwlSXDSSSamafDyy3a6ddPZsUNm0aLwmO3f0sD8eNXvEnSP\nHDl+jxnL/aupCt1IM01YscLBk0/aSU+H+fP99OkT3wfV5Wr4fKxNMkspEXkRcDrhrLMMhg41uOIK\n0fF4vbBli8SmTRIbNsgsWKCydWs6p55qUFAQ3LDLyzPjdkaTZejd22TdOhvt2/vqgxKT8XqF1Z91\nYYgEXLs9ekZaaDUmGwMR1b5kicqSJTZ275a4/HIfkyfXcN55zQeas8/WadPG5O67fTz3nM7UqQ7e\neUflvvucnHWWUEHEAuBYvL/fD3l5Ops3N91mVlXBtGkO/vMflXvu8TF/vj/m7XroEE4EVtp4+WUb\nzz1nZ8wYDyedpPPRRzbKyupwOJKaZQAUb4V3ur8O6BqGGAA+9pidP//Zz3/+4+O88xLCbB0B6urq\nwoIhT4Q6oUE31iDteG0CWYoERVGaPYyyEoHXrRMeCQcOpDBlip/LL2/erZjISWuoE62pqWn0uCJ1\nug4HFBSITvdPfxJAXFlZx/ffK2zd6mLjRjFQKikR65+W14QlY4vVTPTpo/Htt3YGDxZeF3V1Eh6P\n8HwViakKt9ySiiybzJnjxmaTAClqRlpoRQsZ3btX4u23Vd56y8ZPP0kUFmo88oi33lhGw+/3oyjN\n/0jn5+ssXy5+LzERrrrKz7PPesMoiPvvd9K/f+MAHFq6Dvn5Bu+/H/t4DANee01l8mQHF16os2ZN\nHW3bxg9gq1er3H9/AiedZLJiRR2dOpm89ppKYqKCoiTidNIsA6CjqWhDtGOtn36SuP12Jx6PxPvv\nuwNUiRXVE3msx0uR81vVCQ260NBT91g7XdMU2V/Wfne8seuRNXeuwscfy3z8sZ0//lFn8uRKOnd2\n0tyXPCEhSC9YHgnWBp6zkQgDhyP2hNsqm03YEJ55psGNN4oPtqbBd99JbNgguuJ33xXbcG3aEOY1\nkZur43LVkZcnMXVqEjU1JpMni9cpM7M1vXv76N7d5OWXHZx+us6nn5ah6wa1tWb94NOGz2cEMuki\nTyTr4nnggADaJUtUtm9XuPRSjXHjvAwcqIfJyeKVqkWrvDyDJ58U7XFockQoBVFZGVzECAXg884T\nfs2R5fcLnrK0VLisRXqyfPutkIDJMixY4KZnz/iVBeXlMH58EitWOJg61cvQoUHNrWXn6PVKuFw0\n2wAosiuOVqGd7vGkFzQNZs608fe/2xk71sett/rD7loiQfdENDCH3wHoQnin63SKTjLa3nlTFSr/\nUhQFVVWbDbiHD8PUqQpLlohPy6WX6uzfLzF6dCqHDomk27ZtISPDpF07k7ZthbRG/L/YAmrXTnj7\nKop4DnV1JtXV1QFXMsMwmuy6Y4VThla0YaGqCl+F7GyT668H0NF1+OEHYYO5YYPE44/LFBerpKfb\n6dQJ1q1T6NzZzsiRXn78sRy/38/GjTauuaZF/esKWVmtycrSycvTyc3V2LpVJSdHWPpFptOWlSks\nXqxy8KDMU0+ZXHyxxt13+zj/fD3uKXlz6owzDA4eFOBomtEz0lJTowPwffe1on9/nREjBAdsgaum\nCc1uZqYwNO/bV4Dq/v0Sjzzi4MsvFR591MsVV8R284os0xSd8SOPOBgyxMOqVZW0aBH+ObCWIzwe\nKaqBeVMGQLE8b2Mtdhwv34WSEpm//tVJerrJ55/Xcdpp4Z9L0xQ0TORG2vGgS37rOuFBN7LThWC3\nG++iSjT5l9vtbtabWVcngjD/8Q+FK680+OQTH7fdprJ4sWjBqqqqcLlc+Hw2Dh4UJ9+BA8K05sAB\niW++kcP+v7wcWrUSfwZwuZI5+WSFjAyTlBSTU0+VOPVUAeDRwhKCG2nHXooCXbsadOrk55JLBN3i\ncLj4xz9sTJgQRMGPP7axcmUqmZl+VqwQnqzfflvJqaeaVFVR72ylsHKlyqZNKps2JfPGGy7y83Xa\ntzfYuVPiu+9ktm5VqaqSOfVUnW++KScxUQkBi+N/gimKcAYrKVEaTQO2KhSADxxw89lnibz9tp17\n73Vy9tmiAy4vB5vNpHt3nc2bFfLzDZ5/3s6MGTZGjfKzbp2nWUsK27fL3H23A7dbYtEiN1271kZt\nCKzliFihlNEqltViaFfs9XrDfCYElaNQU6McU6fr8cDf/mavX+AQlpLRTru6OiFLU1UT0xQ/oGla\nXPOV/7U64UEXwodewn/BrBdSN/5haEz+Fa+GVdPg1VdlHntMpW/foCJhzx4xZIg8xsRE6NRJxLPE\nkkOZpkl1tYc9e3y89VYSU6Yk0L+/zP79Qli+Z4+TQ4dUDh2SOXBAgK4QoosOum1bk3/+U6FTJ0EF\nWB10WtrRSXusOwDTNElISGDrVpWxY20cPiyxdKmH5cuhZUs/d93lY+dOJ716CZLvzDM1Bg5MwW43\nycnxk5enk5+vU1joIylJXDzKyyXmzg2/JencWaemxmT3boWtW+1kZvpwOsO7r3hug5tT+fl6YHW1\nORRhSorJlVf6ufpqI9ABv/WWjeXLVd5/30Zmps4rr9iZMcNOVpYe4F7jrbo6mDZNgNJDD/n405/E\nLXeo3Wdoeb1B4/tjieppzPPW2rz0+/2Ul0v124/uZvPEq1eL7rZbN4OVK+saPV+jGZhXVlaSEu/U\n93+ofjegC4SAbsMhTGhFGnZHk39ZCoHYjwHLl8uMH6/QqhUsWOCnd+/ghyYpqfkx7KHeDYqi0LVr\nEgMHqqxYYQSGXyBsLB0OR338uVgjPnBA4sAB678SPp+QiT3xhBr4vs8XpDbatjVp3dpFmzY67dvL\nAZojlNqITJE4csTOgw+qvPuuwoMP+rjhBi+a5uHQIRdLloh4+IkT7RQWasyb58NmA9P0s3u3oCU2\nbFCZO9dOUZFCaWnw9R461MvYsW66dDHw+SS2bJF54okEPvvMxgMPJPL99ymcdppIS8jL08jJ0cjK\n8pGQEARi6/WLxRE3VdaSRPfuerNANxQEQjvgoUNdOBwEBnQ7dgjz8FdesZGVZZCVJWwSGwPGDz9U\nuO8+J71766xaFQ5KsVQTHo84jtB14ONVof+eZbyv6yopKTI2my0qTxy57ixJEtXVMHmyg6VLVaZN\n8zJkSNOEvAW64d9rXKP7v1onPOhaH4TQrbRok2+IHf4Y63FjgeTatSIip7RUpDYMHtwwfdZaAzbN\n+LrLWNE9kSbmkccmSSJqpkULk6wssLpn0xQbb08+GdRl1dURRm3s3m1w4IDEypVyALQPHpQoKxOP\n16aNTrt2KbRqJfHWWwo+n8Sppxq88IKHDh3cVFdrpKc7OfdclXvvVbn2WgmbjQDgWsfXvr1J+/Zm\niCexn5QUF3Y73HGHj02bJIYOTUHXoXt3P7m5Gh07avzwg8ynn1bh98O2bQrFxSpFRQpvvuli+/Zk\nTj7ZAmKd7Gwv2dleJMkb1d+gqQyuvDyDGTNksrJia3ubUy6XMPQBaNnS4JNP6ti2TWHrVpkPPlB5\n5hkRMtm+vUF2tkG3bkY9GAve+qGHHGzerPDccx7OPz/+BAorAVjQC8f+PGJVUDImk5RE1EieaNlo\nn33m5IEHUjjnHD+rVlXTooVQszRVwnchfBuuqqrq/zrd/2aFAlFamiWstwAovIOMR/4VDXR/+gkm\nTlRZtUpm4kSN666L7ZhkswnA8fnEbV4sENd1nbq6upjRPdFAN56KZu2YkEB9OoagNrxeYUmYlBTs\nFH0+H9XVbioqbBw54uKll2zMnSue5HnnaSQk6EydqnLoUBqHDsk4nUI2pOsSy5errFvnbtKkRpLg\nr3/VyMgwufNOC1A09u+3hnUKixfb2bdPpnPnNHJy/OTkaPTooXPbbX46dhQpx99/LzjiTZtU3nkn\nkS1bUmjb1iQ/Xyc3Vycvz092tp/UVF+TQJyZabBzp0xNjdiqO9ayliyWLq3jzjudgTidyy4L/ozX\nK9Zft24VX6+8YuPjj4NIOXy4n5ISGU0TnPNJJzVtlRg+SDv+0/2GUT3RB2mSFJ6NVl4O48Y5WLVK\n4bnnahkwQFwcLaP4pgyALC/d0H//yJEj/9fp/jcqGgdrdboW4W8NxZoj/wp9vEOH4MknVRYuFKbh\nL77oi2tia1EM0UA3kk+OFd0jdLrh34+HqhCyofhbtlDeNiUlgT17VMaPD/K2AwYIOsZms+FwOOoz\nq2DcODvz54uPUV6eweDBTjIyTEaO1Bg+XG8whbZKlmmwkZaRIVQcgwfDtdd6uewyBytWeOrN4VWW\nLrXx6KMKlZUS3bv7ycvTyMvTuemmWk47zYeiqOzYYaOoSKWoSOXpp12UlCSTlmaSn6+Rl2fUA7iP\nli3DwxAFnaNTXCwfszHMV1+Ju6dJk7zk5hoxNyQdDgGm2dkG334r89FHKgMHakye7EXTYOtW0Rmv\nWKGyZYuM1yvRrZtOVpZB584mubky3bubYUnF4YO0Y3oacVVtrUSrVo3TcG+9pTJunIMRIzRWr64j\nMVECnPV/3zCkMtIoXlEUqqrkRr10T6Q64UHXqshOt6LCoLq6uoH7V3Mer6bG5PnnFWbOVPjjH3U2\nbfJF1WTGKotiaNEifNhnpRTHs04shhSxn2usaiw5IvRxDMOgpqYmKm/70EN+rr/eg6Z50DSZxMRE\nFEXB54MXX1SZNs3GkCEay5d7+H//z87KlR50Hb7+WmbxYoVzz3XSoYPBiBE6I0boYSGPTW2kWWvA\nbdvCoEEGgwZZf6NRWgobN0qsXy+xbJmNJ59MoKxMJjtbIy9PDOyuv95Lly6C9vnpJ4miIpXiYoXn\nn3dSVJRIYiIBaiInx09uruiKP/rITrdu3sBgKFQqFc/np6RE5sYbnciySY8eOsnJYqgbi2aqqIBH\nH3Xw/vsqU6YICZn1c716hYNZaanEtm2iKy4qUlm61M62bSLq3aIoXnvNRnq6SYcOjfPFR1vROt1Y\nyxH79kncc4+Dn3+Wee01N2ee2RCcGxvYhVITpaUyLpcUAORPP/2UXbt2NdrpNpWPNn/+fP72t78B\nkJ2dzaRJk2LaRB7P+t2Brq7rOJ0ahw6ZgWFTc4cqmgZz56pMmdKSs8+GL7/0cfrpzT+mhAQzEMNu\nHVtlZWV9Nld868QJCUdHL9jtjYOuRSVomobT6cTpTOX55xWeecbGNddorFtXi8vlQdMMnE5n/a2i\nxLvvKowfb6NTJ5NlyzxkZ5u8+qoSEPcrCpx7rsG55xpMn+7niy9kFi1S6dfPRpcuAoCHDRPDqsY2\n0iwPjWhglZ6u06+fm759xZKIqppUVFjm8AorVth49lmF/fslsrI0cnM18vKE2fnEiR4UBX75RaKo\nSPDEs2cLIC4vFxe/v/89iZ49oXt3HxkZfkwzPOQyFIhDL36//CJxxRUupk/38u9/i1RmIXOiQedp\nGZJPmOCgsFD43DZ1p9yqlcmAAToDBujU1tbicrmQJJm9e6UARQHw/PNBGV95OWRlCUDOzjbo3Nk4\nrlrnujrhMRFahgGvvCI8fP/8Zz+vvOJp1gUg1Cjeoii8XhstWwbvat99912++OIL9u/fz8svv0yP\nHj14+umnwzjepvLROnXqxJdffklqaiqvvPIKjz32GP/5z3+O4dWIr0540A03U/ZSV1dHenoKlZUO\nHI7mRWCbJixbJjNhgkLr1iYvv3yE888/esfnpCTBd/r9/oBBSVJSUrMWLpoapMWqaEY5EM5vCxBR\n+PDDBB56yEZmphj4tG/vwe/3o6rBi9amTRLjxtkpK5N45hkfF10URMz16+WoG1WqChdcYHDBBT6e\new4++0wA8OOP2zhyRKJdO4MbbtCiOqypqnjuNTUEDK4tvajf729wQU1Ph/POMznvPBMwALHEUFQk\nUjq++srJzJkye/cqdO3qrwdincJCLw884Oa771QGDgyesPPm2SkqSkDXCUjdcnI0cnL8nHKKAGLr\nPfD7/ZSVKQwblsK994oNsZkz7YE0YKvbtXSzP/wgcffdTiorJRYscDfoaOMpq+OUJDjlFJNTThG+\ntV98ofKXv/jYvFlh5UqFq6/W2LpV5p13VKZOldm9W6ZjRyOgoBCALGigeAaIkZ1uTU14EvBPP0nc\ncYeTujqJZcvcZGUdHw9fKzUChHJi5syZPP744/Tr14/WrVuzcePGZuej9evXL/DnSy+9lIcffvi4\nHGtTdcKDriVr8vl8qKpKamoqLVuqFBU1r7tds0Z4JFRUiIn/oEE6R440sUfbRCUkmJSW1lFbK5zJ\nDMNo9oabzSY6B02jWTEngl4Ifw0iFRJFRfDAAzbKyhSmTatl4EAfPp8PsJOUlIQsiy5q0iQbn36q\nMGGCjxtu0Bscx7p1Mlde6W/0eOx2iybw4fHAwIFOSkpkevRwUVBgMGKExuWX62GZbxbFkJQkuD6P\nx4PNZgscW1OVmio8ic85xwJiYaJdXCyAeM0alWnTFPbvD7/jWLaskvx8HZdLYv9+0REXFSksXGjn\noYdc1NVJ5OUZ5OVpdOvmpmtXuPvuJAoL3Vx9dTVut4Lf70SSNAxDPI/qajFreOYZOy+9ZGPsWB+3\n3OI/6uiaWGV11H4/5OToDBmiMWRI+N9//31weDdnjo1t2xyUl0t07RpUUFhqikgj8ciqqxN3Y5oG\nzz9v49ln7dx/v48xY8JXeI+1KislOnQIB/Dq6moyMjLo3bs3/fv3D/u7ePLRQmvWrFlcHpo0+yvW\nCQ+6IK6+lom4LAubwcZ0uqH1ww8SEycqrF0bVCQoSnDI05zIHqusIZndnojXayM11RnW7TanJCnY\n7VodX1MaYrAGaeLPkRt3R47YGTdO5b33FMaN83LNNdWYpj/g1aDrOmVlXl54IZEXX3QwerSfTZt8\nUd3HvF6xLZWXF39H43RCYaHGZZdJ3Huvnw8/VFi8WOGhh+z07m0wcqTGZZfppKVBeblOWlrwQnGs\nG0jJycKTuH9/kwULJD7/XObqqzWGD9fYuVPivvscXHppKi6XUBvk5PjJz9c5/3w/t9/uISFBbA2W\nlKhs2iSzZImLjz921j+2xJQpKrm5Olu3qvWfAy+JiS7eeAPeeCOBvDyNL7+s5pRTjn59tbG7HGuQ\n5vVGX4N3OoUxeG5u+PtVWSneR2t4t3y5GN6ZpkRWlh6gKLp2NTnjDD1AldTWSuzYITPd6TknAAAg\nAElEQVRxooOUFJPPPqurV8cc3woNpQw1MD8eg7RPPvmEV199lZUrVx7zY8VTJzzoKopCYmJi4LYT\n4vNiPXgQnnhCZdEimTvv1HnppXBFQuh6cbwnR+iQTCxdqPh8MpJkBP7+aCoa6Db1WHa76Grq6urw\ner04nU4UJSHA2157rcb69bU4nZ76KPYEVFVF18WG3ZQpDvr18/HRR6WcfLKGLCu43Upg6GFxmiUl\nMqef3nyDdFkW3ZjLBUOH6gwdKpIxPvhAAPDYsXaqqiReeEFmyhQ7LVs2bxDaWJWUSNxzjx2PBxYu\n9Ibd3m/cKIIsr7pKZ/Nm0RFv3Kgyf77MDz8onHaaWM7IzfXTu7ebjRuTGTzYx/TptWzdKuRrH3yg\n4vVKDBqUTocOQopWXGxn4sRaxoypQ5L0gPHPsWzXRftZSzLmdkukpsZ/IUxNbZjoYJoi0NLqijdt\nkpk/P4Ht25NITYVOnQzWr1dYv17h+efdXHfd0YVdxlPiTiHcYayyspL09PSoPx9PPhpAcXExY8aM\n4YMPPvjN5GcnPOhaFa5eiN3p1tTAc88pPP+8wjXX6I3GmMe7CmzxpHV1dWFLF0lJDY3Mj6aaq9UV\nAnI/brfoiJOTU+rVCDa6dTP49FM3p57qbsDbfv65zIMP2klIMFmwwFc/bU4MDAGtcEXLpEZRFFav\nTqCgQGr2Jlg0a8ekJOpphjpKS3106dKWV191sXSpi3PPFQqISy7RjzpYsbISnnjCxhtvqDz8sJ+b\nbtIa3ALn5xts2iQzapTOmWeanHlmkJrweEyKiw2+/VanpMTBhAmi9W/fXmP8eCf5+Tq9evn50588\nlJSo5OdrLF4cnCAtWODk6acT6NZNDygnunf30bWrH1U9PmvOoZ3usaoXJAnatBFLMgMHivmIz+dD\n103eeSeRW24R7e60aR6uv/4YbN7iqFgbabE63Xjy0Xbt2sWIESOYP38+nTt3/nUOPEqd8KAby1M3\nstMVigSZxx9XGTDA4JtvfHTs2PRjNwW6Fk8qSVKDpYvmhFM2VkJ3GVz2aOyxgsej4vO5+PHHhIBP\nwnPPeTn7bE99ZL0a4Ea//15i/HgbW7fKPPaYn2HD9LCOxRK6R1oE6rrOhg02evf2UVtbGwDi0K9Y\noBFNMqZpWmDA165dAldeqTFokM7FF+u8957C/Pkqd9xh58ILdYYPF7x7PB22acIbbwjVxaBBBuvW\nuWNeaPPzDd54oyHvLp6v8HYtKHAxY4ZCdrbBe+95OHBArDlv3Gjj7bedbN2q4HaLPLSvvirj+ecT\nOessjWuv9VNVZbJ5sxow/vnnP5PYuVOhSxc9sNSRm+una1cfdnt0t6/GyvJc+LV0ujU1MGVKIu+9\n52DePDd33ulk5MhfF3AhSC+EfpY0TWt0RtJUPtrkyZMpLy9nzJgxgPAeXrt27a/7RPgdgC5E99S1\nOl3ThHfflXn4YYV27WDRIj89e8bvvhQL3GKlAIdWYqJJTU3zDHSilcsV7JhjlcXbapqGy+Vi924H\n27cr9O3r4vHHfYwZ48Hvd+P3SwFuVKwJ23jzTZV77hHu/PHaYVogUFRk4+67DVJSUhrYA4Z2xJFA\nHNrpWhy4tZWnqmqYcVFaGlx3nc511+mUlcE77yi8/LLKX/9qZ9Ag0QFfeKEe9di3bhVUQlWVxIIF\nPnr3bvyWOyfHYOtWORD/bq2O+3w+7HY7CQkJzJ+vMmuWyqefemnTRnSDubkmN90EoKNpkJqawJo1\ndXTtqpKcLD6PIurJ5MwzNfr2DZrC1NXB5s1iWLd+vcqcOXZ++imFTp2M+qUOoZzIzPTicmkBPt/j\n8TSQsFmWpr/GRtrHHyvcdVcaZ5/tZ/XqWlq0gJtv5ldJjoisysroXrqN3QU0lY82e/ZsZs+e/Ssc\nbeP1uwBdCAe15GTBAa1cKTFhgkplJfztbxp/+EPTa5RNVaQJTGQKcGhF5qQdK6drVehjhZr3WLzt\nzJkK48cLMebppxs8/riNefMkevZ00rOn8MpduVLmhRdsjBihsX69u1lLH1ZVVcHu3RLduoljsYA4\ntPuIBcR+fxI+n0ptbS2apgUALfS1jGZc1LIljBqlM2qUzqFDsHSpysyZKrfeaueSS3RGjtQ4/3wD\nr1dcUF57TeWhh/yMHt2QSohWyclCgvXddxKZmf5A523dFXzwgczDD9v54AMPJ50U/f1UVcjIMEhP\nl7DZbLRooeDxyGEXptDXRZYNevRQ6NUrCMQeD2zZIgf8Jl57LYHvvkumQwehmsjK8lBQIDbzXK6g\n34THk4gs+3C77cfN8Ka8HB580MnKlQrPPFPN+eeL98vvF3eQv8YSRmQJL93oyxUnWv0uQDeap65h\nSJx/vp1rrtF5+mktbFWyOY8bDdxiOZNFVmIi7N3b/H83siyrvtDjsjSrFo8cydtu3FgX4G3Bzs8/\nu9iwQWbSJKG1BbDbBW2xdKmICs/Obt4W08aNYmW2MdlTNCDWdR2bTUbTjMCGkWWIEtoRp6SI6PJY\n1aYN3HKLxi23CN+Gt99WePppGyNGCHTNyDBYtcpDRkbzwCcvT2ftWo327etwuVyBY1+7VmbMGAdv\nvumla9fGH1PXpYBONyXF5NChoDFTNBNxC4CtLzDIzVXIz/cHKAWfT3TuGzfKFBfbeOcdsZF20kkG\n+fmCI66pkfF4TOrqTMBDba0vqttXPGWasGSJygMPOBg+XGPVqlpU1YckieOprRU8/G+Be5H0wtGo\niv5X6ncBuhC+ZivL4s0YOFAYY59xhp2TTjLp1cukZ0+Tnj1F7ldTnJcFbh6Pp9nBlGDlpMlhx3c0\nFfRfEL+vaVoAdJOSktiyRWHsWBulpYK3HTDAW99RBnlbXZdYsEAlI8Nk7lwv/fsbbNkis2GDzPr1\nMi++qPLzzxKZmQYFBcGvzEwzpoHNhg1ys4X9uq7XH5sDSXIENohCOz8xrNFxOl2UldnxeDwBII61\njpuRYXLeeYL7bdFCbG7t3SvRr5+TwkLhAzFggNFot2sNRLt10ygpsTNqVHLg39q+XeKPf3Qwa5Y3\n6jprZPn9QV11SorJDz/EBrponHk0IDYMg8xM6NZN4sYbbciyF5/P5IcfBDWxcaP4/aysloAIQ33k\nEQ+5uT66d/eTlhbua9BYYGXoCu/8+e4ALeN2//qhlJHl8YgLgKBLpPrveRqNq/pfrt8V6Ab/LIxE\npk3TyMkx0TTYtk3s6q9bJzN/vsr27RJnnCGAuFcvg549TbKyggBj7X43x5ksskIHaVYdzRXaohcs\nRzIrv622NokHHlBZtkxh/HiN664TvK3PF+Rtd+8Wyw2ffy4zcaKf667TA8DTs6cRtklWVye8AzZs\nkPn6a4UZM2zs3CnRvXsQhHv0EFpNRRFLEYWF8W39hXKjDoeDhAQHIAPi96N1xK1by1RXC7CygBho\nwBHX1ko89ZSd//xH5YEH/Cxd6g0A3s6dwpZy/Hg7+/ZJDBumMWKETr9+4RaO1hBPkiTOPNPBk0/a\nAlK/vXslhg518PjjPv7wh/guMppG4LNk0V3NqVAgtl47wQnbA82Azyfc0844QyYzU+Gyy2ReeslJ\nWppY9b31Vg+HD0tMn+6iuFgY/+TlaeTnG/VeEz5atQoHYkmSee01F4895uLmmxtf4bUWI37tqq62\nlAsnvsMY/E5AN1TBYN2ihgZUqirk5Jjk5JjcdJM1hBCbSevXCz/Zf/xDYtcuidxcYVTSvbubvDzo\n0sVGcnLiUd3KRKoXmqv7tcrpNKms9FFVVY3T6USWXUyfrvPPfzq45hoR/eJ0evD5goOomhqJ6dNt\nzJ6tcsstGps2eQI631iVkNBQqyk2uAQQf/KJwt/+ZuPAAYncXIOVK8UE//vvJTp3jr5Gajm9eTwe\nVDXYecuy1KjhDYjV3upqJdDRWHcyVufn9fp45x2VSZNS6N/fz5df1nDSSWK12TTF692hg8ndd2vc\nfbfGjz8KAL7nHjtlZTB8uIjWyctzo2l+nE4nNpuNHj3EczYM8RkaMsTBmDEa11wT/1p5aKcbTU0T\nb4UqOpKTk2NSE+vXww03iDXY5ctL6djRDBuwGQb8/LMU4IhnznRSXJxIQgLk5grlRFKSwZw5dlJS\nTN58s5zMTD+GoeD1BrtiizuGhivAv1ZVVTUM9jxRHcbgdwK6VoUamQej2KN/KJxO6N3brE97ECBT\nUaGzZo2fdetkPvrIxdSpiVRWSvTsSaAb7tnT4JRT4uOxrBj2oy2rw5FlG263GcbbZmZqvP/+ETp0\n8NWfeKIz0jSTefMUnnjCznnnCU4z1N2ruSU2uAzOOisIxEeOwEcfid3+rVtlhg1TKS+XyM8XnbDV\nFbdvr+HxuAMxP6F3CopiYhiNc4uRZvShRii//GLn3nvt7N8v8dJLHvr29aPrZqMdcefOMmPHaowd\nq7FtGyxaJHHbbXbcbgcjRuiMHCmOPz1dmMts3iyUD3/4g85ddzVPFhW6tp2S0vxO15ohWGqUWNKo\nujqJKVNcvP66yu23+5k5UyYnJ7EBLaHrIiGkY0eNYcMssx5xJ7Bhg8pttyXi9wdN1598MjXMb8Iy\n/rE+k8JuUWi6f21+tbIyGNVjXXSOHDnyf6D736zoWt34o9itDzh4OeccB4MGOZAkA4+njgMHDLZv\nT2LdOom5c2Vuv11FlsWteSg10bJlw8dNSGh+ZI9VofrflBQXGzfKXHIJlJWF8rbCb8LhcGCaJp98\nIvHwwy5SUgzmzCmnoMCot2JsXDPb3EpLEyYuF1yg8+qrYne4rIx631u5fqVXpbbWQX6+UEwUFJgU\nFBiceqpQkDRl7QihF85g1dbCtGk2Xn5Z5f77/YwZo9XfxtsCwBTZEUcCsSzLnHKKxl13wbhxLr77\nzsZbb6mMGmVH10UH7PFAv34urrpKY8qUxn0lIss0RRqwBbqW4U18v2uG+UwkJyfHfM8+/VTmjjvs\n9OtnsHatm+pqiZdeUmNyxKG8uaZp6LrOkSN2Zs5MpF8/jWefreO00wz27ZPYtEmhqEjl1VeF8Y/f\nTyCho6DAJCdHo7LSwOkUjmexonmOR1lDtFBw/79O93+kIkE3lnm0VZHxPZGKBEkSBs0XX2xgbRCa\nJuzaJZy11q+XeOYZlY0bJVq0CO+GCwrMo8pJi0ySKC+38cILQv713HO+MN7W6h63bZMYP97ODz9I\nTJnir+dZXYGTyzqJoWH3F69PbGStW6eE8cEtW8L55+sMGOAJAEZlpZOiIoUNG2Tmzxe39boOPXoY\nbNki4XZLPPywREZGdCmfuHBa02p4910xMOzf32DNmtiqhNCOOBSIraGoz+cL3BW53XV07KgwdqzC\nuHEKa9fauPpqF+Xl4t/du1csjlhm45mZTQ9gdR1kOUi3NJXZZ5U1Q7C037FmCKWlwjxe0GI+LrxQ\nvA+HD0f3W7Bek1DfWq8Xpk9XmT1b5ZFHPFx9tRvD0PF6dVq3lhk0SGbw4GCyxoEDwmluwwaZN990\nMGFCAvv2iceaOrVFvTm8n9NO0zDNxjPSmlvRttEqKyv/D3T/FypyK806YSPL6ibq6uoCXFm0D3g0\nkJQk6NABOnQwGD4cQMcw4PvvJdatk1i/XmbJEpXNmwWP5vFI/PvfMj17mnTo0NB71CoLECy9raom\nMmOGwvTpAjT+/GcfV19dic+nB7jHw4clnnjCxpIlKvfe62fBAi1k6BF7iyxa9xe5vNBUrV8vc8st\nwVtuaz0YgsY0IqXYYNCgIDjv3y9O3HvvtVFRIdQFigIFBXrYsK5tW6vTFXaB991nZ9cuiX//28e5\n5zZPMWGaZoAbVVU1wI2GdsRFRfDyy3aWLnXQt6+XDz5w8v/bO+/wKMr1739mZks2gYQWQSX0gKGH\nNJCiB0F4FcXCUfFgQT1HRJpgQwEFUVFROkYFG0XxJypiixBEQNPpRPAQFKUIhGBIstk68/4xmS3J\nbrIptJz9XhfXOTHJ7rOT3Xvu536+5emnzcTGKuzfryM1VWLhQj15eQKtWimuItyli/r/27Z1F1nP\nQzRQO92iIv/FRmNNaAdl5fnK7p+Djz5SDwXvustBVpbFy0A8UOlverrI2LEGOnaUyciwcvnlACbX\nWnx1xI0awbXXwqBBOiTJjiAILFhgJDk5hPBwJ19+aeCFF0ycOSPSrZvTlerRrZuddu3sCELNZc6e\n+Wiena4/34WLHfWi6PobL+TnV/zZ8nHilSVKBDoOEEW46iqFq65SGDVKLQg2G/zwg8Dw4QZ27BBZ\ntkzg4MFmxMTIxMerXXF8vELHjjIOh7XMlczg0ydh3To4flw9GAkNDcVqFZg/X8e8eXruvNPB9u2l\nPscbFdcpVuj+KtuGa/80hZgGRVGLbnKy03Wz0MzQq0rouPxyhRtvdHL2LGzcKLFsmY0jR9RCvH27\nyJIlenbsEAkNVYiOVqly3bubmDzZzpo19mobcFfWPZaWCqxdq2P5chPHjgncf7+DjAwLoaEynTsr\nPPpoKQaDahqudYpOp8ShQ3r279eTmyvx/vsS+/YJnDkjlBmFK7RpI2O1CuTnQ7Nm6ly8pETtgMtT\n1jQlIVTuovb77wITJhg4dUpg7VorvXpVvPFYLG7PXl8oLobnn9fz+ecSc+faueUWZ4UdRvmOWGtO\ndDoder3eqxDr9RI33mhl0qRS1+7izBmBXbvUZIuUFB2vvhrCiRMiXbo4PZI6bHToYEeSfMucyxdi\njb1Qvui2rUrHf5GiXhRdDeU73YMH3R1beXvDypRkvh6vujAYVAvBsDCF5GS1I/zrryIOHAhl1y4D\nqakir7yiJvB27y6SkGDCYBBYs0aiYUOFhQut9OtnLeMjNsDpNGI0CqxdKzFjhp6uXWU2brTQsWPN\nD8kq24a7GQJW145A+zD+8YcOk0mhcWMrxcXWKmePvqDNdAUBoqIUoqKcDB/uLFsDLFmi46mn1Aob\nGqqwbJmOtWslr244Nlb2m7ZQnqLmaXiemyvw7rs61qzRkZAg8+STDq6/3u0T/Pnnevr0kWnSpGL3\nJ4pOOnQopW3bYm64wV2gioslDhzQk5urY9s29X3XrZsJk0mlL8qyQHKyjr59nXTqpJT5aahm8ZXd\nrFSfWh2vv67nscfsjBvn8Mub1iTAvrBxo8j48Qb695fJyrJUKRbyPMjTmpPy33c4dC67RY07HhoK\n/fpJDBhgd72/zp7FldKxebPEggUNOHpU4qqrvP0moqNt6PWOCoX47791FYpuYWFhkDJ2IeGv0z17\ntuK2PSwscPpXbYouuKN2ZFktMg0aCPTu7aBfP1xzW4vFRGpqCA8+6G7hGjVSeOMNkR9+0JOYaMBi\n0bF1q8R114mUlgq8+Wb1t9iBonynAxULcXq6k+7drS4amCq+cFYZc+4JXy5jAL/9JvDEE3ry8kTW\nr7cwcKD6Q7Ksjhm2bxfZsUPkpZf07Nol0qKF4irCvXrJ9OwpYzI5Ksh3LRb4/HPVs+HQIYH77nPy\n008WWrWq+PdNSZG4/nr3KV8g1yQkxErXrma6dRO4/nodP/zQhLy8Yo4f15WFS0p88YXEBx/oyMsT\naNnSSefOOrp3h65d1cJcPr1h1y6BRx81EBEBP/xgoX37yt+LvsYLp0+r899t20QWLXLPfyuDFuZa\n2c1U9YwQCQ9XI5O0a+JL1GE0Qp8+En37ugtxUZHb+CctTcdbbxn4/fdwoqNVvwktzblTJztnzsg0\na6YeZprNZt555x1Onz5d6Xutqnw0gKlTp7JmzRoaN27MqlWrvEzPzyXqRdHVoPF0QVUBFRTIFBYW\nBhQA6e/xalN0RVHzNnWH92mdoza3XbZMndtOmGDniSeshIRYOHJEJjdX7YjfeUciNdX9YX/uORtO\np8rMOF83eq3oCIKAw+Fgxw49CQnqdlgrPBpRX+uIdTpdtVzGLBaYN0/Hm2/qmTTJzurVNq9RgihC\ndLRqoH3nneovOp1w4IAqi92+XeSLL/Ts3StyxRXOMp8J9X2QnS3yxRc6uneXGTfOwQ03OP12i4oC\nGzaIPPFE5YyFygrxmTOqNNpqtRAR4aRvX5FOnXS8+moJ0dFWSkudHD3agAMHDOzdK/Lee6LXiKJ9\ne4V16yQsFoGXXrIxYUJgPrWaraP2Oj77TOKJJwzcfrs6/63KElNrUJxOZ6UHeRrMZpVL7XlNfO2c\nfBVigwESEpwkJbllyWaz6jexa5eOHTt0fPCBgT171DUYjQpjx5Zgt9v5888/SUtL49NPP+Wyyy5j\n8ODBLvcwDVXlo2VmZrJ161ays7NJSUnh8ccf56uvvqr6ItcB6lXRFUURm81WFt1jp7CwYY2UZBpq\nW3RBy0lTkCR1q6uq28L58kvVajAmRmbTplKiorRTdQPR0SY6dhS45RYH4GD1aokJEwwsXWpj+3aR\nl19Wu7wrrtCYEqqyrEcP+ZzY+ZV32tq7N4SbbrJXuK7lfXetVmsFPwVfLmMpKSKPP26ge3eZn36y\nEBUV2DWXJOjcWSEmxsGIEepBlCAYOHDAxMyZBp580l0QQ0MVrrxS4cQJdebYtavscyu+Z49AWBhV\ndpW+oBViUdSh16t5eNo1CQ9XyM+30769qhZr395Mx45WbrnFfV0KCwWWLNHz0ktqwerQQWbOHD0L\nFqjjpK5dZS8WRfn1l5aq44XjxwUmTdJz8KDIRx9ZvcQuvlCeptagQYOAdiyqOKLyxw6kEGszYkmC\n2FiJuDhVcZmeruff/w7j2DGRFStU+kdYWBivvPIKd9xxBz///DP5+fkcLWdwEkg+WkZGBiNGjKBJ\nkyaMHDmSadOmVfl66wr1ouhqbxBZll2n1M2bh1FUJNW44HqiNuTv0FCFEyeKMJkoK1g6pk9XTWc8\n57ayrPOb/XXZZQp9+sjccYeTO+5QuzyHQ/UD0LwTVq82cOCAqgxT5b1O4uNlYmL8eycEAu3DqG3V\nZVlk1y6R2Fjfjk+VeQh4FmKbzUReXgP++U89Bw5IvPGGd9hloPCU75482YAPPjCycqWOmBiZDz6w\nctNN6vXKzRXYvl2lr733no7//legY0elbEasMic6d1b4/nvv0UJN4KlG07rHBg2MOByhrlP48u5r\np07JvPBCBD/9JLJmTRFDhyplXbTAkSMCe/cK7NunqgIXLFBZFK1be7Mo9uwRWbNGZVo89JCDDz+s\nOoU3UJqaL5jN/uPXK4OvQqytxel0Ulzs5MUXQ/jsMyNz5vzN0KEqBS0nJ4fIyEj27NlDbm4uJpOJ\nTp060alTJ6/HDyQfLTMzk3vuucf1dWRkJHl5ebSvSex3NVEviq6iKBQXF2O328vEBOE0bSoETEj3\nh9o4GmnFICSkEbIcSkmJyIwZIt99p+Pxx0u45x4rguDEahUqVRyB72RfnQ66dlXo2tXJvfc6ATsW\ni+qdkJMjkpYmsWSJnj/+EOjWTfbqiP1Jdj2hGdPIsuw66AG1eF1xhRLwaMNXIbZYFBYvNrJvn46b\nby5h6dIijEYoKQmcQ+x2WbOzeXNDPvjAyK5dEnff7SAlpeIBY2ysQmysgwcfVL8uLYW9e9WxREaG\nRHKynkOHVO5w69ZqhlhsrHrTqu59W1OjaZxgo9FI48YSxcUATq/RhKLAJ59ITJ2qL3PyKsJkcmKx\naLaPIk2bSgwcKDF4sPu62GzqaGXfPpF9+0RmzNDx66/qH/Wrryx061Z5p+7Z3VZGU6sMxcU1K7r+\nIIoiOTmqTWe3bjJpaWZCQqyIoto8ffbZZ6SkpHDq1CkSEhJ49tlnmTFjRo2oY1q37Ynz5VpWL4qu\nIAgYjUZCQkIoLi5GEIRqKdKqeuzqQOscbDZb2QGDyEsvGdm2TWLUKAc5OeobyeFwlHkEKJjN5koT\nF1QT86rXERICCQmylwvW2bOqUiwnR+TrryVmzdJTWCgQGyu7DG/i4mSuvFIVKFR26g/+49YDxcaN\nIlOmGDh8WJ1fTpsmAN4G6JVxiAVBtYE8eNDGxx83YNWqxrRrp/DAAw4++SRwE3aTqeK1On5coEMH\nEw8+6GDLFon58/UcOVLR8KdjR6VStzKrVfXIdTqdrt2LLynwH38ITJyoGvF88omtzLHNPcj21RFr\nhViSJDp2lIiOljhxwsjp0zoiIxVuvdVRZcH17G5rE/ZZly5jVqsapfThhzrmzrVyww0lZUwjtfv+\n+uuv2bt3L++99x5xcXHs2LGDnJwcQn047gSSj5aUlERubi5DhgwB4NSpU7Rr165OXktVqBdFF8Bo\nNOJwOFx3L5NJnRnWNisq0Lmup7rNk2974IDIgQMiffs6ad3axv79Vrp3lwgPD/XqpH1lkGmHUTqd\nntLSahJUyxAeDgMGyAwY4C4uJ0+qXrg5OSIffqhj4kQRQVDo1ctJt24WevWS6NOnAeHhFdvhmhbd\nP/8UeOopPbt3i8yda0OSYPFid3cfCIfYanWQmmpk5cpQcnLCueMOO+vXW+jcuQYXxgfS00UGD3Yy\nZYpb9KHdtLZvF0lJkXj5ZT0nT6oR7J6sifbtFQRBpYEVFSkYDCav7tFT0ux0wptv6nj1VT3jx9uZ\nNMk3Dawq1sTu3TBxoomwMJmvvz7Nl1+asFpFHA6HTyZJoCKMQFFSUjed7u7dAv/+t5E2bWR++qmY\nhg3NKIrq7Hf27FmefPJJJEkiJSXF1dUOGjSIQYMG+Xy8QPLRkpKSmDx5Mvfeey8pKSnExMTU/oUE\niHpTdMHbU1frdgsLVbPr2j6mP3iq2zQLyD17RJ58Us/p0wLJyVY6dLCRlSWTlWXknXca88cfqvm3\nKhtW/7ddO8Gvekyns2E2mzh79qyXYKE6FC1PXHYZDBmiKcUcOBxO/vtfKzt26Ni3z0Ryso6HHxZp\n3Fj1ltDGEj17ymRnS4waZQv4uWw2WLRIx4IFeh55xM6776rdaGqq6JMypsFz7nfypJ7ly2HFCiOX\nXy7zwAN23n33DEajen2KikSfHXF18f33EkOGeM9zfd20zpyhLCVY5MsvJZ5/Xqf9l7AAACAASURB\nVN09dOtmIzY2FJ1O4tgxEc37Fdz+C3v2qDSwsDBITbUQHV29TlFlkEi8+moIy5bpmDXLxj33OFAU\nI59+KmEwuBkIntxqQRDKDhqFOomyh9p3unY7zJ2r46239Lz0kpVbbikpc3tTnfI2b97MzJkzeeaZ\nZxg+fHi1/qZV5aMlJibSr18/4uPjadKkCStXrqzx66guBKW2x/MXCbTkgYKCAho3bowgCHTubGDd\nOnu139ieOHv2rN+Za/mctIICPTNnSl7+tg6HOoxVKWK6ssfERXPKzlb/lZQI9OollynV1IOw5s3V\n5/nrL+jTJ4S8PLPrpNcd9VLzgqMoboJ++VGCLMN//6vKmj3XqSgCI0Y4uPpqdZ1du/pPm9i0SR0l\ntG8v89prdtq2df8dfvhBZO5cPV9/bfX5u7KsjiKWLZP46SeJW2+18u9/K/ToUfE1eN6ganpdFAU6\ndAjh+++t1WIuaFv1kycVDhwIY9cuPcnJajfcpIni6oRXrVILcWSkwsyZNu69t6IaLBCkp4s8+qiB\n6GiZefPsXv4Tzzyj57LLFCZNcriui+a9oY1ravN+KY+YmBC+/dZKmzbV/3zl5gr85z8GmjaFhQvN\nNGmiCnBMJhOlpaVMnz6dgoIClixZQmRNsqQuYtSbTre8QEIQBBo1UgIyGqnqccvfl8rPbRXFwMKF\nKt/WPbe1YLP5lsaGh8M118heAocTJyAnRyI7WyQ5Wcf27QbCwtROs0MHhZMnRYqLRcLD/c/8PLmy\nWifsiyvrz+PWE6IInTopdOrkdPnIbtsmMnSokQEDZHJyRN59VyX6x8S4Z8O9esmEh8Ozz+rJyRF5\n7TU7N9xQkQ3gz2XsxAlYsULHu+/qiIhwcu+9pbz9NjRq5PutGohwIRAOcXWpYuW36m3aGGnbVmDo\nUAf9+sk895yelSut7NghMn++vqzzhVOn1HikP/8UXcyJFi2qfr7iYpg5U89nn/mX8Hoq0rTXpcY1\n4foba4XY13WpbiGuSafrdMLChTrmz9fz3HM2Ro4swW63YTSqTUlGRgbPPPMMEyZM4O677z5vh1vn\nE/Wm6GrwLJLl/Vhr+3haZ6id+FbFt62ONLZ5c7jhBqerQCmKajqdnS3y88/qB7Z9exOtWyteHXHX\nrgIGg3fBqYwrqx1EAdWmCO3eLfLgg46yf+p/M5th1y61C05JkRgzxt32/vvfdsxmVWXWpo23k5gn\nT1eW4ccf1SK+aZPETTdZeeutAhITpQoHeYHAXyGu7Lp8+20ogwY5AmKqVOWXoBneGI2wfr2O334T\n+OQTKzfc4OTYMbfPxFtvqTdXo1HBMyIpNlb2CgpNTVUlvP36yWRmWvz6bKjiCLfnrc1mq3DTr+y6\nVLcQFxdTpeDCE//9r8DDDxsICYEffighMrIEWVapiDabjeeee45ff/2Vzz77jCuvvDLwB77EUG+K\nrvaG0O7mkiSVdbr+jcwDfVwtGsXf3DZQvm31nlftutq3V7m5y5fr+PPPUg4cEMjOVjvi5ctVSWvn\nzt7z4Q4dhApcWbvd7io02uuyWq2uQ5dA3MVyckSuuca7PQ0NhT59ZGw2eP99HYMHO5k+3c7ff6sZ\nap9+qtKhrFZvxoTNBidPqsY9776rw2SC0aOtzJlTQKNGKo2uttfQ+3pWziH+/nsd48cXc/aspUKx\n0Tpiz3FMVX4JW7ZIxMeHMHy4k+xsC2VRcFx5pcKVVzpd/GHVKtRdiBcu1LN9uyqvbdtWYcsWtUC+\n/76Vf/6zcv6w1QoGg0xxcbGXBLo218VfIQYddrt/rwdPyDIkJ+t45RU9Tz9t4777SnA41O5Wr9ez\na9cupkyZwujRo3nttdfq9O9+MaLezHS1DqaoqMg1n/zPf3T06SMzenTNKU7FxcWuTDLN3/b55yW+\n+cZ7bqsoiisq51wgMtLEb7+VVugsiovV0/XsbPfs9e+/BdfhV1ycykho2lRVG4WEhLhuJJ4fLO01\neo4lync3PXuGsGqVlS5d3G+Z48cFnnlGT3q6yKuv2hk2zPes8vhxocyDWP3nKW2+4QYHDzxQQteu\nFlq0CKmUs3wu8PffcNVV6vUNCVG8VFJOp9PlDavdzNWoe99b8CNHBGJiQpBlgdRUC717V/+9J8uq\n1+1zz6mjpJ49ZQ4eFIiMVLy64Z49ZVeMjaIojByp5+abSxgxQqjS7a26KF+Iz5yR6dWrGXl5+X6p\njqC6oz3yiAGbDd58s5QrrjAD6i7L6XQyd+5c0tPTeeutt6pF2XrggQf4+uuvueyyy9izZ4/Pn7lQ\n3gpVod51up7jAHenW314zm1VW7sG1Zrb1jW0cMryRbdBA+jXT6ZfP29K2PbtIllZAsuWCezYEY7R\nGO7qhtXZKzRq5N9drDwntLhYx/HjJjp1kgEBu12lPc2dq+eBBxwsXmyplD50+eUKw4Y5GTZM7da2\nbhUZOjSEZcuKycoSmDs3lD17wrn8cre0OT5eFSmc6/DDH36Q6N1bk1B7d37a+8DhcKDX6128avDm\nEIPE8uUGXn5ZT48eMk2bUqOCe/y4wGOP6fn1V9GraDud6vZcM/xZv17Pnj2qFLxnTyddu1rYvFnH\n7bebMBjq3gypfEdcWKjOwENCQnyObERRYuVKE7NnG3nsMTsPP2zG4bCi16sN0YEDB5g0aRK33nor\n3333XbXZFKNHj2b8+PHce++9Pr9/Ib0VqkK9KboaajvT9ZzbGo1GjMYQvvxSYtYsY63ntrVBSIh3\nDHtlaNZMZsAAM1df7ShjTTj44w+1C87JcXs3XHml4irC8fEy3boJhIRUPJByOBzk5Ah062anpOQs\nmZkhTJ3akBYtFDZsKKFjx+qnT4SEOOje3c5NN5m54w4TkmTH4bB7SZs//ljP/v2il7Q5Lk72Sm2u\nC/iS/pb3IwgPD/fiVXt2frt2OZk82YROB198cYaDB/WsXRvi2pIHAkWBDz6QeP55Aw8+6KiQwitJ\nmmez+2DTblfYvdtOTo7Avn0hFBWJ3H9/CK++6p1V161b3XtyaPNcX6OJP/6QGTcuhIIC+OyzAqKj\n7djt8PXXX1NaWsrvv/9OZmYmb7/9do35sf379+f333/3+/0L6a1QFep10W3UCA4dCuz3/PFtn3hC\nT36+wssvn+Gaa+xlPyeel+7WE1qnW9Vr8DxR97whtGmj0KaNkxEj3N4Naiy9SHa2xIcfqn4EV13l\nSVuT6dhRwGiU2LdPR5s2IpMnR7Jtm8js2WZuuMGC0+ng7FnFixVQmYRXk+/abAqK4m21WVHajF9p\nc9eu3oq6QKTNvq8ZfP+9yOOPu13Fqjoo016bzSby2muhLFumY/p0G/fdZ0NRRH75BUTRSVFRUUAH\nUocOCYwfb+DsWVi/vmoJL2hJHaXExEjExoYgik727VPn6Y0aKa4Z8YoVbk8Oz8O6Ll38U/0Cga/4\ndUWB1at1PPusgTFj7Iwfb8bpdGAwGJEkCbPZzNq1a9m/fz/FxcWMHj2aN998k9jY2JovxA8upLdC\nVag3Rde3p65CYWHVn8TyaRKnT+t44gkd33wjMW2ag1GjrNhsDhRFNa3xVJ/5Eiuci0JsMlX0X/CE\npzFNIOR3dyy9k/vvVwucJxMhNVXilVfUSKBu3dS4dYA773SQk2OhQQMRUD91gUp4NbWd6tMahqJU\nHdVSmbR5+3aRb76ReOEFPX//Lbi6O60Qt2zpO3vNE55Usaok0J746SeRceMMxMTIpKdreW3qmEEQ\nJEJCJMLDwysd2YDEW2+ZmDfPyOTJqkF5VUcCnod55fnjFotqZdmjh0KPHk5Gj3Z7cuzbJ7p2EO+8\no1L9rrpK9irE1TFHKh+/fuIEjBtn4I8/RL74opTo6BIURXHdVN977z3WrFnD4sWLiY2NpaioiB07\ndtC6devAnrCauJDeClWh3hRdDZ6eulUFAsqyjNlsdr2B/fFtrVbfc1ste8tfsamNaqw8TCbf4wVP\nHb2nMU1NoDER+vRxF7hvvpH45z/dLdEPP0h0725yuZjFx8vExkKTJr4lvNqsT7s2muk5OH3ydAOB\nL5XYqVO4isqKFToee0y92WojCW1O7GGpCrhHC5pBUVWn/n//DdOn6/nuO4nXX9dCQL3hdKo3tco4\nxLt3K4wfb8JkUvjyy1O0b69gs0nIsn8f4qrMxS0WwWf3GhKC6xpoMJvVHcT27SI//SSxeLGew4cF\nunTxpq516uTb8MdTAvzpp6pv7/3323nvvWJk2YIkGTAajRw7dowJEybQs2dPNm3ahLFsgQ0bNnRZ\nL54LXEhvhapQb4qu/07XV8Cf99w2PDyCdetEnn1WT+fO3nNbQajcPV+vrxj9rRViX3JMrehUtxCX\nHy+U97itrY6+PE6ehOnTDWzaJPL++1ZGjHCWGeKoJ/SaQm3uXDXT7LLLFC/aWvfuMiEhgivGxWg0\notPpXJ2f3W7FbjdSVFTkV7BQHURGekubtXVqbIn589V1Nm6seI0lPvtMYurUEsxms4t94u/5162T\nmDJFz403qjQwf2G0ntaO5WGzCbz2WgjvvKPj+edtZbuMsEo5xKKo+ik4HA7CwsL8MmQqi+spj9BQ\nSEqSvbx2i4pULvb27WrSxdy5eo4dE+je3dtnIjpaoaREwGKBe+4xsG+fyJo1pXTpUuIy0REEgY8+\n+ohly5bxxhtv0KdPn/PaaV5Ib4WqUG+KLrhnbf46XW3mqY0FyvNtFy2y0q+f+n2nU6q2Rl17foOh\nomqsvArIc9utfdAre1Nq9o7lk23rghPsCacTli3T8dJLev71Lwfbt1to2NDzNbozzW691TvBQStw\nH32kHYA56NVLJDFRID5eISZGcaVBNGwoIAgSJpPJb7HxR0MKBJ7rvOUWdZ2e0mbV7Ef18n3qqTD6\n9TMRF6cW5G7dvOedx44JTJ6sMgo++MBG376VswMcDgG9vuJcNiNDTeFt314mLc3CFVdoP+OfK2uz\n2Vwpy6DaRfq7NtUpur7QsCH07St7vb7CQnWUs2OHOsqZPVv9rGjpxhMn2lmypAgoRZLUm/+pU6eY\nPHkyLVu2ZNOmTT6dwGqLkSNH8uOPP5Kfn09UVBQzZ850iX4utLdCVag3PF0Am82G3W6npKSEiIgI\nfvsNhg41cOCAzWtuazKZOH1ax8yZ3nNbu730nPNtAa+tt9bhQOUJvP/6l4Fbb7UzdGjROVtjZqbI\npEkGwsMVXn/d5sXHDRRah282yxw82ICdO/Vlh3Uix48L9OypdpiNGinMnq2nsLDUa+4ayLUJRMhR\nGbSRzLp1elatasBLL9ldB4o5OaJr3hkbK7Nrl0hOjsSTT9p5+ml7QIdPb76p4+BBgddfV4tAcTHM\nmqXn0091vPaajdtuq9p3wXNspP2tfV0bTze6Dh0asWOHmWbNzs25AqhmPw8+aCQlRSoLfz2N0+nE\nZDIhSRJffvkl8+bN4+WXX2bgwIEXzRz1YkK96nShYjhlYSEug3OVkK1nwQKJefMqzm2rOjypyzWW\n72y0bbfW8ZVP4NXrRf7+W03eres15ufDjBkGUlJEXnzRzp13Vt+MpfwhVLNmBiIjBfr0cdsknjmD\n61T9//5Ph9Mp0LatqYyT63Q5mjVr5vva+Jqdl2dMVLVGT3bH1q1h3Hij7Dp4euAB94HiJ59IPPqo\nu8IuXarjp59ELzP4tm19H9R5jhc0CW/fvjJZWaV+Jbyea/RnLl7Z+0ZNbhZwOksoKlLq9CalYcMG\n1Wxn2DAnR48WI4qlCIIa7/P333/zxBNPYDKZ2LBhg8teMYiKqFdFV9uia7NVvd7C2bMGQPQ5t23V\nylpmd1f9CPG6hi8/Wc/tpcFgxGIRsNttFeZ9NV2306lKd194Qc+dd6qjhJp8VspH+vj7gDduDNdd\nJ3PddWr00JAhRlJTra5OeMECVQLbpIn3fLhHDwgLC1zI4YueVZ4GJooSGzZITJni7XJmtcL8+TqS\nk/XMm2fjoYcciKL3DWPtWolnntFjsQhebIm4ONW8xumEoiLVZ+DHH9UU3kCiiGpiLq69b3Q6PRYL\nNG3aAElS/N6kalKIi4pg6lQDqakib71lJSmpxBXNLkkSqampzJ49m+nTpzNs2LBgd1sF6lXR1aAo\nCoWFheh0OkJDISfHxAsv6CkowDW3tVgsOByB0asuBLRsLVCLRESEHkWRCAkRXIVG+35NPkw5OSKT\nJunLTFkC44b6W6PD4agycqg8RFGdsWpeBBoLwHPump0t8umnenJzRdq3V8rYEppAoqLRj+duwdMv\nQFurtpMRRZE9ewRCQ6FDB/frTktTaWDazPXKK93f87xhaPjrL9UZLidHNa/ZscNASIjichQbM8ZO\nVpb3TNwX6iI6x+FQr6leLwC+gyC1sYTGJgmEQ/zjjyKPPGLg2mtVg3GdzgzoaNiwIcXFxUybNo2S\nkhK++eYbr7TdQFBVTHppaSljxoxh9+7dhIeHM3nyZIYPH16t57gYUa9muqWlpRQVFbliUiRJR1iY\nKsUZNcrB3LmlCII6t60tvepcQRMPlDdVmT5dT3i4whNPOCr8fPlU1co+TKdPqxaBX32lY/ZsGyNH\n1myU4LlNNxqN1S4Sx44JDBhg5ODBSsjHZbBa1TwzTVGXkyPy55/qqbo2koiPr7jd1yhWmhm6LMuu\nXcKiRWGcOqVj7lw7RUUCzz1n4KuvJF57zbdtYiBQFNVRrVs39T1XUmKu8nc02iLgmovWBEVFEB1t\n4q+/qlDQuNZauQ+xxSIxe3Yo69frWbTIxjXXlLiolTqdjp9//plp06bx2GOPceedd9aou42NjWXB\nggWumPRt27Z5Fe7k5GR2797N0qVLOXz4MAMHDuTgwYOXfCddrzpdh0Pl05aUlJSxGNTuacgQB7t3\nQ9u2YXTubCIxUSEhQSYxUa5gOXih4FnIfPEwQ0M1nq43fI0lfHnJCoLExx+H8tJLodx2mzrLbty4\n+i/cM323NrsEUVRwOgN7fqOxIs+0sNAdOfTFFxLTpukpLdW2+066dy+lWzcrrVp5d+DatUlNNTBh\nQgmffqrw7LPhXHedjW3bimnaVERRJASh+jNQQYB27RSeesruk73gCc+/d12cJWjx64Gv1T+H+Oef\nYezYUHr1srFx40kaNVKw2wXWrl3LVVddxeeff86RI0f44osvuPzyy2u03kBi0iMiIigqKsJut1NQ\nUFDntMgLhXpVdLWcNJ1O55Jgnjhhxul0otfrcTiM7N6tJztbZN061QfX4RCIj3eSmOiWvp7vM4BA\nCpnJVDHY0Bd8fZi2b1dNVADWrCkkJsaKoiiUlOgCHkt4jhLqQgItimpnWFNERMC118pce627EB87\nBpmZMpmZ8M47JnbuDKdhQ8VL1tyzJzidImlpesLDG3LokMDy5Rb69LHjcMhYrVXPh6uCw1FRIuuJ\nqmTGNYHVKmA01m7TarUKzJoVwscf65g3z8r115ux2RSMRiM2m43U1FTmzJnDyZMn6dmzJy+++CIL\nFy6s0SFdIDHpI0eOZP369TRr1gyHw0FaWlqtXt/FgnpTdGVZ5uGHH+avv/6iV69eNGjQgD179vDy\nyy8TGhpaFlppJzZWR3y8xKOPqh+k48clMjNFsrLcRjCtW6sf1MRE9US9c+fK019rs+ZAC1lISNXe\nC+Vx5oxKVfriCx0zZ9oYNcqJKBoBY4Vu2J+1I+Bl/FJXB47+kiNqCqfTSXh4Kdddp3DTTaFIkgNZ\ndpCX5+blrlunBmNaLOr6s7NFPvnESlwcFUQulR3UVSXk0CLYy6M6MuPqorYc3Zwckf/8R5U1//xz\nMWFhZmRZpGHDhjgcDhYuXEhJSQlbt26lWbNm7Nixg/37959T79vFixej0+k4fvw4e/bs4cYbb+Tw\n4cOXvN9uvSm6oiiyfPly0tLSGD9+PEeOHGHAgAHcddddREdHk5CQQO/evV2GF9phQni4yJAhEjfc\noH6YnE6R3FyRrCyJn3+WWLBAz19/ufPLEhNlEhLc+WU1QWXGNP6gyoADe7PJMqxaJTFjhoHhwx3k\n5JTSpIn3z1Q1lvDM1dIEH3U5A5c8kiNqg8oKmShCdLRCdLSTu+5y8uuvAmPGGMjIUG8mN97oZMIE\nA7/9phroeDIm2rcXKmy9K1ONeavHKhZdp9PpogHWtaAFal50bTaYM0fPe+/pePVVK8OGmV3xOXq9\nntzcXNfc9ttvv3Wtu3///vTv37/G6w0kJn3Lli08+OCDhIaGkpSUxBVXXMGvv/560fji1hT1puiC\nWkiKi4u5//77eeSRR9Dr9TidTg4cOEBaWhpvv/02ubm5hISEEBsbS0JCAklJSURERHjNPzt0kOjU\nSeL++9WO5u+/1U4pK0tk2TIdY8YYaNhQcRmxJCbK9OghB/Smr64xjQZNkVYVdu8WeOwxAw4HrF1r\npVevwCqb51hCk0k7nU5XEdMOfLRCUz6Drbqoi043UL8Emw3mzdOxdKmep56ys2GD1WvnUlSkqq5y\nckS+/lpi5kw9Z89WDApt0cJ/woInm8RsjgBk7HYHoihit9t9RufUJWoyXtizR40+b9lSZtu2EsLD\n3fE5siwzf/58Nm7cyPLly+nUqVOdrjeQmPTrrruO9evXM3jwYH7//XcKCgou+YIL9azoAgwZMsRl\ncgEqnapz58507tyZBx98EEVRKC4uJjs7m7S0NFavXs3JkyeJiooiPj6epKQkunTpUmbdp3IcdTq4\n+mqJAQO0baVEXp5ahLOyRD7+2MCvv6oBjZ6F2PM0XeNgauqdyjT+vlCVtePff8Ps2XrWrtUxY4aN\n++5zVtvqsLzEuGHDhhUKWV0JFWrT6QYamwOqym7cOANRUQrbtlmIiqpYmBo2hP79Zfr3r2gEn50t\n8c476o3WZHLPhzVTmPBwtRBrRi6yLKMoIpIkVzD60a5dXZkgeaI6na7DoSZTLF2q54UXbIwYUeLV\n3R48eJBJkyYxZMgQNmzYcM7UmVXFpN91113k5uYSHx9PZGQkCxYsOCfrON+oV5SxmkKWZQ4fPkxa\nWhrp6ens2rULRVHo3r078fHx9O7dm+bNm3sVnPKJuxaLyK5d6nw4O1skM1PEalUP6WJjbfToYSEp\nSSAysmZzvA0bRBYt0vPll95kfkWBjz6SmD5dz//7fzIzZ9qqVD35gibf9ZSdBoKqqEf+5p9mM0RF\nmTh9unqDao0GptPpMJlMfq9lUZFKjfv8c4lXXrFz++01o4G5X6caPaPR1rKzRXbvFomK8jaC79pV\nZtIkPb16WbnzzmKX0Y+/61OTgzpfSE1VTX3Wr/cdaa9h/341+jwiAhYvLqVpU3d8DsCyZctYu3Yt\nS5YsoXv37jVeTxD+ESy6PqDNCXfu3ElaWhoZGRkcPnyYpk2bkpiYSGJiIj179sRgMLjMbKCiSOHP\nP2XS0pxs325k504jO3eqH1J3N+wkJsa3dV55bN0qMmuWng0b3B+qvXvVUUJpKcybZ/fynK3ua63L\nw53yeVpOp9Nr/qnT6XA4JK64IowzZwIrur68CPzh229FHnvMwD/+IfPii7YK8+y6gmYErzquuX0b\nzGaBBg1kXn/dRkKCQnS0t8F6+RuV5sRWG6Ofr7+WeP99if/7P5vP7zudsHixjjfe0DN9uo1Ro8zY\nbG662pEjRxg/fjyJiYnMmDHDy7QpiLpFsOgGCEVROHHiBOnp6aSnp5OdnU1paSlXXXWVqxtu06YN\niqJQVFTk2vJqWnl1eynyyy8imZnujvjoUdV827MQt2hR8fmzs1UF2bZtVs6ehRdf1LNmjY5p0+yM\nHu2oEbvCc75c1+m75eGpiFK7aidt2zbn+PF8r464fJGpjhDjxAl44gkDO3eKLFxo86KTnWtoI4/C\nQgfXXBNJZKRChw4K2dkiBQXuJGRtPOF2GHP/flU3Ku36+Hr9n34qsW6dxIoVFYtuXp4qSZYkWLrU\nQvPmJQCuncLq1at57733mD9/PklJSefmAgXhQrDo1gIOh4N9+/a5uuHc3FwKCws5deoUc+bMYciQ\nITRs2LDSD1Fhoarnz8xUi3F2tkhoqFLGklD/9ewpc+iQwL33GnnySTvPPqtn8GCZWbNsREZWf921\nke/WFZxOhYiIUAoKCv1uu7WYeC2J2d+ho6LAihUqW+Peex1MnWqv80ywylB+5HHPPUZuvdXJ7ber\n89z8fFXI4dkRS5I3f7hXL5lGjcq/Lu8bVWUeCqtWSfzwg8SyZe6iK8vw9ts6Xn5Zz5NP2njwwVJs\nNouruz158iSTJk2iXbt2vPTSS5iqedGqkvGCyscdO3YsxcXFNG/enM2bN1fv4tZDBItuHeG3336j\nf//+DBgwgFtuuYVffvmFjIwMCgoKaNu2rYuy1qlTJwRB8PoQeTMBJA4dch/SZWaKHDggYja7u5t3\n3rFeMPluXUFRoEGDUIqLza7X4ek9rDFJwLflpbbugwcFJkwwUFQES5bY6N79/L2dFUVxJQV73rzu\nusvA3Xc7faZKqL8Hf/zh9pfIyRHZuVPk8svdRj9xcZoRvPfzlaeuOZ1OBEFg1aoG7NmjZ+FCa9lo\nS/VMMJvhzTctREW5bU1FUeTzzz9n0aJFvPLKK1xzzTXnRMarnYvMmzePQYMGkZ+fX21/hvqIesde\nuFBo3bo169evrxCyJ8syeXl5pKWlsWrVKvbs2YMoivTo0cNFWWvWrBmyLLu4sS1aSNxyi8Ttt6uF\nxmoVWb9exwMPGBk+3MHMmXqeftpAfLzKGU5M1Dxq/a+vruS7dQVBAEFQkGVcoxHNIc5msyFJkiuB\nQCswnrQsWZZ4880wli5Vu/+xY53nRMDiD5VF5/gTR2gQBGjdWqF1aye33eY2gt+/312IV65UGTGd\nOslehbhTJwW9viK/2m4XMRplSkstrFxp4OWXwxk7tpRHHy1Flu0Igp7Q0FDOnDnDlClTiIiIYMOG\nDYSHh9fo9Qci483OzqZ79+4MGjQIIFhwy3DJFN1AtjJTp05lzZo1NG7cGI8wJQAAFkRJREFUmFWr\nVp1XTp8oij5TTUVRJDo6mujoaO69914URcFsNrN9+3bS0tKYOnUqR48epUWLFiQkJJCYmEj37t0R\nBMGryAwbJnH6tLvb++svdyf82mtqFM2VV3of0nXurCCKdSvfrUtotDH1f/2PPDw9ZBVFIStLYPx4\nI82bO0lJKeDKK+2YzXXLBvAHbZ1Op5PQ0FCfB3p2u4BOV72OW5KgSxeFLl20JGQ7paVqfE52tsjm\nzWp8zokT7gBObTzRsqWAw6Hj7FmRe+9tysmTsH59Ce3amV1OawMHDkSSJP766y/+9a9/8dBDD9Gg\nQYMaX4dAZLwpKSkIgkD//v1p1KgR48aN86Jz/q/ikim6EydO5K233nJtZUaOHOl158zMzGTr1q1k\nZ2eTkpLC448/zldffXUBV+wbWqfpqehRFIUjR46Qnp7Ot99+y4svvojNZqNr166ubrhly5YuBzKz\n2UyDBiKDBkkMHaqOJmRZZP9+dS6clSXy5ps6jhwR6NrVTny8RJ8+AklJSllq7cUBUQSHQ0FRApMZ\nFxfDCy8Y+OQTHXPm2LjjDieCEOrX1rE2bIDy8LRf1OtV425/j6UFU9YWJlPFHLOCAvd8+KOPJCZP\nVlkGJ0+qa5k2zcbEiaU4HKXo9eoIqaioiLi4OOx2O7fccotL/fXNN9/QuXPn2i/UDywWCzt37mTj\nxo2YzWYGDx7M3r17qz07rm+4JIpuIFuZjIwMRowYQZMmTRg5ciTTpk27IGutCQRBICoqiqioKP75\nz38CavTQ7t27SU9P55VXXiEvL49GjRoRFxdHUlIScXFxGAwGL0lq27YS0dE6Ro1ShR1nz4rk5oaR\nk6NjxQqJCRNEQkIUl7lPYqJ6SHcOIqwCgiRBcbGZkBDZb9eo4fvvRSZONNCvn5rA4LlT9VTTaVQn\nf2qxmngPe9LVqlonVB5MWVs0aeLt63viBIwYYeTkSYlevZxMnHjW1YVLksTWrVuZMWMGTz75JLff\nfnuddf+ByHj79OmD1WqlRRkdJz4+ni1btvzPd7uXRNENZCuTmZnJPffc4/o6MjKSvLw8l9fCpQaD\nwUB8fDzx8fGMGzcORVE4ffo0GRkZpKWlsXjxYs6ePevyldC06enp6cTFxSGKIg0bKvTta2bAAPch\n3W+/uQ/pPvtMzy+/iHTsqJCY6HSNJjp0OLd2l9rcVhBCEAQdDRr45wafPAlPPWUgM1Nk8WKbl4l4\nZfCk63mqxdzRNlUbedfUXNzhgPNBCPn8c7XTveceB99+W4wsu+NzSktLef755zl27Bjr16+neW3M\nQnwgEBlv7969mTlzJmazGYvFwo4dO+jbt2+druNSxCVRdAOBdrLriYtldlkXEASBZs2aceONN7pu\nNpqvxM8//8wzzzxDWloaCQkJJCQkuCTNERERyLLs2nI3by4xfLjEbbeps2GrVWD3bpU3/N13Ei+8\noKe4WCAuTnYV4rg4uc4EBp5+CTqdgF5v9FngFQVWr5aYNs3AyJEOMjMthIXV7rkD9R7WOmAt+DGQ\n7tYT57LTBdWIfsoUlY/88ccWunVzx+fodDoyMzN5+umnGTt2LKNGjTpn/OuqZLxNmzZl9OjRLhnv\nrFmzajVHri+4JChjhYWFXHvttezYsQOA8ePHM3ToUK9Od9GiRTgcDh577DEA2rdvT15e3gVZ7/nG\nV199xdNPP82SJUvo1auXy1ciIyODkydP0rJlS9chXdeuXV0FpTzvU6OunTwpkJXltrzcsUOkRQu3\n8XtCgpMuXZRqdXO+/BJatgxlz56KDmiHDglMnGjg9GmBpUut9Ox5/t6i2tzcZrMhiqLrZl7e8rKy\nQnb11SEsWWIlNrbu1/3NNxITJui5/XYnzz5bCphd/GCbzcacOXPYs2cPycnJtGrVqs6fP4ja45Io\nuuDmBLZq1YqhQ4dW4ARmZmYyefJk1q1bR0pKCqtXr74oD9LOBbRuzZfIoTJfibi4OHr37k2LFi0q\n+Ep4FmFFUZV0qqeEKuA4fFigRw/ZoxDLXplinvAUD4SEhLgKVqtWJrZvd89nHQ5YtEjHvHl6Jk+2\nM26c45x2jOXhaS7uKcYo7y3hz3tY21klJYWwbJm1Rrlz/lBYCE8+aWDbNpHkZCvx8WZXfI5er2f3\n7t1MnjyZUaNGMWbMmEvec7Y+45Ipuj/++CNjxoxxbWUmTJjgtZUBePrpp1mzZg1NmjRh5cqVxMTE\n1MlzV0VXW7VqFa+++ioAXbp04fnnn6djx4518tx1jap8JRISEoiNjcVoNFZQ0nkWmaIit/GLKmmW\n0Ovd3bCa4utAFP37JbRpYyIjo5TmzWHHDoFHHzXStKnCwoU22rY9vyKH6kTnVGbyo9PpuPrqRqxc\naaFz57oZcaWmiowda2DoUCczZ5YiSaVIkoTJZMLhcDB//ny2bNlCcnIy0dHRtX6+IM4tLpmieyFR\nlfImLS2Nzp07ExERwQcffMDGjRtZsWLFBVxx9eDLV8JsNnPVVVe5lHSar4S/Tk8UJQ4fFl0jicxM\ngdxckehomcREN2PC0/ylXTsTGzZYWL5cx0cf6XjxxZoFZdYGnt1taGhojTtET7ZEXFw4q1adoU0b\ne628h4uK4Nln9aSkSCxdauXqq7272wMHDjBp0iSGDRvG5MmTL7jgJYjAECy6VaD8PHnChAkMGTLE\na57sifz8fHr16sUff/xxPpdZ5yjvK3HgwAEaNGhAXFwc8fHxJCQk0LBhQ5ds1/MASivKgmAiN9fg\nZXdZWCiUKelkXn5Zk806mDOnZj4SNYWnu1pdi0ZiYkL49lsrrVo5K3TDEJj38NatImPGGOjfX+bF\nF80YDKUuYyJFUXjrrbf48ssvWbp0KV27dq32GgMRG4HKHOrTpw+ffPIJt912W7WfZ+fOnYwdO5ai\noiKuuOIKHnvssQrUsv811Bv2wrlCIHQ1T7z99tvcdNNN52t55ww6nY4ePXrQo0cPxowZg6IoFBYW\nkpmZSVpaGsuXL/fylejZsye7du0iISGB6OjosgMoM126WOneXWLMGPchXXa2REaGu+PLyhKZOtXg\n4g537SpzLp0Fz3V0jkYZCzQSyXOGbrVKzJoVwuefSyxcaGPgQHOZ7aZ6Yzh8+DATJ06kb9++pKam\n1tisqCqxEajX6amnnmLo0KEVmEGBIiwsjBUrVtC+fXsOHjzIDTfcwK+//lqjx6ovCBbdOsTGjRtZ\nuXIlP//884VeSp1DEAQaNWrE9ddfz/XXXw+4fSXeffddbrvtNtq2bct3333nGkskJSURGRnpMkhX\nSfsi//iHxODBOp57Tj2kO3DAfUj33ns6fvtNoFs32UvE0bJl7bnD57K79YTD4VsG7C/2XCvC6ekw\nbpyJbt3spKaeoVEjJyUlDoqKimjZsiUffPABK1euZMGCBSQkJNR4fYGIjUBlBI0YMYKsrKyAHjcr\nK4uHHnqIzMxMHA4HSUlJfPLJJy7VW4cOHTAajfz222+0bdu2xuu/1BEsulUgEOUNwO7duxkzZgzf\nffcdjSpznqlHEEWRVq1a8eOPP/Lhhx9y0003eflKPP300xw7dowWLVq4eMPdu3dHkiQvJV2bNjra\nt5e4+261IJWUqHaXWVkia9ZIPP64AVH0PqTr1UumOpTPQPPU6gIOh9vEpyqohj46Zs82sXKljjfe\nsDJ0qBmbzYlOp+PQoUMMHz4cp9NJs2bNuOeeeyguLq7V+gLZvR09epR169axadMmsrKyAro5JSQk\ncPPNNzNt2jRKS0u55557vGTG27ZtQ5Kk/+mCC8GiWyUCUd788ccf3H777axatYoOHTpciGVeMBiN\nRn766SfXh7K6vhIJCQm0bt3axY/VttsJCRK9e7sP6f78062ke+45PXv3irRrpyrptELcqZN3QoP2\n/Bo/+Hx5B1dHkbZjh8B//mOkQweZtLQSGjQw43Ti8qA4ePAg7du35/HHH8fpdJKVlcX777/PP/7x\nj3P6GiZNmsScOXNczm+BjhdmzJhBfHw8JpOJRYsWuf770aNHefDBB1m5cuW5WvIlg+BBWgCoiq72\n0EMP8fnnn7vI6Hq9nszMzFo/7/k67DjfsNls7Nq1i4yMDNLT08nLyyMiIoL4+HgSExNdH1pf5u/a\n7NNmE9i7V/LyHS4oUJV0mstabKwdk6mkAj/4XKNZMxOHD5dWqqCz2+HVV/W8846OOXOs3HJLqVd8\nzunTp5kyZQqRkZG88sorNGzYsM7WF4jYqF27dq5Cm5+fT2hoKO+88w4333xzpY99/Phx+vfvT0hI\nCJmZmYSGhnL27FmuvfZapk2bdkm8P881gkX3IkZVVDVQDzsGDx5MaGgoo0eP5vbbb79Aq605yvtK\nZGVluXwltLFEx44dveafUJEFkJ+v5pVlZYmkp8OOHTqaNlVISlJcs+Fu3c7tIR1Ao0YmTp4s9fs8\ne/eq3W2LFgqLFlmIiHDH54iiyDfffMNrr73G7NmzGTx48DmZO1clNvLE6NGjuemmmwIqmDfffDN3\n3303hw4d4vjx47zxxhsMHTqU4cOHM2HChLp+GZckguOFixTn6rDjYkRlvhJpaWksW7aM3NxcjEYj\nvXr1ch3SNWrUyIsFEBIiMmCAyNVXO3j8cT0GQwj//a+7G37/fQOHDlU8pIuKqjuDH0XR/HQrfs/h\ngPnzdSxapGfmTBsjR5ZitVrQ69Xu9uzZszz11FMIgkBKSgqNGzeum0X5QFW+CTXBhx9+iNFo5K67\n7kKWZa6++mo+/vhjtm7dSkFBAe+99x4AH3zwwf900nCw071IsXHjRpYvX85HH30EQHJyMkePHuWF\nF15w/czRo0cZNWoUmzZt4oEHHgi4G7kUoQV+Zmdnk56eTkZGBidOnCAqKoqEhARiYmLYsmULd955\nJ61atUKWZZ+eCWaz+5BOHUtIKApeLmu9esnUdDfvdEJEhIniYu+U419/VaPPGzSAxYstREZ6x+ds\n3ryZ559/nmeeeYZbbrmlXpk1BeGNYKd7CaOmhx2XIgRBIDw8nIEDBzJw4EDA7Ssxf/58Zs2aRVxc\nHDk5OcTExLjGEldccUWFQ7r4eImkJC1vTeTIEXcRnjVLz+7d6iGdWoTVYnzVVRUP6Xyh/CGaLMOS\nJTpee03Ps8/auO8+NRxSklSDcbPZzPTp0ykoKOCbb74h8nwqRIK4IAh2uhcpzuVhR31CYWEhw4YN\n49VXX6V3795+fSU0pkSvXr18+kp4zocdDpG9e92S5qwskVOn3Id0CQky8fFOLrus4nqKi6FtWxOn\nTpVy6JDAmDEGFEWNPr/iCrPLCF0URdLT03nmmWeYMGECd999d7C7/R9BsOhexDhXhx3/S1AUhb/+\n+ss1kijvK5GUlETbtm2rPKQ7fVoNjczMVC0vc3JEGjdWXA5rCQlqem9pKcTEmJg1y87s2XqmTLHz\nn/+UYrOVuhKYrVYrL774Ir/++ivJyclceeWVF/gqBXE+ESy6FzECcVbTcC6KbiCUtaysLMaOHUtx\ncTHNmzdn8+bNdfb85wq+fCXCwsKIi4tzdcTh4eE+HcTcijKR//7X7SmRmSmRlydgNMKZMwLx8U7e\nestCq1alOJ1Ol8vazp07mTJlCqNHj+ahhx6qEY2tPrne/S8iWHSD8IuqKGuaL++8efMYNGgQ+fn5\nl2TMdnlfiYyMDC9ficTERGJiYlzm7w6HA6iYt2Y2i2zZIvHPfxrJzy/Eblcj2kNCQnA4HMydO5f0\n9HSSk5NrFSNV313v6juCRTcInwjEXS0rK4v58+ezatWqC7XMcwZZljl48CBpaWlkZmaye/duRFGk\nZ8+eXr4Smsuap3GNNis2GAyYTCb279/PxIkTue2225gwYUKtLBj/V13v6hOC7IUgfCIQfX5KSgqC\nINC/f38aNWrEuHHj6k3SqyiKdOzYkY4dO3LfffehKIpPX4nmzZu7umGHw8GJEycYOnQohYWFxMfH\nEx0dTX5+Pk888QQjRoyoteft/6rrXX1CsOgGUWNYLBZ27tzJxo0bMZvNDB48mL1792IymS700uoc\ngiD49ZXYvHkzTz75JHl5eQwYMIC0tDTatGlDUlISnTt3plmzZnz//fe8/PLLHDp06Lxdn/rsencp\nI1h06zGGDh1KRkYG/fr1Y/369dX63UDc1fr06YPVaqVFixYAxMfHs2XLlnrT7VYFQRCIiori4MGD\ndOvWjU2bNhEWFsauXbtYsWIFkyZN8uoyFUWpNS0s6HpXD6AEUW+RmpqqrF+/Xhk2bFiNfr9nz57K\njz/+qPz2229Kp06dlFOnTnl9Pz8/X0lISFBKSkqU06dPK9HR0UpRUVFdLP2SgsPhOK/PV9Xf5fDh\nw0qHDh2U9PT087quIAJDMDK0HiArK4sePXpgtVopKSmha9eu5ObmMnDgQBpUx3S2HDR9/qBBgxg7\ndqxLn6/R1po2bcro0aOJj4/n1ltvZdasWbV6vvLYsmULMTExREdHe9kEaigtLeW+++4jNjaWa665\nhnXr1tXZc1cH5zubrKq/y6xZsygoKGDMmDHExsaSmJh4XtcXROUIshfqCaZPn47FYqG0tJSoqCie\neuopADZv3szrr79e7fHCxYCqqFHJycns3r2bpUuXcvjwYQYOHMjBgweDyq4gLmoEZ7r1BP7Moy9V\nBOKyFhERQVFREXa7nYKCAkJDQ4MFN4iLHsHxQj1Bfn4+JSUlFBcXuyLFgUu2CPmjRnli5MiRrhib\nfv361Uu+cBD1D8GiW0/w8MMPM3v2bO6++27XaAGo185jixcvRqfTcfz4cTZt2sSNN96ILMsXellB\nBFEpgkW3HsDTPPrpp58mKyuLH374gQEDBnDHHXeQmppKVFQUGzZsuNBLDRgJCQns37/f9fW+ffvo\n3bu3189s2bKFf/3rX4SGhrpsHC/meO+qDgYBpk6dSrt27YiLi/N6/UHUI1xg9kQQQfhFVdSo5ORk\n5dFHH1WcTqeSl5endOjQ4QKtNDBor+f333/3+XoyMjKUvn37KqdPn1ZWr16t3HjjjRdopUGcSwQ7\n3SAuWlRFjbrrrruQJIn4+HgeeeQRFixYUGfP/cADD9C8eXO6devm92eq05V6Hgy2bt3adTDoiYyM\nDEaMGEGTJk0YOXIkv/zyS+1fSBAXHy501Q8iiIsRW7ZsUbZv36507drV5/er25Vu2LBBueuuu1xf\nv/nmm8q0adO8fmbUqFFKSkqK6+ukpCTl4MGDtXgVQVyMCHa6QQThA/379680GPJcdKWKj8ilS5V9\nEoR/BItuEEHUAJmZmXTu3Nn1dWRkJHl5eX5/PpCDwaSkJHJzc11fnzp1inbt2tXhqoO4GBAsukEE\nUQNUtyuNiIgAVAbD77//zoYNG0hKSvL6maSkJNauXcvp06dZvXo1MTExdb/wIC44goq0IIKoAbSu\nVHNUC6Qr1Q4Gtfgl7WAQVJ51YmIi/fr1Iz4+niZNmrBy5cpz/jqCOP8Iei8EEYQf/P7779x0003s\n2bOnwvcyMzOZPHky69atIyUlhdWrV/PVV19dgFUGcakh2OkGEYQPjBw5kh9//JH8/HyioqKYOXMm\ndrsdCHalQdQOwU43iCCCCOI8IniQFkQQQQRxHhEsukEEEUQQ5xHBohtEEEEEcR7x/wF6xDF4iqLE\njwAAAABJRU5ErkJggg==\n", + "png": "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\n", "text": [ - "" + "" ] } ], - "prompt_number": 42 + "prompt_number": 9 }, { "cell_type": "code", diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb index e46d6472..b354733f 100644 --- a/notebooks/exPlotImage2D.ipynb +++ b/notebooks/exPlotImage2D.ipynb @@ -1,6 +1,6 @@ { "metadata": { - "name": "exPlotImage2D" + "name": "" }, "nbformat": 3, "nbformat_minor": 0, @@ -16,12 +16,21 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from SimPEG import TensorMesh" + "from SimPEG import TensorMesh\n", + "%pylab inline" ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 1 + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 17 }, { "cell_type": "markdown", @@ -43,52 +52,40 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 2 + "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ - "sin = lambda x: np.sin(x)\n", - "xc = mesh.gridCC\n", - "xn = mesh.gridN\n", - "\n", - "fig = plt.figure(1)\n", - "fig.clf()\n", - "ax1 = subplot(121)\n", - "ax2 = subplot(122)\n", - "ph1 = mesh.plotImage(sin(xc),ax=ax1)\n", - "ph2 = mesh.plotImage(sin(xn),ax=ax2,imageType='N')\n", + "ax1 = plt.subplot()\n", "ax1.set_title('sin(x) on CC grid')\n", - "ax2.set_title('sin(x) on N grid')" + "ph1 = mesh.plotImage(np.sin(mesh.gridCC),ax=ax1)\n", + "ax2 = plt.subplot()\n", + "ax2.set_title('sin(x) on N grid')\n", + "ph2 = mesh.plotImage(np.sin(mesh.gridN), ax=ax2,imageType='N')" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stderr", - "text": [ - "/Users/larsruthotto/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.py:362: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n", - " \"matplotlib is currently using a non-GUI backend, \"\n" - ] - }, - { - "output_type": "pyout", - "prompt_number": 3, - "text": [ - "" - ] - }, - { + "metadata": {}, "output_type": "display_data", - "png": "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\nFHeJRCKxIP8f8Dc5GSDGi2gAAAAASUVORK5CYII=\n", + "png": "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\n", "text": [ - "" + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" ] } ], - "prompt_number": 3 + "prompt_number": 19 }, { "cell_type": "markdown", @@ -111,41 +108,49 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(1)\n", - "fig.clf()\n", - "ax1 = subplot(121)\n", - "ax2 = subplot(122)\n", + "ax1 = plt.subplot()\n", + "ax1.set_title('mesh.gridCC[:,0]')\n", "mesh.plotImage(mesh.gridCC[:,0],ax = ax1)\n", - "ax1.set_title('mesh.gridCC[:,0]') \n", - "mesh.plotImage(mesh.gridFx[:,1],ax = ax2,imageType='Fx')\n", - "ax2.set_title('mesh.gridFx[:,1]') \n", - "\n" + "ax2 = plt.subplot()\n", + "ax2.set_title('mesh.gridFx[:,1]')\n", + "mesh.plotImage(mesh.gridFx[:,1],ax = ax2,imageType='Fx')" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "pyout", - "prompt_number": 5, + "metadata": {}, + "output_type": "display_data", + "png": "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\nkyZNrPENGzZ0PZMkZWVlaciQIWrVqpWjea40l7mGK7z+ZNq0aZO6du2qu+++W5IUHBzseqaLLVq0\nSOnp6a5nCgoK0okTJ1ReXq6ysjI1btzY0VPw/cm0Zs0apaamSrrw3uDPyTx1phjq4gVx/mS61q40\n05tvvqm0tLQ6ken9999Xhw4dNHLkSL311luuZzp48KCWLVumMWPGSLo219D4k8vj8Wj9+vWKiYnR\nxIkTHb/o059Mq1atksfjUUJCgtLS0rRq1SrXM/3k9OnTWrVqlQYPHux6pvT0dFVUVCg4OFh9+/ZV\nTk6O65lSUlL07rvv6syZM1q+fLm2bdum/fv3X3ZeR89KutoMF8RdkdzcXC1cuFDr1693O4ok6b77\n7tN9992nf//737r33nu1efNmV/NMmDBBs2bNksfjqfK/Lbfccccd+vrrrxUYGKh33nlH48eP1wcf\nfOBqprNnz2rLli3Kzc3V6dOnNWDAAG3fvl2NGjVyNZckrVixQn379lWzZs3cjqLXXntNAQEBOnTo\nkLZt26bU1FR99dVXqlfPvc/gDz74oL755hv169dPt912m8LDw9WgQYPLPqbOfGOIi4uzDiYXFxer\nZ8+e1pj4+Hjt2LHDt3348GGFhYW5mula8zdTUVGRRo8ereXLlzv+P8yVvk4PPvigvv32W505c8bV\nTJ9//rmGDh2qjh07avHixfrLX/6i5cuXO5bJ31xNmzZV48aNFRgYqFGjRsnr9ercuXOuZurVq5d+\n97vfqU2bNgoLC1NsbKzy8/NdzfSTf/3rX44vI/mbKT8/Xw899JAaN26s+Ph4tW3b1tGTP/zJ1Lhx\nY02fPl2FhYWaO3euGjVqpLZt21523jpTDBdfEFdSUqLVq1crPj7eGhMfH6/FixfryJEjWrRoUbUX\nxF3LTD+5Vp82/cl04MABDR48WDk5OerUqVOdyLR3717fa/TRRx+pe/fujn7a9CfTvn37tH//fu3f\nv19DhgzR3LlzNWjQIMcy+Zvru+++871WK1asUNeuXWv8hOd0pp49eyovL0+nT59WWVmZNm/erD59\n+riaSbqwxp6fn68//OEPjmW5kkx33XWXVqxYocrKSu3bt09lZWXWUo8bmY4fP67z58/r9OnT+tvf\n/qYBAwbUPPFVPTz+P1q3bp2JiIgwt956q3nllVeMMca88cYb5o033vCNmTJliunQoYO54447zI4d\nO1zPdOjQIdOuXTtz0003mWbNmpmQkBBz4sQJVzONGjXKtGjRwsTExJiYmBgTFxfnaB5/Mv397383\nnTt3NjExMWbEiBFm27Ztrme62KOPPmoWL17seCZ/cr322mumc+fOJjo62gwfPtxs3brV9UzGGPP6\n66+byMhIk5iYaN599906kWn+/PkmPT3d8Sz+Zjp27JgZN26c6datm0lOTjYffvih65nWr19vfvvb\n35pOnTqZ4cOHm1OnTtU4Jxe4AQAsdWYpCQBQN1AMAAALxQAAsFAMAAALxQAAsFAMAAALxQAAsFAM\nAAALxQDUgtfrVXR0tM6dO6dTp07p9ttvt36PF3A948pnoJamT5+us2fP6syZMwoJCdGUKVPcjgRc\nFRQDUEvl5eWKjY1Vo0aNtGHDBn4FPH4xWEoCaqm0tFSnTp3SyZMnHf0V4sC1xjcGoJYGDRqkYcOG\nad++fTp06FCVf4gduB5dV3/BDagrFixYoAYNGmjo0KGqrKxU7969tW7dOiUlJbkdDfif8Y0BAGDh\nGAMAwEIxAAAsFAMAwEIxAAAsFAMAwEIxAAAsFAMAwEIxAAAs/wdUR6yWo70KQwAAAABJRU5ErkJg\ngg==\n", "text": [ - "" + "" ] }, { + "metadata": {}, "output_type": "display_data", - "png": "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\nGGPJ5QAAAABJRU5ErkJggg==\n", + "png": "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\niFFs+w+jIAAAAABJRU5ErkJggg==\n", "text": [ - "" + "" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 21, + "text": [ + "" ] } ], - "prompt_number": 5 + "prompt_number": 21 }, { "cell_type": "markdown", @@ -162,49 +167,75 @@ "h1 = np.linspace(.1,.5,3)\n", "h1 = np.r_[1,2,1]\n", "h2 = np.r_[1,3]\n", - "h3 = np.linspace(.1,.5,5)\n", + "h3 = np.linspace(.1,.5,10)\n", "\n", "mesh = TensorMesh([h1,h2,h3],x0)" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 6 + "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ - "ax1 = ax=subplot(131)\n", - "ax2 = ax=subplot(132)\n", - "ax3 = ax=subplot(133)\n", - "a1 = mesh.plotImage(mesh.gridCC[:,0],ax=ax1)\n", - "a2 = mesh.plotImage(mesh.gridFx[:,1],ax=ax2,imageType='Fx')\n", - "a3 = mesh.plotImage(mesh.gridEz[:,2],ax=ax3,imageType='Ez')\n", - "\n", + "ax1 = plt.subplot()\n", "ax1.set_title('mesh.gridCC[:,0]')\n", + "a1 = mesh.plotImage(mesh.gridCC[:,0],ax=ax1,annotationColor='w')\n", + "ax2 = plt.subplot()\n", "ax2.set_title('mesh.gridFx[:,1]')\n", - "ax3.set_title('mesh.gridEz[:,2]')\n" + "a2 = mesh.plotImage(mesh.gridFx[:,1],ax=ax2,imageType='Fx')\n", + "ax3 = plt.subplot()\n", + "ax3.set_title('mesh.gridEz[:,2]')\n", + "mesh.plotImage(mesh.gridEz[:,2],ax=ax3,imageType='Ez')" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "pyout", - "prompt_number": 7, + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", "text": [ - "" + "" ] }, { + "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAAEICAYAAACZJtWMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtclHXe//HXDAwI5vkAeEBMSsEUMI+pOZoZeVzrNrU7\nLdMOZmlmWW2YY79y7ajrveptbdp2V7pum3loKTN3tExRy3QljwUKhikogiIIw/f3x8AkCsyJGbiu\nPk8f83gMXtf1vT7Mm+vDxfeag0EppRBCCFGnGWu7ACGEEM5JsxZCCA2QZi2EEBogzVoIITRAmrUQ\nQmiANGshhNCAOt+s33vvPfr37++z8T/88EPuuOOOKpebzWbefffdGtuf2WwmJCQEs9lcI+O9++67\nNGjQAKPRyM8//1wjY/qLHrJ94IEHCAoK4vrrr/dqnHKbN2+mQYMGBAQE8NVXX9XImLVBD9nWtWO1\nzjdrX/vv//5vvvjiiyqXGwwGDAaD4+vz588zbdo0YmJiaNiwITExMVgsFgoKChzrvP/++/Tu3Zum\nTZvSpk0b7rnnHg4cOOAYb8mSJVitVpdrPHr0KLfeeitNmjRhwIABHDt2zLFs8uTJ5Ofnu/Ed/364\nk+17771HQEAADRo0cNymT5/udB8Gg4HnnnvOrYNvzpw5dOnSBZPJxLx58yosGzx4MPn5+URGRlb4\nuRMVeZttw4YNOXXqVLX7cPdYPXLkCKNGjaJly5Zcf/31PPXUUxw/ftyx3Ntj9XfdrG02m1vrX7p0\nie7du/Pjjz8yb948srOz+fTTTzlx4gQ//fQTAC+88ALPP/88w4cPJzU1lR9++IEhQ4bw6aefOsZx\n53VISimGDh1KbGwsBw4cICYmhqFDh7o1xu+Ru9kC9O3bl/z8fMdt8eLFLm3nbhY33HADr7/+OsOG\nDZOG7IGayDYvL4/w8HCn27mT7fnz5/nDH/7AkSNH2L17N5cuXeLZZ591u9aqeN2so6KiWLZsGX36\n9CEsLIzZs2dz8eJF7rnnHiIiInjyyScdv01++uknZs+eTbt27XjooYf48ccfHeOsW7eOgQMH0rhx\nY66//no++uijCvt56aWXaN26NYmJiezYsaPKelJTU7nnnnto1aoVf/zjHyv8OfTee+/Rr18/Xnzx\nRdq1a4fFYrnmz7Urt3/hhRcqjP3WW29x+vRpNm3axD333ENQUBAdO3ZkxYoVdOnShbS0NN544w3e\neOMNkpKSiIiIoHnz5kyZMoWkpCTHOO4coFu3biUjI4OlS5fSunVrli5dSmZmpltn5p76PWULlR+Y\nly9fJiEhgb/85S+AvVH07duXl19+2Y1HsqKJEyeSmJhIgwYNau2XrmRr9/e//73CGXdwcDADBw50\nLHfnWO3RoweTJk2icePGNGvWjBdeeIF//vOfXLx40eUxquN1szYYDLzzzjssW7aML7/8kuXLlzNw\n4EAmTJjA999/z86dO/n000+x2WzccsstjjPE/v37O+aciouLmTFjBgsWLCA3N5cdO3YQHx/v2Meu\nXbsAOHDgAL1792b27NmV1qKUYtCgQdxyyy3s37+f4uJiduzYUeEB37VrFyUlJezfv/+aUMu379Wr\nF/v376ewsJBvv/3WsXzbtm0MGTIEk8lU6f537tzpOBN2x7Rp05g2bVqlyw4fPkxsbCxGoz0qo9FI\nbGwshw4dcmsfnvg9ZVuVoKAgPvjgA1588UUOHTrEggULUEpV2hDKLViwgBEjRjgduzZJtnZjx451\nnG3/8ssvdOjQgXvvvbfK9as7Vq+2c+dOwsPDqV+/vkvrO6W8FBUVpd566y3H17fffru66667HF+/\n8sor6v7771ebNm1St99+e4Vt4+Pj1a5du1RxcbGKiIhQH3zwgbp48WKFdVauXKmaNGmibDabUkqp\nX375RZlMJnXhwoVraklJSVFt27Z1fH3p0iUVHBys3n33XcdYISEhqqioqML4/fr1q3T7goKCCtvH\nxsZW+F6v9uqrr6ouXbpUuVwppcxms2M8V7zyyitq9OjRFf5vzJgx6uWXX67wfwaDQf30008uj+uK\n31O2K1euVIGBgapx48aOW0pKimP9N998U914442qadOm6tixY47/f+CBB1RSUpKzh7JS9913n7JY\nLJUui4qKUl999ZVH47ri955tdHR0hRpsNpsaNmyYeuyxxxz/5+6xeqWMjAwVHh6uPvnkk2uWeXqs\n1sicdVxcnON+WFjYNV+fPHmSr776iq+//pomTZo4bseOHWPbtm0EBgbyz3/+k48//pg2bdowefJk\n0tLSHGN07tzZcWYZERFBSUkJv/766zV1pKSkVPjNXq9ePWJiYq6pNSgoqNLvIyUlpULtISEhdOrU\nyfF127Ztq/2N3bZtWw4dOkReXl6V67irWbNmFR4LsP9Z2qxZsxrbR3V+L9kC9O7dm3PnzjluPXv2\ndCybOHEiJ06cYOjQoXTo0KHax0wrfs/ZHj16tMLyF154gYsXL7p8naI6Z86cYfDgwcyYMYPRo0d7\nPV45n1xgVFfMD5XfHzhwIGazucIDlp+fz6xZswDo06cPa9euJT09HZPJVOWfTNXp1asX+/btc3x9\n6dKla6YLAgMDq9y+Z8+e1W5/6623smnTJoqLiyvdvnfv3hgMBj777DO3a69Kx44dOXjwoOOiis1m\n4+DBg9f8MPqLXrN15rHHHmP48OF8/vnnbN++3Y3Kq1eXLjD+XrNdvXo1f//73/n4448JCAhwo/Jr\nnTt3jiFDhjB69Giee+45r8a6mt+eDXL77bfzn//8h/fff59z585RWFiI1Wrl5MmTnD59mnXr1nHx\n4kUCAgKoV68eDRo0cHsf3bt3p7CwkMWLF3PmzBksFgulpaUub9+jRw+KiopYuHAhZ86cYc6cORV+\ngJ966inCwsJITEzk448/pqioiKNHj/Lwww+zf/9+2rdvzzPPPMPs2bOZP38+v/zyCzk5OaxcudKt\nC1IPPPAAkyZNAmDAgAFERkby+OOPk5GRwbRp02jTpk2NPfezJugh2+r83//9H3v37uVvf/sbixcv\n5v77769w0chZw7VYLBUuWpWUlFBYWIjNZqO4uJjCwkK3vhd/0nu2e/fu5YknnmDt2rUe/bV65bGa\nl5fHHXfcQb9+/fjTn/7k9ljO+KRZX/nDW/58R6PRiNVq5fDhw9x8881ERkby5ptvopSitLSUhQsX\n0rp1azp16sTZs2cdzz+9+nnOV48/depUpk6dav9mjEY2b97Mtm3biIuLIyAggLi4OBo1alTtWOX/\nV7799u3biYuLIzg4mL59+zrWrVevHnv27CEmJoakpCSaN2/OyJEjadu2LTfccAMAL7/8MvPnz2f9\n+vV07tyZrl27smnTJu6++27HOFf/IF35PQBkZmbSr18/R33/+te/+PHHH+nSpQsHDx4kOTm5wvau\n/mDWBL1mW9n2ACdOnGDmzJm8//77hIaGMn78eLp3785TTz0F2B/7qx//+fPnV7jInJGR4cgTYMqU\nKYSGhrJ69WpeeeUVQkND+eCDD5w99D6n52x37NhxzfOs9+zZw/r168nNzaVfv36OZcOGDXNs6+xY\nvTLbtWvXsmfPHlauXFlhP5mZmVWO5xb3p861Izc3VwUFBans7OzaLsVhyJAhqkGDBmrQoEGVLi8q\n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\nkSPQsCF07gzbtl27XuvW8H3ZU/eUsr94ZvRoe7PvEO1lDfXsZ9JHLkNDo/2i4baCa9eb3tR+Jrw8\nwn4rZy2A26592FxiUE6uCGzbto1HHnmEkpISpk+fzhNPPFFxAIMBsFS5/Rzl/Ow33XqcKHO7KpcH\nGOZXuWyuUlitVgYO3OqzGqrbf12qwWAwuHWBx9tsnUsHojzaUqm5Th/T30sNesoVrnhcB5k9L0FZ\nweDZ9qoU+/5berF/gF1W6OlhDbG4navTk/IZM2awfPlyNm/ezJIlS8jO9nzeqSrHrSecr1QNq9Uq\nNXjA99mme7V1TTymeqjBXXU9V6iJx9W77Wsk1901MIYbqm3W58/bnzZ266230q5dO4YMGUJKSopf\nChO+Jdnqk+SqX9XOWe/evZtOnTo5vo6NjWXnzp0MGzaswnpKzfWqCEvZvyop568i9GkNLuy/rtTg\nKn9ka7EoLBbvHhOvH1Od1OAqreQK9ukIz2uw37zaf6x321tagMXLMdyiqvHll1+qcePGOb5etmyZ\nSkpKqrAO9letyK2O3Fwl2WrrJrnq8+aOas+se/TowTPPPOP4OjU1lcTExArrKB++Ykn4jmSrT5Kr\nflU7Z92oUSPAfnU5PT2dL7/8kl69evmlMOFbkq0+Sa765fR51osWLeKRRx6huLiY6dOn07y5j9/W\nSviNZKtPkqtOuTVpcpWtW7eqTp06qejoaLV48WK3tz9x4oQym80qNjZWDRgwQH344Yce1VFSUqLi\n4+PV8OHD3d72woULauLEieqGG25QMTExaseOHW6P8fbbb6s+ffqobt26qRkzZjhdf9KkSaply5bq\npptucvxfXl6eGjlypGrbtq0aNWqUys/Pd3uMp59+WnXq1EklJCSoGTNmqIKCAre/F6Uk13KSa0V1\nIVelvM9Wq7l61azj4+PV1q1bVXp6uurYsaM6c+aMW9tnZWWpvXv3KqWUOnPmjGrfvr3Ky8tzu443\n33xT3XvvvWrEiBFubztr1iyVlJSkLl26pIqLi1Vubq5b2+fk5KioqCh14cIFZbPZ1J133qk+//zz\narfZtm2b+v777ysE9+qrr6rHH39cFRYWqmnTpqnXX3/d7TE2bdqkbDabstlsasqUKeqvf/2rW99L\nOclVcq1MXchVKe+y1XKuHr9SvSaezxkeHk58fDwAzZs3p3PnzuzZs8etMTIzM/nXv/7FlClTPLpw\nsnnzZv74xz9Sr149AgMDHXN+rgoJCUEpxfnz57l06RIFBQU0cfJ+Hf37979mnV27djF58mSCg4N5\n8MEHnT6WlY1x++23YzQaMRqN3HHHHWzd6v4r7yRXO8n1WnUhV/AuWy3n6nGzrur5nJ46duwYqamp\n9Cz7+C5XzZw5k9dffx2jB5+YkpmZSWFhIVOnTqVXr168+uqrFBYWujVGSEgIy5YtIyoqivDwcPr2\n7ev29wAVH89OnTqxa9cut8e40jvvvMOIESO8qgMkV8m1crWRK3ifrZZzrROfCZWfn8/YsWNZuHAh\n9eu7/hHAGzdupGXLliQkJHj0W7qwsJAjR45w9913Y7VaSU1NZc2aNW6NcebMGaZOncqPP/5Ieno6\nO3bs4LPPPnO7Fk/PMirz0ksv0aBBA8aMGVNjY3pCcpVcr+RtruB9tlrO1eNm3aNHDw4d+u3jfFJT\nU+ndu7fb4xQXF3P33XczYcIERo0a5da23377LevXr6d9+/aMHz+eLVu2MPGqD5atTnR0NB07dmTE\niBGEhIQwfvx4kpPd+5DSXbt20bt3b6Kjo2nWrBljxoxhW2VvBeZEjx49OFj2/twHDx6kR48ebo8B\n8N577/HFF1/wwQcfeLS95GonuVauNnMF77PVdK7Vzmg7UX7BIi0tzaMLFqWlpWrChAlq5syZ3pSh\nlFLKarV6dHV5xIgRaufOncpms6lp06a5ffHm/PnzqkOHDionJ0cVFhaqESNGqM2bNzvdLi0trdIL\nFgUFBeqxxx5zesGisjGSk5NVbGysys7Odut7uJrkKrlWpi7kqpR32Wo5V6+atdVqVZ06dVIdOnRQ\nf/7zn93e/uuvv1YGg0HFxcWp+Ph4FR8fr5KTkz2uxZOry4cPH1a9evVScXFxatasWerChQtuj7Fy\n5Up16623qu7du6ukpCRls9mqXX/cuHEqIiJCBQUFqTZt2qgVK1a4/VSg8jFMJpNq06aNevfdd1V0\ndLSKjIx0PJZTp051+3tRSnItJ7lWVBdyVcr7bLWaq9P3sxZCCFH76sQFRiGEENWTZi2EEBogzVoI\nITRAmrUQQmiANGshhNAAadZCCKEB/x8BWriF5zXyHAAAAABJRU5ErkJggg==\n", + "png": "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\nljgRkYL9Px5JJb38BetZAAAAAElFTkSuQmCC\n", "text": [ - "" + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n/x835ZZaYjxPhgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 23, + "text": [ + "" ] } ], - "prompt_number": 7 + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 } ], "metadata": {} From b66c63759d8cd76a79c5a83698612897aa5f29a5 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 22:17:05 -0700 Subject: [PATCH 101/359] Moved modelBuilder into utils added some documentation --- SimPEG/BaseMesh.py | 41 +++++++++++-------- SimPEG/TensorMesh.py | 21 ++++++---- .../{parameters.py => utils/ModelBuilder.py} | 8 ++-- SimPEG/utils/__init__.py | 3 +- SimPEG/utils/{utils.py => matutils.py} | 0 5 files changed, 43 insertions(+), 30 deletions(-) rename SimPEG/{parameters.py => utils/ModelBuilder.py} (97%) rename SimPEG/utils/{utils.py => matutils.py} (100%) diff --git a/SimPEG/BaseMesh.py b/SimPEG/BaseMesh.py index c5a7121a..fd799dea 100644 --- a/SimPEG/BaseMesh.py +++ b/SimPEG/BaseMesh.py @@ -59,22 +59,22 @@ class BaseMesh(object): For example, you have a face variable, and you want the x component of it reshaped to a 3D matrix. - Mesh.r can fulfil your dreams... + Mesh.r can fulfil your dreams:: - mesh.r(V, 'F', 'Fx', 'M') - | | | { How: 'M' or ['V'] for a matrix (ndgrid style) or a vector (n x dim) } - | | { What you want: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } - | { What is it: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } - { The input: as a list or ndarray } + mesh.r(V, 'F', 'Fx', 'M') + | | | { How: 'M' or ['V'] for a matrix (ndgrid style) or a vector (n x dim) } + | | { What you want: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } + | { What is it: ['CC'], 'N', 'F', 'Fx', 'Fy', 'Fz', 'E', 'Ex', 'Ey', or 'Ez' } + { The input: as a list or ndarray } - For example: + For example:: - Xex, Yex, Zex = r(mesh.gridEx, 'Ex', 'Ex', 'M') # Separates each component of the Ex grid into 3 matrices + Xex, Yex, Zex = r(mesh.gridEx, 'Ex', 'Ex', 'M') # Separates each component of the Ex grid into 3 matrices - XedgeVector = r(edgeVector, 'E', 'Ex', 'V') # Given an edge vector, this will return just the part on the x edges as a vector + XedgeVector = r(edgeVector, 'E', 'Ex', 'V') # Given an edge vector, this will return just the part on the x edges as a vector - eX, eY, eZ = r(edgeVector, 'E', 'E', 'V') # Separates each component of the edgeVector into 3 vectors + eX, eY, eZ = r(edgeVector, 'E', 'E', 'V') # Separates each component of the edgeVector into 3 vectors """ assert (type(x) == list or type(x) == np.ndarray), "x must be either a list or a ndarray" @@ -341,18 +341,25 @@ class BaseMesh(object): tangents = property(**tangents()) def projectFaceVector(self, fV): - """Given a vector, fV, in cartesian coordinates, this will project it onto the mesh using the normals""" + """ + Given a vector, fV, in cartesian coordinates, this will project it onto the mesh using the normals + + :param numpy.array fV: face vector with shape (nF, dim) + :rtype: numpy.array with shape (nF, ) + :return: projected face vector + """ assert type(fV) == np.ndarray, 'fV must be an ndarray' assert len(fV.shape) == 2 and fV.shape[0] == np.sum(self.nF) and fV.shape[1] == self.dim, 'fV must be an ndarray of shape (nF x dim)' return np.sum(fV*self.normals, 1) def projectEdgeVector(self, eV): - """Given a vector, eV, in cartesian coordinates, this will project it onto the mesh using the tangents""" + """ + Given a vector, eV, in cartesian coordinates, this will project it onto the mesh using the tangents + + :param numpy.array eV: edge vector with shape (nE, dim) + :rtype: numpy.array with shape (nE, ) + :return: projected edge vector + """ assert type(eV) == np.ndarray, 'eV must be an ndarray' assert len(eV.shape) == 2 and eV.shape[0] == np.sum(self.nE) and eV.shape[1] == self.dim, 'eV must be an ndarray of shape (nE x dim)' return np.sum(eV*self.tangents, 1) - - -if __name__ == '__main__': - m = BaseMesh([3, 2, 4]) - print m.n diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index ebea0b86..36c532bc 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -8,18 +8,21 @@ from utils import ndgrid, mkvc class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): """ - TensorMesh is a mesh class that deals with tensor product meshes. +TensorMesh is a mesh class that deals with tensor product meshes. - Any Mesh that has a constant width along the entire axis - such that it can defined by a single width vector, called 'h'. +Any Mesh that has a constant width along the entire axis +such that it can defined by a single width vector, called 'h'. - e.g. +:: - hx = np.array([1,1,1]) - hy = np.array([1,2]) - hz = np.array([1,1,1,1]) + hx = np.array([1,1,1]) + hy = np.array([1,2]) + hz = np.array([1,1,1,1]) - mesh = TensorMesh([hx, hy, hz]) + mesh = TensorMesh([hx, hy, hz]) + +.. math:: + x^2 = 5 """ _meshType = 'TENSOR' @@ -61,7 +64,7 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): outStr = outStr + ' {0:d}*{1:.2f},'.format(n,h) return outStr[:-1] - + if self.dim == 1: outStr = outStr + '\n x0: {0:.2f}'.format(self.x0[0]) outStr = outStr + '\n nCx: {0:d}'.format(self.nCx) diff --git a/SimPEG/parameters.py b/SimPEG/utils/ModelBuilder.py similarity index 97% rename from SimPEG/parameters.py rename to SimPEG/utils/ModelBuilder.py index 842c96e9..3b1f977f 100644 --- a/SimPEG/parameters.py +++ b/SimPEG/utils/ModelBuilder.py @@ -1,6 +1,4 @@ import numpy as np -import TensorMesh as tm -import TensorView as tv def getIndecesBlock(p0,p1,ccMesh): @@ -129,6 +127,10 @@ def scalarConductivity(ccMesh,pFunction): if __name__ == '__main__': + import sys + sys.path.append('../') + from TensorMesh import TensorMesh + # Define the mesh testDim = 3 @@ -148,7 +150,7 @@ if __name__ == '__main__': else: h = [h1, h2, h3] - M = tm.TensorMesh(h, x0) + M = TensorMesh(h, x0) ccMesh = M.gridCC diff --git a/SimPEG/utils/__init__.py b/SimPEG/utils/__init__.py index a2463636..bb46a4e9 100644 --- a/SimPEG/utils/__init__.py +++ b/SimPEG/utils/__init__.py @@ -1,3 +1,4 @@ -from utils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind +from matutils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind from sputils import spzeros, kron3, speye, sdiag from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird +import ModelBuilder diff --git a/SimPEG/utils/utils.py b/SimPEG/utils/matutils.py similarity index 100% rename from SimPEG/utils/utils.py rename to SimPEG/utils/matutils.py From c0efb972a9f5fdc245f6af55c04395bc298476e7 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 22:23:14 -0700 Subject: [PATCH 102/359] updated the notebook and minor bug fixes in utils --- SimPEG/TensorMesh.py | 20 +++++++------- SimPEG/utils/lomutils.py | 2 +- SimPEG/utils/sputils.py | 2 +- notebooks/exPlotImage2D.ipynb | 49 ++++++++++++++--------------------- 4 files changed, 32 insertions(+), 41 deletions(-) diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index 36c532bc..c59f4acd 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -8,21 +8,21 @@ from utils import ndgrid, mkvc class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): """ -TensorMesh is a mesh class that deals with tensor product meshes. + TensorMesh is a mesh class that deals with tensor product meshes. -Any Mesh that has a constant width along the entire axis -such that it can defined by a single width vector, called 'h'. + Any Mesh that has a constant width along the entire axis + such that it can defined by a single width vector, called 'h'. -:: + :: - hx = np.array([1,1,1]) - hy = np.array([1,2]) - hz = np.array([1,1,1,1]) + hx = np.array([1,1,1]) + hy = np.array([1,2]) + hz = np.array([1,1,1,1]) - mesh = TensorMesh([hx, hy, hz]) + mesh = TensorMesh([hx, hy, hz]) -.. math:: - x^2 = 5 + .. math:: + x^2 = 5 """ _meshType = 'TENSOR' diff --git a/SimPEG/utils/lomutils.py b/SimPEG/utils/lomutils.py index ddfebfb9..cdd6e0de 100644 --- a/SimPEG/utils/lomutils.py +++ b/SimPEG/utils/lomutils.py @@ -1,6 +1,6 @@ import numpy as np from scipy import sparse as sp -from utils import mkvc, ndgrid, sub2ind +from matutils import mkvc, ndgrid, sub2ind from sputils import sdiag diff --git a/SimPEG/utils/sputils.py b/SimPEG/utils/sputils.py index 0cefa26c..39444c27 100644 --- a/SimPEG/utils/sputils.py +++ b/SimPEG/utils/sputils.py @@ -1,5 +1,5 @@ from scipy import sparse as sp -from utils import mkvc +from matutils import mkvc def sdiag(h): diff --git a/notebooks/exPlotImage2D.ipynb b/notebooks/exPlotImage2D.ipynb index b354733f..6dce54c1 100644 --- a/notebooks/exPlotImage2D.ipynb +++ b/notebooks/exPlotImage2D.ipynb @@ -30,7 +30,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -52,7 +52,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 18 + "prompt_number": 2 }, { "cell_type": "code", @@ -71,21 +71,21 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\nYII=\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\n", "text": [ - "" + "" ] } ], - "prompt_number": 19 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -108,7 +108,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 20 + "prompt_number": 4 }, { "cell_type": "code", @@ -130,7 +130,7 @@ "output_type": "display_data", "png": "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\nkyZNrPENGzZ0PZMkZWVlaciQIWrVqpWjea40l7mGK7z+ZNq0aZO6du2qu+++W5IUHBzseqaLLVq0\nSOnp6a5nCgoK0okTJ1ReXq6ysjI1btzY0VPw/cm0Zs0apaamSrrw3uDPyTx1phjq4gVx/mS61q40\n05tvvqm0tLQ6ken9999Xhw4dNHLkSL311luuZzp48KCWLVumMWPGSLo219D4k8vj8Wj9+vWKiYnR\nxIkTHb/o059Mq1atksfjUUJCgtLS0rRq1SrXM/3k9OnTWrVqlQYPHux6pvT0dFVUVCg4OFh9+/ZV\nTk6O65lSUlL07rvv6syZM1q+fLm2bdum/fv3X3ZeR89KutoMF8RdkdzcXC1cuFDr1693O4ok6b77\n7tN9992nf//737r33nu1efNmV/NMmDBBs2bNksfjqfK/Lbfccccd+vrrrxUYGKh33nlH48eP1wcf\nfOBqprNnz2rLli3Kzc3V6dOnNWDAAG3fvl2NGjVyNZckrVixQn379lWzZs3cjqLXXntNAQEBOnTo\nkLZt26bU1FR99dVXqlfPvc/gDz74oL755hv169dPt912m8LDw9WgQYPLPqbOfGOIi4uzDiYXFxer\nZ8+e1pj4+Hjt2LHDt3348GGFhYW5mula8zdTUVGRRo8ereXLlzv+P8yVvk4PPvigvv32W505c8bV\nTJ9//rmGDh2qjh07avHixfrLX/6i5cuXO5bJ31xNmzZV48aNFRgYqFGjRsnr9ercuXOuZurVq5d+\n97vfqU2bNgoLC1NsbKzy8/NdzfSTf/3rX44vI/mbKT8/Xw899JAaN26s+Ph4tW3b1tGTP/zJ1Lhx\nY02fPl2FhYWaO3euGjVqpLZt21523jpTDBdfEFdSUqLVq1crPj7eGhMfH6/FixfryJEjWrRoUbUX\nxF3LTD+5Vp82/cl04MABDR48WDk5OerUqVOdyLR3717fa/TRRx+pe/fujn7a9CfTvn37tH//fu3f\nv19DhgzR3LlzNWjQIMcy+Zvru+++871WK1asUNeuXWv8hOd0pp49eyovL0+nT59WWVmZNm/erD59\n+riaSbqwxp6fn68//OEPjmW5kkx33XWXVqxYocrKSu3bt09lZWXWUo8bmY4fP67z58/r9OnT+tvf\n/qYBAwbUPPFVPTz+P1q3bp2JiIgwt956q3nllVeMMca88cYb5o033vCNmTJliunQoYO54447zI4d\nO1zPdOjQIdOuXTtz0003mWbNmpmQkBBz4sQJVzONGjXKtGjRwsTExJiYmBgTFxfnaB5/Mv397383\nnTt3NjExMWbEiBFm27Ztrme62KOPPmoWL17seCZ/cr322mumc+fOJjo62gwfPtxs3brV9UzGGPP6\n66+byMhIk5iYaN599906kWn+/PkmPT3d8Sz+Zjp27JgZN26c6datm0lOTjYffvih65nWr19vfvvb\n35pOnTqZ4cOHm1OnTtU4Jxe4AQAsdWYpCQBQN1AMAAALxQAAsFAMAAALxQAAsFAMAAALxQAAsFAM\nAAALxQDUgtfrVXR0tM6dO6dTp07p9ttvt36PF3A948pnoJamT5+us2fP6syZMwoJCdGUKVPcjgRc\nFRQDUEvl5eWKjY1Vo0aNtGHDBn4FPH4xWEoCaqm0tFSnTp3SyZMnHf0V4sC1xjcGoJYGDRqkYcOG\nad++fTp06FCVf4gduB5dV3/BDagrFixYoAYNGmjo0KGqrKxU7969tW7dOiUlJbkdDfif8Y0BAGDh\nGAMAwEIxAAAsFAMAwEIxAAAsFAMAwEIxAAAsFAMAwEIxAAAs/wdUR6yWo70KQwAAAABJRU5ErkJg\ngg==\n", "text": [ - "" + "" ] }, { @@ -138,19 +138,19 @@ "output_type": "display_data", "png": "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\niFFs+w+jIAAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "pyout", - "prompt_number": 21, + "prompt_number": 5, "text": [ - "" + "" ] } ], - "prompt_number": 21 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -174,7 +174,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 22 + "prompt_number": 6 }, { "cell_type": "code", @@ -198,7 +198,7 @@ "output_type": "display_data", "png": "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\nAABJRU5ErkJggg==\n", "text": [ - "" + "" ] }, { @@ -206,7 +206,7 @@ "output_type": "display_data", "png": "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\nljgRkYL9Px5JJb38BetZAAAAAElFTkSuQmCC\n", "text": [ - "" + "" ] }, { @@ -214,28 +214,19 @@ "output_type": "display_data", "png": "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\n/x835ZZaYjxPhgAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "pyout", - "prompt_number": 23, + "prompt_number": 7, "text": [ - "" + "" ] } ], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 23 + "prompt_number": 7 } ], "metadata": {} From d7a791d6d709167b43afbdf315e538bd9d9c07b6 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 22:27:17 -0700 Subject: [PATCH 103/359] Brought into line with standard practices. --- SimPEG/license.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SimPEG/license.txt b/SimPEG/license.txt index d8367834..3110a4fb 100644 --- a/SimPEG/license.txt +++ b/SimPEG/license.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013 Eldad Haber, Rowan Cockett, Lars Ruthotto, Dave Marchant, Seogi Kang, Luz Angelica Caudillo Mata +Copyright (c) 2013 SimPEG Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +THE SOFTWARE. From 23cef241e51223a60c35e492273e81a40c8f7932 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Fri, 30 Aug 2013 22:39:48 -0700 Subject: [PATCH 104/359] minutes can be stored in other locations. Use wiki etc. --- minutes/2013-06-04.doc | Bin 238080 -> 0 bytes minutes/2013-06-04.pdf | Bin 320911 -> 0 bytes minutes/2013-06-26.doc | Bin 294912 -> 0 bytes minutes/2013-06-26.pdf | Bin 277673 -> 0 bytes minutes/2013-07-11.doc | Bin 138752 -> 0 bytes minutes/2013-07-11.html | 1049 ------------------------ minutes/2013-07-11.pdf | Bin 265557 -> 0 bytes minutes/2013-07-11_html_m7b8da613.jpg | Bin 81920 -> 0 bytes minutes/template.doc | Bin 129024 -> 0 bytes 9 files changed, 1049 deletions(-) delete mode 100644 minutes/2013-06-04.doc delete mode 100644 minutes/2013-06-04.pdf delete mode 100644 minutes/2013-06-26.doc delete mode 100644 minutes/2013-06-26.pdf delete mode 100644 minutes/2013-07-11.doc delete mode 100644 minutes/2013-07-11.html delete mode 100644 minutes/2013-07-11.pdf delete mode 100644 minutes/2013-07-11_html_m7b8da613.jpg delete mode 100644 minutes/template.doc diff --git a/ minutes/2013-06-04.doc b/ minutes/2013-06-04.doc deleted file mode 100644 index 1d119753e3dbffc649f04f3edea89e8b6352c024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238080 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 CjSfQq literal 0 HcmV?d00001 diff --git a/ minutes/2013-07-11.doc b/ minutes/2013-07-11.doc new file mode 100644 index 0000000000000000000000000000000000000000..74c294de889ddac0b09fa459ec333c147661a8e1 GIT binary patch literal 138752 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ⅅzpI|=(({KWU`@gg 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