สมการปัวซอง: กำหนดการไล่ระดับสีแบบเต็มเป็นเงื่อนไขขอบเขตผ่านตัวคูณแบบลากรองจ์


11

ฉันมีปัญหาทางกายภาพที่ควบคุมโดยสมการปัวซองในสองมิติ ฉันมีการวัดองค์ประกอบการไล่ระดับสีทั้งสองและตามส่วนของขอบเขตดังนั้นต้องการกำหนด และแพร่กระจายไปยังทุ่งไกลu /xu /y Γ m u

2u=f(x,y),inΩ
u/xu/yΓm
uxi0=gm,onΓm

องค์ประกอบการไล่ระดับสีแทนเจนต์ , ฉันสามารถรวมเข้าด้วยกันแล้วบังคับใช้ผ่านเงื่อนไข Dirichlet เพื่อกำหนดองค์ประกอบปกติพร้อมกัน , ฉันรวบรวมฉันจะต้องผ่านตัวคูณลากรองจ์แกมมาเมตรยูux(t,0)u

Γmux(t,0)ds=u0
ux(n,0)

ดังนั้นฉันคิดว่ารูปแบบความแปรปรวนคือ ฉันใช้เวลานานในการพยายามรวมเข้าด้วยกันจากข้อมูลเกี่ยวกับปัญหาที่เกี่ยวข้องเช่น https: //answers.launchpad.net/fenics/+question/212434 https://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)

ซึ่งทำงาน แต่ให้ผลลัพธ์ที่มีเสียงดังไม่ได้เลยคล้ายกับวิธีการแก้สมการปัวซอง ดูเหมือนว่าจะมีบางอย่างเกี่ยวกับการรวมฟังก์ชั่นช่องว่าง แต่ฉันไม่สามารถหาข้อผิดพลาด
ฉันขอขอบคุณความช่วยเหลือหรือตัวชี้ไปในทิศทางที่ถูกต้อง - ขอบคุณมากแล้ว!
ไชโย
มาร์คัส


ให้ฉันได้รับสิทธินี้: คุณมีทั้งข้อมูลของดีริชเลต์และนอยมันน์ แต่เป็นเพียงส่วนหนึ่งของขอบเขตเท่านั้น?
Christian Clason

1
ดังที่ฉันได้เข้าใจ OP แล้วมันคือการไล่ระดับสีที่กำหนดไว้ที่ขอบเขต ข้อมูล Dirichlet ใช้เพื่อกำหนดอนุพันธ์ทางวง ฉันคิดว่ามันแปลกที่จะกำหนดทั้ง Dirichlet และ Neumann ที่ส่วนหนึ่งของขอบเขต แต่บางทีในสถานการณ์นี้โดยเฉพาะมันจะสอดคล้องกัน ดังนั้นปัญหาคือวิธีการใช้ข้อมูลการไล่ระดับสีที่ขอบเขต (ผ่านตัวคูณ)
มกราคม 13 น

จริงที่จะให้ข้อมูลที่สอดคล้องกัน แต่คุณยังคงมีปัญหาการขาดความมั่นคงและความจริงที่ว่าคุณมีเงื่อนไขขอบเขตเพียงส่วนหนึ่งของขอบเขต
Christian Clason

ตกลงให้ฉันให้ข้อมูลเพิ่มเติมเกี่ยวกับปัญหาทางกายภาพที่ฉันพยายามแก้ไข ฉันมีสนามแม่เหล็กคงที่ซึ่งฉันสามารถสันนิษฐานได้ว่าสมมาตรแบบหมุนได้ดังนั้น 2D ฉันวัดองค์ประกอบรัศมีและแกนของเวกเตอร์ความหนาแน่นสนามแม่เหล็กตามเส้นค่อนข้างใกล้กับแกนการหมุนและอยากจะเห็นสนามแม่เหล็กนี้ในระยะที่ไกลออกไปจากแกนการหมุนนี้ การรวมกันของ Dirichlet และ Neumann BC เป็นเพียงความคิดของฉันในการเข้าถึงปัญหาตามที่ Jan อธิบายอย่างละเอียด - กำหนดข้อมูลการไล่ระดับสีที่ขอบเขต
Markus

1
ตกลงว่าจะเปลี่ยนแปลงสิ่งต่าง ๆ อย่างมีนัยสำคัญ เพื่อให้คุณมีโดเมนมากมายและข้อมูลอนุพันธ์ในทั้งส่วน "จำกัด" ของขอบเขต?
Christian Clason

คำตอบ:


8

ขั้นแรกให้เป็นจุดทั่วไป: คุณไม่สามารถกำหนดเงื่อนไขขอบเขตโดยพลการสำหรับตัวดำเนินการอนุพันธ์บางส่วนและคาดหวังว่าสมการเชิงอนุพันธ์ย่อย (ซึ่งรวมถึงทั้งตัวดำเนินการและเงื่อนไขขอบเขต) นั้นถูกวางตำแหน่งอย่างดีนั่นคือยอมรับโซลูชันที่ไม่ซ้ำกัน data - ทั้งหมดนี้เป็นเงื่อนไขที่จำเป็นสำหรับการพยายามคำนวณบางสิ่ง

ขึ้นอยู่กับผู้ปฏิบัติงานมักจะมีเงื่อนไขที่ถูกต้องจำนวนหนึ่งที่คุณสามารถกำหนด (เพื่อให้ได้รสชาติดูเอกสารประกอบสามระดับโดย Lions and Magenes) อย่างไรก็ตามสิ่งที่คุณพยายามทำ (ระบุการไล่ระดับสีแบบเต็มซึ่งเทียบเท่ากับเงื่อนไขทั้ง Dirichlet และ Neumann ในขอบเขตเดียวกัน (ส่วนหนึ่งของ) สำหรับ PDE ลำดับที่สอง) ไม่ได้อยู่ในหมู่พวกเขา - สิ่งนี้เรียกว่าปัญหา Cauchy ด้านข้างและไม่ถูกต้อง: ไม่มีการรับประกันว่าข้อมูลขอบเขตที่กำหนดไว้คู่หนึ่งยอมรับการแก้ปัญหาและแม้ว่าจะมีอยู่ก็ไม่มีความเสถียรเมื่อเทียบกับการรบกวนของข้อมูลเพียงเล็กน้อย (อันที่จริงนี่เป็นปัญหาที่ไม่ดีดั้งเดิมในแง่ของ Hadamard และตัวอย่างคลาสสิกว่าทำไมคุณไม่สามารถเพิกเฉยต่อขอบเขตของขอบเขตเมื่อพูดถึงปัญหาที่เกิดขึ้นได้คุณสามารถค้นหาตัวอย่างชัดเจนในการบรรยายของเขาเกี่ยวกับปัญหาของ Cauchy สมการจากยุค 20)

ตอนนี้สำหรับปัญหาเฉพาะของคุณ (ซึ่งอาจเป็นตัวอย่างของปัญหา XY ) ถ้าผมเข้าใจอย่างถูกต้องคุณต้องการที่จะแก้ปัญหาที่เกิดขึ้นภายนอกสม Poisson และคุณใช้โดเมน computional สองมิติ ) คุณมีข้อมูลเต็มรูปแบบ (Dirichlet - ใช้เคล็ดลับอนุพันธ์วง - และนอยมันน์) บน (พูด) x = R หากRมีขนาดใหญ่พอคุณสามารถพิสูจน์ภาวะรังสีได้ (ซึ่งกำหนดพฤติกรรมเชิงซีมโทติคของสารละลายของคุณที่x ); ดูเช่นหนังสือ(r,R)×(a,b)x=rRxวิธีการเชิงตัวเลขสำหรับปัญหาภายนอก โดย Long'an Ying คำถามคือสิ่งที่คุณรู้เกี่ยวกับชิ้นส่วนเขตแดนเหลือและY = By=ay=b

  1. หากคุณสามารถกำหนดเงื่อนไขขอบเขต (Neumann, Robin, Dirichlet - ซึ่งคุณจะต้องแก้ไขค่าคงที่ในการรวมกันของ tangential อนุพันธ์โดยวิธี) แล้วก็เพียงพอที่จะใช้องค์ประกอบปกติของการไล่ระดับสีของคุณเป็นเงื่อนไขของ Neumann (ถ้าคุณสามารถแก้ไขโหมดคงที่) หรือรวมองค์ประกอบแทนเจนต์เป็นเงื่อนไข Dirichlet เนื่องจากทั้งสองเงื่อนไขน่าจะสอดคล้องกับฟังก์ชั่นเดียวกันคุณจะได้คำตอบเหมือนกัน

  2. หากคุณไม่ทราบพฤติกรรมที่และy = bคุณมีปัญหา Cauchy ด้านข้างจริงๆและคุณไม่สามารถคำนวณวิธีแก้ปัญหาโดยใช้วิธีไฟไนต์เอลิเมนต์มาตรฐาน วิธีมาตรฐานในการจัดการกับสิ่งนี้คือวิธีการเสมือนการย้อนกลับ (แนะนำโดยLattésและ Lions ในทศวรรษ 1960 ดูหนังสือของพวกเขา) ซึ่งประกอบด้วยการประมาณปัญหาอันดับสองโดยปัญหาลำดับที่สี่ (ซึ่งคุณสามารถ - และ ต้องกำหนดเงื่อนไขขอบเขตสองเงื่อนไข) ในกรณีของคุณนี้จะเป็นจำนวนเงินเปลี่ยน- Δ U = โดย- Δ U + ε Δ 2y=ay=bΔu=fสำหรับบางขนาดเล็ก ε > 0 (สิ่งนี้สามารถตีความได้ว่าเป็นการลดสิ่งตกค้างในบรรทัดฐานที่เหมาะสมและเพิ่มคำว่า normalization H 2 ซึ่งเกี่ยวข้องกับความคิดเห็นของคุณเกี่ยวกับการจัดการปัญหาเป็นปัญหาผกผัน) คุณสามารถแสดงข้อมูลที่เข้ากันได้ (เช่นคู่ของขอบเขต เงื่อนไขที่จริงตรงกับวิธีการแก้ปัญหา Uของสม Poisson) การแก้กึ่ง reversibilityยูεบรรจบกันเพื่อ Uเป็น ε →การ 0Δu+εΔ2u=fε>0H2uuεuε0

    เนื่องจากนี่เป็นปัญหาอันดับที่สี่ของการแก้ปัญหาในวิธีที่ดีที่สุดในการแก้ปัญหาเชิงตัวเลขคือการใช้สูตรองค์ประกอบไฟไนต์ผสมเช่นที่อธิบายไว้ในบทความโดยDardé, Hannukainen และHyvönen (นอกจากนี้ยังมีบางสไลด์ออนไลน์) ไม่ควรยากเกินไปที่จะใช้วิธีนี้โดยใช้ FEniCSH2


สำหรับการใช้งานโดยองค์ประกอบแบบผสมใน FEniCS ดูbiharmonicการสาธิต อาจเป็นได้โดยไม่มีคำว่า Laplace แต่ฉันคิดว่ามันสามารถเพิ่มได้อย่างง่ายดาย
Jan Blechta

สวัสดีคริสเตียนขอบคุณสำหรับคำแนะนำของคุณ! ฉันรู้สึกว่าสมการปัวส์ซองนั้นมีความอ่อนโยนพอ ๆ กับความเสถียรของตัวเลข - ขอบคุณที่ชี้ให้เห็น ฉันจะอ่านมันตามที่คุณแนะนำ ไม่แน่ใจว่าสิ่งนี้จะเปลี่ยนแปลงสิ่งต่าง ๆ อย่างมีนัยสำคัญหรือไม่ แต่ตามที่กล่าวไว้ในความคิดเห็นต่อไปการรวมกันของ Dirichlet-Neumann อาจทำให้เข้าใจผิด 'ทั้งหมด' ฉันกำลังมองหาเป็นวิธีการจัดเก็บข้อมูลการไล่ระดับสีที่ขอบเขต
Markus

2
สมการปัวซองนั้นอ่อนโยน แต่นั่นไม่ใช่สมการที่คุณกำลังพยายามแก้ไข :) (เงื่อนไขขอบเขตเป็นส่วนสำคัญของสมการตัวดำเนินการเพียงอย่างเดียวไม่เพียงพอที่จะตัดสินใจเรื่องความมั่นคง)
Christian Clason

เอาล่ะนั่นทำให้ฉันเคี้ยวอะไร ทุกคนขอบคุณสำหรับเวลาของคุณคำแนะนำและความอดทน - และขอโทษของฉันสำหรับการตกอยู่ในกับดัก XY และ ...
มาร์คัส

4

คุณไม่สามารถคาดหวังได้ว่าวิธีแก้ปัญหาที่แก้ไขของคุณจะเป็นวิธีแก้ปัญหาของปัวซองเนื่องจากคุณจำเป็นต้องเปลี่ยนปัญหาเพื่อให้ได้ตำแหน่งที่ดี

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

บทสรุปคือคุณไม่สามารถคาดหวังได้ว่าลำดับที่สองของ PDE จะยอมรับเงื่อนไขขอบเขตอิสระสองประการ


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

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


2ufuH1

คณิตศาสตร์ของฉันไม่ได้ขึ้นอยู่กับความโชคร้ายและฉันไม่แน่ใจเกี่ยวกับผลกระทบทางคณิตศาสตร์ของช่องว่างของ Banach แต่ฉันพยายามที่จะดูว่าทำไมสมการไม่ได้เป็นคำตอบของสมการปัวซองเมื่อคำศัพท์ตัวคูณ Lagrange หายไป จากมุมมองทางกายภาพการแก้ปัญหา (กับปัญหาการปฏิบัติที่ฉันอธิบายฉันไม่ได้หมายถึงการแก้ปัญหาในแง่คณิตศาสตร์) ต้องมีอยู่เท่าที่ฉันสามารถดู
Markus

ดังนั้นมันจึงค่อนข้างเป็นปัญหาผกผันการค้นหาเงื่อนไขขอบเขตสำหรับสนามไกลซึ่งรวมถึงเงื่อนไข Dirichlet ที่คุณสามารถกำหนดได้ให้ผลการไล่ระดับสีปกติที่สังเกตที่ขอบเขตที่คุณวัด
Markus

3

วิธีการของคุณไม่สามารถทำงานได้อย่างแน่นอนเพราะการดำเนินการและอาจเป็นเพราะสูตรของคุณ

การกำหนดเงื่อนไข Dirichlet ใน dolfin ในที่สุดก็ตั้งค่า DOF ที่สอดคล้องกันของพื้นที่ทดสอบของคุณให้เป็นศูนย์

นี่เป็นข้อความที่ตัดตอนมาจากคู่มือfenics :

บทที่ 3.3.9 (สิ้นสุด): การประยุกต์ใช้เงื่อนไขขอบเขต Dirichlet กับระบบเชิงเส้นจะระบุองศาอิสระทั้งหมดที่ควรตั้งค่าตามค่าที่กำหนดและปรับเปลี่ยนระบบเชิงเส้นเพื่อให้สอดคล้องกับเงื่อนไขขอบเขต นี่คือความสำเร็จโดย zeroing และการแทรก 1 ในแนวทแยงของแถวของเมทริกซ์ที่สอดคล้องกับค่า Dirichlet และการแทรกค่า Dirichlet ในรายการที่สอดคล้องกันของเวกเตอร์ด้านขวา [... ]

vΓm

โดยสรุปการใช้รูทีนเริ่มต้นใน dolfin คุณไม่สามารถใช้ทั้ง Dirichlet และเงื่อนไขอื่น ๆ ในขอบเขตเดียวกัน

อย่างไรก็ตามก่อนที่คุณจะพยายามแก้ไขสิ่งนี้ในการนำไปใช้ของคุณไปหาพื้นที่ทดสอบที่เหมาะสมสำหรับสูตรทางคณิตศาสตร์ของคุณ (เนื่องจาก @Jan Blechta เพิ่งพูดถึง)


ฉันเห็นประเด็นของคุณ - ฉันคิดว่าสูตรของฉันอาจไม่ตรงกับสิ่งที่ฉันได้ทำไปแล้ว - ขอโทษด้วย หลักการความแปรปรวนเป็นเพียงความทรงจำที่มัวและฉันพยายามเอาหัวของฉันไปรอบ ๆ อีกครั้ง ฉันได้อ่านคู่มือไปข้างหน้าและข้างหลังพร้อมกับตัวอย่างของรหัส FEniCS ที่ใช้ตัวคูณ Lagrange ฉันคิดว่าปัญหาที่คุณยกมานั้นเป็นสาเหตุที่ทำให้คุณใช้ฟังก์ชั่นทดสอบครั้งที่สอง 'd'
Markus

ฉันเห็นด้วยกับ @JanBlechta ในตอนแรกคุณต้องหาพื้นที่ที่เหมาะสมสำหรับตัวคูณซึ่งเป็นเรื่องไม่สำคัญ บางทีข้อความเกี่ยวกับการเพิ่มประสิทธิภาพข้อ จำกัด PDE ที่หนึ่งใช้ตัวคูณเพื่อรวมเงื่อนไขด้านจะให้ความคิดที่เป็นประโยชน์ ในบทความนี้ตัวคูณจะถูกใช้เพื่อบัญชีตามเงื่อนไขของ Dirichlet
ม.ค.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.