FIPY: проблема с Grid2D cellToFaceDistanceVectors выдает ошибку 'UniformGrid2D' объект не имеет атрибута _cellToFaceDistanceVectors ' - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю себя sh, используя Grid2D следующим образом

L = 2.
N = 50
dL = L/N
mesh = Grid2D(nx=N, ny=N, dx=dL, dy=dL)

, но когда я пытаюсь получить вектор расстояния от ячейки к лицу:

mesh.cellToFaceDistanceVectors

появляется следующая ошибка:

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'

То же самое происходит и с другими атрибутами, такими как:

mesh.cellDistanceVectors

Кто-нибудь знает, как я могу получить векторы расстояния до ячейки?

1 Ответ

0 голосов
/ 05 февраля 2020

Не похоже, что мы когда-либо реализовывали это для Grids, и, похоже, я никогда не проводил много испытаний в обсуждении Робина. Я подал вопрос .

В качестве обходного пути вы можете сделать

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))
...