infistream

Jenis-jenis dimensi

Jenis-jenis dimensi. Tipe berdimensi menambahkan satuan pengukuran ke skalar, vektor, dan tensor. Mereka memperluas operasi aritmetika tensor untuk memasukkan satuan pengukuran yaitu dimensi dalam terminologi OpenFOAM. Dimensi (dimensioned<Type>) adalah kelas pembungkus (adapter) yang mendelegasikan komputasi aritmetika tensor ke tipe tensor yang dibungkus (wrapped tensor Type) dan pemeriksaan dimensi ke objek dimensi yang dibungkus (wrapped dimensionSet object). Menyelidiki operator aritmatika dari kelas templat dimensi (dimensioned<Type>) mengarah ke implementasi operator += yang ditunjukkan di bawah ini:

Operator aritmatika dari kelas dimensi (dimensionSet) bertanggung jawab atas proses pemeriksaan dimensi. Kode sumber operator aritmatika += dari kelas dimensi (dimensionSet) terlihat seperti berikut:

Kelas dimensi (dimensionSet) mengimplementasikan dimensi sebagai sebuah himpunan eksponen bilangan bulat dari ukuran fisik seperti yang ditunjukkan di bawah ini:

Seperti yang ditunjukkan dalam kode di bawah ini, operator pemeriksaan != dimensi diimplementasikan dalam istilah operator kesetaraan ==. Prosedur pemeriksaan iterasi berulang-ulang melalui dimensi dari dimensionSets yang beroperasi. Melalui loop tersebut, itu menguji apakah magnitudo perbedaan antara eksponen dimensi cukup besar untuk mempertimbangkan himpunan tidak sama (> smallExponent).

nilai dari smallExponent adalah variable kelas statis :

inisialisasi SMALL, dengan nilai 10e-15 untuk double presisi skalar.

Menyalakan pemeriksaan dimensi dilakukan dengan mengatur flag debug menjadi on untuk kelas dimensionedSet dalam file $WM_PROJECT_DIR/etc/controlDict:

Kesimpulan yang disajikan untuk operator += sama persis dengan operasi aritmatika tensor berdimensi lainnya. Pemeriksaan dimensi di aktifkan secara default dan umumnya sebaiknya tidak dinonaktifkan dalam OpenFOAM. Bahkan jika aplikasi kustom mengimplementasikan persamaan dalam bentuk tanpa dimensi, persamaan-persamaan tersebut akan diubah skala dengan apa yang seharusnya menjadi angka tanpa dimensi. Namun, jika terjadi kesalahan dalam menghitung, katakanlah L, pemeriksaan dimensi yang bergantung pada sistem satuan pengukuran SI akan menangkap hal ini. 

INFO
Untuk banyak kelas templat dalam OpenFOAM dengan nama yang kompleks, ada typedef yang disediakan. Dalam C++, kata kunci typedef memungkinkan programmer untuk mendefinisikan nama tipe yang lebih pendek dan lebih ringkas. Meskipun typedef ini mungkin tidak jauh lebih pendek dari aslinya, setidaknya ini menghemat pengetikan bagian <Type>. Dalam kasus dimensioned<Type>, penekanan bukanlah pada panjang nama, tetapi pada gaya kode – dimensionedVector adalah nama dalam gaya camel case yang digunakan untuk tipe dalam kode tingkat aplikasi OpenFOAM.

Sinonim nama yang paling populer untuk dimensioned<Type> adalah dimensionedScalar dan dimensionedVector dan digunakan dalam contoh-contoh berikut. Sebagai contoh, jika dua objek dimensionedVector dibangun dengan cara sebagai berikut:

 Ini adalah objek konstan dan global, dan mereka dapat ditemukan dalam file sumber dimensionedSets.C:

INFO
Karena unit dimensi fisik dasar digunakan untuk membuat yang kompleks (misalnya N = kgm/s2), gunakan objek dimensionSet yang telah ditentukan secara global ketika mendefinisikan himpunan dimensi Anda sendiri untuk meningkatkan keterbacaan kode.

Gerakan pada aritkmatika dari jenis dimensi dan penambahan velocity to momentum seperti di bawah ini

akan menghasilkan error sebagai berikut ini ketika program dieksekusi:

Proses pemeriksaan dimensi dalam OpenFOAM dilakukan pada waktu runtime. Akibatnya, kode yang mengandung kesalahan dalam operasi dimensi akan dikompilasi, tetapi tidak akan berjalan.