snappyHexMesh
in OpenFOAMVideoları izlemeye başlamadan önce gerekli dosyaları (airfoil.zip) buradan indiriniz.
Bilgisayarınızda trimesh
kütüphanesi yoksa ilk scripti çalıştırırken bununla ilgili hata alabilirsiniz. Bu hatadan kurtulmak için bu kütüphaneyi indirmeniz gerekir.
pip3 install trimesh
komutunu kullanarak trimesh
kütüphanesini bilgisayarınıza kurabilirsiniz.
Bu klasörde NACA0012 profilinin aerodinamik özelliklerini OpenFOAM ile analiz etmek için gerekli tüm dosyalar yer almaktadır. Analiz, 2 boyutlu (2D) ve 3 boyutlu (3D) olmak üzere iki farklı mesh ile yapılabilmektedir.
Kaynak: https://turbmodels.larc.nasa.gov/naca0012_val.html
Aerodinamik hesaplamalarda kullanılan sürükleme (drag) ve kaldırma (lift) katsayıları aşağıdaki gibi tanımlanır:
system/forceCoeffs
dosyasında kullanılan referanslar:
lRef
: Referans uzunluk (genellikle chord uzunluğu) Aref
: Referans alan (2B çalışmalarda genellikle chord × depth
) Bu tanımlar doğru girilmediğinde hesaplanan ( C_D ) ve ( C_L ) değerleri hatalı olur.
Örneğin, 1 m chord uzunluğu ve 0.1 m kalınlıktaki bir 2B geometri için:
├── 01.makeSTL.sh # STL ve OBJ dosyalarını NACA0012 profili için oluşturmak için kullanılır. Arkada .makeSTL.py Python scriptini çalıştırır.
├── 02.compute2Dcase.sh # 3D klasörü içinde mesh oluşturulduktan sonra çalıştırıldığında arkada .convert3DMeshTo2D.py Python scritini çalıştırır ve bu 3D mesh'i 2D'ye dönüştürür. Sonrasında 2D klasöründe bazı ayarlar yapar. simpleFoam komutunu döndürerek simülasyonları çalıştırır. En son .checResults2D.pvsm dosyasıyla ParaView'ı açar.
├── .2D_0 # 2D case için hazırlanmış dosyaları içerir. Gizlidir. 02.compute2Dcase.sh ile 2D klasörüne kopyalanır.
│ ├── epsilon # 2D çözüm için hazırlanmış epsilon başlangıç dosyası.
│ ├── k # 2D çözüm için hazırlanmış türbülans kinetik enerjisi dosyası.
│ ├── nut # 2D çözüm için hazırlanmış turbulent viskozite dosyası.
│ ├── p # 2D çözüm için hazırlanmış basınç başlangıç koşulu.
│ └── U # 2D çözüm için hız vektör alanı başlangıç koşulu.
├── 3D
│ ├── 0
│ │ ├── epsilon # Türbülans için epsilon başlangıç koşulu (3D).
│ │ ├── k # Türbülans için k başlangıç koşulu (3D).
│ │ ├── nut # Duvar fonksiyonları için nut alanı başlangıç değeri (3D).
│ │ ├── p # Basınç başlangıç koşulu (3D).
│ │ └── U # Hız vektör alanı başlangıç koşulu (3D).
│ ├── .Allclean # Mevcut mesh ve geçici dosyaları siler. script içinde kullanılır.
│ ├── .Allrun # simpleFoam analizini başlatan script.
│ ├── .AllrunNotOverwrite # simpleFoam analizini sadece sonuç dosyası yoksa çalıştırır.
│ ├── .checkMesh.pvsm # 3D mesh’i ParaView içinde görüntülemek için hazır yapılandırma dosyası.
│ ├── .checkResults.pvsm # 3D analiz sonuçlarını ParaView'da görselleştirmek için yapılandırılmış dosya.
│ ├── constant
│ │ ├── extendedFeatureEdgeMesh # surfaceFeatureExtract çıktısı, detaylı kenar verisini içerir.
│ │ ├── polyMesh # blockMesh ve snappyHexMesh çıktılarının tutulduğu mesh klasörü.
│ │ ├── transportProperties # Akışkanın viskozite ve model tipi bilgileri burada tanımlanır.
│ │ ├── triSurface # STL veya OBJ gibi yüzey dosyalarının konduğu klasör.
│ │ └── turbulenceProperties # Türbülans modeli ve ayarları burada tanımlanır.
│ ├── postProcessing
│ │ └── forceCoeffs # forceCoeffs çıktıları (Cl ve Cd değerleri) burada tutulur.
│ ├── runMesh.sh # 3D mesh'i oluşturmak için çalıştırılır. Arkada .Allclean, .Allrun gibi gizli dosyaları çalıştırır. En son ParaView açar ve mesh'i gösterir.
│ └── system
│ ├── blockMeshDict # blockMesh için temel geometri ve blok tanımlamaları.
│ ├── controlDict # Zaman adımı, yazma sıklığı, kullanılan solver gibi ayarlar burada tanımlanır.
│ ├── forceCoeffs # Cd ve Cl değerlerini hesaplamak için kullanılan fonksiyon nesnesi ayarları.
│ ├── fvSchemes # Diskretizasyon şemalarının tanımlandığı dosya.
│ ├── fvSolution # Lineer çözücü ayarlarının yapıldığı dosya.
│ ├── meshQualityDict # Mesh kalitesine dair sınırların tanımlandığı ayar dosyası.
│ ├── snappyHexMeshDict # STL/OBJ'den mesh çıkarımı ve refinement işlemleri için temel ayarlar.
│ ├── snappyHexMeshDict1 # Alternatif veya test amaçlı snappyHexMeshDict varyantı.
│ ├── snappyHexMeshDictFinal # Nihai üretim ayarlarını içeren snappyHexMeshDict varyantı.
│ └── surfaceFeatureExtractDict # STL üzerindeki kenarları çıkartmak için surfaceFeatureExtract ayar dosyası.
├── .99.setFoamCleanTimes.sh # OpenFOAM'da yalnızca 1, 2, 3 gibi zaman klasörlerini silmek için bir komut yoktur. Bu komutu bilgisayarınıza ekler. Gizli .foamCleanTutorials dosyasını ilgili yere kopyalar ve ayarlar.
├── .checkMesh2D.pvsm # 2D mesh dosyasını ParaView ile hızlı kontrol etmek için yapılandırma dosyası.
├── .checkResults2D.pvsm # 2D analiz sonuçlarını ParaView ile hızlı kontrol etmek için yapılandırma dosyası.
├── .convert3DMeshTo2D.py # extrudeMesh komutunu kullanarak 3D mesh’i 2D’ye indirger.
├── .foamCleanTimes # .99.setFoamCleanTimes.sh tarafından kullanılan OpenFOAM temizleme ayar dosyası.
├── .makeSTL.py # naca0012 koordinatlarını STL ve OBJ dosyasına dönüştüren Python scripti.
├── naca0012.obj # Yüzey geometrisini içeren Wavefront OBJ dosyası.
├── naca0012.stl # snappyHexMesh için kullanılan STL yüzey dosyası.
└── READMETR.md # Bu dizindeki projeyi açıklayan detaylı dökümantasyon dosyası.
Terminalde şu komut çalıştırılır:
./01.makeSTL.sh
Bu işlem sonucunda naca0012.stl
ve naca0012.obj
dosyaları oluşturulur.
3D
klasörüne girilir ve aşağıdaki komut çalıştırılır:
./runMesh.sh
Bu işlem:
blockMesh
ile kaba bir mesh oluşturur.surfaceFeatureExtract
ile geometri detaylarını belirler.snappyHexMesh
ile STL objesi etrafında mesh oluşturur.Not: Bu aşamada system
içindeki blockMeshDict
ve snappyHexMeshDict
dosyalarını problem tanımına göre ayarlamanız gerekebilir.
Ana dizine dönülür ve şu komut çalıştırılır:
./02.compute2Dcase.sh
Bu işlem:
constant/polyMesh
dosyasını günceller.0
klasörü içindeki boundary tanımlarını 2D'ye uygun hale getirir.2D
klasörüne girer, simülasyonları çalıştırır ve ParaView'ı bir state dosyası kullanarak açar.forceCoeffs
ve diğer tanımlı fonksiyonlarla otomatik olarak hesaplanır ve kaydedilir.Bu harika ve çok önemli bir soru. Kısaca yanıtlayayım, ardından teknik detaylarıyla genişleteyim:
Sürükleme ((C_D)) hesaplaması çok daha hassastır çünkü viskoz etkilerle doğrudan ilişkilidir ve özellikle sınır tabaka çözünürlüğü, mesh kalitesi ve near-wall modeling hata payı ile çok hassas şekilde değişir.
İkinci terim (basınç): daha dayanıklı ama katkısı düşük
( C_L ) ise daha çok basınç dağılımı üzerinden hesaplanır:
Bu basınç dağılımı, akışın genel yapısını doğru tahmin ediyorsak (örneğin akış ayrılmıyorsa), coarse bir mesh’te bile yaklaşık doğru olabilir.
Hazırlayan: Levent Aydınbakar. 7 Nisan 2025
Örnek find komutu.
find /opt/openfoam2406/tutorials -type d -name 'airfoil*'