fipy - 水平集 1D
fipy - level set 1D
我正在尝试 运行 下面的代码来解决水平集 1D 问题(fipy 网页中的示例)。我收到此错误:
回溯(最后一次调用):
文件 "C:/Users/sgowda/Documents/pde solver code/level set 1D.py",第 20 行,位于
var.calcDistanceFunction()
文件 "C:\Users\sgowda\AppData\Local\Continuum\Anaconda\lib\site-packages\fipy\variables\distanceVariable.py",第 335 行,在 calcDistanceFunction 中
引发异常,"Neither lsmlib
nor skfmm
can be found on the $PATH"
例外:在 $PATH
上找不到 lsmlib
和 skfmm
你能告诉我如何解决这个问题吗?我试着查看 distancefucntion() 但我不确定这个错误是什么意思?
from fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm, Viewer, DistanceVariable
import matplotlib.pyplot as plt
velocity = 1.
dx = 1.
nx = 10
timeStepDuration = 1.
steps = 2
L = nx * dx
interfacePosition = L / 5.
from fipy.tools import serialComm
mesh = Grid1D(dx=dx, nx=nx, communicator=serialComm)
var = DistanceVariable(name='level set variable',
mesh=mesh,
value=-1.,
hasOld=1)
var.setValue(1., where=mesh.cellCenters[0] > interfacePosition)
var.calcDistanceFunction()
advEqn = TransientTerm() + FirstOrderAdvectionTerm(velocity)
viewer = Viewer(vars=var, datamin=-10., datamax=10.)
viewer.plot()
for step in range(steps):
var.updateOld()
advEqn.solve(var, dt=timeStepDuration)
viewer.plot()
plt.show()
FiPy 没有原生的水平集实现,因此使用 LSMLIB 或 Scikit-fmm 来提供水平集/快速行进方法功能。
要查看您是否已正确安装它们,请使用
$ python -c “import pylsmlib; pylsmlib.test()”
或
$ python -c “import skfmm; skfmm.test()”
进行测试。
FiPy 文档中概述了此要求,请参阅 http://www.ctcms.nist.gov/fipy/INSTALLATION.html#level-set-packages
最初安装 Scikit-fmm 可能更容易,请参阅 https://pythonhosted.org/scikit-fmm/,但是
$ pip install scikit-fmm
应该可以。
我正在尝试 运行 下面的代码来解决水平集 1D 问题(fipy 网页中的示例)。我收到此错误:
回溯(最后一次调用):
文件 "C:/Users/sgowda/Documents/pde solver code/level set 1D.py",第 20 行,位于
var.calcDistanceFunction()
文件 "C:\Users\sgowda\AppData\Local\Continuum\Anaconda\lib\site-packages\fipy\variables\distanceVariable.py",第 335 行,在 calcDistanceFunction 中
引发异常,"Neither lsmlib
nor skfmm
can be found on the $PATH"
例外:在 $PATH
lsmlib
和 skfmm
你能告诉我如何解决这个问题吗?我试着查看 distancefucntion() 但我不确定这个错误是什么意思?
from fipy import Grid1D, CellVariable, TransientTerm, DiffusionTerm, Viewer, DistanceVariable
import matplotlib.pyplot as plt
velocity = 1.
dx = 1.
nx = 10
timeStepDuration = 1.
steps = 2
L = nx * dx
interfacePosition = L / 5.
from fipy.tools import serialComm
mesh = Grid1D(dx=dx, nx=nx, communicator=serialComm)
var = DistanceVariable(name='level set variable',
mesh=mesh,
value=-1.,
hasOld=1)
var.setValue(1., where=mesh.cellCenters[0] > interfacePosition)
var.calcDistanceFunction()
advEqn = TransientTerm() + FirstOrderAdvectionTerm(velocity)
viewer = Viewer(vars=var, datamin=-10., datamax=10.)
viewer.plot()
for step in range(steps):
var.updateOld()
advEqn.solve(var, dt=timeStepDuration)
viewer.plot()
plt.show()
FiPy 没有原生的水平集实现,因此使用 LSMLIB 或 Scikit-fmm 来提供水平集/快速行进方法功能。
要查看您是否已正确安装它们,请使用
$ python -c “import pylsmlib; pylsmlib.test()”
或
$ python -c “import skfmm; skfmm.test()”
进行测试。
FiPy 文档中概述了此要求,请参阅 http://www.ctcms.nist.gov/fipy/INSTALLATION.html#level-set-packages
最初安装 Scikit-fmm 可能更容易,请参阅 https://pythonhosted.org/scikit-fmm/,但是
$ pip install scikit-fmm
应该可以。