วิธีการลบการเคลื่อนไหวร่างกายแข็งใน Linear Elasticity?


9

ฉันต้องการที่จะแก้ Ku=b ที่ไหน Kเป็นเมทริกซ์ความแข็งของฉัน อย่างไรก็ตามข้อ จำกัด บางอย่างอาจหายไปดังนั้นการเคลื่อนไหวของร่างกายที่เข้มงวดบางอย่างอาจยังคงปรากฏอยู่ในระบบ (เนื่องจากศูนย์ค่าเฉพาะ) เนื่องจากฉันใช้ CG เพื่อแก้ปัญหาระบบเชิงเส้นนี่จึงไม่เป็นที่ยอมรับเนื่องจากบางครั้ง CG ไม่ได้มาบรรจบกับปัญหากึ่งบวก (แต่บางครั้งฉันอาจจะมาบรรจบกัน)

ที่จริงฉันใช้วิธีการกำจัดที่ถูกลงโทษในแง่ที่ว่าฉันกำลังเพิ่มบทลงโทษ α||u||2เพื่อพลังงานที่ยืดหยุ่น ดังนั้นพลังงานจึงอ่าน

W(u):=12uT(K+αI)ubtu
ที่ไหน αนำมาเป็นสัดส่วนกับการเข้าขวางของเมทริกซ์ความแข็ง แต่ที่จริงแล้วนี่มีผลกระทบกับโหมดการเสียรูปบางอย่างที่ฉันต้องการ

บางคำถามของฉันคือ:

ก) ฉันสามารถเปลี่ยนระบบดั้งเดิมได้หรือไม่ดังนั้นจึงต้องทำให้มันปราศจากความเป็นเอกเทศและแน่นอนในเชิงบวก (เช่นการแปลงพิกัดหรือการแปลงความสอดคล้องหรืออะไรก็ตาม) ความคิดของฉันคือการใช้การแปลงดังกล่าวเพื่อยังคงใช้ CG กับปัญหาการแปลง

b) มีวิธีมาตรฐานในการจัดการกับความแปลกประหลาดเหล่านั้นหรือไม่?

ขอบคุณมาก !

ขอแสดงความนับถือ,

ทอม

คำตอบ:


6

วิธีมาตรฐานคือการเพิ่มข้อ จำกัด u(x0)=0 สำหรับโหนดที่เลือกเอง x0. สิ่งนี้ทำให้แน่ใจได้ว่าร่างกายของคุณไม่สามารถแปลหรือหมุนได้ดังนั้นจึงทำให้ค่าลักษณะเฉพาะเป็นศูนย์ลดลง ระบบผลลัพธ์ที่มีข้อ จำกัด นี้เป็นสิ่งที่แน่นอนแม้ว่าคุณจะไม่ได้รับโทษก็ตาม


1
ขอบคุณ! ใช่ แต่ฉันเป็นกรณีของฉันฉันมีโครงสร้างพื้นฐานแบบลอยหลายแห่งและฉันไม่สามารถบอกได้ว่าโหนดใด (3 โหนดที่ไม่ใช่ colinear ในแบบ 3 มิติ) เพื่อแก้ไข นี่คือเหตุผลที่ฉันสงสัยว่าหากไม่มีวิธีแก้ปัญหาระดับสูงกว่าในกรณีของฉันพื้นที่ว่างเป็นที่รู้จักกันดี
Tom

หากคุณมีหลายโครงสร้างคุณจำเป็นต้องแก้ไขหนึ่งโหนดสำหรับแต่ละโครงสร้าง มันไม่สำคัญว่าจะเลือกอันไหนเพียงเลือกหนึ่งอันต่อโครงสร้าง
Wolfgang Bangerth

3
@ WolfgangBangerth นี่คือความยืดหยุ่นแบบสามมิติดังนั้นคุณจะต้องปักหมุดสามจุดที่ไม่ใช่ colinear เพื่อควบคุมพื้นที่ว่างของมิติ 6. การตรึงสามดิสเทอร์เมนต์เหล่านั้นอยู่ในอันดับที่ 9 การก่อกวนและไม่ใช่เรื่องง่าย ช่องว่าง Null ไม่เปลี่ยนโซลูชัน สำหรับตัวเลือกของคะแนนและค่าที่จะปักหมุดมีตระกูลด้านขวาสามมิติที่ปัญหาที่ตรึงไว้ของคุณให้คำตอบที่ถูกต้องสำหรับสมาชิกเพียงคนเดียว
Jed Brown

ไม่คุณไม่สามารถปักหมุด 3 คะแนนสำหรับข้อ จำกัด 9 ข้อได้เพราะคุณจะแก้ไขระยะทางสัมพัทธ์ หากเงื่อนไขขอบเขตของคุณไม่มีข้อ จำกัด อื่น ๆ (เช่นหากไม่มีการกระจัดเป็นวงกลม) คุณต้องแก้ไข 1 จุด + มุมการหมุนต่าง ๆ ในอีกสองจุดรวม 6 ข้อ
Wolfgang Bangerth

6

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

หากคุณไม่ทราบว่ามีช่องว่างว่างและไม่สามารถหลีกเลี่ยงทางด้านขวาที่เข้ากันไม่ได้มีวิธีการ Krylov แบบพิเศษเช่นMINRES-QLPที่สามารถหาวิธีแก้ปัญหาเชิงบรรทัดฐานขั้นต่ำได้ วิธีการนี้อาจมีประโยชน์หากคุณมีบานพับและการเชื่อมต่อแบบจุดเดียวซึ่งมีเพียงบางโหมดเท่านั้น โปรดทราบว่าคุณยังคงต้องระมัดระวังเกี่ยวกับปัจจัยที่ก่อให้เกิดมลภาวะ (เช่นเนื่องจากการแยกตัวประกอบ LU พบศูนย์ pivots บางทีในระดับ multigrid ที่หยาบ)


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

2
ทำให้เข้ากันได้ทางด้านขวามือและโปรเจ็กต์พื้นที่ว่างหลังจากแต่ละแอปพลิเคชันที่จำเป็นสำหรับการใช้งานล่วงหน้า นี่เป็นตัวดำเนินการ KrylovK=(IN)P1A ดังนั้น {b,Kb,K2b,}ตั้งฉากกับพื้นที่ว่าง เนื่องจากปัญหาของคุณเป็นแบบสมมาตรคุณไม่จำเป็นต้องมีรูทีนที่แตกต่างกันสำหรับช่องว่างว่างด้านซ้ายและขวา นี่คือสิ่งที่ไม่ PETSc MatSetNullSpace()ถ้าคุณโทร
Jed Brown
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.