Уравнение Пуассона: наложение полного градиента как граничного условия с помощью множителей Лагранжа

11

У меня есть проблемы определяется уравнением Пуассона в двух измерениях

2u=f(x,y),inΩ
у меня есть измерения двух компонентов градиентаu/x иu/y вдоль некоторой части границы,Γm , поэтому хотелосьввести
uxi0=gm,onΓм
и размножаются в дальнем поле.

Тангенциальный градиентный компонент, UИкс(T,0), я могу просто интегрировать, а затем применить через условие Дирихле, такое, что Чтобы одновременно наложить нормальную составляющую,u

ΓмUИкс(T,0)dsзнак равноU0
, я понял, что мне нужно пройти через множители Лагранжа.UИкс(N,0)

Так что я думаю , что вариационная форма , то Я потратил много времени, пытаясь собрать воедино информацию о связанных проблемах, такую ​​как https://answers.launchpad.net/fenics/+question/212434https://answers.launchpad.net/fenics/+question / 216323

ΩuvdxλΓm(ux(n,0)gm)vds=Ωfvdx

но до сих пор не вижу, где я иду не так. Моя попытка решения до сих пор:

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)

который работает, но дает шумный результат, совсем не похожий на решение уравнения Пуассона. Кажется, что-то связано с объединенными функциональными пространствами, но я не могу найти ошибку.
Я был бы признателен за любую помощь или указатели в правильном направлении - большое спасибо уже!
Ура
Маркус

Markus
источник
Позвольте мне сделать это правильно: у вас есть данные Дирихле и Неймана, но только по части границы?
Кристиан Клэйсон
1
Как я понял ОП, это градиент, который дается на границе. Данные Дирихле используются для наложения тангенциальной производной. Я думал, что странно навязывать и Дирихле, и Неймана на одной части границы, но, возможно, в этой конкретной ситуации это согласуется. Итак, проблема скорее в том, как применить градиентные данные на границе (с помощью множителей).
января
Правда, это даст согласованные данные, но у вас все еще есть проблема отсутствия стабильности и тот факт, что у вас есть граничные условия только на части границы.
Кристиан Клэйсон,
Хорошо, позвольте мне дать больше информации о конкретной физической проблеме, которую я пытаюсь решить. У меня есть статическое магнитное поле, которое я могу разумно считать вращательно-симметричным, таким образом, 2D. Я измеряю радиальную и осевую составляющие вектора плотности магнитного поля вдоль линии, достаточно близкой к оси вращения, и хотел бы видеть это магнитное поле на значительном расстоянии от этой оси вращения. Комбинация Дирихле и Неймана до нашей эры была просто моей идеей подхода к проблеме, как красноречиво описал Ян, - наложение градиентных данных на границу.
Маркус
1
ОК, это существенно меняет дело. То есть у вас есть неограниченная область и производная информация о всей «конечной» части границы?
Кристиан Клэйсон,

Ответы:

8

Во-первых, общий момент: вы не можете прописать произвольные граничные условия для оператора дифференциальных уравнений в частных производных и ожидать, что уравнение в частных производных (которое всегда включает в себя как операторные, так и граничные условия) является корректным, т. Е. Допускает единственное решение, которое непрерывно зависит от данные - все это является необходимым условием для фактической попытки вычислить что-либо.

В зависимости от оператора, часто существует целый ряд действительных условий, которые вы можете наложить (чтобы почувствовать вкус, см. Трехтомную монографию Lions and Magenes). Однако то, что вы пытаетесь сделать (указать полный градиент, который эквивалентен условиям Дирихле и Неймана на одной и той же (части) границе для эллиптического PDE второго порядка), не входит в их число - это называется боковая проблема Кошии является некорректным: нет никакой гарантии, что данная пара граничных данных допускает решение, и даже если они существуют, нет стабильности в отношении небольших возмущений в данных. (На самом деле, это первоначальная некорректная задача в смысле Адамара и классический пример того, почему вы не можете игнорировать граничные условия при обсуждении корректности. Вы можете найти явный пример в его Лекциях по проблеме Коши в линейном дифференциальном уравнении с частными производными уравнения с 1920-х годов.)

Теперь к вашей конкретной проблеме (которая может быть примером из XY в учебнике ). Если я правильно понимаю, вы хотите решить внешнюю задачу для уравнения Пуассона, и вы берете двумерную расчетную область . У вас есть полные данные (Дирихле - с использованием трюка с тангенциальной производной - и Неймана) по (скажем) x = r . Если R достаточно велико, вы можете обосновать условие излучения (которое предписывает асимптотику вашего решения при x ); см., например, книгу(р,р)×(a,б)Иксзнак равноррИксЧисленные методы для внешних задач Лунъань Ин. Вопрос в том, что вы знаете об оставшихся краевых частях: и y = b .Yзнак равноaYзнак равноб

  1. Если вы можете наложить граничные условия (Неймана, Робина, Дирихле - которые вам, между прочим, нужно было бы зафиксировать константой в интегрировании тангенциальной производной), то достаточно использовать либо нормальные компоненты вашего градиента в качестве условия Неймана (если вы можете зафиксировать постоянный режим) или интегрировать тангенциальные компоненты как условие Дирихле. Поскольку оба условия предположительно соответствуют одной и той же функции, вы получаете одно и то же решение в любом случае.

  2. Если вы не знаете поведения при и y = b , у вас действительно есть боковая задача Коши, и вы не можете вычислить решение, используя стандартные методы конечных элементов. Стандартным способом решения этой проблемы является метод квазиобратимости (введенный Латте и Лайонсом в 1960-е годы; см. Их книгу ), который заключается в аппроксимации задачи второго порядка задачей четвертого порядка (где вы можете - и надо - прописать два граничных условия). В вашем случае это будет означать замену - Δ u = f на - Δ u + ε Δ 2Yзнак равноaYзнак равноб-ΔUзнак равное для небольшого ε > 0 . (Это также можно интерпретировать как минимизацию остатка в подходящей норме и добавлениечлена регуляризации H 2 ; это связано с вашим комментарием по поводу трактовки проблемы как обратной задачи.) Вы можете показать это для совместимых данных (т. Е. Пары границ условия, которые фактически соответствуют решению u уравнения Пуассона), решения квазиобратимости u ε сходятся к u при ε 0 .-ΔU+εΔ2Uзнак равноеε>0ЧАС2UUεUε0

    Поскольку теперь это проблема четвертого порядка с решениями в , лучший способ ее численного решения состоит в использовании смешанной конечно-элементной формулировки, такой как описанная в статье Дарде, Ханнукайнена и Хювонена. (В Интернете также есть несколько слайдов .) Не должно быть слишком сложно реализовать этот подход с использованием FEniCS.ЧАС2

Кристиан Клэйсон
источник
Для реализации смешанных элементов в FEniCS см. biharmonicДемо. Вероятно, это не термин Лапласа, но, думаю, его можно легко добавить.
Ян Блехта
Привет Кристиан, спасибо за ваше предложение! У меня сложилось впечатление, что уравнение Пуассона было доброкачественным в том, что касается числовой устойчивости - спасибо за указание на это. Я прочитаю об этом, как вы предложили. Не уверен, что это существенно изменит ситуацию, но, как уже упоминалось в комментарии далее, комбинация Дирихле-Неймана, возможно, вводит в заблуждение. «Все», который я ищу, - это способ наложения градиентных данных на границе.
Маркус
2
Уравнение Пуассона является доброкачественным, но это не то уравнение, которое вы пытаетесь решить :) (Граничные условия являются неотъемлемой частью уравнения; одного оператора недостаточно для определения устойчивости.)
Кристиан Клэйсон,
Хорошо, это дает мне кое-что, чтобы пережевать. Спасибо всем за ваше время, советы и терпение - и мои извинения за попадание в ловушку XY ...
Маркус
4

Вы не можете ожидать, что решение вашей измененной проблемы будет решением проблемы Пуассона, потому что вам нужно как-то изменить проблему, чтобы сделать ее корректной.

F(U,λ)знак равноΩ12|U|2dИкс-ΩеUdИкс-ΓNграммUdS+ΓNλ(U-UD)dS
(U,λ)В×L2(ΓN)Взнак равно{vЧАС1;v|ΓDзнак равно0}ΓDUDΓNF(U)
0знак равноDF(U)[v]знак равноΩUvdИкс-ΩеvdИкс-ΓNграммvdSvВ,
ΓNΓD
0знак равноDF(U,λ)[v,μ]знак равноΩUvdИкс-ΩеvdИкс-ΓNграммvdS+ΓNλvdS+ΓNμ(U-UD)dS(v,μ)В×L2(ΓN),
-ΔUзнак равноеUNзнак равнограмм-λΓNΓN

λ«|грамм|

ΓDvВΓD

Вы заключаете, что вы не можете ожидать, что PDE второго порядка допустит два независимых граничных условия.


F(U,λ)DF(U,λ)[v,μ]derivative()

F(U,λ)λL2(ΓN)λL2(Ω)λр

Ян Блехта
источник
2U-еUЧАС1
Моя математика, к сожалению, не совсем готова, и я не уверен в математических последствиях банаховых пространств, но я изо всех сил пытаюсь понять, почему это уравнение не является решением уравнения Пуассона, когда член множителя Лагранжа исчезает. С физической точки зрения, решение (о практической задаче, которую я описал, я не имею в виду решение в математическом смысле) должно существовать настолько, насколько я могу видеть
Маркус
Таким образом, это скорее обратная задача - найти граничное условие для дальнего поля, которое вместе с условием Дирихле, которое вы можете наложить, дает наблюдаемый нормальный градиент на границе, на которой вы измеряете?
Маркус
3

Ваш подход не может работать, определенно из-за реализации и, вероятно, из-за вашей формулировки.

Наложение условий Дирихле на dolfin, в конечном итоге устанавливает соответствующие DOFs вашего тестового пространства на ноль.

Это выдержка из руководства по фенике :

Глава 3.3.9 (конец): Применение граничного условия Дирихле к линейной системе идентифицирует все степени свободы, которые должны быть установлены на заданное значение, и модифицирует линейную систему так, чтобы ее решение учитывало граничное условие. Это достигается путем обнуления и вставки 1 по диагонали строк матрицы, соответствующих значениям Дирихле, и вставкой значения Дирихле в соответствующую запись правого вектора вектора [...]

vΓм

Таким образом, используя стандартную процедуру в dolfin, вы не можете применять и Dirichlet, и другие условия на одной границе.

Однако, прежде чем пытаться исправить это в своей реализации, найдите правильные тестовые пространства для вашей математической формулировки (как только что упомянул @Jan Blechta).

январь
источник
Я понимаю вашу точку зрения - я думаю, что моя формулировка может не совсем отражать то, что я реализовал - мои извинения. Вариационный принцип - только туманное воспоминание, и я пытаюсь снова обдумать это. Я прочитал руководство вперед и назад вместе с некоторыми примерами кода FEniCS, реализующего множители Лагранжа. Я думал, что проблема, которую вы поднимаете, является именно той причиной, по которой вы будете использовать вторую функцию тестирования «d».
Маркус
Я согласен с @JanBlechta. Сначала вам нужно найти подходящее место для множителя, что нетривиально. Возможно, тексты по оптимизации ограничений PDE, где используются множители для включения побочных условий, дадут некоторые полезные идеи. В этой статье для учета зависящих от времени условий Дирихле используется множитель.
января