Poisson denklemi: Lagrange çarpanları ile sınır koşulu olarak tam gradyan uygulayın


11

İki boyutta Poisson denklemi tarafından yönetilen fiziksel bir sorunum var iki gradyan bileşenlerinin ölçümlerU /X veU /y sınırının bir kısmı boyunca, Γ m , yani empoze etmek istiyorum u

2u=f(x,y),inΩ
u/xu/yΓm ve uzak alana yayılır.
uxi0=gm,onΓm

Teğetsel degrade bileşeni, , bir Dirichlet koşulunu entegre edebilir ve sonra uygulayabilirim, böylece Γmuux(t,0) Aynı anda normal bileşeni dayatabilmek için,u

Γmux(t,0)ds=u0
, topladım, Lagrange çarpanlarından geçmek zorunda kalacağım.ux(n,0)

Bence varyasyon formu Uzun süre,https://answers.launchpad.net/fenics/+question/212434https://answers.launchpad.net/fenics/+questiongibi ilgili sorunlardan elde edilen bilgilerden bir araya getirmeye çalıştım. / 216323

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

ama hala nerede yanlış yaptığımı göremiyorum. Şu ana kadar çözüm denemem:

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)

ki bu Poisson denklemine bir çözümü andırmayacak kadar gürültülü bir sonuç verir. Kombine fonksiyon uzaylarıyla bir ilgisi var gibi görünüyor, ama hatayı bulamıyorum.
Herhangi bir yardım veya işaretçiler doğru yönde takdir ediyorum - şimdiden çok teşekkürler!
Şerefe
Markus


Bunu doğru yapmama izin verin: Hem Dirichlet hem de Neumann verileriniz var, ancak sınırın sadece bir kısmında mı?
Christian Clason

1
OP'yi anladığım gibi, sınırda verilen gradyan. Dirichlet verileri teğetsel türevi empoze etmek için kullanılır. Hem Dirichlet'i hem de Neumann'ı sınırın bir bölümüne dayatmanın garip olduğunu düşündüm, ancak belki de bu özel durumda tutarlıdır. Yani, problem daha ziyade sınırda degrade verilerinin nasıl uygulanacağıdır (çarpanlarla).
Ocak

Doğru, bu tutarlı veriler verir, ancak yine de istikrar eksikliği ve sınırın sadece bir kısmında sınır koşullarınız olması probleminiz var.
Christian Clason

Tamam, çözmeye çalıştığım belirli fiziksel sorun hakkında biraz daha bilgi vereyim. Döngüsel olarak simetrik, dolayısıyla 2B olarak kabul edebileceğim statik bir manyetik alanım var. Manyetik alan yoğunluğu vektörünün radyal ve eksenel bileşenlerini, bir çizgi boyunca, dönme eksenine oldukça yakın olarak ölçüyorum ve bu manyetik alanı, bu dönme ekseninden önemli ölçüde uzakta görmek istiyorum. Dirichlet ve Neumann BC'nin birleşimi, Jan'a etkili bir şekilde tanımlandığı gibi sınıra yaklaşma fikrimdi - sınırda gradyan verileri empoze etti.
Markus

1
Tamam, bu durum önemli ölçüde değişiyor. Yani sınırsız bir alan ve sınırın bütün "sonlu" kısmı hakkında türevsel bilgi var mı?
Christian Clason

Yanıtlar:


8

Birincisi, genel bir nokta: kısmi diferansiyel operatör için keyfi sınır koşulları reçete edemez ve kısmi diferansiyel denklemin (her zaman hem operatör hem de sınır koşullarını içerir) iyi bir şekilde konumlandırılmasını bekleyemezsiniz, yani sürekli olarak veri - hepsi bir şeyi hesaplamaya çalışmak için gerekli bir koşuldur.

Operatöre bağlı olarak, genellikle uygulayabileceğiniz oldukça sayıda geçerli koşul vardır (bir tat almak için Lions ve Magenes'in üç hacimli monografisine bakın). Bununla birlikte, yapmaya çalıştığınız (ikinci dereceden eliptik bir PDE için aynı sınırın (bir kısmı) hem Dirichlet hem de Neumann koşullarına eşdeğer olan tam degradeyi belirtin) aralarında değil - bu yanal Cauchy problemive kötü bir durum söz konusudur: belirli bir sınır veri çiftinin bir çözümü kabul ettiğine dair bir garanti yoktur ve biri mevcut olsa bile, verilerdeki küçük bozulmalarla ilgili bir istikrar yoktur. (Aslında, Hadamard anlamında orijinal kötü pozlanmış problem ve iyi pozlamayı tartışırken sınır koşullarını neden göz ardı edemeyeceğinizin klasik örneğidir. Cauchy'nin problemine ilişkin derslerinde doğrusal kısmi diferansiyelde açık bir örnek bulabilirsiniz. 1920'lerden denklemler .)

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

  1. Sınır koşullarını dayatabilirseniz (Neumann, Robin, Dirichlet - bu arada teğetsel türevin entegrasyonundaki sabiti düzeltmeniz gerekir), o zaman degradenizin normal bileşenlerini Neumann koşulu olarak kullanmak yeterlidir. (sabit modu düzeltebiliyorsanız) veya teğet bileşenleri Dirichlet koşulu olarak entegre edin. Her iki koşul da muhtemelen aynı işleve karşılık geldiğinden, her iki şekilde de aynı çözümü alırsınız.

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

    H2


FEniCS'de karma elemanlar tarafından uygulama için demoya bakınız biharmonic. Bu muhtemelen Laplace terimi olmadan ama sanırım kolayca eklenebilir.
Jan Blechta

Merhaba Christian, öneriniz için teşekkürler! Poisson denkleminin sayısal kararlılık açısından iyi huylu olduğu izlenimindeydim - bunu belirttiğiniz için teşekkürler. Önerdiğin gibi okuyacağım. Bunun önemli ölçüde değişip değişmediğinden emin değilim, ancak daha sonraki yorumda belirtildiği gibi Dirichlet-Neumann kombinasyonu belki yanıltıcıdır. Aradığım 'Tümü', sınıra gradyan verisi koymanın bir yoludur.
Markus

2
Poisson denklemi iyi huylu olduğunu, ama bu :) çözmeye çalıştığınız denklem değil; (Sınır koşulları denklemin bir parçasıdır yalnız operatör istikrarı karar vermek yetersizdir.)
Christian Clason

Pekala, bu bana çiğnemem gereken bir şey veriyor. Zamanınız, tavsiyeniz ve sabrınız için herkese teşekkürler - ve XY tuzağına düştüğünüz için özür dilerim ...
Markus

4

Değiştirilmiş probleminize çözümün Poisson problemine bir çözüm olmasını bekleyemezsiniz, çünkü problemi iyi bir şekilde ortaya koymak için bir şekilde değiştirmeniz gerekir.

Olası problem formülasyonunun minimize etmek olduğu tahmin edilebilir.

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

Sonuç, ikinci dereceden PDE'nin iki bağımsız sınır koşulunu kabul etmesini bekleyemeyeceğinizdir.


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

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


2ufuH1

Matematiğim maalesef çizilmiyor ve Banach uzaylarının matematiksel etkilerinden emin değilim, ancak Lagrange çarpanı terimi ortadan kalktığında denklemin neden Poisson denklemine bir çözüm olmadığını görmek için mücadele ediyorum. Fiziksel bir bakış açısından, bir çözüm (anlattığım pratik soruna, matematiksel anlamda çözüm demek istemiyorum) görebildiğim kadarıyla var olmalıdır
Markus

Bu nedenle, uygulayabileceğiniz Dirichlet koşulu ile birlikte ölçtüğünüz sınırda gözlenen normal eğimi veren uzak alan için sınır koşulunu bulmak oldukça ters bir sorundur.
Markus

3

Yaklaşımınız kesinlikle uygulama ve muhtemelen formülasyonunuz nedeniyle çalışmaz.

Dirolflet koşullarını dolfin'e dayatmak, sonunda test alanınızın karşılık gelen DOF'larını sıfıra ayarlar.

Bu fenik kılavuzundan bir alıntıdır :

Bölüm 3.3.9 (son): Dirichlet sınır koşulunun doğrusal bir sisteme uygulanması, verilen değere ayarlanması gereken tüm serbestlik derecelerini tanımlayacak ve çözümü, sınır koşuluna uyacak şekilde doğrusal sistemi değiştirecektir. Bu, sıfırlama ve Dirichlet değerlerine karşılık gelen matris satırlarının diyagonaline 1 eklenmesi ve Dirichlet değerini sağ taraf vektörünün karşılık gelen girişine eklenmesi ile gerçekleştirilir [...]

vΓm

Özet olarak, dolfin'deki varsayılan rutini kullanarak Dirichlet ve diğer koşulları aynı sınırlara uygulayamazsınız.

Ancak, bunu uygulamanızda düzeltmeye çalışmadan önce, matematiksel formülasyonunuz için doğru test alanlarını bulun (@Jan Blechta'nın da bahsettiği gibi).


Demek istediğim - Bence formülasyonum uyguladığım şeyi tam olarak yansıtmıyor olabilir - özür dilerim. Varyasyonel ilke, puslu bir anıdır ve kafamı tekrar etrafında tutmaya çalışıyorum. Kılavuzu Lagrange çarpanlarını uygulayan bazı FEniCS kod örnekleri ile birlikte ileri ve geri okudum. Ortaya koyduğunuz sorunun tam olarak ikinci bir test fonksiyonu 'd' kullanmanızın nedeni olduğunu düşündüm.
Markus

@JanBlechta ile hemfikirim. İlk önce önemsiz olmayan çarpan için doğru alanı bulmanız gerekir. Belki PDE kısıtlama optimizasyonu metinleri, yan koşulları dahil etmek için çarpanları kullanır, bazı yararlı fikirler verecektir. Bu yazıda , zamana bağlı Dirichlet koşullarını açıklamak için bir çarpan kullanılmıştır.
Ocak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.