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

Gmsh ile Eksensimetrik Melez Örgü İmâli

Seyir Defteri - Yazılım
Cumartesi, 30 Haziran 2018

Gmsh Melez ÖrgüOrtalama bir Hesaplamalı Akışkan Dinamiği çalışması söz konusu olduğunda, sınırı tabakayı daha iyi çözebilmek için duvar yakınındaki kısıtlı bir bölge için düzenli, geri kalan hesapla ortamı için ise serbest örgü kullanarak her iki yaklaşımın üstünlüklerinden birlikte yararlanmaya çalışmak yaygın bir uygulamadır.

Böyle bir melez örgü, her ne kadar burada örnek olarak kullanılacak geometri kolay sayılsa da tam düzenli örgü oluşturmanın son derece zaman alıcı ve zorlu olabildiği karmaşık cisimler üzerinde daha verimli çalışabilmeyi mümkün kılabilmektedir.

Daha önce ele alınan düzenli örgü üretimi hakkındaki içeriğe daha iyi uyum sağlayabilmek ve mevzû ile ilgilenenlerin yöntemler arasındaki farklıları daha kolay kavrayabilmelerine yardımcı olabilecek şekilde bir bütünlük sağlayabilmek için yine aynı 6:1 Uzatılmış Küre hendesesi ile devam edilecektir.


2 Boyutlu Eksensimetrik Melez Hesaplama Örgüsü

Resim.1) 2 Boyutlu eksensimetrik melez hesaplama örgüsü.


Aşağıda verilen Gmsh betiğini olduğu gibi kopyalayıp "deneme2Bmelez.geo" veya keyfinize göre başka bir isim verilmiş metin dosyası içine yapıştırıp bu dosyayı Gmsh ile açtığınızda yukarıda bahsi geçen cisim için OpenFOAM'a yönelik olarak oluşturulmuş 2 Boyutlu bir eksensimetrik hesaplama örgüsünü elde edebilirsiniz.

Önceki yazıda söz konusu örgünün Gmsh'den nasıl ihraç edilip daha sonra OpenFOAM içine nasıl ithâl edileceği anlatıldığı için bu hususlar şimdi tekrar edilmeyecek...


♦ 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. // Prismatik sınır tabaka katmanı ile melez ö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. // Noktalar vasıtasıyla eğriler üzerindeki
  12. // düğüm sayılarını belirleyen değişkenler
  13. lc1 = 0.004;
  14. lc2 = 1.0;
  15. lc3 = 2.0;
  16.  
  17. // Buradan sonrasına müdahale etmeye gerek yok!
  18. r2 = oran1 * r1; // uzun yarıçap
  19. R1 = oran2 * r2; // uzak alan sınırı yarıçapı
  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, lc1};
  28. Point(2) = {0, r1, 0, lc1*3};
  29. Point(3) = {r2, 0, 0, lc1};
  30. Point(4) = {-R1, 0, 0, lc2};
  31. Point(5) = {R1, 0, 0, lc2};
  32. Point(6) = {0, R1, 0, lc3};
  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) = {3,5}; // sağ eksen hattı
  39.  
  40. // Yüzey
  41. Line Loop(50) = {10,-11,31,-21,-20,-30};
  42. Plane Surface(100) = {50};
  43.  
  44. // Sınır Tabaka
  45. Field[1] = BoundaryLayer;
  46. Field[1].EdgesList = {10,11}; // sınır tabakanın uygulanacağı kenarlar
  47. Field[1].NodesList = {1,3}; // sınır tabakanın sonlanağı düğüm noktaları
  48. Field[1].hwall_n = 0.00065; // ilk hücrenin yüksekliği
  49. Field[1].thickness = 0.05; // toplam düzenli örgü kalınlığı
  50. Field[1].ratio = 1.10; // hücreler arası mesafe artış oranı
  51. Field[1].Quads = 1;
  52. BoundaryLayer Field = 1;
  53.  
  54. // Oluşturulan 2B yüzeyin -2,5derece döndürülmesi için.
  55. // Dönüş açıları gmsh'ye radyan olarak verilmeli!
  56. Rotate { {1,0,0} , {0,0,0} , -Pi/72 } {
  57. Surface{100};
  58. }
  59.  
  60. // Döndürülmüş yüzeyin +5derece çekilerek düzenli örgünün elde edilmesi
  61. // Böylece aşağıda Layers komutu ile tanımlandığı üzere {1} hücre
  62. // genişliğinde "sahte 3B" bir hesaplama hacmi oluşturulabiliyor.
  63.  
  64. Extrude { {1,0,0} , {0,0,0} , Pi/36 } {
  65. Surface{100};
  66. Layers{1};
  67. Recombine;
  68. }
  69.  
  70. // OpenFOAM için isimlendirmeler
  71. Physical Volume ("hava") = {1};
  72. Physical Surface ("cisim") = {110,113};
  73. Physical Surface ("girişÇıkış") = {117,120};
  74. Physical Surface ("iskele") = {122};
  75. Physical Surface ("sancak") = {100};


Sıfırdan farklı hücum açılarında da akışı inceleyebilmek için gerekli olan 3 Boyutlu hesaplama örgüsü de yukarıdaki betiğin hafifçe değiştirilmesi ile kolayca edilebilirdi. Aşağıdaki resimde de görülebildiği üzere yarım küre şeklindeki bir hesaplama hacimi içinde oluşturulan simetrik yapı çoğu durum için ihtiyacı karşılamaya yeterli olacaktır.


3 Boyutlu Eksensimetrik Melez Hesaplama Örgüsü

Resim.2) 3 Boyutlu simetrik (yarım) melez hesaplama örgüsü.


Bazı durumlarda ise tam küre bir hesaplama ortamı gerekli olabilir ki mevcut betik üzerine yapılacak küçük bâzı ilâvelerle bu ihtiyaç da kolayca karşılanabilir.

Velhâsıl aşağıdaki betik "deneme3Bmelez.geo" gibi bir düz metin dosyası içine yapıştırılarak kolayca kullanılabilir.


♦ gmsh:
  1. // 6:1 "Uzatılmış Küre" (elispsoit) geometrisi ve OpenFOAM için
  2. // 3B hesaplama örgüsü oluşturma betiği numunesi
  3. // Prismatik sınır tabaka katmanı ile melez ö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. // Noktalar vasıtasıyla eğriler üzerindeki
  12. // düğüm sayılarını belirleyen değişkenler
  13. lc1 = 0.004;
  14. lc2 = 1.0;
  15. lc3 = 2.0;
  16.  
  17. // Çap yönündeki düğüm noktası sayısı
  18. dr = 24; // her çeyrek daire için!
  19.  
  20. // Buradan sonrasına müdahale etmeye gerek yok!
  21. r2 = oran1 * r1; // uzun yarıçap
  22. R1 = oran2 * r2; // uzak alan sınırı yarıçapı
  23.  
  24. // y+ için kerteriz
  25. // Re=4,2e06 - L=2,4m - y+=50 için
  26. deltay=0.0007544; // y+ ~50 için ilk hücrenin duvara mesafesi, metre
  27. Point(999)= {0, r1+deltay, 0, 1}; // y+ ~50 için vasatta kerteriz noktası
  28.  
  29. Point(0) = {0, 0, 0}; // merkez noktası
  30. Point(1) = {-r2, 0, 0, lc1};
  31. Point(2) = {0, r1, 0, lc1*3};
  32. Point(3) = {r2, 0, 0, lc1};
  33. Point(4) = {-R1, 0, 0, lc2};
  34. Point(5) = {R1, 0, 0, lc2};
  35. Point(6) = {0, R1, 0, lc3};
  36. Ellipse(10) = {1,0,1,2}; // sol çeyrek
  37. Ellipse(11) = {3,0,3,2}; // sağ çeyrek
  38. Circle(20) = {4,0,6}; // sol çeyrek
  39. Circle(21) = {6,0,5}; // sağ çeyrek
  40. Line(30) = {1,4}; // sol eksen hattı
  41. Line(31) = {3,5}; // sağ eksen hattı
  42.  
  43. // Yüzey
  44. Line Loop(50) = {10,-11,31,-21,-20,-30};
  45. Plane Surface(100) = {50};
  46.  
  47. // Sınır Tabaka
  48. Field[1] = BoundaryLayer;
  49. Field[1].EdgesList = {10,11}; // sınır tabakanın uygulanacağı kenarlar
  50. Field[1].NodesList = {1,3}; // sınır tabakanın sonlanacağı düğüm noktaları
  51. Field[1].hwall_n = 0.00065; // ilk hücrenin yüksekliği
  52. Field[1].thickness = 0.05; // toplam düzenli örgü kalınlığı
  53. Field[1].ratio = 1.10; // hücreler arası mesafe artış oranı
  54. Field[1].Quads = 1;
  55. BoundaryLayer Field = 1;
  56.  
  57. // 2B örgü yüzeyi ile iki yönde çekilerek iki çeyrek küreden oluşan
  58. // 3B hesaplama ortamının elde edilmesi
  59.  
  60. Extrude { {1,0,0} , {0,0,0} , Pi/2 } {
  61. Surface{100};
  62. Layers{dr};
  63. Recombine;
  64. }
  65. Extrude { {1,0,0} , {0,0,0} , -Pi/2 } {
  66. Surface{100};
  67. Layers{dr};
  68. Recombine;
  69. }
  70.  
  71. // OpenFOAM için isimlendirmeler
  72. Physical Volume ("hava") = {1,2};
  73. Physical Surface ("cisim") = {110,113,132,135};
  74. Physical Surface ("girişÇıkış") = {117,120,139,142};
  75. Physical Surface ("merkez") = {122,144};


Bu şekilde elde edilebilecek olan örgü de daha önce 2B için açıklandığı gibi kolayca OpenFOAM içine ithâl edilebilir. Doğal olarak bâzı yamaların türleri farklı olacaktır.

Tam bu noktada küçük bir düzeltme yapmaya ihtiyaç olacaktır. Genel olarak OpenFOAM utf-8 isimlendirmelerle bir sorun çıkarmadığı için çeşitli isimlendirmelerde türkçeye özgü harflerin kullanılmasından bir sorun çıkartmaz. Bununla birlikte polyDualMesh kullanıldığında bu durum geçerli değil. Bu sebeple ikinci betik üzerindeki 74. satırda görüldüğü üzere "girişÇıkış"olarak adlandırılmış yamanın içindeki Ç, ı ve ş harfleri polyDualMesh aracının çalışmasına engel olmaktadır ki bu sebeple söz konusu aracı kullanmadan önce gerekli noktalar üzerinde bu yamanın adını mesele girisCikis olarak düzeltmeniz gerekecektir...

Elde edilen bu üç boyutlu melez [Resim.2] hesaplama örgüsü duvar civarında düzenli bunun dışındaki hacim içinde ise serbest türdedir. Bu serbest örgüyü meydana getiren bileşenler üçgen temelli (dörtyüzlü ve beşyüzlü) hücrelerdir, sınır tabaka örgüsünü meydana getiren bileşenler ise dörtgen temelli (altıyüzlü) hücrelerdir.


3 Boyutlu Eksensimetrik Melez - Çokgen Hesaplama Örgüsü

Resim.3) 3 Boyutlu simetrik (yarım) melez; çokgen ağırlıklı hesaplama örgüsü.


OpenFOAM sahip olduğu bazı ilave yeteneklerle Gmsh üzerinde imâl edilerek ithâl edilen bu melez örgü içindeki üçgen temelli elemanların çokgen temelli olanlara dönüştürülebilmesine de imkân sağlamaktadır. Bu işlemi gerçekleştirebilmek için polyDualMesh adlı araç kullanılır. Çalışma dizininin kökünde şöyle:


♦ Uçbirim:
polyDualMesh 45 -overwrite


Böylece üçgen ağırlıklı örgü çokgen ağırlıklı [Resim.3] bir hâle de dönüştürebilir. Her iki yaklaşımın çözüm süreleri ve yakınsama davranışları üzerindeki etkisini incelemek ise şimdilik daha müsâit bir zamâna kalsın...

Son olarak yukarıda verilen betik ayarları ile elde edilen üçgen örgü ile doğrudan bundan dönüştürülmüş çokgen örgü arasındaki temel yapı farkını ifade etmek gerekirse:


üçgen çokgen
noktalar 761.976 1.247.284
yüzler 3.126.346 2.761.121
dâhili yüzler 3.060.086 2.710.497
hücreler 1.177.824 761.976
hücre başına yüz 5,25 7,18
altıyüzlü 310.464 322.414
beşyüzlü 840.048 0
dörtyüzlü 27.312 0
çok yüzlü 0 439.562
Toplam Hücre 1.177.828 761.976

Çizelge.1) Yukarıda tanımlana betik üzerinden elde edilen üçgen temelli örgü ile polyDualMesh ile çokgene dönüştürülmüş örgüler arasındaki fizikî karşılaştırma.


>> Önceki Bölüm: Gmsh ile Eksensimetrik Düzenli Örgü İmâli

♦ 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.