mirror of
https://github.com/wassname/simpeg.git
synced 2026-09-11 12:44:29 +08:00
Refactor gridding code.
This commit is contained in:
+34
-26
@@ -59,9 +59,6 @@ class TreeObject(object):
|
|||||||
@property
|
@property
|
||||||
def isleaf(self): return self.children is None
|
def isleaf(self): return self.children is None
|
||||||
|
|
||||||
@property
|
|
||||||
def center(self): return self.x0
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def branchdepth(self):
|
def branchdepth(self):
|
||||||
if self.isleaf:
|
if self.isleaf:
|
||||||
@@ -77,6 +74,8 @@ class TreeNode(TreeObject):
|
|||||||
self.x0 = np.array(x0, dtype=float)
|
self.x0 = np.array(x0, dtype=float)
|
||||||
self.mesh.nodes.add(self)
|
self.mesh.nodes.add(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def center(self): return self.x0
|
||||||
|
|
||||||
class TreeEdge(TreeObject):
|
class TreeEdge(TreeObject):
|
||||||
"""docstring for TreeEdge"""
|
"""docstring for TreeEdge"""
|
||||||
@@ -126,6 +125,9 @@ class TreeEdge(TreeObject):
|
|||||||
line = np.c_[self.node0.x0, self.node1.x0].T
|
line = np.c_[self.node0.x0, self.node1.x0].T
|
||||||
ax.plot(line[:,0], line[:,1], zs=line[:,2], **lineOpts)
|
ax.plot(line[:,0], line[:,1], zs=line[:,2], **lineOpts)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def center(self):
|
||||||
|
return 0.5*(self.node0.x0 + self.node1.x0)
|
||||||
|
|
||||||
class TreeFace(TreeObject):
|
class TreeFace(TreeObject):
|
||||||
"""docstring for TreeFace"""
|
"""docstring for TreeFace"""
|
||||||
@@ -757,66 +759,72 @@ class TreeMesh(object):
|
|||||||
@property
|
@property
|
||||||
def nEz(self): return None if self.dim < 3 else len(self.edgesZ)
|
def nEz(self): return None if self.dim < 3 else len(self.edgesZ)
|
||||||
|
|
||||||
|
def _grid(self, key):
|
||||||
|
self.number()
|
||||||
|
sObjs = {'CC':self.sortedCells,
|
||||||
|
'N':self.sortedNodes,
|
||||||
|
'Fx': self.sortedFaceX,
|
||||||
|
'Fy': self.sortedFaceY,
|
||||||
|
'Fz': getattr(self,'sortedFaceZ', None),
|
||||||
|
'Ex': getattr(self,'sortedEdgeX', self.sortedFaceY),
|
||||||
|
'Ey': getattr(self,'sortedEdgeY', self.sortedFaceX),
|
||||||
|
'Ez': getattr(self,'sortedEdgeZ', None)}[key]
|
||||||
|
G = np.empty((len(sObjs),self.dim))
|
||||||
|
for ii, obj in enumerate(sObjs):
|
||||||
|
G[ii,:] = obj.center
|
||||||
|
return G
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridCC(self):
|
def gridCC(self):
|
||||||
if getattr(self, '_gridCC', None) is None:
|
if getattr(self, '_gridCC', None) is None:
|
||||||
self.number()
|
self._gridCC = self._grid('CC')
|
||||||
self._gridCC = np.empty((self.nC,self.dim))
|
|
||||||
for ii, cell in enumerate(self.sortedCells):
|
|
||||||
self._gridCC[ii,:] = cell.center
|
|
||||||
return self._gridCC
|
return self._gridCC
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridN(self):
|
def gridN(self):
|
||||||
if getattr(self, '_gridN', None) is None:
|
if getattr(self, '_gridN', None) is None:
|
||||||
self.number()
|
self._gridN = self._grid('N')
|
||||||
self._gridN = np.empty((self.nN,self.dim))
|
|
||||||
for ii, node in enumerate(self.sortedNodes):
|
|
||||||
self._gridN[ii,:] = node.center
|
|
||||||
return self._gridN
|
return self._gridN
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridFx(self):
|
def gridFx(self):
|
||||||
if getattr(self, '_gridFx', None) is None:
|
if getattr(self, '_gridFx', None) is None:
|
||||||
self.number()
|
self._gridFx = self._grid('Fx')
|
||||||
self._gridFx = np.empty((self.nFx,self.dim))
|
|
||||||
for ii, face in enumerate(self.sortedFaceX):
|
|
||||||
self._gridFx[ii,:] = face.center
|
|
||||||
return self._gridFx
|
return self._gridFx
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridFy(self):
|
def gridFy(self):
|
||||||
if getattr(self, '_gridFy', None) is None:
|
if getattr(self, '_gridFy', None) is None:
|
||||||
self.number()
|
self._gridFy = self._grid('Fy')
|
||||||
self._gridFy = np.empty((self.nFy,self.dim))
|
|
||||||
for ii, face in enumerate(self.sortedFaceY):
|
|
||||||
self._gridFy[ii,:] = face.center
|
|
||||||
return self._gridFy
|
return self._gridFy
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridFz(self):
|
def gridFz(self):
|
||||||
if self.dim == 2: return None
|
if self.dim == 2: return None
|
||||||
if getattr(self, '_gridFz', None) is None:
|
if getattr(self, '_gridFz', None) is None:
|
||||||
self.number()
|
self._gridFz = self._grid('Fz')
|
||||||
self._gridFz = np.emptz((self.nFz,self.dim))
|
|
||||||
for ii, face in enumerate(self.sortedFaceZ):
|
|
||||||
self._gridFz[ii,:] = face.center
|
|
||||||
return self._gridFz
|
return self._gridFz
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridEx(self):
|
def gridEx(self):
|
||||||
if self.dim == 2: return self.gridFy
|
if self.dim == 2: return self.gridFy
|
||||||
else: raise NotImplementedError('Edge Grid not yet implemented')
|
if getattr(self, '_gridEx', None) is None:
|
||||||
|
self._gridEx = self._grid('Ex')
|
||||||
|
return self._gridEx
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridEy(self):
|
def gridEy(self):
|
||||||
if self.dim == 2: return self.gridFx
|
if self.dim == 2: return self.gridFx
|
||||||
else: raise NotImplementedError('Edge Grid not yet implemented')
|
if getattr(self, '_gridEy', None) is None:
|
||||||
|
self._gridEy = self._grid('Ey')
|
||||||
|
return self._gridEy
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gridEz(self):
|
def gridEz(self):
|
||||||
if self.dim == 2: return None
|
if self.dim == 2: return None
|
||||||
else: raise NotImplementedError('Edge Grid not yet implemented')
|
if getattr(self, '_gridEz', None) is None:
|
||||||
|
self._gridEz = self._grid('Ez')
|
||||||
|
return self._gridEz
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def vol(self):
|
def vol(self):
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class TestOcTreeObjects(unittest.TestCase):
|
|||||||
for e in cell.edges:
|
for e in cell.edges:
|
||||||
self.assertTrue(cell.edges[e].edgeType==e[1].lower())
|
self.assertTrue(cell.edges[e].edgeType==e[1].lower())
|
||||||
|
|
||||||
# print self.Mr.nEx
|
print self.Mr.nEx
|
||||||
# self.assertTrue(self.Mr.nN == 22)
|
# self.assertTrue(self.Mr.nN == 22)
|
||||||
# self.assertTrue(self.Mr.nEx == 22)
|
# self.assertTrue(self.Mr.nEx == 22)
|
||||||
|
|
||||||
@@ -192,8 +192,7 @@ class TestOcTreeObjects(unittest.TestCase):
|
|||||||
x = np.r_[0.0,0.25,0.5,1.0,0.0,0.25,0.5,0.0,0.25,0.5,0.0,0.25,0.5]
|
x = np.r_[0.0,0.25,0.5,1.0,0.0,0.25,0.5,0.0,0.25,0.5,0.0,0.25,0.5]
|
||||||
y = np.r_[0.25,0.25,0.25,0.5,0.75,0.75,0.75,0.25,0.25,0.25,0.75,0.75,0.75]
|
y = np.r_[0.25,0.25,0.25,0.5,0.75,0.75,0.75,0.25,0.25,0.25,0.75,0.75,0.75]
|
||||||
z = np.r_[0.25,0.25,0.25,0.5,0.25,0.25,0.25,0.75,0.75,0.75,0.75,0.75,0.75]
|
z = np.r_[0.25,0.25,0.25,0.5,0.25,0.25,0.25,0.75,0.75,0.75,0.75,0.75,0.75]
|
||||||
# print self.Mr.gridFx - np.c_[x,y,z]
|
self.assertTrue(np.linalg.norm((np.c_[x,y,z]-self.Mr.gridFx).flatten()) == 0)
|
||||||
# self.assertTrue(np.linalg.norm((np.c_[x,y,z]-self.Mr.gridFx).flatten()) == 0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user