mirror of
https://github.com/NGSolve/netgen.git
synced 2025-05-10 20:50:48 +05:00
add missing ingredient to tag faces for preserving/reconstructing face ids (surfnr, bcnr, domin, domout) via FaceDescriptor
This commit is contained in:
parent
0d83ea01cd
commit
0be72fb374
@ -241,9 +241,52 @@ namespace nglib
|
||||
}
|
||||
|
||||
|
||||
DLL_HEADER void Ng_ClearFaceDescriptors (Ng_Mesh * ng_mesh)
|
||||
{
|
||||
Mesh * mesh = (Mesh*)ng_mesh;
|
||||
mesh->ClearFaceDescriptors();
|
||||
}
|
||||
|
||||
|
||||
DLL_HEADER int Ng_AddFaceDescriptor (Ng_Mesh * ng_mesh, int surfnr, int domin, int domout, int bcp)
|
||||
{
|
||||
Mesh * mesh = (Mesh*)ng_mesh;
|
||||
int nfd = mesh->GetNFD();
|
||||
|
||||
int faceind = 0;
|
||||
for (int j = 1; j <= nfd; j++)
|
||||
{
|
||||
if (mesh->GetFaceDescriptor(j).SurfNr() == surfnr
|
||||
&& mesh->GetFaceDescriptor(j).BCProperty() == bcp
|
||||
&& mesh->GetFaceDescriptor(j).DomainIn() == domin
|
||||
&& mesh->GetFaceDescriptor(j).DomainOut() == domout)
|
||||
{
|
||||
faceind = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!faceind)
|
||||
{
|
||||
faceind = mesh->AddFaceDescriptor (FaceDescriptor(surfnr, domin, domout, 0));
|
||||
mesh->GetFaceDescriptor(faceind).SetBCProperty (bcp);
|
||||
}
|
||||
return faceind;
|
||||
}
|
||||
|
||||
|
||||
DLL_HEADER void Ng_SetupFacedescriptors (Ng_Mesh * mesh, int maxbc)
|
||||
{
|
||||
Mesh * m = (Mesh*)mesh;
|
||||
m->ClearFaceDescriptors();
|
||||
for (int i = 1; i <= maxbc; i++)
|
||||
m->AddFaceDescriptor (FaceDescriptor (i, 0, 0, i));
|
||||
}
|
||||
|
||||
|
||||
// Manually add a surface element of a given type to an existing mesh object
|
||||
DLL_HEADER void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
|
||||
int * pi, int domain)
|
||||
int * pi, int facenr)
|
||||
{
|
||||
int n = 3;
|
||||
switch (et)
|
||||
@ -263,7 +306,7 @@ namespace nglib
|
||||
|
||||
Mesh * m = (Mesh*)mesh;
|
||||
Element2d el (n);
|
||||
el.SetIndex (domain);
|
||||
el.SetIndex (facenr);
|
||||
for (int i=0; i<n; ++i)
|
||||
el.PNum(i+1) = pi[i];
|
||||
m->AddSurfaceElement (el);
|
||||
@ -338,11 +381,23 @@ namespace nglib
|
||||
}
|
||||
|
||||
|
||||
|
||||
DLL_HEADER bool Ng_GetFaceDescriptor (Ng_Mesh * mesh, int facenr, int &surfnr, int &domin, int &domout, int &bcp)
|
||||
{
|
||||
Mesh * m = (Mesh*)mesh;
|
||||
if (facenr <= m->GetNFD())
|
||||
{
|
||||
surfnr = m->GetFaceDescriptor(facenr).SurfNr();
|
||||
domin = m->GetFaceDescriptor(facenr).DomainIn();
|
||||
domout = m->GetFaceDescriptor(facenr).DomainOut();
|
||||
bcp = m->GetFaceDescriptor(facenr).BCProperty();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return the surface element at a given index "pi"
|
||||
DLL_HEADER Ng_Surface_Element_Type
|
||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * domain)
|
||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * facenr)
|
||||
{
|
||||
const Element2d & el = ((Mesh*)mesh)->SurfaceElement(num);
|
||||
for (int i = 1; i <= el.GetNP(); i++)
|
||||
@ -365,8 +420,8 @@ namespace nglib
|
||||
default:
|
||||
et = NG_TRIG; break; // for the compiler
|
||||
}
|
||||
if (domain)
|
||||
*domain = el.GetIndex();
|
||||
if (facenr)
|
||||
*facenr = el.GetIndex();
|
||||
return et;
|
||||
}
|
||||
|
||||
|
@ -370,6 +370,22 @@ DLL_HEADER void Ng_AddPoint (Ng_Mesh * mesh, double * x);
|
||||
*/
|
||||
DLL_HEADER void Ng_AddLockedPoint(Ng_Mesh * mesh, int pi);
|
||||
|
||||
|
||||
/*! \brief Remove any existing face descriptors
|
||||
*/
|
||||
DLL_HEADER int Ng_AddFaceDescriptor (Ng_Mesh * ng_mesh, int surfnr, int domin, int domout, int bcp);
|
||||
|
||||
|
||||
/*! \brief Remove any existing face descriptors
|
||||
*/
|
||||
DLL_HEADER void Ng_ClearFaceDescriptors (Ng_Mesh * ng_mesh);
|
||||
|
||||
|
||||
/*! \brief Generate simple facedescriptors, with facenr==bc, from 1...maxbc
|
||||
*/
|
||||
DLL_HEADER void Ng_SetupFacedescriptors(Ng_Mesh * mesh, int maxbc);
|
||||
|
||||
|
||||
/*! \brief Add a surface element to a given Netgen Mesh Structure
|
||||
|
||||
This function allows the top-level code to directly add individual
|
||||
@ -389,8 +405,9 @@ DLL_HEADER void Ng_AddLockedPoint(Ng_Mesh * mesh, int pi);
|
||||
#Ng_Surface_Element_Type
|
||||
\param pi Pointer to an array of integers containing the indices of the
|
||||
points which constitute the surface element being added
|
||||
\param facenr Index of face descriptor. Used e.g. to attach boundary condition types to surface elements
|
||||
*/
|
||||
DLL_HEADER void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et, int * pi, int domain=1);
|
||||
DLL_HEADER void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et, int * pi, int facenr=1);
|
||||
|
||||
|
||||
/*! \brief Add a volume element to a given Netgen Mesh Structure
|
||||
@ -597,10 +614,12 @@ DLL_HEADER int Ng_GetNE (Ng_Mesh * mesh);
|
||||
DLL_HEADER void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);
|
||||
|
||||
|
||||
// return bcp and surfnr for specified face descriptor (facenr)
|
||||
DLL_HEADER bool Ng_GetFaceDescriptor (Ng_Mesh * mesh, int facenr, int &surfnr, int &domin, int &domout, int &bcp);
|
||||
|
||||
// return surface and volume element in pi
|
||||
DLL_HEADER Ng_Surface_Element_Type
|
||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * domain = nullptr);
|
||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * facenr = nullptr);
|
||||
|
||||
DLL_HEADER Ng_Volume_Element_Type
|
||||
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi, int * domain = nullptr);
|
||||
@ -655,8 +674,6 @@ DLL_HEADER Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
||||
Ng_Meshing_Parameters * mp);
|
||||
|
||||
// functions added to make Optimize2d mesh accessible from nglib
|
||||
DLL_HEADER void Ng_SetupFacedescriptors(Ng_Mesh * mesh, int maxdomnr);
|
||||
|
||||
DLL_HEADER void Ng_AddTriangle_2D(Ng_Mesh * mesh, int pi1, int pi2, int pi3, int matnum = 1);
|
||||
|
||||
DLL_HEADER Ng_Result Ng_OptimizeMesh_2D(Ng_Mesh *mesh, Ng_Meshing_Parameters * mp);
|
||||
|
Loading…
x
Reference in New Issue
Block a user