Как явным образом установить поток нормали к граничной грани в сетке fipy как конкретное значение, не ограничивая компоненты потока внутри грани?Как вы определяете граничное условие Неймана (фиксированный поток от нормали к лицу) в Fipy?
Граничное условие Неймана может быть определено как: (1) постоянная составляющая потока, нормальная к граничной грани, или (2) как полная спецификация потока на грани. Условие fipy по умолчанию - это первое (значение = 0), но явный метод (faceGrad.constrain) является последним. Эту проблему можно понять, добавив следующий код в конец примера fipy diffusion.mesh20x20 и отметив разные результаты градиента градиента.
facesNeumann = mesh.exteriorFaces & ~facesTopLeft & ~facesBottomRight
print 'grad(phi) with default Neumann BC...'
print phi.faceGrad.value.T[facesNeumann.value]
phi.faceGrad.constrain(0.,facesNeumann)
DiffusionTerm().solve(var=phi)
print 'and with explicit Neumann BC...'
print phi.faceGrad.value.T[facesNeumann.value]
Что делать, если вы хотите, чтобы одно граничное условие зависело от величины градиента другого и как таковое, только хотел установить нормальный компонент. Скажем, 'phi1.constrain (fp.numerix.dot (phi2.faceGrad, phi2.faceGrad))', где мы хотим указать только нормальный компонент 'phi2' на границе. Этот ответ означает, что это не сработает? (У меня нет хорошего примера, просто любопытно). Может быть, ответ @ jeguyer подходит в этом случае? – muon
@muon; Я думаю, что метод ограничения терпит неудачу для большинства произвольных сложных взаимозависимых граничных условий и требуется метод источника-источника (ответ @jeguyer). – wd15
Делает смысл. Благодаря! – muon