From cc66eaf9fdcfaa431b8b2a11a07e48925478967a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 3 Aug 2013 16:08:54 -0700 Subject: [PATCH] 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()