diff --git a/libsrc/meshing/boundarylayer.cpp b/libsrc/meshing/boundarylayer.cpp index 1ca3589e..643f0922 100644 --- a/libsrc/meshing/boundarylayer.cpp +++ b/libsrc/meshing/boundarylayer.cpp @@ -155,6 +155,7 @@ namespace netgen int prismlayers = blp.prismlayers; double hfirst = blp.hfirst; double growthfactor = blp.growthfactor; + Array heights (blp.heights); bool grow_edges = false; // grow layer at edges @@ -179,13 +180,20 @@ namespace netgen double layerht = hfirst; - if(growthfactor == 1) + if(heights.Size()>0) { - layerht = layer * hfirst; + layerht = heights[layer-1]; } else { - layerht = hfirst*(pow(growthfactor,(layer+1)) - 1)/(growthfactor - 1); + if(growthfactor == 1) + { + layerht = layer * hfirst; + } + else + { + layerht = hfirst*(pow(growthfactor,(layer+1)) - 1)/(growthfactor - 1); + } } cout << "Layer Height = " << layerht << endl; @@ -510,7 +518,10 @@ namespace netgen Element el(types[classify]); for (int i = 0; i < 6; i++) el[i] = nums[vertices[classify][i]]; - el.SetIndex(blp.new_matnr); + if(blp.new_matnrs.Size() > 0) + el.SetIndex(blp.new_matnrs[layer-1]); + else + el.SetIndex(blp.new_matnr); // cout << "el = " << el << endl; if (classify != 0) mesh.AddVolumeElement(el); diff --git a/libsrc/meshing/boundarylayer.hpp b/libsrc/meshing/boundarylayer.hpp index cbad16af..442de314 100644 --- a/libsrc/meshing/boundarylayer.hpp +++ b/libsrc/meshing/boundarylayer.hpp @@ -13,6 +13,8 @@ class BoundaryLayerParameters public: // parameters by Philippose .. Array surfid; + Array heights; + Array new_matnrs; int prismlayers = 1; int bulk_matnr = 1; int new_matnr = 1; diff --git a/libsrc/meshing/python_mesh.cpp b/libsrc/meshing/python_mesh.cpp index e27d3433..8134d345 100644 --- a/libsrc/meshing/python_mesh.cpp +++ b/libsrc/meshing/python_mesh.cpp @@ -338,6 +338,37 @@ DLL_HEADER void ExportNetgenMeshing() })) .def ("BoundaryLayer", FunctionPointer + ([](Mesh & self, int bc, bp::list thicknesses, int volnr, bp::list materials) + { + int n = bp::len(thicknesses); + BoundaryLayerParameters blp; + + for (int i = 1; i <= self.GetNFD(); i++) + if (self.GetFaceDescriptor(i).BCProperty() == bc) + blp.surfid.Append (i); + + cout << "add layer at surfaces: " << blp.surfid << endl; + + blp.prismlayers = n; + blp.growthfactor = 1.0; + + // find max domain nr + int maxind = 0; + for (ElementIndex ei = 0; ei < self.GetNE(); ei++) + maxind = max (maxind, self[ei].GetIndex()); + cout << "maxind = " << maxind << endl; + for ( int i=0; i(thicknesses[i])()) ; + blp.new_matnrs.Append( maxind+1+i ); + self.SetMaterial (maxind+1+i, bp::extract(materials[i])().c_str()); + } + blp.bulk_matnr = volnr; + GenerateBoundaryLayer (self, blp); + } + )) + + .def ("BoundaryLayer", FunctionPointer ([](Mesh & self, int bc, double thickness, int volnr, string material) { BoundaryLayerParameters blp;