В настоящее время я пытаюсь решить уравнение Монжа-Ампера в FEniCS, реализуя нестандартное граничное условие.
Граничное условие требует, чтобы градиент решения отображал границу исходной области в другую заданную область.
Когда в качестве целевого домена задан единичный круг, реализация довольно проста, и я справился с ней, вставив в свою систему следующее:
+(dot(grad(uh),grad(uh))-1)*vh*ds\ (1)
где uh — пробная функция, а vh — пробная функция.
При рассмотрении более сложного целевого пространства, такого как квадрат [−1,1]×[−1,1], все становится сложнее, так как его не так просто решить вручную, поэтому моя идея состоит в том, чтобы использовать функцию расстояния .
Для этого я решил стабилизированную версию уравнения Эйконала, решением которой является функция расстояния со знаком, тогда моя идея состояла в том, чтобы заменить (1) на:
+E(grad(uh))*vh*ds
Где E — решение уравнения Эйконала, но когда я пытаюсь это реализовать, я получаю ошибку, говорящую о том, что функция ожидает скалярные аргументы,
Есть ли способ запрограммировать решение так, чтобы оно принимало grad(uh) в качестве входных данных во второй дифференциальной форме?
Спасибо всем за ваше время!