infistream

10.5.2 OpenFOAM®

Struktur organisasi penyelesaian aljabar linier iteratif di OpenFOAM® [51] mengikuti pendekatan biasa. Ini dimulai dengan mendefinisikan kelas dasar dari mana setiap jenis penyelesaian matriks aljabar didirikan. Penyelesaian aljabar ini dikelompokkan dalam tiga kategori utama yang disebut sebagai solvers, preconditioners, dan smoothers. Smoothers dan preconditioners dibedakan dengan mengaitkan hubungan titik tetap ke smoothers dan menyematkannya dalam kerangka kerja preconditioners. Mengingat Persamaan (10.81), kelas preconditioners mengimplementasikan produk P1r sementara kelas smoothers memajukan solusi. Selain itu, kategori solvers mengumpulkan informasi yang diperlukan terkait dengan implementasi algoritma konjugat gradien dan multigrid.

Kode sumber penyelesaian aljabar linier berada dalam folder lduMatrix yang terletak di ” …/src/OpenFOAM/matrices/lduMatrix/ ” dalam tiga subfolder berikut:
solvers
– preconditioners
– smoothers

Nama setiap subfolder mencerminkan fungsinya. Folder solvers berisi kode utama penyelesaian iteratif yang diimplementasikan di OpenFOAM®, yaitu:
diagonalSolver: penyelesaian diagonal untuk masalah simetris dan asimetris.
GAMG: penyelesaian aljabar multigrid aglomerat geometrik (juga disebut Generalized geometric-algebraic multi-grid dalam panduan).
ICC: penyelesaian konjugat gradien yang diprekonduksi oleh Cholesky yang tidak lengkap.
PBiCG: penyelesaian gradien bi-konjugat yang diprekonduksi untuk matriks asimetris.
PCG: penyelesaian konjugat yang diprekonduksi untuk matriks simetris.
smoothSolver: penyelesaian iteratif menggunakan smoother untuk matriks simetris dan asimetris berdasarkan preconditioners.

Folder preconditioners berisi berbagai implementasi dari diagonal ILU yang disebut sebagai:
diagonalPreconditioner: preconditioner diagonal.
DICPreconditioner, DILUPreconditioner: preconditioner diagonal Incomplete Cholesky untuk matriks simetris dan asimetris masing-masing.
FDICPreconditioner: versi lebih cepat dari DICPreconditioners diagonal-based incomplete Cholesky preconditioner untuk matriks simetris di mana reciprok dari diagonal yang diprekonduksi dan koefisien atas dibagi oleh diagonal dihitung dan disimpan.
GAMGPreconditioner: preconditioner multigrid aglomerat geometrik aljabar. Ini menggunakan siklus multigrid sebagai preconditioner untuk menjalankan bagian kedua dari Persamaan (10.81).
noPreconditioner: preconditioner nol untuk matriks simetris dan asimetris.

Terakhir, folder smoothers berisi yang berikut:
DIC, DILU: smoother berbasis diagonal incomplete Cholesky untuk matriks simetris dan asimetris.
DICGaussSeidel, DILUGaussSeidel: smoother DIC, DILU/Gauss-Seidel gabungan untuk matriks simetris dan asimetris di mana smoothing DIC, DILU diikuti oleh Gauss-Seidel untuk memastikan bahwa “puncak” yang dibuat oleh sweeping DIC, DILU diratakan.
DILU: smoother berbasis diagonal incomplete LU untuk matriks asimetris.
GaussSeidel: metode Gauss-Seidel untuk matriks simetris dan asimetris.

Selanjutnya, OpenFOAM® mendefinisikan di dalam kelas lduMatrix tiga kelas dasar tambahan yang membungkus ketiga kategori yang sesuai. Oleh karena itu, file lduMatrix.H membaca (Listing 10.1).