问题
I create a mesh using Grid2D as follows
L = 2.
N = 50
dL = L/N
mesh = Grid2D(nx=N, ny=N, dx=dL, dy=dL)
but when I try to get the cell to face distance vector:
mesh.cellToFaceDistanceVectors
the following error appears:
AttributeError Traceback (most recent call last)
<ipython-input-7-9ab623a3d90d> in <module>()
----> 1 mesh.cellToFaceDistanceVectors
/usr/local/lib/python3.6/dist-packages/fipy/meshes/abstractMesh.py in <lambda>(s)
96 rank=1)
97
---> 98 cellToFaceDistanceVectors = property(lambda s: s._cellToFaceDistanceVectors)
99 cellDistanceVectors = property(lambda s: s._cellDistanceVectors)
100 cellVolumes = property(lambda s: s._scaledCellVolumes)
AttributeError: 'UniformGrid2D' object has no attribute '_cellToFaceDistanceVectors'
It happens the same for other attributes such as:
mesh.cellDistanceVectors
Does anybody know how can I get the face to cell distance vectors?
回答1:
It doesn't look like we ever implemented that for Grids
and it looks like I never did much testing of the Robin discussion. I've filed an issue.
As a workaround, you can do
from fipy.tools import numerix
MA = numerix.MA
tmp = MA.repeat(mesh._faceCenters[..., numerix.NewAxis,:], 2, 1)
cellToFaceDistanceVectors = tmp - numerix.take(mesh._cellCenters, mesh.faceCellIDs, axis=1)
tmp = numerix.take(mesh._cellCenters, mesh.faceCellIDs, axis=1)
tmp = tmp[..., 1,:] - tmp[..., 0,:]
cellDistanceVectors = MA.filled(MA.where(MA.getmaskarray(tmp), cellToFaceDistanceVectors[:, 0], tmp))
来源:https://stackoverflow.com/questions/60073399/fipy-problem-with-grid2d-celltofacedistancevectors-gives-error-uniformgrid2d