- Timestamp:
- 07/08/2008 04:44:52 PM (6 months ago)
- Location:
- trunk/fipy
- Files:
-
- 5 modified
-
meshes/common/mesh.py (modified) (1 diff)
-
meshes/numMesh/uniformGrid1D.py (modified) (1 diff)
-
meshes/numMesh/uniformGrid2D.py (modified) (1 diff)
-
meshes/numMesh/uniformGrid3D.py (modified) (1 diff)
-
variables/cellVariable.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fipy/meshes/common/mesh.py
r2571 r2642 611 611 return self._getCellsByID([self._getNearestCellID(point)])[0] 612 612 613 def _getNearestCellID(self, point): 613 def _getNearestCellID(self, points): 614 """ 615 Test cases 616 617 >>> from fipy import * 618 >>> m0 = Grid2D(dx=(.1, 1., 10.), dy=(.1, 1., 10.)) 619 >>> m1 = Grid2D(nx=2, ny=2, dx=5., dy=5.) 620 >>> print m0._getNearestCellID(m1.getCellCenters()) 621 [4 5 7 8] 622 623 """ 624 points = numerix.resize(points, (self.getNumberOfCells(), len(points), len(points[0]))).swapaxes(0,1) 625 614 626 try: 615 tmp = self.getCellCenters() - point627 tmp = self.getCellCenters()[...,numerix.newaxis] - points 616 628 except TypeError: 617 tmp = self.getCellCenters() - PhysicalField(point)618 i = numerix.argmin(numerix.add.reduce((tmp * tmp), axis = 0)) 619 return i629 tmp = self.getCellCenters()[...,numerix.newaxis] - PhysicalField(points) 630 631 return numerix.argmin(numerix.dot(tmp, tmp, axis = 0), axis=0) 620 632 621 633 ## pickling -
trunk/fipy/meshes/numMesh/uniformGrid1D.py
r2565 r2642 259 259 pass 260 260 261 def _getNearestCellID(self, points): 262 """ 263 Test cases 264 265 >>> from fipy import * 266 >>> m = Grid1D(nx=3) 267 >>> print m._getNearestCellID(([0., .9, 3.],)) 268 [0 0 2] 269 >>> print m._getNearestCellID(([1.1],)) 270 [1] 271 >>> m0 = Grid1D(nx=2, dx=1.) 272 >>> m1 = Grid1D(nx=4, dx=.5) 273 >>> print m0._getNearestCellID(m1.getCellCenters()) 274 [0 0 1 1] 275 276 """ 277 x0, = self.getCellCenters()[...,0] 278 xi, = points 279 nx, = self.getShape() 280 dx = self.dx 281 282 i = numerix.array(numerix.rint(((xi - x0) / dx)), 'l') 283 i[i < 0] = 0 284 i[i > nx - 1] = nx - 1 285 286 return i 287 261 288 def _test(self): 262 289 """ -
trunk/fipy/meshes/numMesh/uniformGrid2D.py
r2565 r2642 531 531 pass 532 532 533 def _getNearestCellID(self, points): 534 """ 535 Test cases 536 537 >>> from fipy import * 538 >>> m = Grid2D(nx=3, ny=2) 539 >>> eps = numerix.array([[1e-5, 1e-5]]) 540 >>> print m._getNearestCellID(((0., .9, 3.), (0., 2., 2.))) 541 [0 3 5] 542 >>> print m._getNearestCellID(([1.1], [1.5])) 543 [4] 544 >>> m0 = Grid2D(nx=2, ny=2, dx=1., dy=1.) 545 >>> m1 = Grid2D(nx=4, ny=4, dx=.5, dy=.5) 546 >>> print m0._getNearestCellID(m1.getCellCenters()) 547 [0 0 1 1 0 0 1 1 2 2 3 3 2 2 3 3] 548 549 """ 550 x0, y0 = self.getCellCenters()[...,0] 551 xi, yi = points 552 nx, ny = self.getShape() 553 dx, dy = self.dx, self.dy 554 555 i = numerix.array(numerix.rint(((xi - x0) / dx)), 'l') 556 i[i < 0] = 0 557 i[i > nx - 1] = nx - 1 558 559 j = numerix.array(numerix.rint(((yi - y0) / dy)), 'l') 560 j[j < 0] = 0 561 j[j > ny - 1] = ny - 1 562 563 return j * nx + i 564 565 533 566 def _test(self): 534 567 """ -
trunk/fipy/meshes/numMesh/uniformGrid3D.py
r2565 r2642 469 469 def _calcScaledGeometry(self): 470 470 pass 471 472 def _getNearestCellID(self, points): 473 x0, y0, z0 = self.getCellCenters()[...,0] 474 xi, yi, zi = points 475 nx, ny, nz = self.getShape() 476 dx, dy, dz = self.dx, self.dy, self.dz 477 478 i = numerix.array(numerix.rint(((xi - x0) / dx)), 'l') 479 i[i < 0] = 0 480 i[i > nx - 1] = nx - 1 481 482 j = numerix.array(numerix.rint(((yi - y0) / dy)), 'l') 483 j[j < 0] = 0 484 j[j > ny - 1] = ny - 1 485 486 k = numerix.array(numerix.rint(((zi - z0) / dz)), 'l') 487 k[k < 0] = 0 488 k[k > nz - 1] = nz - 1 489 490 return k * ny * nx + j * nx + i 471 491 472 492 def _test(self): -
trunk/fipy/variables/cellVariable.py
r2572 r2642 139 139 hasOld = 0) 140 140 141 def __call__(self, point=None): 142 if point is not None: 143 return self[...,self.getMesh()._getNearestCellID(point)] 141 def __call__(self, points=None, order=0): 142 r""" 143 Interpolates the CellVariable to a set of points using a 144 method that has a memory requirement on the order of Ncells by 145 Npoints in general, but uses only Ncells when the 146 CellVariable's mesh is a UniformGrid object. 147 148 :Parameters: 149 150 - `points`: A point or set of points in the format (X, Y, Z) 151 - `order`: The order of interpolation, 0 or 1, default is 0 152 153 Tests 154 155 >>> from fipy import * 156 >>> m = Grid2D(nx=3, ny=2) 157 >>> v = CellVariable(mesh=m, value=m.getCellCenters()[0]) 158 >>> print v(((0., 1.1, 1.2), (0., 1., 1.))) 159 [ 0.5 1.5 1.5] 160 >>> print v(((0., 1.1, 1.2), (0., 1., 1.)), order=1) 161 [ 0.25 1.1 1.2 ] 162 >>> m0 = Grid2D(nx=2, ny=2, dx=1., dy=1.) 163 >>> m1 = Grid2D(nx=4, ny=4, dx=.5, dy=.5) 164 >>> x, y = m0.getCellCenters() 165 >>> v0 = CellVariable(mesh=m0, value=x * y) 166 >>> print v0(m1.getCellCenters()) 167 [ 0.25 0.25 0.75 0.75 0.25 0.25 0.75 0.75 0.75 0.75 2.25 2.25 168 0.75 0.75 2.25 2.25] 169 >>> print v0(m1.getCellCenters(), order=1) 170 [ 0.125 0.25 0.5 0.625 0.25 0.375 0.875 1. 0.5 0.875 171 1.875 2.25 0.625 1. 2.25 2.625] 172 173 """ 174 if points is not None: 175 176 if order == 0: 177 return self[...,self.getMesh()._getNearestCellID(points)] 178 179 elif order == 1: 180 cellID = self.getMesh()._getNearestCellID(points) 181 return self[...,self.getMesh()._getNearestCellID(points)] + numerix.dot(points - self.getMesh().getCellCenters()[...,cellID], self.getGrad()[...,cellID]) 182 183 else: 184 raise ValueError, 'order should be either 0 or 1' 185 144 186 else: 145 187 return _MeshVariable.__call__(self) 146 188 147 189 def getCellVolumeAverage(self): 148 190 r""" … … 476 518 self.old.setValue(dict['old'].getValue()) 477 519 478 479 520 class _ReMeshedCellVariable(CellVariable): 480 521 def __init__(self, oldVar, newMesh):
FiPy: A Finite Volume PDE Solver Using Python