Multigrid บนกริด“ ไม่เป็นสี่เหลี่ยมจัตุรัสอย่างสมบูรณ์”


9

การแนะนำ Multigrid ตามปกติจะใช้ตารางสี่เหลี่ยม การแก้ไขค่านั้นตรงไปข้างหน้า: แค่สอดแทรกเชิงเส้นตรงบนขอบระหว่างสองโหนดที่อยู่ติดกันของกริดหยาบเพื่อค้นหาค่าของโหนดกริดที่ดีบนขอบนั้น

สำหรับแอปพลิเคชั่น FEM ฉันมีกริดซึ่งเป็นรูปสี่เหลี่ยม "ทอพอโลยี" เพื่อให้การเชื่อมต่อโหนดเหมือนในกริดสี่เหลี่ยม อย่างไรก็ตามโหนดนั้นไม่ได้เรียงตัวกันอย่างสมบูรณ์บนกริด แต่อาจเดินทางระยะทางเล็ก ๆ เพื่อให้เข้ากับรูปทรงเรขาคณิตได้ดีขึ้นในขณะที่ยังคงรักษาการเชื่อมต่อเช่นเดียวกับในกริดสี่เหลี่ยมที่สมบูรณ์แบบ

ตาข่ายลักษณะสิ่งที่ต้องการที่: ตาข่ายตัวอย่างเช่น คุณเห็น: การเชื่อมต่อเป็น "รูปสี่เหลี่ยมผืนผ้าปกติ" แต่ตำแหน่งของโหนดไม่

ฉันสามารถภาพแผนการแก้ไขทางเรขาคณิต "สมเหตุสมผล" หลายแบบสำหรับการตั้งค่าเช่นนี้

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


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

@ James ฉันตีความคำถามของ OP ให้เหมือน: "จะเกิดอะไรขึ้นถ้าฉันมีตาราง 'cartesian-ish' ในสี่เหลี่ยมคางหมู?
Bill Barth

คำตอบ:


6

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

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


ฉันแก้ไขตัวอย่างภาพลงในคำถาม ฉันจะถือว่าการรวมกลุ่มเป็นเรื่องง่ายมากในกรณีของฉันโดยเพียงแค่รับทุก ๆ โหนดที่สอง (ต่อมิติ) และคำนวณ FEM สำหรับตารางนั้นเพื่อรับเมทริกซ์ / ผู้ดำเนินการที่หยาบ เวกเตอร์ข้อมูลหยาบสามารถรับได้โดยเพียงแค่รับค่าโหนดที่ 2
Michael

1
ที่อาจหรือไม่ทำงานตามที่คุณต้องการ (ฉันคิดว่ามันอาจจะ แต่ไม่แน่ใจอย่างสมบูรณ์) ในตัวอย่างของคุณเซลล์ตาข่ายหยาบไม่ครอบคลุมพื้นที่เดียวกับเด็กและดังนั้นจึงไม่มีคุณสมบัติการทำรังของช่องว่างองค์ประกอบ จำกัด : ฟังก์ชันที่คุณสามารถแสดงบนตาข่ายหยาบไม่ใช่ส่วนย่อยของ ฟังก์ชั่นที่คุณสามารถแสดงบนตาข่าย Joe Pasciak และ Jim Bramble ได้เขียนบทความเกี่ยวกับเรื่องนี้และฉันคิดว่าฉันจำได้ว่าพวกเขาสามารถทำงานได้ แต่มันก็ไม่ชัดเจนสำหรับฉันทันที
Wolfgang Bangerth

4

ให้บอกว่าคุณมีตารางต่อไปนี้ประกอบด้วยองค์ประกอบสี่เหลี่ยม:

ป้อนคำอธิบายรูปภาพที่นี่

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

ทีนี้ถ้ากริดของคุณ "ปิด" เป็นกริดคาร์ทีเซียนที่มีโครงสร้างแบบปกติแล้วนี่อาจใช้งานได้อย่างน้อยในตอนแรก แต่ฉันสงสัยว่าหนึ่งในสองสิ่งจะเกิดขึ้น

1) คุณอาจพบว่า Multigrid เริ่มมาบรรจบกันในตอนแรก หลังจากเริ่มต้นข้อผิดพลาดของคุณคือ anyways ขนาดใหญ่และการประมาณ "โดยประมาณ" ของคุณจริง ๆ แล้วก็หมายความว่าบางโหนดจะถูกแทนเล็กน้อยในขณะที่บางคนอยู่ภายใต้การนำเสนอเล็กน้อย อย่างไรก็ตามคุณอาจพบว่าการบรรจบกันหยุดนิ่งในขณะที่การแก้ปัญหามีความแม่นยำมากขึ้นและการแก้ไขข้อผิดพลาดมีความสำคัญมากขึ้น

2) ความเป็นไปได้อีกอย่างหนึ่งก็คือมัลติกริดจะมาบรรจบกัน แต่ไม่เร็วเท่าที่ควรถ้าคุณใช้การแก้ไขที่ถูกต้อง

โดยพื้นฐานด้วยการแก้ไขของคุณคุณกำลังชั่งน้ำหนักความสำคัญของโหนดบางอย่างไม่ถูกต้อง ตัวอย่างเช่นใน 2D หากคุณรับน้ำหนักโหนดที่ระบุเป็น:

[0.250.50.250.51.00.50.250.50.25]

เมื่ออยู่ในความจริงเพราะตารางของคุณไม่ตรงกับที่ควรจะเป็น:

[0.250.550.250.551.00.490.280.520.30]

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

ในขณะที่ AMG นั้นยากที่จะเข้าใจ / ใช้งานดูเหมือนว่ามันเป็นวิธีที่ถูกต้องสำหรับกริดของคุณ การใช้ Multigrid ทางเรขาคณิตกับกริดสี่เหลี่ยม "โดยประมาณ" อาจใช้งานได้ แต่ฉันคิดว่ามันเป็นวิธีแก้ปัญหาแบบวงดนตรีที่ดีที่สุด หวังว่านี่จะช่วยได้

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


ฉันสามารถอ่านสิ่งนี้ว่า "ขึ้นอยู่กับว่าการแก้ไขของคุณดีแค่ไหน" ถูกต้อง? ดังนั้นถ้าฉันสามารถคิดแบบแผนการ "สมบูรณ์แบบ" ได้ฉันควรจะดีไหม
Michael

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

ฉันยอมรับว่า Multigrid ทางเรขาคณิตสามารถใช้กับตาข่ายที่ไม่ใช่คาร์ทีเซียนได้ตราบใดที่ทำได้อย่างถูกต้อง ฉันเพิ่งใช้คำถาม OP เพื่อถามว่าการใช้ตาข่ายคาร์ทีเซียน "โดยประมาณ" ในขณะที่ใช้การแก้ไขที่ออกแบบมาสำหรับตาข่ายคาร์ทีเซียนที่แท้จริงจะใช้งานได้หรือไม่
James

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

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