OpenFoam学习记录2-网格的生成
1 網格的約束
1.1 點
1)點的列表中不能有重復的點,不能包含不位于這個面上的點;
2)點的命名順序遵循右手定則,大拇指方向為法向量的方向,四只手指的順序為點的編號順序;
?1.2 面
1)面的中心必須位于面的內部;
2)面可以是曲面。
1.3 單元
1)單元必須是封閉的,所有面面積矢量指向單元外時,它們的總和等于零矢量;
2)每條邊必須由該單元的兩個面使用,不能多也不能少,其實就是要求單元不能有重疊的面和線,用ICEM劃分過網格的應該很容易理解;
3)法向量的傳遞通常是由編號小的網格傳到編號大的,eg:從二號網格傳到三號網格;
2 PolyMesh
以tutorial中的頂蓋方腔流為例,執行blckMesh后,
(base) jzz@DESKTOP-I13L3PF:~/exercises/cavity$ cd constant/polyMesh/^C (base) jzz@DESKTOP-I13L3PF:~/exercises/cavity$ tree可以看到polymesh中生成了以下文件
. ├── boundary ├── faces ├── neighbour ├── owner └── points查看points文件的部分
*--------------------------------*- C++ -*----------------------------------*\========= |\\ / F ield | OpenFOAM: The Open Source CFD Toolbox\\ / O peration | Website: https://openfoam.org\\ / A nd | Version: 8\\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile {version 2.0;format ascii;class vectorField;location "constant/polyMesh";object points; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //882 ( (0 0 0) (0.005 0 0) (0.01 0 0)文件頭在https://blog.csdn.net/WHTU_JZZ/article/details/126601537?spm=1001.2014.3001.5502中提到過,這里不做贅述。
882代表點的數量,規定從上到下對點依次編號,如0號點為(0 0 0),1號點為(0.005 0 0)....
同理,faces:
========= |\\ / F ield | OpenFOAM: The Open Source CFD Toolbox\\ / O peration | Website: https://openfoam.org\\ / A nd | Version: 8\\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile {version 2.0;format ascii;class faceList;location "constant/polyMesh";object faces; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //1640 ( 4(1 22 463 442) 4(21 462 463 22) 4(2 23 464 443)1640為面的數量,前面的4是組成這個面的點的數量,后面的點為點的索引如
4(1 22 463 442)中這個面是由第1,22,463,442的點構成的,面同樣也按由上至下的方式編號。
neighbour:指定網格間的相鄰關系
760 ( 1 20 2 21 3 22 4 23 5 24 6owner,說明每個面所屬的網格編號:
1640 ( 0 0 1 1 2 2 3 3 4 4 5 5boundary:說明每個邊界上的網格數量和使用了哪些網格:
(movingWall{type wall;inGroups List<word> 1(wall);nFaces 20;/網格的數量startFace 760;/網格的編號}fixedWalls{type wall;inGroups List<word> 1(wall);nFaces 60;startFace 780;}frontAndBack{type empty;inGroups List<word> 1(empty);nFaces 800;startFace 840;} )2 boundary
以cavity中的blockMeshDict為例,通過type指定邊界類型。
boundary (movingWall{type wall;faces((3 7 6 2));}fixedWalls{type wall;faces((0 4 7 3)(2 6 5 1)(1 5 4 0));}frontAndBack{type empty;faces((0 3 2 1)(4 5 6 7));} );常用邊界類型:
| patch | |
| symmetryPlane | 對稱面 |
| empty | 空,在二維的情況下通常將frontAndBack設置為empty |
| wedge | 前后為軸對稱幾何的楔形 |
| cyclic | 平面循環曲線 |
| wall | 紊流中的壁面 |
| processor | 并行計算時,不同網格之間的邊界 |
3 blockMesh
blockMesh用于生成帶梯度和曲線的結構化網格,其原理為將幾何分成一個或多個六面體塊。還是以cavity的blockMeshDict為例:
convertToMeters 0.1;vertices ((0 0 0) //0(1 0 0) //1(1 1 0) //2(0 1 0) //3(0 0 0.1) //4(1 0 0.1) //5(1 1 0.1) //6(0 1 0.1) //7 );blocks (hex (0 1 2 3 4 5 6 7) //由0 1 2 3 4 5 6 7組成的六面體(20 20 1) // 在1和2方向上20個,在3方向上1個simpleGrading (1 1 1) //類型為simpleGrading,三個方向上網格大小一致 ); edges ( ); boundary (movingWall{type wall;faces((3 7 6 2));}fixedWalls{type wall;faces((0 4 7 3)(2 6 5 1)(1 5 4 0));}frontAndBack{type empty;faces((0 3 2 1)(4 5 6 7));} )convertToMeters為縮放比,openfoam的默認單位為m,這里乘以0.1,單位就是1dm
vertices為點的列表,和上一章中的points類似。
blocks為分區,具體包括一個由點的標簽組成的列表,指定各方向上網格數量的向量和各方向上單元增長率的類型和列表。單元增長率有兩種類型simpleGrading和edgeGrading。
| simpleGrading | 指定三個方向上的增長率 eg.(1 2 3) |
| edgeGrading | 從第一個單元指向最后一個單元 eg.七個單元:(1 1 2 2 3 3 4) |
edges為曲線,上面的代碼中沒有指定,因為cavity就是個長方形,edges有以下幾種:
| arc | 曲線 | |
| simpleSpline | 樣條曲線 | |
| polyLine | 曲線光順 | |
| polySpline | Set of splines(看不懂,直接粘貼的user guide) | |
| line | 直線 |
其中arc是最常用的
edges(arc 1 5 (1.1 0.0 0.5));這里的曲線是以1號點和5號點為起點和終點,經過點(1.1 0.0 0.5)的一條曲線。
boundary為網格的邊界,通過type指定類型,通過點的編號指定面。
boundary // keyword(inlet // patch name{type patch; // patch type for patch 0faces((0 4 7 3) // block face in this patch);} // end of 0th patch definitionoutlet // patch name{type patch; // patch type for patch 1faces((1 2 6 5));}walls{type wall;faces((0 1 5 4)(0 3 2 1)(3 7 6 2)(4 5 6 7));});總結
以上是生活随笔為你收集整理的OpenFoam学习记录2-网格的生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux通过主机名免密码建立互信
- 下一篇: ZNT-MK01工业机器人模块化教学工作