From dc563ff6c5ce932042a9c7a8aab7cb328aa09d4e Mon Sep 17 00:00:00 2001 From: rowanc1 Date: Fri, 14 Feb 2014 20:25:57 -0800 Subject: [PATCH] Correct counting on cylinder mesh! --- SimPEG/Mesh/CylMesh.py | 70 +++++++++++++++++++++++++++--------- SimPEG/Tests/test_cylMesh.py | 43 ++++++++++++++++------ 2 files changed, 87 insertions(+), 26 deletions(-) diff --git a/SimPEG/Mesh/CylMesh.py b/SimPEG/Mesh/CylMesh.py index 594c739c..3f01be59 100644 --- a/SimPEG/Mesh/CylMesh.py +++ b/SimPEG/Mesh/CylMesh.py @@ -31,6 +31,15 @@ class CylMesh(TensorMesh): TensorMesh.__init__(self, h, x0) + @property + def nNx(self): + """ + Number of nodes in the x-direction + + :rtype: int + :return: nNx + """ + return self.nCx @property def nNy(self): @@ -40,7 +49,7 @@ class CylMesh(TensorMesh): :rtype: int :return: nNy """ - return self.nCy + return self.nCy - 1 @property def nN(self): @@ -49,15 +58,29 @@ class CylMesh(TensorMesh): :rtype: int :return: nN - - .. plot:: - :include-source: - - from SimPEG import Mesh, np - Mesh.TensorMesh([np.ones(n) for n in [2,3]]).plotGrid(nodes=True,showIt=True) """ return (np.r_[self.nNx, self.nNy, self.nNz]).prod() + @property + def nFx(self): + """ + Number of x-faces + + :rtype: int + :return: nFx + """ + return self.nC + + @property + def vnFx(self): + """ + Number of x-faces in each direction + + :rtype: numpy.array (dim, ) + :return: vnFx + """ + return self.vnC + @property def nFy(self): """ @@ -69,19 +92,34 @@ class CylMesh(TensorMesh): return (self.vnC + np.r_[0,-1,0][:self.dim]).prod() @property - def vnF(self): - """Total number of faces in each direction""" - return np.array([self.nFr, self.vnFz]) + def nEx(self): + """ + Number of x-edges + + :rtype: int + :return: nEx + """ + return (self._n + np.r_[0,-1,1]).prod() @property - def nF(self): - """Total number of faces""" - return self.nFr + self.vnFz + def nEy(self): + """ + Number of y-edges + + :rtype: int + :return: nEy + """ + return (self._n + np.r_[0,0,1]).prod() @property - def nE(self): - """Number of edges""" - return self.nN + def nEz(self): + """ + Number of z-edges + + :rtype: int + :return: nEz + """ + return (self._n + np.r_[0,-1,0]).prod() @property def vectorNx(self): diff --git a/SimPEG/Tests/test_cylMesh.py b/SimPEG/Tests/test_cylMesh.py index 5ce86e0c..aa1af471 100644 --- a/SimPEG/Tests/test_cylMesh.py +++ b/SimPEG/Tests/test_cylMesh.py @@ -3,12 +3,11 @@ import sys from SimPEG import * -class TestCylMesh(unittest.TestCase): +class TestCyl1DMesh(unittest.TestCase): def setUp(self): - hx = np.ones(10) - hz = np.ones(5) - + hx = np.ones(3) + hz = np.ones(2) self.mesh = Mesh.CylMesh([hx, 1,hz]) def test_cylMeshInheritance(self): @@ -17,13 +16,37 @@ class TestCylMesh(unittest.TestCase): def test_cylMeshDimensions(self): self.assertTrue(self.mesh.dim == 3) - def test_cylMesh_nc(self): - self.assertTrue(np.all(self.mesh.vnC == [10, 1, 5])) - - def test_cylMesh_nc_xyz(self): - self.assertTrue(self.mesh.nCx == 10) + def test_cylMesh_numbers(self): + self.assertTrue(self.mesh.nCx == 3) self.assertTrue(self.mesh.nCy == 1) - self.assertTrue(self.mesh.nCz == 5) + self.assertTrue(self.mesh.nCz == 2) + self.assertTrue(np.all(self.mesh.vnC == [3, 1, 2])) + + self.assertTrue(self.mesh.nN == 0) + self.assertTrue(self.mesh.nNx == 3) + self.assertTrue(self.mesh.nNy == 0) + self.assertTrue(self.mesh.nNz == 3) + self.assertTrue(np.all(self.mesh.vnN == [3, 0, 3])) + + self.assertTrue(self.mesh.nFx == 6) + self.assertTrue(np.all(self.mesh.vnFx == [3, 1, 2])) + self.assertTrue(self.mesh.nFy == 0) + self.assertTrue(np.all(self.mesh.vnFy == [3, 0, 2])) + self.assertTrue(self.mesh.nFz == 9) + self.assertTrue(np.all(self.mesh.vnFz == [3, 1, 3])) + self.assertTrue(self.mesh.nF == 15) + self.assertTrue(np.all(self.mesh.vnF == [6, 0, 9])) + + self.assertTrue(self.mesh.nEx == 0) + self.assertTrue(np.all(self.mesh.vnEx == [3, 0, 3])) + self.assertTrue(self.mesh.nEy == 9) + self.assertTrue(np.all(self.mesh.vnEy == [3, 1, 3])) + self.assertTrue(self.mesh.nEz == 0) + self.assertTrue(np.all(self.mesh.vnEz == [3, 0, 2])) + self.assertTrue(self.mesh.nE == 9) + + + if __name__ == '__main__': unittest.main()