INFISTREAM
geometry pada CFD
Definisi Geometri
Geometry. Geometry merupakan salah satu cabang dari matematika yang menjelaskan tentang properti dari ruangan yang berhubungan dengan jarak, bentuk, ukuran dan posisi relatif dari sebuah gambar. Pada simulas CFD geometry sering disebut sebagai objek penelitian dalam bentuk gambar 2D atau 3D yang akan berguna sebagai domain. Geometry juga berguna sebagai boundary untuk aliran fluida. Sehingga tanpa adanya geometry, bisa dipastikan simulasi CFD tidak bisa dikerjakan.
Geometry merupakan komponen terpenting sebagai permulaan langkah CFD dengan menyajikan desain gambar objek, adapun penjelasan lebih lengkap dari geometry bisa check di bawah ini
- Pengertian Geometry
- Pengertian CAD ( Computer Aided Design )
- Format ASCII dan Binary
- Format geometry yang sering digunakan pada simulasi
Penting untuk membedakan antara geometri mesh sebenarnya dan geometri yang dihasilkan oleh program Computer Aided Design (CAD). Meskipun beberapa kata tentang konektivitas jala umumnya telah dihabiskan dalam bab sebelumnya, di sini diberikan gambaran tentang bagaimana jala sebenarnya disimpan dalam sistem file. Ada tiga direktori utama dalam kasus OpenFOAM standar: 0, konstan, dan sistem. Direktori pertama (0) menyimpan kondisi awal untuk bidang, yang umumnya tidak diperlukan untuk proses pembuatan jala. Direktori terakhir (sistem) menyimpan pengaturan yang terkait dengan numerik dan pelaksanaan keseluruhan simulasi. Untuk bab ini, direktori konstan sedang dipertimbangkan karena menyimpan jala termasuk semua data spasial dan keterhubungan. Detail tambahan tentang struktur kasus OpenFOAM disediakan di bab 3.
Selama jala statis digunakan, grid komputasi selalu disimpan dalam direktori konstan/polyMesh. Jala statis, dalam konteks ini, adalah jala yang tidak berubah selama simulasi baik melalui pergeseran titik maupun perubahan keterhubungan. Data jala secara alami terletak di sini karena diasumsikan konstan, oleh karena itu folder konstan. Dari perspektif pemrograman, itu dijelaskan sebagai polyMesh yang merupakan deskripsi umum dari jala OpenFOAM dengan semua fitur dan batasannya. Untuk kasus jala statis tertentu, data jala akan disimpan di konstan/polyMesh. File data jala tipikal yang ditemukan di sini termasuk: titik, wajah, pemilik, tetangga, dan batas. Tentu saja, data yang terkandung harus valid, untuk mendefinisikan jala dengan benar. Tutorial pitzDaily dari solver potentialFoam digunakan sebagai contoh dalam diskusi berikutnya, yang dapat ditemukan dengan memberikan perintah berikut:
Setelah memeriksa isi direktori polyMesh, menjadi jelas bahwa direktori tersebut belum mengandung data jala yang diperlukan. Hanya blockMeshDict yang ada dalam tutorial ini, tetapi menjalankan blockMesh di direktori kasus menghasilkan jala dan data keterhubungan yang terkait:
Pengguna yang telah bekerja dengan kode CFD sebelumnya, terutama dengan kode yang didasarkan pada jala terstruktur, mungkin merindukan penanganan per sel. Alih-alih membangun jala berdasarkan sel, metode FVM tak berstruktur dalam OpenFOAM membangun jala berdasarkan wajah. Untuk informasi lebih lanjut tentang hal ini, pembaca disarankan untuk melihat bagian penanganan pemilik-tetangga di bab 1.3. Berikut adalah tujuan dari setiap file di constant/polyMesh.
points mendefinisikan semua titik jala dalam sebuah vectorField, di mana posisi mereka dalam ruang diberikan dalam meter. Titik-titik ini bukanlah pusat sel C, tetapi sudut-sudut sel. Untuk mentranslasikan jala sejauh 1m ke arah x positif, setiap titik harus diubah secara sesuai. Mengubah struktur lain di subdirektori polyMesh untuk tujuan ini tidak diperlukan, tetapi hal ini dibahas dalam bagian 2.4.
Sebuah tinjauan lebih dekat pada titik-titik dapat diambil dengan membuka file yang sesuai dengan editor teks. Untuk menjaga output terbatas, header diabaikan dan hanya beberapa baris pertama yang ditunjukkan:
points tidak berisi apa-apa selain daftar 25012 titik. Daftar ini tidak memerlukan penyusunan apa pun meskipun bisa. Selain itu, semua elemen dalam daftar tersebut bersifat unik, yang berarti koordinat titik tidak dapat muncul beberapa kali. Akses dan addressing terhadap titik-titik tersebut dilakukan melalui posisi daftar dalam vectorField, dimulai dari 0. Posisi tersebut disimpan sebagai label.
faces membentuk wajah dari titik-titik berdasarkan posisinya dalam vectorField titik-titik dan menyimpannya dalam labelListList. Ini adalah daftar bertingkat, yang berisi satu elemen per wajah. Setiap elemen ini pada gilirannya adalah labelList sendiri, menyimpan label dari titik-titik yang digunakan untuk membangun wajah. Gambar 2.1 menunjukkan visualisasi dari konstruksi labelListList.
Setiap wajah harus terdiri dari setidaknya tiga titik dan ukurannya diikuti oleh daftar label titik. Pada sebuah wajah, setiap titik terhubung oleh tepi lurus ke tetangganya. Dengan menggunakan titik-titik yang mendefinisikan wajah, vektor luas permukaan Sf dapat dihitung di mana arah ditentukan oleh aturan tangan kanan.
Sekali lagi, hanya beberapa baris pertama dari faces yang ditampilkan untuk menjaga kekompakan:
Seperti yang terlihat dari baris pertama output, mesh terdiri dari 49180 faces di mana hanya subset yang ditampilkan di atas. Mirip dengan panjang daftar faces sebesar 49180, panjang setiap labelList dinyatakan sebelum daftar dimulai. Oleh karena itu, semua faces yang ditampilkan di sini dibangun dari 4 titik, yang dirujuk oleh posisi mereka dalam daftar points.<br><br><b><i>owner</i></b> adalah labelList lagi dengan dimensi yang sama dengan daftar yang menyimpan faces. Karena faces sudah dibangun dan disimpan dalam daftar faces, keanggotaan mereka pada sel volume harus didefinisikan. Sesuai definisi, sebuah face hanya bisa dibagi antara dua sel volume yang bertetangga. Daftar owner menyimpan face mana yang dimiliki oleh sel volume mana, yang mana ditentukan berdasarkan label sel volume. Sel volume dengan label sel volume yang lebih rendah adalah pemilik face dan face lainnya dianggap sebagai tetangga. Ini menginstruksikan kode bahwa face pertama (indeks 0 dalam daftar) dimiliki oleh sel volume dengan label yang disimpan pada posisi tersebut.<br><br>Sebuah tinjauan lebih dekat pada file owner mengungkapkan bahwa dua face pertama dimiliki oleh sel 0 dan dua face berikutnya dimiliki oleh sel 1.
Daftar ini menunjukkan tetangga untuk setiap sel yang sesuai dengan masing-masing face dalam daftar face. Tetapi karena batas atau tepi mesh, beberapa face tidak memiliki tetangga, sehingga daftar tetangga lebih pendek dari daftar pemilik.
Neighbour harus dilihat bersama dengan daftar pemilik, karena ia melakukan kebalikan dari daftar pemilik. Alih-alih menentukan sel mana yang memiliki setiap face tertentu, ia menyimpan sel tetangga. Membandingkan daftar pemilik dengan file tetangga mengungkapkan perbedaan utama: Daftar tetangga jauh lebih pendek. Ini disebabkan oleh fakta bahwa face batas tidak memiliki sel tetangga.
Sekali lagi, prinsip kerja penentuan pemilik-tetangga dijelaskan dalam bab sebelumnya.
batas berisi semua informasi tentang batas-batas mesh dalam daftar subdictionaries bersarang. Batas sering disebut sebagai patch atau patch batas. Seperti komponen sebelumnya dari mesh, hanya beberapa baris yang relevan ditunjukkan:
Untuk contoh pitzDaily yang digunakan sepanjang bagian ini, file boundary berisi daftar 5 patch. Setiap patch direpresentasikan oleh kamus, yang dipimpin oleh nama patch. Informasi yang termasuk dalam kamus tersebut meliputi: jenis patch, jumlah wajah, dan
Gambar 2.2: Prinsip kerja pemetaan batas dalam OpenFOAM untuk mesh dengan 3 patch dan n wajah. Elemen abu-abu menunjukkan startFace dari patch tertentu.
Metode penanganan wajah batas diilustrasikan dalam Gambar 2.2. Secara desain, semua wajah yang tidak memiliki tetangga dikumpulkan di bagian akhir daftar wajah di mana mereka diurutkan sesuai dengan patch pemiliknya. Semua wajah yang merupakan wajah batas harus dicakup oleh deskripsi batas.
Dari perspektif pengguna, baik titik maupun wajah, pemilik, dan tetangga tidak perlu disentuh atau dimanipulasi secara manual. Jika mereka diubah secara manual, hal ini kemungkinan besar akan merusak mesh. Namun, file batas mungkin perlu diubah untuk setup tertentu tergantung pada alur kerja Anda. Alasan yang paling mungkin untuk mengubah file batas adalah untuk mengubah nama atau jenis patch. Mungkin lebih mudah untuk melakukan perubahan di sini daripada menjalankan ulang generator mesh yang sesuai.
Sekarang bahwa struktur dasar dari mesh OpenFOAM dijelaskan, jenis patch batas akan ditinjau. Ada beberapa jenis patch yang dapat ditugaskan ke batas, beberapa di antaranya lebih umum daripada yang lain. Penting untuk membedakan antara batas (atau patch) dan kondisi batas (lihat gambar 2.3).
Sebuah patch adalah batas luar domain komputasi dan ditentukan dalam file batas, sehingga menjadi properti topologis. Koneksi logis antara batas dan geometri CAD adalah bahwa permukaannya harus serupa dengan mungkin. Diungkapkan dalam hal topologi mesh, itu adalah kumpulan wajah yang hanya memiliki sel pemilik dan tidak ada sel tetangga. Berbeda dengan patch, kondisi batas
Gambar 2.3: Ilustrasi perbedaan dan hubungan antara geometri CAD, grid komputasi dan batasnya, serta kondisi batas yang diterapkan pada batas-batas tersebut.
Jenis Patch
Jenis patch adalah:
patch Sebagian besar patch (batas) dapat dijelaskan oleh jenis patch, karena merupakan deskripsi yang paling umum. Setiap kondisi batas Neumann, Dirichlet, atau Cauchy dapat diterapkan pada patch batas jenis ini.
wall Jika suatu patch didefinisikan sebagai wall, itu tidak menyiratkan bahwa tidak ada aliran melalui patch tersebut. Ini hanya memungkinkan model turbulensi untuk secara tepat menerapkan fungsi dinding ke patch tersebut (lihat bab 7). Mencegah aliran melalui patch jenis dinding masih harus secara eksplisit didefinisikan melalui kondisi batas kecepatan.
symmetryPlane Menetapkan tipe patch menjadi symmetryPlane menyatakan bahwa itu bertindak sebagai bidang simetri. Tidak ada kondisi batas lain yang dapat diterapkan kecuali symmetryPlane, dan harus diterapkan untuk semua lapangan. Informasi lebih lanjut tentang berbagai kondisi batas yang tersedia dalam OpenFOAM diberikan di bab 10.
empty Dalam kasus simulasi dua dimensi, tipe ini harus diterapkan pada patch yang berada dalam “bidang”. Seperti halnya tipe symmetryPlane, kondisi batas dari patch-patch tersebut juga harus diatur kosong untuk semua lapangan. Tidak ada kondisi batas lain yang akan diterapkan pada patch-patch tersebut. Penting bahwa semua tepi sel antara kedua patch kosong sejajar, jika tidak simulasi dua dimensi yang akurat tidak mungkin dilakukan.
cyclic Jika sebuah geometri terdiri dari beberapa komponen yang identik (misalnya, pisau baling-baling atau pisau turbin), hanya satu yang perlu diatur diskritisasi dan diperlakukan seolah-olah terletak di antara komponen-komponen yang identik. Untuk baling-baling empat bilah, ini akan berarti bahwa hanya satu bilah yang dimasukkan dalam mesh (mesh 90°) dan dengan menetapkan tipe patch siklik ke patch-patch dengan normal dalam arah tangensial. Patch-patch ini kemudian akan bertindak seolah-olah fisik secara bersamaan.
wedge Jenis batas ini mirip dengan patch siklik, hanya khusus dirancang untuk patch siklik yang membentuk wedge kecil (misalnya, ≤ 5°). Dari sudut pandang eksekusi dan kompatibilitas, tidak masalah bagaimana struktur polyMesh dibuat, asalkan data mesh dalam dirinya valid. Meskipun ada berbagai alat pembangkitan mesh yang dikemas dengan OpenFOAM, mesin mesh pihak ketiga eksternal dapat digunakan asalkan konversi atau output yang valid dapat dibuat. Selain komponen inti yang disebutkan di atas dari suatu pada mesh OpenFOAM, terdapat berbagai struktur mesh opsional yang mungkin hanya digunakan untuk aplikasi tertentu. Karena opsional, struktur ini bisa ada, terlepas dari pengaturan kasus. Sebuah aplikasi OpenFOAM akan membaca mereka sesuai kebutuhan dan akan memberi tahu pengguna jika mereka tidak ada.
Sets and Zones Sebagai pengguna, cukup mudah untuk bingung dengan fakta bahwa ada zona dan set di OpenFOAM dan keduanya melakukan hal-hal yang cukup mirip, ketika pengguna memperhatikannya: mereka memilih entitas mesh. Jawaban yang sangat singkat untuk pertanyaan mana yang harus digunakan adalah: gunakan zona, seperti yang dijelaskan secara singkat oleh Hrvoje Jasak melalui Twitter (lihat Gambar 2.4).
Namun, hal ini hanya benar-benar relevan untuk aplikasi pemecah masalah. Jika aplikasi berpusat pada pra- atau pascapemrosesan, keduanya sama-sama baik. Set adalah labelHashSets pada dasarnya, sedangkan zona mewarisi dari labelLists. Keduanya dapat menyimpan entitas mesh apa pun (titik, permukaan, atau sel) dalam struktur data yang agak mirip dengan daftar. Perbedaan utamanya terletak pada penanganan internal entitas mesh, terutama dalam kasus simulasi paralel dengan perubahan mesh topologis. Dalam hal ini, penyesuaian dalam daftar harus diperbarui sesuai, dan hanya zona yang menyediakan metode tersebut.
Pemilihan biasanya dilakukan oleh alat setSet atau topoSet, kedua alat ini dapat memilih subset dari mesh dan melakukan operasi boolean pada mereka. Kedua utilitas ini pada umumnya dapat mengonversi zona menjadi set dan sebaliknya. Set atau zona dapat dibuat untuk entitas mesh apa pun (sel, titik, atau permukaan), tetapi cellSet dan cellZone adalah dua yang paling umum digunakan. Zona disimpan sebagai kamus biasa dalam constant/polyMesh, sedangkan set disimpan dalam subdirektori sets dari constant/polyMesh. Zona dan set disimpan secara identik di sistem berkas: sebagai daftar panjang label dari entitas mesh yang sesuai. Kami telah mempublikasikan beberapa blog-post yang mengandung sejumlah informasi tentang bagaimana zona dan set disusun [2,1].