ฉันสงสัยว่าเงื่อนไขขอบเขตของ Dirichlet ในเมทริกซ์องค์ประกอบกระจัดกระจายทั่วโลกนั้นมีการใช้งานจริงได้อย่างมีประสิทธิภาพหรือไม่ ตัวอย่างเช่นสมมติว่าเมทริกซ์องค์ประกอบไฟไนต์โกลบอลของเราคือ:
จากนั้นเมื่อต้องการใช้เงื่อนไข Dirichlet บนโหนดแรก ( ) เราจะทำให้แถวแรกเป็นศูนย์โดยใส่ 1 ที่และลบคอลัมน์แรกจากด้านขวามือ ตัวอย่างเช่นระบบของเราจะกลายเป็น:
ทั้งหมดนี้เป็นทฤษฎีที่ดีและดี แต่ถ้า K matrix ของเราถูกจัดเก็บในรูปแบบแถวที่ถูกบีบอัด (CRS) แล้วการย้ายคอลัมน์ไปทางด้านขวาจะกลายเป็นค่าใช้จ่ายสำหรับระบบขนาดใหญ่ (มีหลายโหนดที่เป็น dirichlet) อีกทางเลือกหนึ่งคือไม่ย้ายคอลัมน์ที่สอดคล้องกับเงื่อนไข Dirichlet ไปทางด้านขวามือนั่นคือระบบของเราจะกลายเป็น:
อย่างไรก็ตามสิ่งนี้มีการดึงกลับที่สำคัญในระบบที่ไม่สมมาตรอีกต่อไปดังนั้นเราจึงไม่สามารถใช้การไล่ระดับสีแบบคอนจูเกตแบบผันแปรได้อีกต่อไป (หรือตัวแก้สมมาตรอื่น ๆ ) ทางออกหนึ่งที่น่าสนใจที่ฉันเจอคือ "วิธีการของตัวเลขจำนวนมาก" ที่ฉันพบในหนังสือ "Programming Finite Elements in Java" โดย Gennadiy Nikishkov วิธีนี้ใช้ความจริงที่ว่าความแม่นยำสองเท่ามีความแม่นยำประมาณ 16 หลักเท่านั้น แทนที่จะใส่ 1 ในตำแหน่งเราวางจำนวนมาก ตัวอย่างเช่นระบบของเรากลายเป็น:
ข้อดีของวิธีนี้คือการรักษาความสมมาตรของเมทริกซ์ในขณะที่ยังมีประสิทธิภาพมากสำหรับรูปแบบการจัดเก็บเบาบาง คำถามของฉันมีดังนี้:
เงื่อนไขขอบเขตของ Dirichlet โดยทั่วไปนำมาใช้ในรหัสองค์ประกอบ จำกัด สำหรับความร้อน / ของเหลวอย่างไร ผู้คนใช้วิธีการของคนจำนวนมากโดยปกติหรือพวกเขาทำอย่างอื่นหรือไม่? มีข้อเสียกับวิธีการของคนจำนวนมากที่มองเห็นได้หรือไม่? ฉันสมมติว่าอาจมีวิธีมาตรฐานที่มีประสิทธิภาพที่ใช้ในรหัสเชิงพาณิชย์และไม่ใช่เชิงพาณิชย์ส่วนใหญ่ที่แก้ปัญหานี้ (เห็นได้ชัดว่าฉันไม่ได้คาดหวังให้คนรู้ว่าผลงานภายในทั้งหมดของตัวแก้ไของค์ประกอบเชิงพาณิชย์ จำกัด แต่ปัญหานี้ดูเหมือนพื้นฐาน เพียงพอที่ใครบางคนน่าจะได้ทำงานในโครงการดังกล่าวและสามารถให้คำแนะนำ)