fipy: двумерное уравнение Лапласа: граничные условия не принимаются

from fipy import CellVariable, Grid2D, DiffusionTerm
nx = 20         # grid size on coordinate axes
dx = 1          # grid spacing
ny = nx; dy = dx; L = dx*nx
mesh = Grid2D(dx=dx, dy=dy, nx=nx, ny=ny)
phi = CellVariable(name = "phi", mesh = mesh, value = 0.5)
eq = (0. == DiffusionTerm( coeff=1., var=phi))
valueTopLeft = 0.; valueBottomRight = 1.
phi.constrain(valueTopLeft, where = mesh.facesLeft)
phi.constrain(valueBottomRight, where = mesh.facesRight)
eq.solve(var=phi)
print (phi.value[:])

Что не так с этим кодом? Код выдает нулевое решение, что неверно.


person Ekkehard Holzbecher    schedule 27.02.2021    source источник
comment
См. документы: вам нужно определить граничные условия на внешних гранях, иначе результат будет нулевым.   -  person Richard Barber    schedule 27.02.2021
comment
Ограничения Дирихле, указанные слева и справа, в порядке. Верхняя и нижняя грани естественным образом получают условие нулевого потока.   -  person jeguyer    schedule 28.02.2021


Ответы (2)


Существует ошибка в FiPy, если вы указываете шаг сетки как целое число. Изменение на dx = 1. приводит к

[0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375
 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975
 0.025 0.075 0.125 0.175 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575
 0.625 0.675 0.725 0.775 0.825 0.875 0.925 0.975 0.025 0.075 0.125 0.175
 0.225 0.275 0.325 0.375 0.425 0.475 0.525 0.575 0.625 0.675 0.725 0.775
 0.825 0.875 0.925 0.975]
person jeguyer    schedule 28.02.2021
comment
Если это ответило на ваш вопрос, примите его. - person jeguyer; 01.03.2021

Большое спасибо. Я должен был найти проблему сам. Теперь я готов к более причудливым вещам!

person Ekkehard Holzbecher    schedule 01.03.2021