16.9.2 OpenFOAM®
Openfoam. Dalam bagian ini simpleFoam diperluas untuk menangani aliran cairan yang dapat dikompres pada semua kecepatan. Ini melibatkan modifikasi berikut untuk simpleFoam: (i) penambahan persamaan energi yang harus diselesaikan secara simultan dengan persamaan kontinuitas dan momentum, (ii) penggunaan persamaan keadaan yang berkaitan dengan kepadatan dengan suhu dan tekanan, (iii) dan pengenalan modifikasi yang diperlukan untuk persamaan koreksi tekanan dan sejumlah kondisi batas. Kode yang dihasilkan ditandai dengan simpleFoamCompressible dengan banyak ekstensi yang ditambahkan dalam bentuk tambahan termasuk file seperti yang ditunjukkan dalam Daftar 16.3.
upwind.H dan gaussConvectionScheme.H digunakan untuk memaksa diskretisasi upwind pada istilah konvektif persamaan koreksi tekanan. yang terikat.Kelas H digunakan untuk mengikat variabel dalam batas tertentu.

Daftar 16.3 Ini termasuk file yang digunakan dalam simpleFoamCompressible
createFields.H sekarang mencakup definisi bidang kepadatan dan variabel dan konstanta lainnya yang terkait dengan fisika aliran kompresif. Kelas psiTermo, yang digambarkan dalam Daftar 16.4, memberikan akses ke hubungan termofisika yang merupakan bagian dari perpustakaan OpenFOAM® [27], seperti hukum gas sempurna yang dijelaskan di Eq. (16.4).


Daftar 16.4 Sebuah ekstrak dari kelas psiTermo
Bidang tekanan dan enthalpy didefinisikan dalam kelas thermo, yang ditampilkan dalam Daftar 16.5, dan diakses sebagai referensi di createFields.H.

Daftar 16.5 Definisi tekanan dan bidang enthalpy dalam kelas thermo
Kecepatan didefinisikan seperti dalam versi incompressible tetapi aliran massa sekarang termasuk kepadatan dalam definisinya. (Listing 16.6).

Daftar 16.6 Definisi bidang kecepatan dan aliran massa
Dalam aliran kompresif, menetapkan batas fisik pada beberapa variabel seperti kepadatan dan tekanan dapat meningkatkan ketahanan, terutama selama beberapa iterasi pertama. Ini mencegah variabel dari mengasumsikan nilai non-fisik (seperti kepadatan negatif atau tekanan). Oleh karena itu, batas dapat ditetapkan sebagai bagian dari definisi kasus, seperti yang ditunjukkan dalam Daftar 16.7, dan dibaca di createFields.H.

Daftar 16.7 Menetapkan batas bawah dan atas untuk medan kepadatan dan tekanan
Persamaan momentum didefinisikan dengan sintaks yang sedikit dimodifikasi yang memperhitungkan hubungan kepadatan dan sifat termofisika. Sintax dari rumus linear diberikan dalam Daftar 16.8.

Daftar 16.8 Syntax yang digunakan untuk memecahkan persamaan momentum
Instruksi pertama mendefinisikan diskretisasi volume terbatas dari persamaan momentum dalam bentuk vektor (tiga komponen kecepatan diselesaikan dengan cara yang terpisah meskipun implementasi vektor). Sistem ini secara implisit rileks dan kemudian diselesaikan dengan penyelesai iteratif.
Setelah persamaan momentum diselesaikan, perkiraan baru dari medan kecepatan diperoleh. Bidang kecepatan ini tidak selalu memuaskan persamaan kontinuitas. Untuk menegakkan konservasi massa, pemasangan persamaan koreksi tekanan sekarang diperlukan untuk memperbaiki kecepatan. Setelah Eq. (16.19) sintaks yang digunakan untuk tujuan itu ditunjukkan dalam Daftar 16.9.


Daftar 16.9 Syntax yang digunakan untuk mengumpulkan persamaan koreksi tekanan
Adapun kasus yang tidak terkompresi, untuk menghindari check boarding, medan aliran massa mDot dinilai menggunakan interpolasi Rhie-Chow tetapi sekarang memperhitungkan juga medan kepadatan, dinilai berdasarkan model thermo seperti yang ditunjukkan dalam Daftar 16.10.


Daftar 16.10 Perhitungan aliran massa pada wajah sel menggunakan interpolasi Rhie-Chow
Perlu disebutkan bahwa kepadatan diinterpolasi ke wajah menggunakan skema upwind untuk meniru perilaku hiperbola aliran yang dapat dikompresi.
Persamaan koreksi tekanan sepenuhnya ditetapkan dan diselesaikan menggunakan sintaks yang ditampilkan dalam Daftar 16.11.

Daftar 16.11 Sintax untuk memecahkan persamaan koreksi tekanan
Setelah menyelesaikan persamaan koreksi tekanan, variabel yang tergantung pada koreksi presión diperbarui. Untuk medan aliran massa ini dilakukan dengan menggunakan sintaks dalam Daftar 16.12, ini mirip dengan koreksi aliran tidak terkompresi.

Daftar 16.12 Syntax untuk memperbarui bidang aliran massa
Di mana lagi fungsi flux() dalam Daftar 16.12 memperbarui aliran menggunakan koefisien matriks dan nilai sel secara langsung. Versi yang disederhanakan dari fungsi flux() ditunjukkan dalam Daftar 16.13.

Daftar 16.13 Versi yang disederhanakan dari fungsi flux( ), di mana koreksi flux mDotPrime dihitung
Dalam Daftar 16.13, aliran koreksi mDotPrime pada dasarnya dievaluasi dengan membentuk loop di atas wajah menggunakan koefisien atas dan bawah matriks dan melipatgandakan koefisien ini dengan nilai sel yang sesuai.
Akhirnya, kecepatan, kepadatan dan tekanan pada pusat sel diperbarui menggunakan Eqs. (16.20), (16.21), dan (16.22), seperti yang ditunjukkan dalam Daftar 16.14, di mana variabel alphaP adalah faktor relaksasi eksplisit untuk pembaruan tekanan dan kepadaian neces- sary untuk solver sederhana yang stabil.

Daftar 16.14 Pembaruan bidang kecepatan dan tekanan pada centroid sel
Untuk memperhitungkan efek kompresibilitas, persamaan energi diperkenalkan dan suhu terkait dihitung. Dalam OpenFOAM®, persamaan energi yang dinyatakan dalam hal enthalpy statik spesifik diberikan oleh Eq. (3.61), diselesaikan seperti yang digambarkan dalam Daftar 16.15.

Daftar 16.15 Penyelesaian persamaan energi
Setelah persamaan energi diselesaikan, enthalpy baru digunakan untuk memperbarui sifat suhu dan gas. (e.g., specific heats).
Selain penyelesai utama, tekanan total baru dan kondisi batas suhu total diimplementasikan untuk patch input subsonik, ini sering digunakan kondisi batas untuk simulasi aliran kompresibel. Perbatasan kondisi didefinisikan dalam direktori “derivedFvPatchFields” dan selanjutnya dikirimkan. Untuk pemahaman yang lebih baik, mungkin berguna untuk membaca Bab 18 sebelum melalui proses implementasi yang disajikan di bawah ini.
- totalPressureComp: Ini mengimplementasikan kondisi tekanan total pada input subsonik. Untuk tujuan ini, fungsi updateCoeffs() dimodifikasi seperti yang ditunjukkan dalam Daftar 16.16, yang menunjukkan bahwa setelah mengumpulkan data yang diperlukan dari penyelesai, tekanan statik batas dihitung menggunakan Eq. (16.40) dan nilai yang diperoleh disimpan dalam variabel newp yang didefinisikan.

Daftar 16.16 Fungsi updateCoeffs() yang diubah untuk menerapkan kondisi batas tekanan total pada inlet
- totalPressureCorrectorComp: Ini juga diperlukan dengan kondisi batas tekanan total input. Perannya adalah untuk menangani koreksi kecepatan aliran massa pada input yang mempengaruhi koefisien diagonal elemen batas, seperti yang dinyatakan oleh Eqs. (16.43) dan (16.44). Dalam implementasi, kontribusi ke koefisien reset ke nol, seperti yang dapat disimpulkan dari Daftar 16.17, kecuali gradientInternalCoeffs() yang diperlukan untuk mengembalikan nilai yang benar. Ini memastikan bahwa untuk operator divergensi dan laplacian satu kondisi batas diterapkan.


Daftar 16.17 Script yang digunakan untuk mengatur ulang koefisien diagonal dan untuk mengembalikan hanya kontribusi diffusi atau kondisi batas tekanan total pada input
Koefisien diagonal yang dimodifikasi dari persamaan koreksi tekanan untuk elemen batas dihitung dalam Daftar 16.18. Di sini fungsi deltaM() menerapkan Eq. (16.44) seperti itu, sementara istilah diffusi “(-srUA*patch().magSf() *srho)” dihapus dari koefisien persamaan koreksi tekanan, seperti yang didefinisikan oleh operator laplacian (see Chap. 8, computational pointers).

Daftar 16.18 Script yang digunakan untuk memodifikasi koefisien diagonal dari elemen batas untuk kondisi batas tekanan total di input
- totalTemp: Fungsi ini mengimplementasikan untuk persamaan energi kondisi batas total tem-perature pada input subsonik. Tujuannya adalah untuk membuat static suhu sebagai kondisi batas Dirichlet menggunakan Eq. (16.45). Untuk tujuan ini, fungsi updateCoeffs() dimodifikasi seperti dalam Daftar 16.19.

Daftar 16.19 Fungsi updateCoeffs() yang diubah untuk menerapkan kondisi batas suhu total pada input subsonik
Pada setiap iterasi, nilai suhu diperbarui berdasarkan suhu total input dan kecepatan batas.
- totalVelocity: Fungsi ini, yang dijelaskan dalam Daftar 16.20, mengimplementasikan pembaruan ke bidang kecepatan yang diperlukan dengan total kondisi yang diterapkan pada input subsonik. Untuk tujuan itu kondisi batas Dirichlet digunakan, dengan nilai kecepatan iter- secara aktif dihitung berdasarkan aliran yang diukur “mDot” pada batas itu sendiri. Algoritma ini didasarkan pada menangkap medan aliran “mDot” (yang diperbarui dengan nilai-nilai baru setelah menyelesaikan persamaan koreksi tekanan dengan memanggil fungsi “flux()”) dan membagi aliran dengan area wajah dan kepadatan yang sesuai.

Daftar 16.20 Pembaruan kecepatan pada input subsonik untuk kondisi batas tekanan total
Selain itu, variabel pemotongan diperkenalkan untuk mencegah “back-flow” pada input. Di sini variabel “clip” dapat mengasumsikan nilai nol atau satu. Faktanya, fungsi “neg” mengembalikan 1 dan 0 untuk nilai negatif dan positif masing-masing, mencegah kecepatan ke luar untuk diterima. Di sisi lain, variabel “inletDir” memberikan arah kecepatan pada inlet, seperti yang didefinisikan oleh pengguna.