Pertanyaan: Metode apa yang tersedia untuk secara akurat dan efisien menghitung struktur sparsity dari matriks elemen hingga?
Info: Saya sedang mengerjakan pemecah Persamaan Tekanan Poisson, menggunakan metode Galerkin dengan basis Lagrange kuadratik, ditulis dalam C, dan menggunakan PETSc untuk penyimpanan matriks jarang dan rutinitas KSP. Untuk menggunakan PETSc secara efisien, saya perlu mengalokasikan memori untuk matriks kekakuan global.
Saat ini, saya sedang melakukan perakitan tiruan untuk memperkirakan jumlah nonzeros per baris sebagai berikut (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]++
Namun, ini terlalu tinggi nnz karena beberapa interaksi node-node dapat terjadi dalam beberapa elemen.
Saya telah mempertimbangkan untuk mencoba melacak interaksi yang saya temukan, tetapi saya tidak yakin bagaimana melakukan ini tanpa menggunakan banyak memori. Saya juga bisa mengulang simpul, dan menemukan dukungan fungsi dasar yang berpusat pada simpul itu, tetapi kemudian saya harus mencari semua elemen untuk setiap simpul, yang tampaknya tidak efisien.
Saya menemukan pertanyaan baru-baru ini , yang berisi beberapa informasi berguna, terutama dari Stefano M, yang menulis
saran saya adalah untuk mengimplementasikannya dalam python atau C, menerapkan beberapa konsep teori grafik, yaitu mempertimbangkan elemen dalam matriks sebagai tepi dalam grafik dan menghitung struktur sparsity dari matriks adjacency. Daftar daftar atau kamus kunci adalah pilihan umum.
Saya mencari lebih banyak detail dan sumber daya tentang ini. Saya diakui tidak tahu banyak teori grafik, dan saya tidak terbiasa dengan semua trik CS yang mungkin berguna (saya mendekati ini dari sisi matematika).
Terima kasih!