CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Meshing & Mesh Conversion (https://www.cfd-online.com/Forums/openfoam-meshing/)
-   -   [Gmsh] How to add a prismatic-cell boundary layer in GMSH? (https://www.cfd-online.com/Forums/openfoam-meshing/148844-how-add-prismatic-cell-boundary-layer-gmsh.html)

klausb February 20, 2015 12:33

How to add a prismatic-cell boundary layer in GMSH?
 
2 Attachment(s)
Hello,

how can I add a boundary layer mesh made up of the "typical" prismatic boundary layer cells to my GMSH mesh? I red a lot about using extrusions but I didn't succeed.

The airfoil geometry is made up of a spline and a straight line connecting the two end points at the trailing edge.

It's basically 2D but extruded to 3D to be usable in OpenFoam.

How does it work?

This is my current code:

//---------------------------------------------------------------------------------------------------------------

//adapted FX66-S-196-V1 airfoil coordinates with straight trailing edge
cl__1 = 0.005;
Point(1001) = {1, 0.0003, 0, cl__1};
Point(1002) = {0.99039, 0.00284, 0, cl__1};
Point(1003) = {0.973469, 0.00729, 0, cl__1};
Point(1004) = {0.948439, 0.01357, 0, cl__1};
Point(1005) = {0.91573, 0.02193, 0, cl__1};
Point(1006) = {0.87592, 0.03242, 0, cl__1};
Point(1007) = {0.85355, 0.03845, 0, cl__1};
Point(1008) = {0.82967, 0.04501, 0, cl__1};
Point(1009) = {0.80438, 0.05197, 0, cl__1};
Point(1010) = {0.77779, 0.05936, 0, cl__1};
Point(1011) = {0.75, 0.066989, 0, cl__1};
Point(1012) = {0.72114, 0.07482, 0, cl__1};
Point(1013) = {0.69134, 0.08272, 0, cl__1};
Point(1014) = {0.66072, 0.09067, 0, cl__1};
Point(1015) = {0.62941, 0.09844, 0, cl__1};
Point(1016) = {0.59755, 0.10607, 0, cl__1};
Point(1017) = {0.56526, 0.11321, 0, cl__1};
Point(1018) = {0.5327, 0.11995, 0, cl__1};
Point(1019) = {0.5, 0.12585, 0, cl__1};
Point(1020) = {0.4673, 0.13095, 0, cl__1};
Point(1021) = {0.43474, 0.13467, 0, cl__1};
Point(1022) = {0.40245, 0.13691, 0, cl__1};
Point(1023) = {0.37059, 0.1369, 0, cl__1};
Point(1024) = {0.33928, 0.13537, 0, cl__1};
Point(1025) = {0.30866, 0.13243, 0, cl__1};
Point(1026) = {0.27866, 0.12848, 0, cl__1};
Point(1027) = {0.25, 0.12348, 0, cl__1};
Point(1028) = {0.22221, 0.11772, 0, cl__1};
Point(1029) = {0.19562, 0.11114, 0, cl__1};
Point(1030) = {0.17033, 0.10398, 0, cl__1};
Point(1031) = {0.14645, 0.09621, 0, cl__1};
Point(1032) = {0.12408, 0.08803, 0, cl__1};
Point(1033) = {0.10332, 0.07946, 0, cl__1};
Point(1034) = {0.08427, 0.07067, 0, cl__1};
Point(1035) = {0.066989, 0.0617, 0, cl__1};
Point(1036) = {0.05156, 0.05273, 0, cl__1};
Point(1037) = {0.03806, 0.04383, 0, cl__1};
Point(1038) = {0.02653, 0.0352, 0, cl__1};
Point(1039) = {0.01702, 0.02692, 0, cl__1};
Point(1040) = {0.00961, 0.01918, 0, cl__1};
Point(1041) = {0.00428, 0.01223, 0, cl__1};
Point(1042) = {0.00107, 0.00621, 0, cl__1};
Point(1043) = {0, 0, 0, cl__1};
Point(1044) = {0.00107, -0.00354, 0, cl__1};
Point(1045) = {0.00428, -0.00784, 0, cl__1};
Point(1046) = {0.00961, -0.01211, 0, cl__1};
Point(1047) = {0.01704, -0.01639, 0, cl__1};
Point(1048) = {0.02653, -0.02065, 0, cl__1};
Point(1049) = {0.03806, -0.02489, 0, cl__1};
Point(1050) = {0.05156, -0.02903, 0, cl__1};
Point(1051) = {0.0669899, -0.03307, 0, cl__1};
Point(1052) = {0.08427, -0.03695, 0, cl__1};
Point(1053) = {0.10332, -0.04063, 0, cl__1};
Point(1054) = {0.12408, -0.0441, 0, cl__1};
Point(1055) = {0.14645, -0.04729, 0, cl__1};
Point(1056) = {0.17033, -0.05022, 0, cl__1};
Point(1057) = {0.19562, -0.05279, 0, cl__1};
Point(1058) = {0.22221, -0.05503, 0, cl__1};
Point(1059) = {0.25, -0.05681, 0, cl__1};
Point(1060) = {0.27866, -0.0582, 0, cl__1};
Point(1061) = {0.30866, -0.05901, 0, cl__1};
Point(1062) = {0.33928, -0.05931, 0, cl__1};
Point(1063) = {0.37059, -0.0588, 0, cl__1};
Point(1064) = {0.40245, -0.05743, 0, cl__1};
Point(1065) = {0.43474, -0.05451, 0, cl__1};
Point(1066) = {0.4673, -0.05076, 0, cl__1};
Point(1067) = {0.5, -0.04628, 0, cl__1};
Point(1068) = {0.5327, -0.04161, 0, cl__1};
Point(1069) = {0.56526, -0.03667, 0, cl__1};
Point(1070) = {0.59755, -0.03186, 0, cl__1};
Point(1071) = {0.62941, -0.02707, 0, cl__1};
Point(1072) = {0.66072, -0.02256, 0, cl__1};
Point(1073) = {0.69134, -0.01827, 0, cl__1};
Point(1074) = {0.72114, -0.01435, 0, cl__1};
Point(1075) = {0.75, -0.0108, 0, cl__1};
Point(1076) = {0.77779, -0.00764, 0, cl__1};
Point(1077) = {0.80438, -0.00489, 0, cl__1};
Point(1078) = {0.82967, -0.0026, 0, cl__1};
Point(1079) = {0.85355, -0.00068, 0, cl__1};
Point(1080) = {0.87592, 0.0008, 0, cl__1};
Point(1081) = {0.91573, 0.00254, 0, cl__1};
Point(1082) = {0.948439, 0.00288, 0, cl__1};
Point(1083) = {0.973469, 0.00206, 0, cl__1};
Point(1084) = {0.99039, 0.00066, 0, cl__1};
Point(1085) = {1, -0.00025, 0, cl__1};
Spline(1000) = {1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085};

//straight trailing edge line, closing spline
Line(1) = {1001, 1085};


//domain boundaries
edge_lc = 0.2;

Point(2000) = {-2, 4, 0, edge_lc};
Point(2001) = {-2, -4, 0, edge_lc};
Point(2002) = {7, -4, 0, edge_lc};
Point(2003) = {7, 4, 0, edge_lc};

// outer boundary lines
Line(2) = {2000, 2001};
Line(3) = {2001, 2002};
Line(4) = {2002, 2003};
Line(5) = {2003, 2000};

//create boundary
Line Loop (1) = {2, 3, 4, 5};
// Tell gmsh the spline should also be a line loop
Line Loop (2) = {1000};
//closing trailing edge line should also be a line loop and part of the boundary
Line Loop (3) = {1};
// combine the three into a surface, gmsh makes a hole automagically
Plane Surface(1) = {1,2,3};


//creating and extruding the mesh to 3D required by OpenFoam
Extrude {0, 0, 1} {
Surface{1};
Layers{1};
Recombine;
}


//defining 3D surfaces to be used as OpenFoam patches
Physical Surface("back") = {1};
Physical Surface("front") = {1032};
Physical Surface("top") = {1023};
Physical Surface("outlet") = {1019};
Physical Surface("bottom") = {1015};
Physical Surface("inlet") = {1011};
Physical Surface("airfoil") = {1027, 1031};

Physical Volume("internal") = {1};

//---------------------------------------------------------------------------------------------------------------

Find attached the geo file and a picture of the FX66-S-196-V1 airfoil to be meshed.

Klaus

alexeym February 21, 2015 05:13

1 Attachment(s)
Hi,

Why you have decided that you have not succeed with extrude? ;) You have got 1 layer of cells in extrude direction. I.e. boundary layer consists of prisms, triangular prisms.

If you would like to have hexagonal cells in the boundary layer, you should not just use extrude, you also have to use transfinite lines and surfaces for meshing (http://www.geuz.org/gmsh/doc/texinfo...ructured-grids).

Though it is much easier to use, for example, Construct2D (http://sourceforge.net/projects/construct2d/, see attached picture with the generated mesh for NACA0012 airfoil) to build quality airfoil mesh. There is one nuance - software generate mesh in Plot3D format, so you have to convert it.

klausb February 21, 2015 07:43

How to extrude the airfoil shape in normal direction, not x,y,z?
 
Thank you for your feedback,

I was thinking of GMSH because I'll have to do 3D simulations as well, 2D is just for validation of required settings based on data available for the selected airfoil.

As you saw, I extruded the unstructured 2D mesh into the z direction which is no problem and is only required as OpenFoam works only in 3D so 2D is solved as a "pseudo" 3D case using 1 layer of cells created by extruding the 2D mesh 1 layer into z direction.

My problem is the boundary layer mesh, made up of prismatic cells which needs to meet y+ = 1. So apparently I need to extrude the airfoil shape normal to the airfoil surface (2D) in GMSH.

Apparently I'll have to work with different meshing tools for 2D and 3D simulations.

Klaus

alexeym February 21, 2015 17:21

1 Attachment(s)
Well,

If you'd like to get hexagonal mesh and would like to have control over boundary layer with Gmsh, you should create geometry like on the figure attached. I.e. every plane should have 4 corners. After this you can set boundary lines of the plane as transfinite and control density of the mesh in certain areas with "Transfinite Line {...} = N". Then you can extrude 2D mesh into 3D. You can continue division of geometry to get more control over mesh density in different parts of the mesh.

If you are trying to mesh 3D geometry, you need to divide your geometry into volumes with 6 (or 5 according to documentation) corners.

Jack001 November 22, 2016 17:30

Hi alexeym,

Have you managed to create a mesh resembling the one in your picture using gmsh? I have a starting point for a mesh of an airfoil but the only thing that is missing is being able to control the refinement at the trailing/leading edge!

If you have any ideas that would be much appreciated. I can also share my code if that would help.


All times are GMT -4. The time now is 14:46.