Skip to content

Commit 51dd456

Browse files
authored
Merge pull request #88 from simpeg/aveCC2FV
Creating aveCCV2F
2 parents 4dc94be + e10a980 commit 51dd456

File tree

6 files changed

+58
-6
lines changed

6 files changed

+58
-6
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[bumpversion]
2-
current_version = 0.1.14
2+
current_version = 0.1.15
33
files = setup.py discretize/__init__.py docs/conf.py
44

discretize/DiffOperators.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ def aveFz2CC(self):
751751

752752
@property
753753
def aveCC2F(self):
754-
"Construct the averaging operator on cell cell centers to faces."
754+
"Construct the averaging operator on cell centers to faces."
755755
if getattr(self, '_aveCC2F', None) is None:
756756
if self.dim == 1:
757757
self._aveCC2F = av_extrap(self.nCx)
@@ -774,6 +774,36 @@ def aveCC2F(self):
774774
), format="csr")
775775
return self._aveCC2F
776776

777+
@property
778+
def aveCCV2F(self):
779+
"""
780+
Construct the averaging operator on cell centers to
781+
faces as a vector.
782+
"""
783+
if getattr(self, '_aveCCV2F', None) is None:
784+
if self.dim == 1:
785+
self._aveCCV2F = self.aveCC2F
786+
elif self.dim == 2:
787+
aveCCV2Fx = sp.kron(speye(self.nCy), av_extrap(self.nCx))
788+
aveCC2VFy = sp.kron(av_extrap(self.nCy), speye(self.nCx))
789+
self._aveCCV2F = sp.block_diag((
790+
aveCCV2Fx, aveCC2VFy
791+
), format="csr")
792+
elif self.dim == 3:
793+
aveCCV2Fx = kron3(
794+
speye(self.nCz), speye(self.nCy), av_extrap(self.nCx)
795+
)
796+
aveCC2VFy = kron3(
797+
speye(self.nCz), av_extrap(self.nCy), speye(self.nCx)
798+
)
799+
aveCC2BFz = kron3(
800+
av_extrap(self.nCz), speye(self.nCy), speye(self.nCx)
801+
)
802+
self._aveCCV2F = sp.block_diag((
803+
aveCCV2Fx, aveCC2VFy, aveCC2BFz
804+
), format="csr")
805+
return self._aveCCV2F
806+
777807
@property
778808
def aveE2CC(self):
779809
"Construct the averaging operator on cell edges to cell centers."

discretize/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"""
1919
)
2020

21-
__version__ = '0.1.14'
21+
__version__ = '0.1.15'
2222
__author__ = 'SimPEG Team'
2323
__license__ = 'MIT'
2424
__copyright__ = '2013 - 2017, SimPEG Developers, http://simpeg.xyz'

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@
6060
# built documents.
6161
#
6262
# The short X.Y version.
63-
version = '0.1.14'
63+
version = '0.1.15'
6464
# The full version, including alpha/beta/rc tags.
65-
release = '0.1.14'
65+
release = '0.1.15'
6666

6767
# The language for content autogenerated by Sphinx. Refer to documentation
6868
# for a list of supported languages.

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def configuration(parent_package='', top_path=None):
5656

5757
setup(
5858
name="discretize",
59-
version="0.1.14",
59+
version="0.1.15",
6060
install_requires=[
6161
'numpy>=1.7',
6262
'scipy>=0.13',

tests/base/test_operators.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,17 @@ def test_orderE2CCV(self):
426426
self.getAve = lambda M: M.aveE2CCV
427427
self.orderTest()
428428

429+
def test_orderCC2FV(self):
430+
self.name = "Averaging 2D: CC2FV"
431+
funX = lambda x, y: (np.cos(x)+np.sin(y))
432+
funY = lambda x, y: (np.cos(y)*np.sin(x))
433+
self.getHere = lambda M: np.r_[call2(funX, M.gridCC), call2(funY, M.gridCC)]
434+
self.getThere = lambda M: np.r_[call2(funX, M.gridFx), call2(funY, M.gridFy)]
435+
self.getAve = lambda M: M.aveCCV2F
436+
self.expectedOrders = ORDERS/2.0
437+
self.orderTest()
438+
self.expectedOrders = ORDERS
439+
429440

430441
class TestAverating3DSimple(unittest.TestCase):
431442
def setUp(self):
@@ -527,6 +538,17 @@ def test_orderCC2F(self):
527538
self.orderTest()
528539
self.expectedOrders = ORDERS
529540

541+
def test_orderCCV2F(self):
542+
self.name = "Averaging 3D: CC2FV"
543+
funX = lambda x, y, z: (np.cos(x)+np.sin(y)+np.exp(z))
544+
funY = lambda x, y, z: (np.cos(x)+np.sin(y)*np.exp(z))
545+
funZ = lambda x, y, z: (np.cos(x)*np.sin(y)+np.exp(z))
546+
self.getHere = lambda M: np.r_[call3(funX, M.gridCC), call3(funY, M.gridCC), call3(funZ, M.gridCC)]
547+
self.getThere = lambda M: np.r_[call3(funX, M.gridFx), call3(funY, M.gridFy), call3(funZ, M.gridFz)]
548+
self.getAve = lambda M: M.aveCCV2F
549+
self.expectedOrders = ORDERS/2.0
550+
self.orderTest()
551+
self.expectedOrders = ORDERS
530552

531553
if __name__ == '__main__':
532554
unittest.main()

0 commit comments

Comments
 (0)