From 16c269e01350b856e3e64e36cd200b7530167851 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Thu, 19 Mar 2015 12:48:50 -0700 Subject: [PATCH] updates to cyl mesh and minor bug fixes. --- SimPEG/Mesh/CylMesh.py | 5 ++++- SimPEG/Mesh/TensorMesh.py | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/SimPEG/Mesh/CylMesh.py b/SimPEG/Mesh/CylMesh.py index 8d2b1ae8..a891d91c 100644 --- a/SimPEG/Mesh/CylMesh.py +++ b/SimPEG/Mesh/CylMesh.py @@ -27,11 +27,14 @@ class CylMesh(BaseTensorMesh, InnerProducts, CylView): _unitDimensions = [1, 2*np.pi, 1] - def __init__(self, h, x0=None): + def __init__(self, h, x0=None, cartesianOrigin=None): BaseTensorMesh.__init__(self, h, x0) assert self.hy.sum() == 2*np.pi, "The 2nd dimension must sum to 2*pi" if self.dim == 2: print 'Warning, a disk mesh has not been tested thoroughly.' + cartesianOrigin = np.zeros(self.dim) if cartesianOrigin is None else cartesianOrigin + assert len(cartesianOrigin) == self.dim, "cartesianOrigin must be the same length as the dimension of the mesh." + self.cartesianOrigin = np.array(cartesianOrigin, dtype=float) @property diff --git a/SimPEG/Mesh/TensorMesh.py b/SimPEG/Mesh/TensorMesh.py index cd46fb85..37bfea86 100644 --- a/SimPEG/Mesh/TensorMesh.py +++ b/SimPEG/Mesh/TensorMesh.py @@ -168,21 +168,21 @@ class BaseTensorMesh(BaseRectangularMesh): """ - if key is 'Fx': + if key == 'Fx': ten = [self.vectorNx , self.vectorCCy, self.vectorCCz] - elif key is 'Fy': + elif key == 'Fy': ten = [self.vectorCCx, self.vectorNy , self.vectorCCz] - elif key is 'Fz': + elif key == 'Fz': ten = [self.vectorCCx, self.vectorCCy, self.vectorNz ] - elif key is 'Ex': + elif key == 'Ex': ten = [self.vectorCCx, self.vectorNy , self.vectorNz ] - elif key is 'Ey': + elif key == 'Ey': ten = [self.vectorNx , self.vectorCCy, self.vectorNz ] - elif key is 'Ez': + elif key == 'Ez': ten = [self.vectorNx , self.vectorNy , self.vectorCCz] - elif key is 'CC': + elif key == 'CC': ten = [self.vectorCCx, self.vectorCCy, self.vectorCCz] - elif key is 'N': + elif key == 'N': ten = [self.vectorNx , self.vectorNy , self.vectorNz ] return [t for t in ten if t is not None] @@ -204,10 +204,12 @@ class BaseTensorMesh(BaseRectangularMesh): if locType == 'N' and self._meshType == 'CYL': #NOTE: for a CYL mesh we add a node to check if we are inside in the radial direction! tensors[0] = np.r_[0.,tensors[0]] + tensors[1] = np.r_[tensors[1], 2.0*np.pi] inside = np.ones(pts.shape[0],dtype=bool) for i, tensor in enumerate(tensors): - inside = inside & (pts[:,i] >= tensor.min()) & (pts[:,i] <= tensor.max()) + TOL = np.diff(tensor).min() * 1.0e-10 + inside = inside & (pts[:,i] >= tensor.min()-TOL) & (pts[:,i] <= tensor.max()+TOL) return inside def getInterpolationMat(self, loc, locType, zerosOutside=False):