Fipy Grid3D'索引只能有一个省略号'错误

时间:2018-03-01 11:10:29

标签: python fipy

我很兴趣使用fipy解决微分方程。

当我使用Grid2D时,以下代码正常工作。

from fipy import *

mesh = Grid2D(nx=3, ny=3)
#mesh = Grid3D(nx=3, ny=3, nz=3)
phi = CellVariable(name='solution variable', mesh=mesh, value=0.)
phi.constrain(0, mesh.facesLeft)
phi.constrain(10, mesh.facesRight)
coeff = CellVariable(mesh=mesh, value=1.)

eq = DiffusionTerm(coeff) == 0
eq.solve(var=phi)

当我使用Grid3D而不是Grid2D(注释行)时,我收到以下错误:

Traceback (most recent call last):
  File "/home/user/Programming/python/fdms/forSo.py", line 11, in <module>
    eq.solve(var=phi)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/terms/term.py", line 211, in solve
    solver = self._prepareLinearSystem(var, solver, boundaryConditions, dt)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/terms/term.py", line 169, in _prepareLinearSystem
    diffusionGeomCoeff=self._getDiffusionGeomCoeff(var),
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/terms/abstractDiffusionTerm.py", line 458, in _getDiffusionGeomCoeff
    return self._getGeomCoeff(var)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/terms/term.py", line 465, in _getGeomCoeff
    self.geomCoeff = self._calcGeomCoeff(var)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/terms/abstractDiffusionTerm.py", line 177, in _calcGeomCoeff
    tmpBop = (coeff * FaceVariable(mesh=mesh, value=mesh._faceAreas) / mesh._cellDistances)[numerix.newaxis, :]
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/variables/variable.py", line 1151, in __mul__
    return self._BinaryOperatorVariable(lambda a,b: a*b, other)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/variables/variable.py", line 1116, in _BinaryOperatorVariable
    if not v.unit.isDimensionless() or len(v.shape) > 3:
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/variables/variable.py", line 255, in _getUnit
    return self._extractUnit(self.value)
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/variables/variable.py", line 538, in _getValue
    value = self._calcValue()
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/variables/cellToFaceVariable.py", line 48, in _calcValue
    alpha = self.mesh._faceToCellDistanceRatio
  File "/home/user/Programs/miniconda2/envs/FipyEnv2/lib/python3.6/site-packages/fipy/meshes/uniformGrid3D.py", line 269, in _faceToCellDistanceRatio
    XZdis[..., 0,...] = 1
IndexError: an index can only have a single ellipsis ('...')

我使用https://www.ctcms.nist.gov/fipy/INSTALLATION.html中的“Recomended method”安装了fipy。我尝试使用Miniconda安装Pthon 3.6和Python 2.7并且出现了相同的错误。

如何使用Grid3D求解方程?

1 个答案:

答案 0 :(得分:1)

这是因为较新版本的numpy不太容忍我们草率的语法。您可以查看我们的develop source branch或将this change添加到您的代码中。