คำถาม: มีวิธีการใดในการคำนวณโครงสร้าง sparsity ของเมทริกซ์ไฟท์องค์ประกอบที่แม่นยำและมีประสิทธิภาพ
ข้อมูล: ฉันกำลังทำงานกับตัวแก้สมการความดัน Poisson โดยใช้วิธีของ Galerkin ที่มีพื้นฐานกำลังสองของลากรองจ์เขียนใน C และใช้ PETSc สำหรับการจัดเก็บเมทริกซ์แบบกระจัดกระจายและกิจวัตร KSP ในการใช้ PETSc อย่างมีประสิทธิภาพฉันจำเป็นต้องจัดสรรหน่วยความจำล่วงหน้าสำหรับเมทริกซ์ความแข็งระดับโลก
ขณะนี้ฉันกำลังประกอบ mock เพื่อประเมินจำนวนที่ไม่ใช่ศูนย์ต่อแถวดังต่อไปนี้ (pseudocode)
int nnz[global_dim]
for E=1 to NUM_ELTS
for i=1 to 6
gi = global index of i
if node gi is free
for j=1 to 6
gj = global index of j
if node gj is free
nnz[i]++
อย่างไรก็ตามสิ่งนี้จะประเมินค่า nnz มากเกินไปเนื่องจากการโต้ตอบของโหนด - โหนดบางอย่างสามารถเกิดขึ้นได้ในหลายองค์ประกอบ
ฉันได้พิจารณาแล้วว่าพยายามติดตามว่าฉันพบการโต้ตอบใดบ้าง แต่ฉันไม่แน่ใจว่าจะทำอย่างไรโดยไม่ต้องใช้หน่วยความจำมาก ฉันยังสามารถวนซ้ำโหนดและค้นหาการสนับสนุนของฟังก์ชันพื้นฐานที่อยู่ตรงกลางโหนดนั้น แต่จากนั้นฉันต้องค้นหาองค์ประกอบทั้งหมดสำหรับแต่ละโหนดซึ่งดูเหมือนไม่มีประสิทธิภาพ
ฉันพบคำถามล่าสุดนี้ซึ่งมีข้อมูลที่เป็นประโยชน์โดยเฉพาะจาก Stefano M ผู้เขียน
คำแนะนำของฉันคือการนำไปใช้ใน python หรือ C โดยใช้แนวคิดเชิงทฤษฎีของกราฟบางอย่างเช่นพิจารณาองค์ประกอบในเมทริกซ์เป็นขอบในกราฟและคำนวณโครงสร้างการกระจายของเมทริกซ์ adjacency รายการของรายการหรือพจนานุกรมของคีย์เป็นตัวเลือกทั่วไป
ฉันกำลังมองหารายละเอียดเพิ่มเติมและแหล่งข้อมูลเกี่ยวกับเรื่องนี้ ฉันยอมรับว่าไม่รู้ทฤษฎีกราฟมากและฉันไม่คุ้นเคยกับเทคนิค CS ทั้งหมดที่อาจมีประโยชน์ (ฉันกำลังเข้าใกล้สิ่งนี้จากด้านคณิตศาสตร์)
ขอบคุณ!