У меня есть проблемы определяется уравнением Пуассона в двух измерениях
Тангенциальный градиентный компонент, , я могу просто интегрировать, а затем применить через условие Дирихле, такое, что Чтобы одновременно наложить нормальную составляющую, ∂ u
Так что я думаю , что вариационная форма , то Я потратил много времени, пытаясь собрать воедино информацию о связанных проблемах, такую как https://answers.launchpad.net/fenics/+question/212434https://answers.launchpad.net/fenics/+question / 216323
но до сих пор не вижу, где я иду не так. Моя попытка решения до сих пор:
from dolfin import *
# Create mesh and define function space
mesh = UnitSquareMesh(64, 64)
V = FunctionSpace(mesh, "Lagrange", 1)
R = FunctionSpace(mesh, "R", 0)
W = V * R
# Create mesh function over cell facets
boundary_parts = MeshFunction("uint", mesh, mesh.topology().dim()-1)
# Mark left boundary facets as subdomain 0
class LeftBoundary(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and x[0] < DOLFIN_EPS
Gamma_Left = LeftBoundary()
Gamma_Left.mark(boundary_parts, 0)
class FarField(SubDomain):
def inside(self, x, on_boundary):
return on_boundary and ( (x[0] > 1.0-DOLFIN_EPS) \
or (x[1]<DOLFIN_EPS) or (x[1]> 1.0-DOLFIN_EPS) )
Gamma_FF = FarField()
Gamma_FF.mark(boundary_parts, 1)
# Define boundary condition
u0 = Expression("sin(x[1]*pi)")
bcs = [DirichletBC(V, u0, Gamma_Left)]
# Define variational problem
(u, lmbd) = TrialFunctions(W)
(v, d) = TestFunctions(W)
f = Expression("10*exp(-(pow(x[0] - 0.5, 2) + pow(x[1] - 0.5, 2)) / 0.02)")
g = Constant(0.0)
h = Constant(-4.0)
n = FacetNormal(mesh)
F = inner(grad(u), grad(v))*dx + d*dot(grad(u),n)*ds(0) + lmbd*dot(grad(v),n)*ds(0)-\
(f*v*dx + g*v*ds(1) + h*d*ds(0) + lmbd*h*ds(0))
a = lhs(F)
L = rhs(F)
# Compute solution
A = assemble(a, exterior_facet_domains=boundary_parts)
b = assemble(L, exterior_facet_domains=boundary_parts)
for bc in bcs: bc.apply(A, b)
w = Function(W)
solve(A, w.vector(), b, 'lu')
(u,lmbd) = w.split()
# Plot solution
plot(u, interactive=True)
который работает, но дает шумный результат, совсем не похожий на решение уравнения Пуассона. Кажется, что-то связано с объединенными функциональными пространствами, но я не могу найти ошибку.
Я был бы признателен за любую помощь или указатели в правильном направлении - большое спасибо уже!
Ура
Маркус
источник
Ответы:
Во-первых, общий момент: вы не можете прописать произвольные граничные условия для оператора дифференциальных уравнений в частных производных и ожидать, что уравнение в частных производных (которое всегда включает в себя как операторные, так и граничные условия) является корректным, т. Е. Допускает единственное решение, которое непрерывно зависит от данные - все это является необходимым условием для фактической попытки вычислить что-либо.
В зависимости от оператора, часто существует целый ряд действительных условий, которые вы можете наложить (чтобы почувствовать вкус, см. Трехтомную монографию Lions and Magenes). Однако то, что вы пытаетесь сделать (указать полный градиент, который эквивалентен условиям Дирихле и Неймана на одной и той же (части) границе для эллиптического PDE второго порядка), не входит в их число - это называется боковая проблема Кошии является некорректным: нет никакой гарантии, что данная пара граничных данных допускает решение, и даже если они существуют, нет стабильности в отношении небольших возмущений в данных. (На самом деле, это первоначальная некорректная задача в смысле Адамара и классический пример того, почему вы не можете игнорировать граничные условия при обсуждении корректности. Вы можете найти явный пример в его Лекциях по проблеме Коши в линейном дифференциальном уравнении с частными производными уравнения с 1920-х годов.)
Теперь к вашей конкретной проблеме (которая может быть примером из XY в учебнике ). Если я правильно понимаю, вы хотите решить внешнюю задачу для уравнения Пуассона, и вы берете двумерную расчетную область . У вас есть полные данные (Дирихле - с использованием трюка с тангенциальной производной - и Неймана) по (скажем) x = r . Если R достаточно велико, вы можете обосновать условие излучения (которое предписывает асимптотику вашего решения при x → ∞ ); см., например, книгу( r , R ) × ( a , b ) х = г р x → ∞ Численные методы для внешних задач
Лунъань Ин. Вопрос в том, что вы знаете об оставшихся краевых частях: и y = b .Y= а Y= б
Если вы можете наложить граничные условия (Неймана, Робина, Дирихле - которые вам, между прочим, нужно было бы зафиксировать константой в интегрировании тангенциальной производной), то достаточно использовать либо нормальные компоненты вашего градиента в качестве условия Неймана (если вы можете зафиксировать постоянный режим) или интегрировать тангенциальные компоненты как условие Дирихле. Поскольку оба условия предположительно соответствуют одной и той же функции, вы получаете одно и то же решение в любом случае.
Если вы не знаете поведения при и y = b , у вас действительно есть боковая задача Коши, и вы не можете вычислить решение, используя стандартные методы конечных элементов. Стандартным способом решения этой проблемы является метод квазиобратимости (введенный Латте и Лайонсом в 1960-е годы; см. Их книгу ), который заключается в аппроксимации задачи второго порядка задачей четвертого порядка (где вы можете - и надо - прописать два граничных условия). В вашем случае это будет означать замену - Δ u = f на - Δ u + ε Δ 2Y= а Y= б - Δ u = f для небольшого ε > 0 . (Это также можно интерпретировать как минимизацию остатка в подходящей норме и добавлениечлена регуляризации H 2 ; это связано с вашим комментарием по поводу трактовки проблемы как обратной задачи.) Вы можете показать это для совместимых данных (т. Е. Пары границ условия, которые фактически соответствуют решению u уравнения Пуассона), решения квазиобратимости u ε сходятся к u при ε → 0 .- Δ u + ε Δ2ты = е ε > 0 ЧАС2 U Uε U ε → 0
Поскольку теперь это проблема четвертого порядка с решениями в , лучший способ ее численного решения состоит в использовании смешанной конечно-элементной формулировки, такой как описанная в статье Дарде, Ханнукайнена и Хювонена. (В Интернете также есть несколько слайдов .) Не должно быть слишком сложно реализовать этот подход с использованием FEniCS.ЧАС2
источник
biharmonic
Демо. Вероятно, это не термин Лапласа, но, думаю, его можно легко добавить.Вы не можете ожидать, что решение вашей измененной проблемы будет решением проблемы Пуассона, потому что вам нужно как-то изменить проблему, чтобы сделать ее корректной.
Вы заключаете, что вы не можете ожидать, что PDE второго порядка допустит два независимых граничных условия.
derivative()
источник
Ваш подход не может работать, определенно из-за реализации и, вероятно, из-за вашей формулировки.
Наложение условий Дирихле на dolfin, в конечном итоге устанавливает соответствующие DOFs вашего тестового пространства на ноль.
Это выдержка из руководства по фенике :
Таким образом, используя стандартную процедуру в dolfin, вы не можете применять и Dirichlet, и другие условия на одной границе.
Однако, прежде чем пытаться исправить это в своей реализации, найдите правильные тестовые пространства для вашей математической формулировки (как только что упомянул @Jan Blechta).
источник