Aplikasi pasca-pemrosesan khusus
Aplikasi pasca-pemrosesan khusus diprogram ketika tidak ada aplikasi atau objek fungsi serupa yang ada di OpenFOAM yang melakukan perhitungan yang diperlukan.


Fraksi volume {αc}c∈C terkait dengan pusat sel, dan mereka diaproksimasi sebagai α ̃ := α ̃ (x) di suatu titik x untuk merekonstruksi iso-surface. Algoritma rekonstruksi iso-surface di OpenFOAM mengimplementasikan algoritma regularized marching tetrahedra [6], yang menggunakan aproksimasi linear untuk α ̃ (x) sepanjang tepi mesh yang dipotong oleh Σ(t). Interpolasi Jarak Terbalik (IDW) digunakan untuk menghitung nilai fraksi volume sudut sel dari fraksi volume sel yang berpusat {αc}c∈C.
Tugas dari algoritma iso-surface adalah merekonstruksi permukaan sebuah bubble sebagai mesh segitiga, dari suatu lapangan iso-surface (fraksi volume dalam hal ini). Kecepatan bubble dihitung dari evolusi temporal dari pusat massa bubble.
INFO
Bab ini bergantung pada kasus simulasi cases/chapter04/risingBubble2D dari repositori ofprimer.
folder dalam repositori kode. Nama perpustakaan yang digunakan oleh isoSurfaceBubbleCalculator adalah bubbleCalc dan kode sumbernya ditempatkan dalam

folder.
Contoh dimulai dengan implementasi perpustakaan bubbleCalc, diikuti oleh aplikasi pemrosesan pasca-proses isoSurfaceBubbleCalculator.

Pemodelan sebuah gelembung naik dengan menggunakan iso-surface merupakan contoh prototipe dari penambahan fungsionalitas ke dalam sebuah kelas yang sudah ada. Dalam kasus iso-surface ini, kelas tersebut disebut isoSurfacePoint, dan sumber kode untuk kelas tersebut terletak di dalam folder.

Konstruktor isoSurfacePoint menetapkan persyaratan berikut pada gelembung naik:
1. Sebuah bidang tambahan harus dihitung di titik sudut sel (pointValues),
2. Fungsi anggota belum tersedia untuk perhitungan luas, centroid, atau kecepatan naik.
Di atas, ada beberapa hal yang mewajibkan fungsionalitas tambahan untuk kelas isoSurfacePoint. Mengimplementasikan perhitungan baru dengan fungsi global dan data dalam aplikasi pasca-pemrosesan memungkinkan, namun ini membuatnya tidak mungkin untuk digunakan kembali dalam konteks lain: objek fungsi atau aplikasi lain.

diganti dengan yang lain.

• aplikasi CFD berorientasi objek mungkin menggunakan puluhan objek sehingga memanggil tulis untuk setiap satu akan menyebabkan pembengkakan kode yang parah,
• objek tidak selalu ditulis setiap langkah waktu - frekuensi penulisan mengikuti aturan yang ditentukan pengguna yang dibaca dari file kamus dan diterapkan oleh registri.
Alih-alih memiliki beberapa panggilan tulis di solver (yang akan terlihat seperti object.write()), kelas Foam::Time berfungsi sebagai Observer atau Object Registry, dan meneruskan panggilan ke tulis ke semua subjek (objek yang terdaftar).
Kelas isoBubble memiliki atribut privat berikut:
1. isoPointFieldCalc yang menghitung nilai lapangan permukaan iso dari sudut sel ke sudut sel yang bersangkutan dari nilai lapangan iso permukaan yang berpusat pada sel,
2. isoSurfacePoint yang melakukan rekonstruksi permukaan iso dan menyimpan data jaringan permukaannya,
3. data dan fungsi yang diperlukan untuk output yang diformat dari permukaan iso.
Dalam simulasi OpenFOAM, lapangan titik tidak tersedia secara default - OpenFOAM menggunakan lapangan berpusat sel sebagai variabel dependen dalam model matematika. Konstruktor kosong yang tidak ada dari isoSurfacePoint dan konstruktor yang mengambil (vol)lapangan berpusat sel sebagai argumen, mengecualikan pewarisan dari isoSurfacePoint. Sebagai gantinya, komposisi digunakan, dan objek isoPointFieldCalc menghitung lapangan titik yang diperlukan oleh konstruktor isoSurfacePoint.

Fungsi anggota dari isoSurfacePoint dapat digunakan untuk melakukan perhitungan pusat dan luas untuk gelembung. Kami menghitung luas gelembung sebagai jumlah magnitudo vektor normal luas wajah permukaan iso:

Pusat gelembung dihitung sebagai rata-rata aljabar dari semua titik mesh permukaan iso:

Dimana N adalah jumlah titik pada mesh permukaan iso. Perhitungan dilakukan oleh fungsi anggota isoBubble::area dan isoBubble::center seperti yang ditunjukkan dalam listing 24. Dengan menggunakan kembali isoSurface

classes yang menggunakan fungsionalitas ini tanpa harus khawatir tentang detail-detail rendah dari operasi IO atau rekonstruksi permukaan. Penyelubungan ini mempromosikan keterulangan kode dan menyederhanakan pengembangan fitur atau aplikasi baru yang memerlukan analisis gelembung.

Agar implementasi isoBubble mudah dibagikan dengan orang lain (baik itu pengguna atau program klien), implementasi isoBubble ditetapkan sebagai bagian dari sebuah perpustakaan, yaitu perpustakaan bubbleCal.

INFO
Utilitas pascapemrosesan contoh isoSurfaceBubbleCalculator tersedia dalam repositori kode, dalam folder aplikasi/utilitas/postProcessing.
Pertama, deklarasi kelas isoBubble harus disertakan agar perpustakaan dapat digunakan dalam sebuah aplikasi. Selain itu, untuk memproses hasil simulasi yang ada, pemilih langkah waktu digunakan. Potongan kode yang sesuai ditampilkan dalam listing 27. Selanjutnya, sebuah opsi baris perintah diberikan kepada

Dengan mewarisi dari regIOobject, kode klien dipaksa untuk menginisialisasi objek isoBubble dengan sebuah IOobject. Parameter-parameter konstruktor IOobject didefinisikan sebagai berikut:
1. "bubble" - nama objek (dalam kasus kita, nama file yang kita gunakan untuk menyimpan data iso-surface),
2. "bubble" - instansi, atau direktori tempat objek disimpan (dalam contoh ini sama dengan nama file),

• runTime - registry objek yang objek didaftarkan - kita ingin operasi IO untuk isoBubble diatur oleh waktu simulasi,
• IOobject:: - token (enumerasi publik) yang mendefinisikan operasi tulis/baca waktu nyata untuk IOobject,
• inputField - lapangan iso yang dilacak.
Menjalankan simulasi dengan memanggil skrip Allrun menginisialisasi gelembung, menjalankan solver interIsoFoam, dan memanggil

untuk menghitung permukaan iso gelembung. Permukaan gelembung disimpan sebagai serangkaian file "vtk" dalam direktori bubble. Waktu fisik, luas gelembung, dan koordinat pusat massa gelembung disimpan dalam bubble.csv.

Visualisasi iso-surface pada gambar 8.3 menunjukkan beberapa perbedaan antara algoritma iso-surface 2D di OpenFOAM dan yang ada di ParaView (yang disebutkan dalam file isoSurface.H).

Keluaran CSV dari isoSurfaceBubbleCalculator dalam bubble.csv diproses dalam notebook Jupyter iso-bubble.ipynb menggunakan Pandas Python Data Analysis Library. Kode Python pandas tercantum dalam listing 30. Namun, dua keuntungan terlihat yang meningkatkan pemahaman tentang kode pemrosesan data: membaca file CSV adalah hal yang mudah, kolom diakses berdasarkan namanya, perhitungan turunan sangat langsung.

