Python pde решение с использованием fipy дает значение ошибки - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь решить pde, используя пакет fipy в python. Код, который я написал для этого кода, был прикреплен.

!pip install fipy
from fipy import *
mesh= Grid2D(nx=0.001,dx=100,ny=0.0005,dy=100)
phil=CellVariable(name='Sol variable',mesh=mesh)
phil.constrain(0,mesh.facesBottom)
phil.constrain(1,mesh.facesTop)
n=1.7*10**(-6)*((0.026*numerix.exp(phil/0.026)+phil-0.026)+2.25*10**(-10)*(0.026*numerix.exp(phil/0.026)-phil-0.026))**(0.5)
eq=(PowerLawConvectionTerm(coeff=(0.,1.))+ImplicitSourceTerm(coeff=n))
eq.solve(var=phil)

Когда я пытаюсь запустить код, в последней строке появляется ошибка: k превышает размеры матрицы. Буду признателен за любую помощь в этом.

1 Ответ

1 голос
/ 04 мая 2020

Очевидная проблема с приведенным выше кодом заключается в том, что dx и nx перепутаны. dx - это интервал me sh, то есть число с плавающей запятой, в то время как nx - количество ячеек me sh, которое является целым числом. Итак, третья строка должна быть,

mesh= Grid2D(dx=0.001,nx=100,dy=0.0005,ny=100)

Это, по крайней мере, заставляет проблему работать без ошибок. Однако решение не очень интересно, так как исходный член и начальное условие везде равны нулю, поэтому результат везде равен нулю.

Также стоит рассмотреть следующее

  • FiPy на самом деле не предназначен для гиперболических c задач, которые требуют точного решения высокого порядка для точного решения. Это решит, но, возможно, не так точно (это может быть хорошо в равновесии).
  • Исходный член является нелинейным, поэтому потребуется много итераций для достижения решения.
  • Это хорошая идея иметь переходный член в уравнении этого типа и переходить к равновесию.
...