Implementasi viscosityModel kustom dibangun berdasarkan contoh di mana viskositas bergantung pada laju geser. Darah diambil sebagai fluida contoh, dan data eksperimental yang menghubungkan viskositas dengan laju geser diberikan di [1, gambar 2]. Data eksperimental tersebut didigitalkan dari [1] ke dalam file CSV menggunakan engauge digitizer, dengan kolom pertama adalah laju geser dan kolom kedua adalah viskositas dinamis efektif yang sesuai μ.
Viskositas kinematik dihitung dengan membagi μ dengan ρ = 1060, yang merupakan kepadatan perkiraan darah pada suhu ruangan, dan ditunjukkan pada gambar.
INFO Contoh ini berfokus pada implementasi model viskositas baru di OpenFOAM, bukan pada kebenaran fisik dari model tersebut.
Contoh ini mencakup implementasi kelas model viskositas baru yang membaca viskositas kinematik dan laju regangan lokal, kemudian mengembalikan viskositas efektif. Pendekatan berbasis tabel data ini berbeda dengan model viskositas lainnya yang lebih umum menggunakan ekspresi analitis dari hubungan laju regangan vs. viskositas. Contoh satu set pengukuran dari rheometer geser (viskositas efektif vs. laju regangan) ditunjukkan dalam gambar 11.4. Karena hanya ada titik data diskret dalam tabel rheometry, skema interpolasi harus digunakan untuk menginterpolasi di antara mereka dan menetapkan viskositas untuk setiap laju regangan yang diberikan. OpenFOAM menyediakan interpolasi berbasis spline dua dimensi yang dapat digunakan untuk tujuan ini: interpolateSplineXY. Kode sumber untuk perpustakaan ini tersedia di repositori contoh.
Disini, hanya implementasi dari fungsi anggota virtual yang bertanggung jawab untuk perhitungan viskositas yang dibahas. Informasi lebih lanjut tentang implementasi tersedia di dalam kode sumber.
Model viskositas baru ini mewarisi, seperti yang diharapkan, dari viscosityModel, sehingga antarmuka viscosityModel yang ditunjukkan dalam listing 69 harus dipenuhi oleh model viskositas baru tersebut.
Fungsi anggota correct melakukan perhitungan (update) dari viskositas kinematik, sementara fungsi anggota nu menyediakan akses ke viskositas.
INFO Dalam OpenFOAM, seperti dalam perangkat lunak berbasis objek skala besar lainnya, implementasi alternatif dari fungsi virtual memperluas fungsionalitas dari sebuah perpustakaan. Dengan kata lain, saat memperluas sebuah perpustakaan dalam OpenFOAM, cari tahu apa yang dilakukan fungsi virtual dalam kelas turunan lainnya, karena fungsi anggota tersebut kemungkinan besar akan dimodifikasi juga dalam kelas baru Anda.
Perluasan model viskositas dimulai dengan pewarisan publik dari viscosityModel dan definisi anggota data pribadi, yang diperlukan untuk perhitungan viskositas, seperti yang ditunjukkan dalam listing 70. Fungsi anggota pribadi loadViscosityTable pada listing 70 bertanggung jawab atas membaca data eksperimental dari file CSV, yang dikonversi menjadi scalar fields rheologyTableX dan rheologyTableY, yang digunakan sebagai input untuk interpolasi berbasis spline di OpenFOAM.
Deklarasi fungsi anggota virtual murni yang diwarisi dari viscosityModel ditampilkan dalam listing 71. Bidang viskositas kinematik adalah anggota data pribadi (dibungkus dalam smart pointer tmp), sehingga bidang viskositas dan bidang viskositas patch dapat dengan mudah dikembalikan. Bagian utama dari implementasi model terletak pada loadViscosityTable dan
Benar
Kelas csvTableReader digunakan untuk membaca file CSV yang berisi data eksperimental dari gambar 11.4. Fungsi loadViscosityTable dipanggil sekali di dalam tubuh konstruktor dan sekali di dalam fungsi anggota read. Fungsi anggota correct memperoleh laju regangan dari viscosityModel di setiap sel, kemudian melakukan interpolasi viskositas kinematik yang tampak dari data eksperimental yang dibaca oleh loadViscosityTable menggunakan interpolasi berbasis spline. Implementasinya diuraikan dalam listing 73.
Definisi model viskositas baru terdapat dalam file konstanta/dictionary transportProperties:
Input dari model viskositas baru berisi jalur ke file dengan data eksperimental, serta informasi yang mendefinisikan struktur file CSV. File CSV tidak mengandung header, referensi
kolom adalah 0, dan hanya ada satu kolom komponen tunggal, yaitu kolom 1, dengan viskositas kinematik tampak eksperimental dari [1].