Dalam simulasi Computational Fluid Dynamics (CFD) menggunakan OpenFOAM, kualitas mesh merupakan salah satu faktor paling krusial yang menentukan akurasi dan kecepatan konvergensi hasil simulasi. Salah satu tool bawaan OpenFOAM yang sangat andal untuk membuat structured mesh adalah blockMesh.

Artikel ini menyajikan tutorial blockMesh OpenFOAM langkah demi langkah untuk membuat structured mesh sederhana pada domain geometri 3D berbentuk balok (cube/box).

Apa Itu blockMesh dan Mengapa Menggunakan Structured Mesh?

blockMesh adalah utilitas pembangkit mesh bawaan OpenFOAM yang membaca file konfigurasi system/blockMeshDict. Utilitas ini bekerja dengan membagi domain simulasi menjadi satu atau beberapa blok hexahedral (enam sisi).

Keunggulan menggunakan structured mesh untuk domain sederhana:

  • Efisiensi Memori & Komputasi: Sel berorientasi teratur sehingga solver bekerja lebih cepat.
  • Kontrol Layer & Orthogonality: Memudahkan pengaturan kerapatan sel di dekat dinding (boundary layer).
  • Akurasi Tinggi: Mengurangi kesalahan difusi numerik dibandingkan unstructured mesh.

Persiapan File Struktur OpenFOAM

Sebelum menjalankan perintah, pastikan struktur direktori kasus (case) Anda sudah siap. File blockMeshDict terletak di dalam folder system/:

Plaintext

my_case/
├── 0/
├── constant/
└── system/
    └── blockMeshDict

Langkah-Langkah Mengkonfigurasi blockMeshDict

Buka file system/blockMeshDict menggunakan text editor pilihan Anda (VS Code, gedit, atau vim), lalu ikuti struktur berikut:

1. Menentukan Faktor Skala (convertToMeters)

Atur skala dimensi domain. Nilai 1 berarti koordinat dihitung dalam satuan meter.

C++

convertToMeters 1;

2. Mendefinisikan Titik Sudut (vertices)

Definisikan 8 titik koordinat $(x, y, z)$ untuk membentuk satu blok hexahedral sederhana berukuran $1\text{ m} \times 1\text{ m} \times 0.1\text{ m}$:

C++

vertices
(
    (0 0 0) // Point 0
    (1 0 0) // Point 1
    (1 1 0) // Point 2
    (0 1 0) // Point 3
    (0 0 0.1) // Point 4
    (1 0 0.1) // Point 5
    (1 1 0.1) // Point 6
    (0 1 0.1) // Point 7
);

3. Membuat Blok dan Menentukan Jumlah Sel (blocks)

Definisikan urutan titik pembentuk blok menggunakan Aturan Tangan Kanan (Right-Hand Rule), lalu tentukan jumlah pembagian sel pada sumbu x, y, dan z.

C++

blocks
(
    hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);
  • (20 20 1): Membagi sumbu x menjadi 20 sel, sumbu y 20 sel, dan sumbu z 1 sel.
  • simpleGrading (1 1 1): Rasio ukuran sel seragam (konstan).

4. Menentukan Boundary Conditions (boundary)

Tentukan nama dan tipe permukaan (face) untuk kebutuhan boundary condition simulasi:

C++

boundary
(
    inlet
    {
        type patch;
        faces
        (
            (0 4 7 3)
        );
    }
    outlet
    {
        type patch;
        faces
        (
            (1 2 6 5)
        );
    }
    walls
    {
        type wall;
        faces
        (
            (0 1 5 4)
            (3 7 6 2)
        );
    }
    frontAndBack
    {
        type empty; // Digunakan jika simulasi difungsikan sebagai 2D
        faces
        (
            (0 3 2 1)
            (4 5 6 7)
        );
    }
);

Menjalankan blockMesh dan Memeriksa Kualitas Mesh

  1. Eksekusi perintah blockMesh melalui terminal di direktori kasus Anda:

    Bash

    blockMesh
    
  2. Periksa kualitas mesh untuk memastikan tidak ada sel yang mengalami deformasi ekstrem atau error:

    Bash

    checkMesh
    
  3. Visualisasikan hasil structured mesh menggunakan ParaView:

    Bash

    paraFoam
    

Tips Memaksimalkan Quality Mesh di OpenFOAM

  • Atur Mesh Grading: Gunakan simpleGrading (misal: simpleGrading (4 1 1)) jika ingin merapatkan sel di dekat inlet atau dinding guna menangkap gradien kecepatan (boundary layer) secara akurat.
  • Perhatikan Urutan Vertices: Pastikan urutan vertex pada penulisan hex dan boundary sesuai kaidah pemetaan OpenFOAM agar tidak terjadi inverted cells.