SeyrüseferSeyir DefteriYazılım → Gmsh ile Eksensimetrik Düzenli Örgü İmâli

Gmsh ile Eksensimetrik Düzenli Örgü İmâli

Seyir Defteri - Yazılım
Pazartesi, 25 Haziran 2018

Gmsh ile Sınır TabakaGmsh projesi 1996 yılında sonlu eleman temelli çözücüler için kullanıcı dostu bir 3 Boyutlu hesaplama örgüsü oluşturma ve elde edilen çözüm sonuçlarını değerlendirmeye yönelik olarak bileşik önişlem ve sonişlem yazılımı meydana getirebilmek gâyesi ile başlatılmıştı ki o dönem için geometri motoru, örgü üretici ve sonişlemci yeteneklerini birarada sunan açık-kaynak bir ürün mevcut değildi.

Unix tabanlı ilk sürüm 1998'de yayınlandıktan sonra gelişme devam etti, 2003'de C++ ile yazılmış durumdaki bütün kaynak kodu GNU-GPL lisansı ile yayınlandı. 2006-2007'de toplam kodun yaklaşık yarısı yeniden yazılarak 2.0 sürümü yayınlandı ve bu arada yaygın bütün işletim sistemleri birlikte desteklenmeye başlandı.

Bugün itibarı ile 3.0.6 sürümdeki Gmsh, BDM1 alanında bilhassa açık-kaynak önişlem ihtiyaçlarının karşılanmasında çok değerli bir katkı sağlamakta ve dünya çapında gerek akademik gerekse sanayi çevrelerince yaygın olarak kullanılmaktadır ama diğer taraftan Türkiye için aynı durumun geçerli olduğunu söyleyebilmek de biraz zordur.

Mevzuya ilgi ve ihtiyaç duyabilecek genç mühendisler ve mühendis adaylarına Gmsh'nin oldukça gelişkin yeteneklerini biraz olsun tanıtabilmek ve başlangıç seviyesinde iken yazılıma biraz daha kolay nüfûz edebilmelerini sağlamak için bu ve muhtemelen takip edecek bâzı örneklerin sunulması belki faydalı olabilirdi, kim bilir...

Lâfı daha fazla uzatmaya gerek yok, doğrudan konuya girelim. Bu bölümde Deniz Mühendisliği uygulamalarında sıklıkla rastlanan eksensimetrik örgü ihtiyaçlarının kolayca karşılanabilmesi ve OpenFOAM adlı açık-kaynaklı HAD2 yazılımı ile birlikte nasıl kullanılabileceği, uygulamalı bir örnek ile açıklanmaya çalışılacaktır.

Daha önce hakkında bazı hesaplamalı değerlendirmelerin yayınlandığı meşhur doğrulama çalışmalarından 6:1 Uzatılmış Küre geometrisinin ve ihtiyaca uygun bir hesaplama örgüsünün Gmsh ile oluşturulması söz konusu olacaktır.

Gmsh çağdaş bir Grafik Kullanıcı Arayüzü ile çalışmaktadır ve bu doğrultuda herhangi bir BDT3 yazılımı gibi işletilebilir. Bununla birlikte yazılımı C++'a benzer bir yapıya sahip olan kendi betik dili ile birlikte doğrudan kodlayarak kullanmanız şiddetle tavsiye edilir. Böyle bir çalışma yaklaşımı ilk seçeneğe göre çok daha verimli olmaktadır.

Bu durumda aşağıdaki örneği kullanabilmek için ilk olarak "deneme2B.geo" gibi bir isim verilebilecek boş bir metin dosyası oluşturarak çalışmaya başlanabilir. Bu dosyayı herhangi bir metin düzenleyici ile düzenlemeniz gerekecek, düzenleyici olarak şahsen gedit tavsiye edilebilir ama çok sayıda başka iyi seçenek de mevcuttur.


2 Boyutlu Düzenli Örgü

Önce 6:1 uzatılmış küre (elipsoit) geometrisi ve 2B düzenli hesaplama örgüsü gösterilecektir. Aşağıdaki kısa Gmsh betiği söz konusu ihityacın tamamını karşılamaktadır. Dolayısı ile ilk olarak bu betiği olduğu gibi kopyalayıp deneme2B.geo dosyası içine yapıştırmanız gerekir. İkinci safhada bu .geo dosyasını Gmsh ile açmanız yeterli olacaktır.


♦ gmsh:
  1. // 6:1 "Uzatılmış Küre" (elispsoit) geometrisi ve OpenFOAM için
  2. // 2B eksensimetrik hesaplama örgüsü oluşturma betiği numunesi
  3. // Tf (Transfinite) algoritması ile tam düzenli örgü oluşturma
  4. // Üsküdar Mühendishanesi - http://uskudar.biz
  5.  
  6. // Temel veri girişi
  7. r1 = 0.2; // kısa yarıçap, metre - eliposit çapı = 0,4m
  8. oran1 = 6; // elips çap oranı - elipsoit uzunluğu = 2,4m
  9. oran2 = 23; // sınır yarıçapının cisim uzunluğuna oranı
  10.  
  11. dx = 121; // uzunluk yönünde (çeyrek elips) düğüm sayısı
  12. dy = 55; // yarıçap yönünde düğüm sayısı
  13.  
  14. px = 0.025; // örgünün uzunluk yönünde doğrusal olmayan dağılımı için
  15. py = 0.175; // örgünün yarıçap yönünde doğrusal olmayan dağılımı için
  16.  
  17. // Buradan sonrasına müdahâle etmeye pek gerek yok!
  18. r2 = oran1 * r1; // uzun yarıçap
  19. R1 = oran2 * r2;
  20.  
  21. // y+ için kerteriz
  22. // Re=4,2e06 - L=2,4m - y+=50 için
  23. deltay=0.0007544; // y+ ~50 için ilk hücrenin duvara mesafesi, metre
  24. Point(999)= {0, r1+deltay, 0, 1}; // y+ ~50 için vasatta kerteriz noktası
  25.  
  26. Point(0) = {0, 0, 0}; // merkez noktası
  27. Point(1) = {-r2, 0, 0};
  28. Point(2) = {0, r1, 0};
  29. Point(3) = {r2, 0, 0};
  30. Point(4) = {-R1, 0, 0};
  31. Point(5) = {R1, 0, 0};
  32. Point(6) = {0, R1, 0};
  33. Ellipse(10) = {1,0,1,2}; // sol çeyrek
  34. Ellipse(11) = {3,0,3,2}; // sağ çeyrek
  35. Circle(20) = {4,0,6}; // sol çeyrek
  36. Circle(21) = {6,0,5}; // sağ çeyrek
  37. Line(30) = {1,4}; // sol eksen hattı
  38. Line(31) = {2,6}; // merkez hattı
  39. Line(32) = {3,5}; // sağ eksen hattı
  40.  
  41. // Sol çeyrek düzenli örgüsü
  42. Transfinite Line(10) = dx Using Progression 1;
  43. Transfinite Line(20) = dx Using Progression 1-px;
  44. Transfinite Line(30) = dy Using Progression 1+py;
  45. Transfinite Line(31) = dy Using Progression 1+py;
  46. Line Loop(50) = {10,-30,-20,31};
  47. Plane Surface(100) = {50};
  48. Transfinite Surface(100) = {2,1,4,6};
  49. Recombine Surface(100);
  50.  
  51. // Sağ çeyrek düzenli örgüsü
  52. Transfinite Line(11) = dx Using Progression 1;
  53. Transfinite Line(21) = dx Using Progression -1-px;
  54. Transfinite Line(32) = dy Using Progression 1+py;
  55. Transfinite Line(31) = dy Using Progression 1+py;
  56. Line Loop(51) = {-11,32,-21,-31};
  57. Plane Surface(101) = {51};
  58. Transfinite Surface(101) = {2,3,5,6};
  59. Recombine Surface(101);
  60.  
  61. // Oluşturulan 2B yüzeyin -2,5derece döndürülmesi için.
  62. // Dönüş açıları gmsh'ye radyan olarak verilmeli!
  63. Rotate { {1,0,0} , {0,0,0} , -Pi/72 } {
  64. Surface{101,100};
  65. }
  66.  
  67. // Döndürülmüş yüzeyin +5derece çekilerek düzenli örgünün elde edilmesi
  68. // Böylece aşağıda Layers komutu ile tanımlandığı üzere {1} hücre
  69. // genişliğinde "sahte 3B" bir hesaplama hacmi oluşturulabiliyor.
  70.  
  71. Extrude { {1,0,0} , {0,0,0} , Pi/36 } {
  72. Surface{101,100};
  73. Layers{1};
  74. Recombine;
  75. }
  76.  
  77. // OpenFOAM için isimlendirmeler
  78. Physical Volume ("hava") = {1,2};
  79. Physical Surface ("cisim") = {109,126};
  80. Physical Surface ("girişÇıkış") = {113,133};
  81. Physical Surface ("sancak") = {100,101};
  82. Physical Surface ("iskele") = {118,135};


Yukarıdaki betik Gmsh ile açıldıktan sonra soldaki ağaçtan;

> Modules > Mesh > 3D

ile örgü oluşturabilir ise sonuç aşağıdaki [Resim.1]'de görüldüğü gibi olacaktır. Buradaki örgü elipsin boyuna simetri ekseni etrafında 5° bir kama oluşturmaktadır. Daha sonra hesaplama için kullanılacak olan OpenFOAM yazılımı doğrudan 2B desteğine sahip olmadığından, 2 Boyutlu hesaplama yapabilmek için tek hücre genişliğinde bir 3B örgü oluşturmak ve sınır şartlarını duruma uygun bir şekilde ayarlamak gereklidir.


6:1 Elipsoit için 2 Boyutlu Eksensimetrik Düzenli Örgü

Resim.1) 6:1 Elipsoit için 2 Boyutlu eksensimetrik düzenli örgüsünün genel hesaplama ortamı görünüşü.


Bu durumda, örnek olarak verilen ayarlar ile eksensimetrik bir akış modellemesi yapılacağı için sahte 2B örgünün simetri ekseninde 0 genişliğinde bir kama şeklinde oluşturulması şarttır.

Mevcut örgünün yarım elips civarındaki ve vasatta sınır tabaka yakınında görüntüsü ise [Resim.2] üzerindeki gibi gerçekleşir. 999 adlı nokta örgü oluşturma safhasının başlangıcında ve mevcut akış şartlarında (Re= 4,2e06) y+ değerinin 50 civarında gerçekleşebilmesi için ilk düğüm noktasının yerini daha kolay ayarlayabilmek için bir kerteriz olarak kullanılmıştır.


6:1 Elipsoit için 2 Boyutlu Eksensimetrik Düzenli Örgü

Resim.2) 6:1 Elipsoit için 2 Boyutlu eksensimetrik düzenli örgüsünün yakın görünüşü ve sınır tabaka civarı.


deneme2B.geo üzerindeki muhtelif değişkenler ile farklı örgüler elde edebilmek mümkündür. Bu durumda .geo dosyasında ihtiyaç duyulan değişiklik yapıldıktan sonra;

> Modules > Geometry > Reload script

ile betik tekrar yüklenir ve tekrar örgü oluşturulur, istenen hedefe ulaşılana kadar işlem devam eder... Sonuç uygun görüldüğünde;

> File > Save Mesh

ile kendiliğinden "deneme2B.msh" olarak adlandırılan nihai hesaplama örgüsü ihraç edilir. Bu safhadan sonra söz konusu örgü, çalışmanın yapılacağı OpenFOAM dizini içine taşınır.

Önce "system/controlDict" dosyasının içinde aşağıda gösterilen [satır.26 ve 27] gerekli düzeltme yapılmalıdır, aksi taktirde kama yüzeylerinin düzlem hassasiyeti konusunda sıkıntı yaşanır:


♦ OpenFOAM:
  1. /*--------------------------------*- C++ -*----------------------------------*\
  2. | ========= | |
  3. | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
  4. | \\ / O peration | Version: 2.3.1 |
  5. | \\ / A nd | Web: www.OpenFOAM.com |
  6. | \\/ M anipulation | |
  7. \*---------------------------------------------------------------------------*/
  8. FoamFile
  9. {
  10. version 2.0;
  11. format ascii;
  12. class dictionary;
  13. location "system";
  14. object controlDict;
  15. }
  16. // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
  17. application simpleFoam;
  18. startFrom latestTime;
  19. startTime 0;
  20. stopAt endTime;
  21. endTime 2500;
  22. deltaT 1;
  23. writeControl timeStep;
  24. writeInterval 500;
  25. purgeWrite 0;
  26. writeFormat binary; // öntanımlı ascii ama wedge için mutlaka binary olmalı!
  27. writePrecision 6; // bâzı durumlarda yükseltmek gerekebilir!
  28. writeCompression off;
  29. timeFormat general;
  30. timePrecision 6;
  31. runTimeModifiable true;
  32.  
  33. // ************************************************************************* //


Şimdi çalışma dizini içine uçbirim ile girilerek aşağıdaki komut çalıştırılır:


♦ Uçbirim:
gmshToFoam deneme2B.msh


Artık örgü OpenFOAM içine ithâl edildi ama hâlen bâzı düzenlemelere ihtiyaç var. İlk olarak "constant>polyMesh" içindeki boundary dosyası bir metin düzenleyici ile aşağıdaki şekilde ayarlanır:


♦ OpenFOAM:
  1. /*--------------------------------*- C++ -*----------------------------------*\
  2. | ========= | |
  3. | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
  4. | \\ / O peration | Version: 2.3.1 |
  5. | \\ / A nd | Web: www.OpenFOAM.org |
  6. | \\/ M anipulation | |
  7. \*---------------------------------------------------------------------------*/
  8. FoamFile
  9. {
  10. version 2.0;
  11. format binary;
  12. class polyBoundaryMesh;
  13. location "constant/polyMesh";
  14. object boundary;
  15. }
  16. // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
  17.  
  18. 4
  19. (
  20. cisim
  21. {
  22. // type patch; // patch wall ile değiştirilmeli
  23. // physicalType patch; // patch wall ile değiştirilmeli
  24. type wall;
  25. physicalType wall;
  26. nFaces 240;
  27. startFace 25626;
  28. }
  29. girişÇıkış
  30. {
  31. type patch;
  32. physicalType patch;
  33. nFaces 240;
  34. startFace 25866;
  35. }
  36. iskele
  37. {
  38. // type patch; // patch wedge ile değiştirilmeli
  39. // physicalType patch; // patch wedge ile değiştirilmeli
  40. type wedge;
  41. physicalType wedge;
  42. nFaces 12960;
  43. startFace 26106;
  44. }
  45. sancak
  46. {
  47. // type patch; // patch wedge ile değiştirilmeli
  48. // physicalType patch; // patch wedge ile değiştirilmeli
  49. type wedge;
  50. physicalType wedge;
  51. nFaces 12960;
  52. startFace 39066;
  53. }
  54. )
  55.  
  56. // ************************************************************************* //


Nihâyet ithâl edilip ayarlanan hesaplama örgüsünün sağlığına bir göz atılabilir:


♦ Uçbirim:
checkMesh


Eğer başlangıçtaki betik değiştirilmediyse sonuç şöyle olmalı:


♦ Uçbirim:
Time = 0   Mesh stats points: 26400 internal points: 0 faces: 52026 internal faces: 25626 cells: 12960 faces per cell: 5.99167 boundary patches: 4 point zones: 0 face zones: 0 cell zones: 1   Overall number of cells of each type: hexahedra: 12852 prisms: 108 wedges: 0 pyramids: 0 tet wedges: 0 tetrahedra: 0 polyhedra: 0   Checking topology... Boundary definition OK. Cell to face addressing OK. Point usage OK. Upper triangular ordering OK. Face vertices OK. Number of regions: 1 (OK).   Checking patch topology for multiply connected surfaces... Patch Faces Points Surface topology cisim 240 480 ok (non-closed singly connected) girişÇıkış 240 480 ok (non-closed singly connected) iskele 12960 13255 ok (non-closed singly connected) sancak 12960 13255 ok (non-closed singly connected)   Checking geometry... Overall domain bounding box (-27.6 0 -1.2039) (27.6 27.5737 1.2039) Mesh (non-empty, non-wedge) directions (1 1 0) Mesh (non-empty) directions (1 1 1) Wedge iskele with angle 2.5 degrees Wedge sancak with angle 2.5 degrees All edges aligned with or perpendicular to non-empty directions. Boundary openness (5.37693e-18 4.15942e-17 7.35153e-16) OK. Max cell openness = 4.86221e-16 OK. Max aspect ratio = 67.4849 OK. Minimum face area = 6.81425e-07. Maximum face area = 9.09215. Face area magnitudes OK. Min volume = 3.49593e-09. Max volume = 3.53743. Total volume = 1221.5. Cell volumes OK. Mesh non-orthogonality Max: 43.9818 average: 12.9738 Non-orthogonality check OK. Face pyramids OK. Max skewness = 0.330922 OK. Coupled point location match (average 0) OK.   Mesh OK.   End


Düzenli bir 2B eksensimetrik hesaplama örgüsünün imalâtı ve OpenFOAM içine ithâl edilmesi böylece tamamlandı. Bundan sonra belirtilen yama isimlendirmelerine ve türlerine göre U, p, nut vs. gibi değişkenlerin de ayarlanması gerekecek ama bu husus yazının kapsamı içinde değil.


3 Boyutlu Düzenli Örgü

Eksensimetrik bir çalışmada akış sadece simetri ekseni doğrultusunda tanımlanabildiğinden örneğin buradaki gibi bir cismin 0dereceden farklı hücum açılarında incelenebilmesi için 3 Boyutlu bir örgü kullanmak gereklidir.


6:1 Elipsoit geometrisi etrafında Gmsh kullanılarak oluşturulan çözüm ağı

Resim.3) Gmsh kullanılarak yarım elipsoit geometrisi üzerine inşa edilen düzenli hesaplama örgüsünün cisim civarındaki görünüşü.


Bu durumda yukarıdaki deneme2B.geo betiği üzerinde küçük bazı değişiklikler yaparak ihtiyaç duyulan, [Resim.3] üzerinde görülebilen gibi 3B bir örgü de kolayca üretilip aynı şekilde OpenFOAM içine ithâl edilebilir. Sadece yama türlerinde 2B durumuna göre bâzı farklar olacaktır.

>> Sonraki Bölüm: Gmsh ile Eksensimetrik Melez Örgü İmâli

♦ Açıklamalar

1. BDM: Bilgisayar Destekli Mühendislik [geri]
2. HAD: Hesaplamalı Akışkan Dinamiği [geri]
3. BDT: Bilgisayar Destekli Tasarım [geri]

♦ Kaynaklar

1. Gmsh genelağ sitesi - http://gmsh.info
2. An introduction to Geometrical Modelling and Mesh Generation - The Gmsh Companion, Christophe Geuzaine - Emilie Marchandise - Jean-François Remacle
 







Telif Hakkı © 1997-2018 [uskudar.biz] - sürüm 5.5.1 - Bütün Hakları Saklıdır. Kullanım şartları için tıklayın!
Joomla! GNU/GPL lisansı altında özgür bir yazılımdır.