Poisson-Gleichung: Über Lagrange-Multiplikatoren den vollen Gradienten als Randbedingung auferlegen

11

Ich habe ein physikalisches Problem, das durch die Poisson-Gleichung in zwei Dimensionen bestimmt wird Ich habe Messungen der beiden Gradientenkomponentenu /x undu /y entlang eines Teils der Grenze Γ m , möchte alsou auferlegen

2u=f(x,y),inΩ
u/xu/yΓm und breiten sich ins Fernfeld aus.
uxi0=gm,onΓm

Die tangentiale Gradientenkomponente kann ich einfach integrieren und dann durch eine Dirichlet-Bedingung erzwingen, so dass Γmuux(t,0) Um gleichzeitig die Normalkomponente aufzuerlegen,u

Γmux(t,0)ds=u0
, ich habe festgestellt, dass ich über Lagrange-Multiplikatoren gehen müsste.ux(n,0)

Also ich denke , das Variationsform dann ist Ich habe lange versucht, es aus den Informationen zu verwandten Problemen wie https://answers.launchpad.net/fenics/+question/212434https://answers.launchpad.net/fenics/+question zusammenzusetzen / 216323

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

kann aber immer noch nicht sehen, wo ich falsch liege. Mein bisheriger Lösungsversuch ist:

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)

Dies läuft, liefert aber ein verrauschtes Ergebnis, das überhaupt keiner Lösung für eine Poisson-Gleichung ähnelt. Es scheint etwas mit den kombinierten Funktionsräumen zu tun zu haben, aber ich kann den Fehler nicht finden.
Ich würde mich über Hilfe oder Hinweise in die richtige Richtung freuen - vielen Dank bereits!
Prost
Markus

Markus
quelle
Lassen Sie mich das richtig machen: Sie haben sowohl Dirichlet- als auch Neumann-Daten, aber nur auf einem Teil der Grenze?
Christian Clason
1
Wie ich das OP verstanden habe, ist es der Gradient, der an der Grenze gegeben ist. Die Dirichlet-Daten werden verwendet, um die tangentiale Ableitung aufzuerlegen. Ich fand es seltsam, sowohl Dirichlet als auch Neumann an einem Teil der Grenze aufzuerlegen, aber vielleicht ist es in dieser besonderen Situation konsistent. Das Problem ist also eher, wie Gradientendaten an der Grenze (über Multiplikatoren) angewendet werden.
Jan
Das würde zwar konsistente Daten liefern, aber Sie haben immer noch das Problem der mangelnden Stabilität und der Tatsache, dass Sie nur an einem Teil der Grenze Randbedingungen haben.
Christian Clason
Ok, lassen Sie mich weitere Informationen zu dem spezifischen physischen Problem geben, das ich zu lösen versuche. Ich habe ein statisches Magnetfeld, von dem ich vernünftigerweise annehmen kann, dass es rotationssymmetrisch ist, also 2D. Ich messe radiale und axiale Komponenten des Magnetfelddichtevektors entlang einer Linie ziemlich nahe an der Rotationsachse und möchte dieses Magnetfeld in einem beträchtlichen Abstand von dieser Rotationsachse sehen. Die Kombination von Dirichlet und Neumann BC war nur meine Idee, mich dem Problem zu nähern, wie Jan eloquent beschrieb - Gradientendaten an der Grenze auferlegt.
Markus
1
OK, das ändert die Dinge erheblich. Sie haben also eine unbegrenzte Domäne und abgeleitete Informationen über den gesamten "endlichen" Teil der Grenze?
Christian Clason

Antworten:

8

Zunächst ein allgemeiner Punkt: Sie können für einen partiellen Differentialoperator keine willkürlichen Randbedingungen vorschreiben und erwarten, dass die partielle Differentialgleichung (die immer sowohl Operator- als auch Randbedingungen enthält) gut aufgestellt ist, dh eine eindeutige Lösung zulässt, die kontinuierlich von der abhängt Daten - all dies ist eine notwendige Voraussetzung, um tatsächlich zu versuchen, etwas zu berechnen.

Je nach Betreiber gibt es häufig eine Reihe gültiger Bedingungen, die Sie auferlegen können (um einen Vorgeschmack zu erhalten, lesen Sie die dreibändige Monographie von Lions und Magenes). Was Sie jedoch versuchen (geben Sie den vollständigen Gradienten an, der sowohl Dirichlet- als auch Neumann-Bedingungen an derselben (Teil der) Grenze für eine elliptische PDE zweiter Ordnung entspricht), gehört nicht dazu - dies wird als a bezeichnet seitliches Cauchy-Problemund ist schlecht gestellt: Es gibt keine Garantie dafür, dass ein bestimmtes Paar von Grenzdaten eine Lösung zulässt, und selbst wenn eine existiert, gibt es keine Stabilität in Bezug auf kleine Störungen in den Daten. (Tatsächlich ist dies das ursprüngliche schlecht gestellte Problem im Sinne von Hadamard und das klassische Beispiel, warum Sie Randbedingungen bei der Erörterung von Gutstellung nicht ignorieren können. Ein explizites Beispiel finden Sie in seinen Vorlesungen über Cauchys Problem im linearen partiellen Differential Gleichungen aus den 1920er Jahren.)

(r,R)×(a,b)x=rRxy=ay=b

  1. Wenn Sie Randbedingungen auferlegen können (Neumann, Robin, Dirichlet - die Sie übrigens benötigen würden, um die Konstante bei der Integration der Tangentialableitung festzulegen), reicht es aus, entweder die normalen Komponenten Ihres Gradienten als Neumann-Bedingung zu verwenden (wenn Sie den konstanten Modus festlegen können) oder integrieren Sie die tangentialen Komponenten als Dirichlet-Bedingung. Da beide Bedingungen vermutlich der gleichen Funktion entsprechen, erhalten Sie in beiden Fällen die gleiche Lösung.

  2. y=ay=bΔu=fΔu+εΔ2u=fε>0H2uuεuε0

    H2

Christian Clason
quelle
Zur Implementierung durch gemischte Elemente in FEniCS siehe biharmonicDemo. Dies ist wahrscheinlich ohne Laplace-Begriff, aber ich denke, es kann leicht hinzugefügt werden.
Jan Blechta
Hallo Christian, danke für deinen Vorschlag! Ich hatte den Eindruck, dass die Poisson-Gleichung in Bezug auf die numerische Stabilität harmlos war - danke, dass Sie darauf hingewiesen haben. Ich werde es nachlesen, wie Sie vorgeschlagen haben. Ich bin mir nicht sicher, ob dies die Dinge wesentlich ändert, aber wie im Kommentar weiter oben erwähnt, ist die Dirichlet-Neumann-Kombination möglicherweise irreführend. "Alles", was ich suche, ist eine Möglichkeit, Gradientendaten an der Grenze aufzuerlegen.
Markus
2
Die Poisson-Gleichung ist gutartig, aber das ist nicht die Gleichung, die Sie zu lösen versuchen :) (Randbedingungen sind ein wesentlicher Bestandteil der Gleichung; der Operator allein reicht nicht aus, um die Stabilität zu bestimmen.)
Christian Clason
Okay, das gibt mir etwas zum Kauen. Vielen Dank an alle für Ihre Zeit, Ratschläge und Geduld - und ich entschuldige mich dafür, dass Sie in die XY-Falle geraten sind ...
Markus
4

Sie können nicht erwarten, dass diese Lösung für Ihr geändertes Problem eine Lösung für das Poisson-Problem ist, da Sie das Problem irgendwie ändern müssen, um es gut zu stellen.

Man könnte vermuten, dass eine mögliche Problemformulierung darin besteht, zu minimieren

F(u,λ)=Ω12|u|2dxΩfudxΓNgudS+ΓNλ(uuD)dS
(u,λ)V×L2(ΓN)V={vH1;v|ΓD=0}ΓDuDΓNF(u)
0=DF(u)[v]=ΩuvdxΩfvdxΓNgvdSvV,
ΓNΓD
0=DF(u,λ)[v,μ]=ΩuvdxΩfvdxΓNgvdS+ΓNλvdS+ΓNμ(uuD)dS(v,μ)V×L2(ΓN),
Δu=fun=gλΓNΓN

λ|g|

ΓDvVΓD

Die Schlussfolgerung ist, dass Sie nicht erwarten können, dass PDE zweiter Ordnung zwei unabhängige Randbedingungen zulässt.


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

F(u,λ)λL2(ΓN)λL2(Ω)λR

Jan Blechta
quelle
2ufuH1
Meine Mathematik ist leider nicht auf dem neuesten Stand und ich bin mir nicht sicher über die mathematischen Implikationen von Banach-Räumen, aber ich habe Schwierigkeiten zu verstehen, warum die Gleichung keine Lösung für eine Poisson-Gleichung ist, wenn der Lagrange-Multiplikator-Term verschwindet. Aus physikalischer Sicht muss eine Lösung (für das von mir beschriebene praktische Problem, ich meine keine Lösung im mathematischen Sinne) existieren, soweit ich sehen kann
Markus
Es ist also eher ein umgekehrtes Problem, die Randbedingung für das Fernfeld zu finden, die zusammen mit der Dirichlet-Bedingung, die Sie auferlegen können, den beobachteten normalen Gradienten an der Grenze ergibt, an der Sie messen?
Markus
3

Ihr Ansatz kann nicht funktionieren, definitiv aufgrund der Implementierung und wahrscheinlich aufgrund Ihrer Formulierung.

Wenn Sie Dirichlet-Bedingungen in Dolfin auferlegen, werden die entsprechenden DOFs Ihres Testraums schließlich auf Null gesetzt.

Dies ist ein Auszug aus dem Fenics-Handbuch :

Kapitel 3.3.9 (Ende): Die Anwendung einer Dirichlet-Randbedingung auf ein lineares System identifiziert alle Freiheitsgrade, die auf den angegebenen Wert eingestellt werden sollten, und modifiziert das lineare System so, dass seine Lösung die Randbedingung berücksichtigt. Dies wird erreicht, indem 1 auf der Diagonale der Zeilen der Matrix, die den Dirichlet-Werten entsprechen, auf Null gesetzt und eingefügt wird und der Dirichlet-Wert in den entsprechenden Eintrag des Vektors auf der rechten Seite [...] eingefügt wird.

vΓm

Zusammenfassend lässt sich sagen, dass Sie mit der Standardroutine in Dolfin nicht sowohl Dirichlet- als auch andere Bedingungen an derselben Grenze anwenden können.

Bevor Sie jedoch versuchen, dies in Ihrer Implementierung zu beheben, suchen Sie die richtigen Testbereiche für Ihre mathematische Formulierung (wie @Jan Blechta gerade erwähnt hat).

Jan.
quelle
Ich verstehe Ihren Standpunkt - ich denke, meine Formulierung spiegelt möglicherweise nicht genau das wider, was ich implementiert habe - ich entschuldige mich. Das Variationsprinzip ist nur eine verschwommene Erinnerung, und ich versuche, mich wieder darum zu kümmern. Ich habe das Handbuch vorwärts und rückwärts zusammen mit einigen Beispielen für FEniCS-Code gelesen, der Lagrange-Multiplikatoren implementiert. Ich dachte, das Problem, das Sie ansprechen, ist genau der Grund, warum Sie eine zweite Testfunktion 'd' verwenden würden.
Markus
Ich stimme @JanBlechta zu. Zuerst müssen Sie den richtigen Platz für den Multiplikator finden, was nicht trivial ist. Vielleicht geben Texte zur PDE-Einschränkungsoptimierung, bei denen Multiplikatoren zum Einbeziehen von Nebenbedingungen verwendet werden, einige hilfreiche Ideen. In dieser Arbeit wird ein Multiplikator verwendet, um zeitabhängige Dirichlet-Bedingungen zu berücksichtigen.
Jan