Câu hỏi: Những phương pháp nào có sẵn để tính toán chính xác và hiệu quả cấu trúc thưa thớt của ma trận phần tử hữu hạn?
Thông tin: Tôi đang làm việc trên một bộ giải phương trình áp suất Poisson, sử dụng phương pháp của Galerkin với cơ sở Lagrange bậc hai, được viết bằng C và sử dụng PETSc để lưu trữ ma trận thưa thớt và các thói quen KSP. Để sử dụng PETSc hiệu quả, tôi cần phân bổ trước bộ nhớ cho ma trận độ cứng toàn cầu.
Hiện tại, tôi đang thực hiện một hội thảo giả để ước tính số lượng khác không trên mỗi hàng như sau (mã giả)
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]++
Tuy nhiên, điều này đánh giá quá cao nnz vì một số tương tác nút-nút có thể xảy ra trong nhiều yếu tố.
Tôi đã cân nhắc việc cố gắng theo dõi những tương tác mà tôi đã tìm thấy, nhưng tôi không chắc làm thế nào để làm điều này mà không sử dụng nhiều bộ nhớ. Tôi cũng có thể lặp qua các nút và tìm sự hỗ trợ của hàm cơ sở tập trung tại nút đó, nhưng sau đó tôi phải tìm kiếm tất cả các phần tử cho mỗi nút, có vẻ không hiệu quả.
Tôi tìm thấy này câu hỏi gần đây, trong đó có một số thông tin hữu ích, đặc biệt là từ Stefano M, người đã viết
Lời khuyên của tôi là triển khai nó trong python hoặc C, áp dụng một số khái niệm lý thuyết biểu đồ, tức là coi các phần tử trong ma trận là các cạnh trong biểu đồ và tính toán cấu trúc thưa thớt của ma trận kề. Danh sách danh sách hoặc từ điển của các khóa là lựa chọn phổ biến.
Tôi đang tìm kiếm thêm chi tiết và tài nguyên về điều này. Tôi thừa nhận không biết nhiều về lý thuyết đồ thị và tôi không quen với tất cả các thủ thuật CS có thể hữu ích (tôi đang tiếp cận vấn đề này từ phía toán học).
Cảm ơn!