Skema NUmerik (FVSchemes)
Dari sudut pandang pengguna, semua definisi terkait diskritisasi dan interpolasi Volume Terbatas tak beraturan ditentukan dalam kamus sistem/fvSchemes. Pengaturan yang diperlukan berbeda dari solver ke solver dan bergantung pada formulasi dari istilah-istilah tertentu dari model matematika. Skema diskritisasi dan interpolasi digunakan dalam kerangka FVM untuk diskritisasi istilah-istilah model matematika. Dalam OpenFOAM, model matematika didefinisikan dalam aplikasi solver, menggunakan Bahasa Khusus Domain (DSL). Sebagai contoh, potongan kode sumber berikut dari aplikasi solver icoFoam menunjukkan implementasi OpenFOAM dari hukum konservasi momentum:
Berbagai istilah dalam persamaan momentum dengan mudah dikenali, ditambahkan, dihapus, atau dimodifikasi. Untuk setiap istilah tersebut, sebuah diskritisasi setara perlu didefinisikan dalam sistem/fvSchemes.
INFO
Bahasa Khusus Domain (DSL) dikembangkan secara khusus untuk beberapa aplikasi, dan untuk yang lainnya, itu adalah konsekuensi alami dari pengembangan perangkat lunak dengan pemisahan yang jelas antara lapisan abstraksi. Berpikir dalam istilah persamaan yang diskritisasi, matriks, dan istilah sumber, bukan dalam istilah iterasi, penunjuk variabel, dan fungsi, mewakili dasar dari pemodelan persamaan / DSL di OpenFOAM. Memisahkan tingkat abstraksi adalah tanda praktik pengembangan perangkat lunak yang baik
TIP
Skema diskritisasi dan interpolasi adalah algoritma generik dalam OpenFOAM. Untuk membedakan antara algoritma implisit (perakitan matriks) dan algoritma eksplisit (istilah sumber), algoritma dikategorikan ke dalam namespace C++. Namespace adalah konstruksi bahasa pemrograman yang digunakan untuk menghindari tabrakan pencarian nama.
Kamus sistem/fvSchemes untuk kasus cavityOscillating adalah (GAMBAR).
INFO
Jika deskripsi berikut dari skema terpilih tidak jelas setelah pembacaan pertama, itu tidak memengaruhi pemahaman sisa buku. Mereka yang tertarik dapat kembali ke bagian ini dari buku nanti dan membacanya lagi bersama bab 1. Mendeskripsikan semua skema yang tersedia di OpenFOAM berada di luar cakupan buku ini, sehingga hanya beberapa skema terpilih yang dibahas.
Skema-skema diurutkan ke dalam kategori yang berkorelasi dengan istilah-istilah dalam model matematika serta entri-entri dalam sistem/fvSchemes:
INFO
Seleksi Waktu-Jalannya (Run-Time Selection) dalam OpenFOAM memungkinkan pemilihan skema-skema yang berbeda dalam sistem/fvSchemes. Modul ini mengeluarkan daftar semua skema yang tersedia jika entri dalam sistem/fvSchemes salah. Hal ini dapat digunakan untuk mempelajari skema-skema yang tersedia: memasukkan nama skema yang tidak ada mengarahkan sistem RTS untuk memberikan daftar skema yang tersedia.
ddtSchemes: Skema diskritisasi temporal orde pertama Euler diatur sebagai nilai default untuk masalah transient, dan kebetulan menjadi skema yang digunakan untuk menunjukkan praktik diskritisasi FVM di bab 1. Pilihan alternatif untuk skema-skema diskritisasi temporal adalah: • CoEuler, • CrankNicolson, • Euler, • SLTS,- backward, • bounded, • localEuler, dan • steadyState.
Dari skema-skema yang tersedia untuk diskritisasi temporal, CoEuler dan backward dijelaskan lebih rinci sebagai berikut:
CoEuler : Skema CoEuler adalah skema diskritisasi temporal orde pertama yang dapat digunakan untuk diskritisasi implisit maupun eksplisit. Reciprocal dari langkah waktu lokal yang dibatasi oleh Courant dihitung sebagai
dimana bilangan Courant berpusat pada wajah lokal dihitung dari aliran volumetrik F, vektor normal area wajah Sf, dan jarak antara pusat sel dari sel yang terhubung di wajah d:
Jika aliran massa disediakan, medan densitas harus digunakan untuk menghitung bilangan Courant berpusat pada wajah lokal menggunakan
dimana Fρ adalah aliran massa yang disimpan di pusat wajah. Untuk medan berpusat pada wajah φf, reciprocal dari langkah waktu berpusat pada wajah kemudian digunakan untuk menghitung turunan temporal orde pertama:
Karena skema-skema temporal beroperasi terutama pada medan berpusat sel, nilai berpusat sel untuk reciprocal dari langkah waktu dihitung sebagai maksimum dari nilai-nilai wajah, yaitu
yang kemudian digunakan untuk menghitung turunan temporal dari medan berpusat sel φc
Dengan cara ini, menggunakan medan yang dihitung secara lokal untuk reciprocal dari langkah waktu , turunan temporal dievaluasi secara lokal.
backward
Skema Diferensiasi backward orde kedua (BDS2), menggunakan nilai-nilai medan dari saat ini dan dua langkah waktu lama berikutnya untuk menyusun turunan temporal konvergen orde kedua. Turunan dihitung menggunakan ekspansi deret Taylor dimulai dari waktu saat ini, mundur dua langkah waktu:
Perkalian persamaan 3.7 dengan 4 dan pengurangan persamaan 3.8 dari itu, menghasilkan diskritisasi temporal BDS2 dari medan φc yang berpusat pada sel:
Perhitungan turunan menggunakan nilai-nilai lama dilakukan dalam OpenFOAM tanpa memerlukan kode klien untuk menyimpan nilai-nilai medan dan mesh lama. Implementasi aktual memperhitungkan penyesuaian langkah waktu yang mungkin, menghasilkan turunan dari medan yang berpusat pada sel sebagai berikut:
di mana koefisien c didefinisikan sebagai berikut:
dan dalam kasus dua langkah waktu berikutnya sama, koefisien c sesuai dengan diskritisasi menggunakan langkah waktu konstan, bandingkan dengan persamaan (3.9).
gradschemes ; gradSchemes menentukan skema evaluasi gradien yang digunakan untuk istilah-istilah yang didefinisikan dalam solver.
Skema gradien yang tersedia dalam OpenFOAM adalah:
Tiga dari skema ini dipilih dan dijelaskan sebagai berikut: Gauss, cellLimited, dan pointCellLeastSquares.
Gauss adalah skema diskritisasi yang paling sering digunakan untuk gradien, divergensi (konvektif), dan laplasian (difusi).
cellLimited memperluas fungsionalitas skema gradien standar. Ini menghitung pembatas untuk nilai gradien yang berpusat pada sel, dihitung dengan cara standar dan kemudian memperbesar nilai gradien dengan pembatas ini (0 < l ≤ 1).
di mana φ adalah properti yang berpusat pada sel dan C adalah himpunan semua sel yang berdekatan dengan wajah dari sebuah sel c.
Perbedaan kemudian diperbesar dengan koefisien yang ditentukan pengguna (0 < k < 1) seperti
dan
Perhatikan bahwa perbedaan tidak diperbesar jika koefisien yang ditentukan pengguna k disetel ke 1.
TIP
Persamaan dalam bagian ini bergantung pada konektivitas sel-sel dan juga menggunakan stensil berbasis sel. Implementasi sebenarnya menggunakan pengalamatan pemilik-tetangga, dengan alasan yang dijelaskan di bab 1.
Inilah mengapa fungsi min dan max membandingkan rasio perbedaan properti yang diberikan oleh nilai minimal dan maksimal dengan perbedaan yang diperkirakan oleh gradien:
di mana cf adalah vektor yang menghubungkan sel dan pusat wajah yang dimaksud. Perbedaan yang diperbesar dibandingkan dengan nilai minimal/maksimal kemudian digunakan untuk menghitung pembatas (l):
Menentukan gradien akhir di pusat sel, gradien yang dihitung oleh skema standar diskalakan dengan pembatas
pointCellsLeastSquares Memberikan stencil yang lebih besar untuk menghitung gradien. Dengan menggunakan stencil yang lebih luas, skema ini memberikan estimasi gradien dengan kesalahan absolut yang lebih rendah. Jika ekspansi Taylor linier untuk properti φ di sekitar pusat sel c digunakan:
diperlukan tiga nilai untuk menghitung tiga variabel yang tidak diketahui: komponen gradien ∇(φ)c. Ketika lebih dari tiga nilai titik diketahui, sistem menjadi overdetermin. Oleh karena itu gradien dihitung menggunakan minimasi kesalahan gradien kuadrat yang didefinisikan sebagai
di mana cc adalah sel-sel dari stencil. wcc adalah faktor pembobotan yang menghubungkan sel yang ditanyakan dan sel dari stencil.
INFO
Perhitungan gradien Gauss yang ditunjukkan untuk contoh lapangan dalam gambar 3.3 adalah contoh buku teks tentang anisotropi mesh – perhitungan sangat bergantung pada orientasi wajah terhadap sumbu koordinat.
INFO
Sebagai latihan, coba hitung gradien fungsi eksplisit yang curam pada mesh yang berbeda dan bandingkan konvergensi kesalahan untuk skema gradien yang berbeda.
divSchemes ; divSchemes digunakan untuk mendiskritisasi setiap istilah konvektif (divergensi) dalam model matematika.Dalam hal itu, istilah ∇ · (U) dikurangkan dari matriks koefisien untuk meningkatkan konvergensi solusi.
laplacianSchemes : Subkamus laplacianSchemes dalam kamus sistem/fvSchemes disusun dari diskritisasi Gauss, dan sebuah skema interpolasi.
interpolationSchemes : InterpolationSchemes mengubah cara nilai yang berpusat pada wajah diinterpolasi.
OpenFOAM menyediakan berbagai pilihan yang sangat banyak dalam hal skema interpolasi: biLinearFit, blended, clippedLinear, CoBlended, cubic, cubicUpwindFit, downwind, dll. Sebagian besar skema interpolasi yang tersedia digunakan untuk mendiskritisasi istilah konvektif.