SnappyHexMesh
Dibandingkan dengan blockMesh, snappyHexMesh mungkin tidak memerlukan banyak pekerjaan yang membosankan, seperti menambahkan dan menghubungkan blok-blok. Di sisi lain, pengguna memiliki kontrol yang lebih sedikit atas mesh yang dibuat. Dengan snappyHexMesh, mesh heksagonal dapat dibuat dengan mudah, hanya membutuhkan dua hal: mesh background heksagonal dan geometri satu atau lebih dalam format permukaan STL yang kompatibel. SnappyHexMesh mendukung penyempurnaan mesh lokal yang ditentukan oleh berbagai bentuk volumetrik (lihat tabel 2.1), penerapan sel lapisan batas (prisma dan polihedra), dan eksekusi paralel.
SnappyHexMesh adalah program kompleks yang dikendalikan oleh sejumlah parameter pengendalian.
Gambar 2.10: Sebuah bola STL (D = 0.25 m) dimasukkan dengan snappyHexMesh setelah langkah meshing pertama. Heksahedron tidak sejajar dengan permukaan tubuh, belum.
Alur eksekusi snappyHexMesh dapat dibagi menjadi tiga langkah utama yang dieksekusi secara berturut-turut. Setiap langkah ini dapat dinonaktifkan dengan mengatur kata kunci yang sesuai menjadi false di awal snappyHexMeshDict. Tiga langkah ini dapat dirangkum sebagai berikut:
A. CastellatedMesh
Ini adalah tahap pertama dan melakukan dua operasi utama. Pertama, itu menambahkan geometri ke grid dan menghapus sel-sel yang tidak berada di dalam domain aliran. Kedua, sel-sel yang ada dibelah dan disempurnakan sesuai dengan spesifikasi pengguna. Hasilnya adalah mesh yang hanya terdiri dari heksahedron yang lebih atau kurang menyerupai geometri. Namun, sebagian besar titik mesh yang seharusnya ditempatkan pada permukaan geometri tidak selaras dengan itu. Tangkapan layar dari contoh selanjutnya pada tahap ini dari proses meshing ditunjukkan dalam gambar 2.10.
B. Snap
Dengan melakukan langkah snapping, titik-titik mesh di sekitar permukaan dipindahkan ke permukaan. Ini dapat dilihat dalam gambar 2.11. Selama proses ini, topologi sel-sel tersebut mungkin berubah dari heksahedron menjadi polihedron. Sel dekat permukaan mungkin bisa dihapus atau digabungkan bersama.
Gambar 2.11: Bola yang sama seperti di atas tetapi setelah proses snapping. Semua titik diselaraskan dengan permukaan tubuh.
C. AddLayers
Sel tambahan diperkenalkan pada permukaan geometri, yang biasanya digunakan untuk merinci aliran dinding dekat (lihat gambar 2.12). Sel-sel yang sudah ada dipindahkan dari geometri untuk menciptakan ruang bagi sel tambahan tersebut. Sel-sel tersebut kemungkinan besar berbentuk prisma.
Semua pengaturan di atas dan banyak lagi didefinisikan dalam sistem snappyHexMeshDict, skrip yang berisi semua parameter yang diperlukan oleh snappyHexMesh. Beberapa tutorial dapat ditemukan di direktori tutorial OpenFOAM di dalam meshing/snappyHexMesh. Dibandingkan dengan skrip OpenFOAM lainnya, snappyHexMeshDict sangat panjang dan terdiri dari banyak tingkat hierarki yang direpresentasikan oleh sub-skrip yang lebih detail. Satu langkah waktu ditulis ke direktori kasus, untuk setiap langkah yang disebutkan di atas (asumsikan Anda memiliki konfigurasi standar). Masing-masing dari tiga langkah tersebut akan dibahas secara individu dalam bagian berikutnya.
Gambar 2.12: Lapisan prisma diterapkan pada permukaan bola, dengan cara mengekstrusi permukaan.
Cell level
Tingkat sel digunakan untuk menggambarkan status penyempurnaan sel latar belakang mesh. Ketika snappyHexMesh dijalankan, mesh latar belakang dibaca dan semua sel diberi tingkat sel 0 (sel biru pada gambar 2.12). Jika sebuah sel disempurnakan dengan satu tingkat, setiap tepi sel dibagi dua, menghasilkan delapan sel dari sel ‘induk’ sebelumnya. Metode penyempurnaan ini didasarkan pada octree dan hanya berlaku untuk heksahedron, itulah mengapa mesh latar belakang heksahedral diperlukan oleh snappyHexMesh. Dengan snappyHexMesh, tidak mungkin menyempurnakan sel hanya dalam satu arah, karena ini tidak dapat dicakup oleh octree. Oleh karena itu, mereka disempurnakan – dengan definisi – secara seragam dalam semua tiga arah spasial.
Mendefinisikan geometri
Mengeksekusi proses pemadatan, geometri harus didefinisikan dalam sub-skrip geometri dalam snappyHexMeshDict. Tanpa perlu sebelum memulai proses pemadatan, geometri harus didefinisikan dalam subskrip geometri dalam snappyHexMeshDict. Tanpa perlu mendefinisikan apa pun dalam snappyHexMeshDict, mesh yang ada di constant/polyMesh akan dibaca secara otomatis dan berfungsi sebagai latar belakang mesh. Jika tidak ada mesh yang tersedia, atau jika tidak hanya berdasarkan pada heksahedron, snappyHexMesh tidak akan berjalan. Untuk simulasi aliran eksternal, batas luar yang didefinisikan oleh latar belakang mesh tidak sepenting untuk aliran internal. Oleh karena itu, mereka dapat dipertahankan sebagaimana yang ditentukan oleh latar belakang mesh, tanpa perlu lagi bekerja lebih lanjut . Namun, untuk simulasi aliran internal, bentuk luar dari latar belakang mesh tidaklah penting karena itu ditentukan oleh geometri aktual.
INFO
Geometri STL dapat dibuat menggunakan hampir semua program CAD. Paraview dapat digunakan untuk menghasilkan representasi STL dari bentuk-bentuk dasar seperti silinder, bola, atau kerucut. Di bawah menu sumber, berbagai bentuk tersedia yang dapat diekspor menggunakan entri save data, di bawah menu file.
Untuk geometri nyata, tentu saja ada berbagai metode untuk menghasilkan mesh permukaan dan menyimpannya sebagai STL. Namun, ingatlah bahwa kualitas mesh permukaan sangat penting untuk mendapatkan mesh volume yang baik.
Sebagai contoh sederhana, mesh kubus unit yang disiapkan dalam bagian sebelumnya digunakan kembali dan sebuah bola dimasukkan ke dalamnya. Bola tersebut dihasilkan menggunakan file STL, bukan dari bentuk-bentuk yang terdaftar dalam tabel 2.1. Memuat geometri STL dapat dilakukan dengan cara yang mudah, dengan hanya menyalin geometri ke constant/triSurface dari kasus dan menambahkan sub-skrip geometri berikut dalam Baris-baris di bawah ini memberi tahu snappyHexMesh untuk membaca sphere.stl dari constant/triSurface sebagai triSurfaceMesh dan merujuk pada geometri yang terkandung dalam STL tersebut sebagai SPHERE. Beberapa objek geometri sederhana dapat dibangun tanpa perlu membuka program CAD apa pun, langsung di dalam snappyHexMesh.
Tabel Bentuk Mesh Pilihan
Salah satu dari bentuk yang terdaftar dalam tabel 2.1 dapat dibangun dalam sub-skrip geometri dengan hanya menambahkannya ke sub-skrip yang ada. Sebagai contoh, sebuah kotak akan ditambahkan ke subk-skrip geometri, yang dibangun dari titik minimum dan maksimum. Ketika menggunakan pendekatan ini perhatikan bahwa tidak mungkin langsung memutar kotak dan itu akan selalu sejajar dengan sumbu koordinat.
Seperti definisi STL, string awal dari sub-skrip yang mendefinisikan searchableBox adalah nama yang digunakan untuk mengakses geometri tersebut nanti. Kadang-kadang diinginkan untuk menyusun sebuah geometri dari bentuk yang tercantum dalam Tabel 2.1, tetapi memperlakukannya sebagai satu geometri tunggal daripada beberapa. Di sinilah searchableSurfaceCollection dapat digunakan. Dengan menggunakan pendekatan ini pada komponen geometri yang sudah ada, permukaan dapat digabungkan, diputar, diterjemahkan, dan diskalakan. Dalam hal apa pun, menggabungkan SPHERE dan smallerBox menjadi satu dan memperbesar fancybox sebesar faktor 2 akan terlihat seperti yang ditunjukkan di bawah ini:
Menyiapkan langkah castellatedMesh
Ini adalah langkah pertama dari tiga langkah selama eksekusi snappyHexMesh. Ini mencakup dua langkah utama berikut: membagi sel sesuai dengan spesifikasi pengguna dan menghapus sel yang berada di luar wilayah yang dimesh. Skema proses ini diberikan dalam gambar 2.13.
Mesh latar belakang yang ada (hitam dalam gambar 2.13) dibaca dari constant/polyMesh. Berdasarkan parameter dalam sub-skrip castellatedMeshControls dari snappyHexMeshDict, mesh tersebut diperinci. Penting untuk membedakan antara perincian yang ditentukan oleh permukaan geometri dan perincian volumetrik. Perincian permukaan memastikan bahwa wajah-wajah batas yang mewakili geometri diperinci hingga tingkat yang ditentukan. Penting untuk dicatat bahwa ini tidak hanya memengaruhi sel-sel yang memiliki sel-sel tertentu, tetapi juga sel-sel yang berdekatan. Oleh karena itu, perincian permukaan mungkin tampak agak mirip dengan perincian volumetrik, namun, perbedaannya jelas. Mengaplikasikan perincian permukaan seperti itu ke SPHERE dikontrol oleh entri dalam castellatedMeshControls, yang mungkin terlihat seperti berikut:
Ini memperinci permukaan SPHERE hingga level 1. Dua angka di antara tanda kurung bulat mendefinisikan tingkat perincian minimum dan maksimum untuk permukaan ini. snappyHexMesh memilih di antara keduanya, tergantung pada kelengkungan permukaan: area permukaan yang sangat melengkung diperinci hingga level yang lebih tinggi, yang kurvanya lebih rendah diperinci hingga level yang lebih rendah.
Perincian dalam snappyHexMesh tidak terbatas pada definisi permukaan. Setiap geometri yang didefinisikan dalam subkamus geometri dapat berfungsi sebagai bentuk penentu untuk perincian volumetrik juga. Perincian volumetrik ini disebut sebagai refinementRegions dan didefinisikan dalam subkamus dengan nama yang sama, dalam kontrol castellatedMesh. Dibandingkan dengan refinementSurfaces, refinementRegions menawarkan tingkat fleksibilitas yang lebih tinggi dan oleh karena itu membutuhkan lebih banyak opsi yang harus didefinisikan.
Mode ini memiliki tiga opsi: inside, outside, dan distance. Seperti namanya, inside hanya memengaruhi sel yang berada di dalam geometri yang dipilih sedangkan outside melakukan sebaliknya. Opsi ketiga, distance, merupakan kombinasi dari keduanya dan dihitung dalam arah normal keluar dan masuk dari permukaan. Selain mode, ada opsi levels, yang lebih kompleks daripada untuk refinementSurfaces. Dapat ditebak dari namanya, ini mendukung jumlah level yang sewenang-wenang. Setiap level harus didefinisikan bersama dengan jarak. Dengan meningkatnya posisi dalam daftar, level harus berkurang dan jarak harus berkurang.
Memperhalus apa pun di dalam smallerBox ke level 1 dapat dilakukan dengan menambahkan baris-baris berikut ke castellatedMeshControls:
Kode di atas menggunakan jarak sebesar 1 × 10^15 m, dengan mudah memilih semua sel di dalam geometri.
Tanpa menentukan titik yang terletak di dalam volume mesh akhir, snappyHexMesh tidak dapat memutuskan di sisi mana dari bola yang ingin digarisbawahi pengguna. Itulah mengapa kata kunci locationInMesh harus didefinisikan dalam subdictionary castellatedMeshControls juga. Titik ini tidak boleh ditempatkan pada satu wajah dari mesh latar belakang. Untuk contoh kubus satuan, titik ini didefinisikan sebagai:
Langkah selanjutnya adalah menyesuaikan parameter-parameter dari subdictionary snap dalam snappyHexMeshDict.
Menyiapkan langkah snapping.
Dibandingkan dengan dua langkah lain dari snappyHexMesh, ini tidak memerlukan masukan pengguna yang ekstensif. Langkah ini bertanggung jawab untuk memadankan wajah mesh yang sepenuhnya heksagonal dengan geometri dengan memperkenalkan titik-titik baru ke dalam mesh dan memindahkannya (lihat gambar 2.11). Ini adalah proses yang sangat iteratif, itulah sebabnya mengapa tidak banyak interaksi pengguna yang diperlukan. Contoh subdictionary snapControls dari snappyHexMeshDict dibaca:
Hanya ada penghitung iterasi, toleransi, dan bendera yang didefinisikan. Separuh parameter menangani pemadanan ke tepi geometri, yang bukan bagian dari deskripsi ini. Deskripsi mengenai hal ini dapat ditemukan di [3], namun. Bergantung pada spesifik dari kasusnya, meningkatkan penghitung iterasi biasanya menghasilkan mesh yang lebih berkualitas, tetapi juga meningkatkan waktu pembuatan mesh secara signifikan.
Semua parameter tersebut dijelaskan secara lebih detail dalam snappyHexMeshDicts, yang disediakan dengan OpenFOAM.
Menyiapkan langkah addLayers
Semua pengaturan untuk langkah addLayers didefinisikan dalam sub-skrip addLayersControls dari snappyHexMeshDict. Setiap permukaan dapat digunakan untuk mengekstrusi lapisan prisma, terlepas dari tipe permukaannya. Pertama-tama, jumlah lapisan sel yang akan diekstrusi per batas harus ditentukan melalui sub-skrip layers. Sebuah entri contoh terlihat seperti berikut:
Setiap nama patch diikuti oleh subdictionary yang berisi kata kunci nSurfaceLayers. Kata kunci ini mendefinisikan jumlah lapisan sel yang diekstrusi dan diikuti oleh bilangan bulat, menunjukkan jumlah lapisan sel yang akan diekstrusi. Pada contoh di atas, ekspresi reguler digunakan untuk mencocokkan nama-nama patch yang diawali dengan SPHERE_. Dalam kasus ini, hanya bola itu sendiri namun penggunaan karakter wildcard “_.*” seperti ini dapat sangat mengurangi waktu pengaturan. Potongan melintang dari mesh akhir ditunjukkan dalam gambar 2.12.
Beberapa parameter snappyHexMesh, terutama yang terkait dengan ekstrusi lapisan, memerlukan penyesuaian agar dapat memperoleh mesh yang memenuhi kebutuhan Anda. Beberapa di antaranya dijelaskan secara singkat sebagai berikut.
relativeSizes dapat beralih dari dimensi absolut menjadi dimensi relatif untuk nilai-nilai berikut. Secara default, nilainya adalah true.
expansionRatio mendefinisikan faktor perluasan dari satu lapisan sel ke lapisan sel berikutnya.
finalLayerThickness adalah ketebalan lapisan sel terakhir (paling jauh dari dinding), dengan memperhitungkan sel berikutnya dari mesh atau dalam meter absolut, tergantung pada pilihan Anda untuk parameter relativeSizes.
minThickness jika sebuah lapisan tidak bisa lebih tebal dari minThickness, lapisan tersebut tidak diekstrusi.
Pada contoh tersebut, pengaturan yang ditunjukkan di bawah ini digunakan.
Terakhir, snappyHexMesh harus dijalankan di direktori kasus untuk memulai proses meshing. Setiap langkah menghasilkan direktori langkah waktu baru yang berisi mesh pada tahap tersebut. Jika Anda memilih untuk membuat perubahan pada mesh Anda dengan menyesuaikan parameter di snappyHexMeshDict, ingatlah untuk menghapus langkah-langkah waktu lama sebelum menjalankan kembali snappyHexMesh.
INFO
Salah satu generator mesh berkualitas tinggi lainnya untuk OpenFOAM adalah enGrid dan dapat diperoleh secara gratis dari https://www.engits.com/.
INFO
Aplikasi cfMesh adalah alat meshing OpenFOAM paralel memori terdistribusi yang, seperti snappyHexMesh, menerima permukaan STL sebagai input. Paket ini dikembangkan oleh Creative Fields Ltd. dan dapat diunduh bersama dengan dokumentasinya di www.c-fields.com.