Cleaned up averaging. Put it in an AveExtrap function.

This commit is contained in:
Rowan Cockett
2013-11-13 19:37:14 -08:00
parent 52c9cf83c9
commit 358411792d
3 changed files with 14 additions and 20 deletions
+7 -18
View File
@@ -1,6 +1,6 @@
import numpy as np
from scipy import sparse as sp
from SimPEG.utils import mkvc, sdiag, speye, kron3, spzeros, ddx, av
from SimPEG.utils import mkvc, sdiag, speye, kron3, spzeros, ddx, av, avExtrap
def checkBC(bc):
@@ -423,25 +423,14 @@ class DiffOperators(object):
if(self._aveCC2F is None):
n = self.n
if(self.dim == 1):
Av = av(n[0]).T
Av = sdiag(1/Av.sum(axis=1))*Av
self._aveCC2F = Av
self._aveCC2F = avExtrap(n[0])
elif(self.dim == 2):
Av1 = av(n[0]).T
Av1 = sdiag(1/Av1.sum(axis=1))*Av1
Av2 = av(n[1]).T
Av2 = sdiag(1/Av2.sum(axis=1))*Av2
Av = sp.vstack((sp.kron(speye(n[1]), Av1), sp.kron(Av2, speye(n[0]))), format="csr")
self._aveCC2F = Av
self._aveCC2F = sp.vstack((sp.kron(speye(n[1]), avExtrap(n[0])),
sp.kron(avExtrap(n[1]), speye(n[0]))), format="csr")
elif(self.dim == 3):
Av1 = av(n[0]).T
Av1 = sdiag(1/Av1.sum(axis=1))*Av1
Av2 = av(n[1]).T
Av2 = sdiag(1/Av2.sum(axis=1))*Av2
Av3 = av(n[2]).T
Av3 = sdiag(1/Av3.sum(axis=1))*Av3
Av = sp.vstack((kron3(speye(n[2]), speye(n[1]), Av1), kron3(speye(n[2]), Av2, speye(n[0])), kron3(Av3, speye(n[1]), speye(n[0]))), format="csr")
self._aveCC2F = Av
self._aveCC2F = sp.vstack((kron3(speye(n[2]), speye(n[1]), avExtrap(n[0])),
kron3(speye(n[2]), avExtrap(n[1]), speye(n[0])),
kron3(avExtrap(n[2]), speye(n[1]), speye(n[0]))), format="csr")
return self._aveCC2F
return locals()
_aveCC2F = None
+1 -1
View File
@@ -4,7 +4,7 @@ import lomutils
import interputils
import ModelBuilder
from matutils import getSubArray, mkvc, ndgrid, ind2sub, sub2ind
from sputils import spzeros, kron3, speye, sdiag, ddx, av
from sputils import spzeros, kron3, speye, sdiag, ddx, av, avExtrap
from lomutils import volTetra, faceInfo, inv2X2BlockDiagonal, inv3X3BlockDiagonal, indexCube, exampleLomGird
from interputils import interpmat
from ipythonUtils import easyAnimate as animate
+6 -1
View File
@@ -29,5 +29,10 @@ def ddx(n):
def av(n):
"""Define 1D averaging operator from cell-centres to nodes."""
"""Define 1D averaging operator from nodes to cell-centers."""
return sp.spdiags((0.5*np.ones((n+1, 1))*[1, 1]).T, [0, 1], n, n+1, format="csr")
def avExtrap(n):
"""Define 1D averaging operator from cell-centers to nodes."""
Av = sp.spdiags((0.5*np.ones((n, 1))*[1, 1]).T, [-1, 0], n+1, n, format="csr") + sp.csr_matrix(([0.5,0.5],([0,n],[0,n-1])),shape=(n+1,n))
return Av