diff --git a/libsrc/include/nginterface_v2_impl.hpp b/libsrc/include/nginterface_v2_impl.hpp index b853cf78..7000080f 100644 --- a/libsrc/include/nginterface_v2_impl.hpp +++ b/libsrc/include/nginterface_v2_impl.hpp @@ -72,13 +72,16 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<0> (size_t nr) const ret.facets.base = POINTINDEX_BASE; ret.facets.ptr = (int*)&el.pnum; + /* if (mesh->GetDimension() == 1) ret.mat = *(mesh->GetBCNamePtr(el.index-1)); else if (mesh->GetDimension() == 2) ret.mat = *(mesh->GetCD2NamePtr(el.index-1)); else ret.mat = *(mesh->GetCD3NamePtr(el.index-1)); - + */ + ret.mat = mesh->GetRegionName(0, el.index); + ret.is_curved = false; return ret; } @@ -97,6 +100,8 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<1> (size_t nr) const ret.index = el.edgenr; else ret.index = el.si; + + /* if (mesh->GetDimension() == 2) ret.mat = *(mesh->GetBCNamePtr(el.si-1)); else @@ -106,6 +111,8 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<1> (size_t nr) const else ret.mat = *(mesh->GetMaterialPtr(el.si)); } + */ + ret.mat = mesh->GetRegionName(1, ret.index); ret.points.num = el.GetNP(); ret.points.ptr = (int*)&(el[0]); diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index f18261c8..36184949 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -4828,10 +4828,7 @@ namespace netgen delete str; bcnames.SetSize(0); for(auto str: cd2names) - { - cout << "found material = " << *str << endl; - materials.Append(str); - } + materials.Append(str); cd2names.SetSize(0); for(auto str : cd3names) bcnames.Append(str); @@ -7416,6 +7413,7 @@ namespace netgen } string Mesh :: defaultmat = "default"; + string_view Mesh :: defaultmat_sv = "default"; const string & Mesh :: GetMaterial (int domnr) const { if (domnr <= materials.Size()) diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp index 6188debe..285448a3 100644 --- a/libsrc/meshing/meshclass.hpp +++ b/libsrc/meshing/meshclass.hpp @@ -128,6 +128,13 @@ namespace netgen */ NgArray edgedecoding; + Array region_name_cd[4]; + Array & materials = region_name_cd[0]; + Array & bcnames = region_name_cd[1]; + Array & cd2names = region_name_cd[2]; + Array & cd3names = region_name_cd[3]; + + /* /// sub-domain materials Array materials; @@ -139,7 +146,8 @@ namespace netgen /// labels for co dim 3 bbboundary conditions Array cd3names; - + */ + /// Periodic surface, close surface, etc. identifications unique_ptr ident; @@ -775,6 +783,15 @@ namespace netgen std::string_view GetRegionName(SegmentIndex ei) const { return GetRegionName((*this)[ei]); } std::string_view GetRegionName(SurfaceElementIndex ei) const { return GetRegionName((*this)[ei]); } std::string_view GetRegionName(ElementIndex ei) const { return GetRegionName((*this)[ei]); } + + DLL_HEADER static string_view defaultmat_sv; + std::string_view GetRegionName (int dim, int domnr) // 1-based domnr + { + domnr--; + auto & names = region_name_cd[dimension-dim]; + if (domnr < names.Size() && names[domnr]) return *names[domnr]; + return defaultmat_sv; + } /// void ClearFaceDescriptors()