Очевидная проблема с приведенным выше кодом заключается в том, что dx
и nx
перепутаны. dx
- это интервал me sh, то есть число с плавающей запятой, в то время как nx
- количество ячеек me sh, которое является целым числом. Итак, третья строка должна быть,
mesh= Grid2D(dx=0.001,nx=100,dy=0.0005,ny=100)
Это, по крайней мере, заставляет проблему работать без ошибок. Однако решение не очень интересно, так как исходный член и начальное условие везде равны нулю, поэтому результат везде равен нулю.
Также стоит рассмотреть следующее
- FiPy на самом деле не предназначен для гиперболических c задач, которые требуют точного решения высокого порядка для точного решения. Это решит, но, возможно, не так точно (это может быть хорошо в равновесии).
- Исходный член является нелинейным, поэтому потребуется много итераций для достижения решения.
- Это хорошая идея иметь переходный член в уравнении этого типа и переходить к равновесию.