mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-24 21:10:33 +05:00
new interface
This commit is contained in:
parent
d4830f6316
commit
7ac50aacf6
@ -1,25 +1,55 @@
|
|||||||
class Ng_Element
|
class Ng_Element
|
||||||
{
|
{
|
||||||
|
|
||||||
|
class Ng_Points
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int num;
|
||||||
|
const int * ptr;
|
||||||
|
|
||||||
|
int Size() const { return num; }
|
||||||
|
int operator[] (int i) const { return ptr[i]-1; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Ng_Vertices
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int num;
|
||||||
|
const int * ptr;
|
||||||
|
|
||||||
|
int Size() const { return num; }
|
||||||
|
int operator[] (int i) const { return ptr[i]-1; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Ng_Edges
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int num;
|
||||||
|
const int * ptr;
|
||||||
|
|
||||||
|
int Size() const { return num; }
|
||||||
|
int operator[] (int i) const { return abs (ptr[i])-1; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Ng_Faces
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int num;
|
||||||
|
const int * ptr;
|
||||||
|
|
||||||
|
int Size() const { return num; }
|
||||||
|
int operator[] (int i) const { return (ptr[i]-1) / 8; }
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NG_ELEMENT_TYPE type;
|
NG_ELEMENT_TYPE type;
|
||||||
int npoints;
|
NG_ELEMENT_TYPE GetType() const { return type; }
|
||||||
int nv;
|
|
||||||
int * points;
|
|
||||||
|
|
||||||
NG_ELEMENT_TYPE GetType() const
|
Ng_Points points; // all points
|
||||||
{
|
Ng_Vertices vertices;
|
||||||
return type;
|
Ng_Edges edges;
|
||||||
}
|
Ng_Faces faces;
|
||||||
|
|
||||||
int GetNP() const
|
|
||||||
{
|
|
||||||
return npoints;
|
|
||||||
}
|
|
||||||
|
|
||||||
int operator[] (int i) const
|
|
||||||
{
|
|
||||||
return points[i]-1;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -848,163 +848,6 @@ for (i = 1; i <= ne; i++)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int MeshTopology :: GetNVertices (ELEMENT_TYPE et)
|
|
||||||
{
|
|
||||||
switch (et)
|
|
||||||
{
|
|
||||||
case SEGMENT:
|
|
||||||
case SEGMENT3:
|
|
||||||
return 2;
|
|
||||||
|
|
||||||
case TRIG:
|
|
||||||
case TRIG6:
|
|
||||||
return 3;
|
|
||||||
|
|
||||||
case QUAD:
|
|
||||||
case QUAD6:
|
|
||||||
case QUAD8:
|
|
||||||
return 4;
|
|
||||||
|
|
||||||
case TET:
|
|
||||||
case TET10:
|
|
||||||
return 4;
|
|
||||||
|
|
||||||
case PYRAMID:
|
|
||||||
return 5;
|
|
||||||
|
|
||||||
case PRISM:
|
|
||||||
case PRISM12:
|
|
||||||
return 6;
|
|
||||||
|
|
||||||
case HEX:
|
|
||||||
return 8;
|
|
||||||
|
|
||||||
default:
|
|
||||||
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int MeshTopology :: GetNPoints (ELEMENT_TYPE et)
|
|
||||||
{
|
|
||||||
switch (et)
|
|
||||||
{
|
|
||||||
case SEGMENT:
|
|
||||||
return 2;
|
|
||||||
case SEGMENT3:
|
|
||||||
return 3;
|
|
||||||
|
|
||||||
case TRIG:
|
|
||||||
return 3;
|
|
||||||
case TRIG6:
|
|
||||||
return 6;
|
|
||||||
|
|
||||||
case QUAD:
|
|
||||||
case QUAD6:
|
|
||||||
case QUAD8:
|
|
||||||
return 4;
|
|
||||||
|
|
||||||
case TET:
|
|
||||||
return 4;
|
|
||||||
case TET10:
|
|
||||||
return 10;
|
|
||||||
|
|
||||||
case PYRAMID:
|
|
||||||
return 5;
|
|
||||||
|
|
||||||
case PRISM:
|
|
||||||
case PRISM12:
|
|
||||||
return 6;
|
|
||||||
|
|
||||||
case HEX:
|
|
||||||
return 8;
|
|
||||||
|
|
||||||
default:
|
|
||||||
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int MeshTopology :: GetNEdges (ELEMENT_TYPE et)
|
|
||||||
{
|
|
||||||
switch (et)
|
|
||||||
{
|
|
||||||
case SEGMENT:
|
|
||||||
case SEGMENT3:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case TRIG:
|
|
||||||
case TRIG6:
|
|
||||||
return 3;
|
|
||||||
|
|
||||||
case QUAD:
|
|
||||||
case QUAD6:
|
|
||||||
case QUAD8:
|
|
||||||
return 4;
|
|
||||||
|
|
||||||
case TET:
|
|
||||||
case TET10:
|
|
||||||
return 6;
|
|
||||||
|
|
||||||
case PYRAMID:
|
|
||||||
return 8;
|
|
||||||
|
|
||||||
case PRISM:
|
|
||||||
case PRISM12:
|
|
||||||
return 9;
|
|
||||||
|
|
||||||
case HEX:
|
|
||||||
return 12;
|
|
||||||
|
|
||||||
default:
|
|
||||||
cerr << "Ng_ME_GetNEdges, illegal element type " << et << endl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int MeshTopology :: GetNFaces (ELEMENT_TYPE et)
|
|
||||||
{
|
|
||||||
switch (et)
|
|
||||||
{
|
|
||||||
case SEGMENT:
|
|
||||||
case SEGMENT3:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case TRIG:
|
|
||||||
case TRIG6:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case QUAD:
|
|
||||||
case QUAD6:
|
|
||||||
case QUAD8:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case TET:
|
|
||||||
case TET10:
|
|
||||||
return 4;
|
|
||||||
|
|
||||||
case PYRAMID:
|
|
||||||
return 5;
|
|
||||||
|
|
||||||
case PRISM:
|
|
||||||
case PRISM12:
|
|
||||||
return 5;
|
|
||||||
|
|
||||||
case HEX:
|
|
||||||
return 6;
|
|
||||||
|
|
||||||
default:
|
|
||||||
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const Point3d * MeshTopology :: GetVertices (ELEMENT_TYPE et)
|
const Point3d * MeshTopology :: GetVertices (ELEMENT_TYPE et)
|
||||||
{
|
{
|
||||||
|
@ -56,10 +56,10 @@ public:
|
|||||||
int GetNFaces () const
|
int GetNFaces () const
|
||||||
{ return face2vert.Size(); }
|
{ return face2vert.Size(); }
|
||||||
|
|
||||||
static int GetNVertices (ELEMENT_TYPE et);
|
static inline int GetNVertices (ELEMENT_TYPE et);
|
||||||
static int GetNPoints (ELEMENT_TYPE et);
|
static inline int GetNPoints (ELEMENT_TYPE et);
|
||||||
static int GetNEdges (ELEMENT_TYPE et);
|
static inline int GetNEdges (ELEMENT_TYPE et);
|
||||||
static int GetNFaces (ELEMENT_TYPE et);
|
static inline int GetNFaces (ELEMENT_TYPE et);
|
||||||
|
|
||||||
static const Point3d * GetVertices (ELEMENT_TYPE et);
|
static const Point3d * GetVertices (ELEMENT_TYPE et);
|
||||||
inline static const ELEMENT_EDGE * GetEdges (ELEMENT_TYPE et);
|
inline static const ELEMENT_EDGE * GetEdges (ELEMENT_TYPE et);
|
||||||
@ -97,6 +97,14 @@ public:
|
|||||||
|
|
||||||
int GetSurfaceElementEdges (int elnr, int * edges, int * orient) const;
|
int GetSurfaceElementEdges (int elnr, int * edges, int * orient) const;
|
||||||
|
|
||||||
|
const int * GetElementEdgesPtr (int elnr) const { return &edges[elnr][0]; }
|
||||||
|
const int * GetSurfaceElementEdgesPtr (int selnr) const { return &surfedges[selnr][0]; }
|
||||||
|
const int * GetSegmentElementEdgesPtr (int selnr) const { return &segedges[selnr]; }
|
||||||
|
|
||||||
|
const int * GetElementFacesPtr (int elnr) const { return &faces[elnr][0]; }
|
||||||
|
const int * GetSurfaceElementFacesPtr (int selnr) const { return &surffaces[selnr]; }
|
||||||
|
|
||||||
|
|
||||||
void GetSurface2VolumeElement (int selnr, int & elnr1, int & elnr2) const
|
void GetSurface2VolumeElement (int selnr, int & elnr1, int & elnr2) const
|
||||||
{
|
{
|
||||||
elnr1 = surf2volelement.Get(selnr)[0];
|
elnr1 = surf2volelement.Get(selnr)[0];
|
||||||
@ -126,6 +134,163 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int MeshTopology :: GetNVertices (ELEMENT_TYPE et)
|
||||||
|
{
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case SEGMENT:
|
||||||
|
case SEGMENT3:
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
case TRIG:
|
||||||
|
case TRIG6:
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
case QUAD:
|
||||||
|
case QUAD6:
|
||||||
|
case QUAD8:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case TET:
|
||||||
|
case TET10:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case PYRAMID:
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
case PRISM:
|
||||||
|
case PRISM12:
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
return 8;
|
||||||
|
|
||||||
|
default:
|
||||||
|
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int MeshTopology :: GetNPoints (ELEMENT_TYPE et)
|
||||||
|
{
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case SEGMENT:
|
||||||
|
return 2;
|
||||||
|
case SEGMENT3:
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
case TRIG:
|
||||||
|
return 3;
|
||||||
|
case TRIG6:
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
case QUAD:
|
||||||
|
case QUAD6:
|
||||||
|
case QUAD8:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case TET:
|
||||||
|
return 4;
|
||||||
|
case TET10:
|
||||||
|
return 10;
|
||||||
|
|
||||||
|
case PYRAMID:
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
case PRISM:
|
||||||
|
case PRISM12:
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
return 8;
|
||||||
|
|
||||||
|
default:
|
||||||
|
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int MeshTopology :: GetNEdges (ELEMENT_TYPE et)
|
||||||
|
{
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case SEGMENT:
|
||||||
|
case SEGMENT3:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case TRIG:
|
||||||
|
case TRIG6:
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
case QUAD:
|
||||||
|
case QUAD6:
|
||||||
|
case QUAD8:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case TET:
|
||||||
|
case TET10:
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
case PYRAMID:
|
||||||
|
return 8;
|
||||||
|
|
||||||
|
case PRISM:
|
||||||
|
case PRISM12:
|
||||||
|
return 9;
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
return 12;
|
||||||
|
|
||||||
|
default:
|
||||||
|
cerr << "Ng_ME_GetNEdges, illegal element type " << et << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int MeshTopology :: GetNFaces (ELEMENT_TYPE et)
|
||||||
|
{
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case SEGMENT:
|
||||||
|
case SEGMENT3:
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case TRIG:
|
||||||
|
case TRIG6:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case QUAD:
|
||||||
|
case QUAD6:
|
||||||
|
case QUAD8:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case TET:
|
||||||
|
case TET10:
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
case PYRAMID:
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
case PRISM:
|
||||||
|
case PRISM12:
|
||||||
|
return 5;
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
default:
|
||||||
|
cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,8 +46,6 @@ namespace netgen {
|
|||||||
|
|
||||||
DemoScanner :: DemoScanner (ifstream & ascanin)
|
DemoScanner :: DemoScanner (ifstream & ascanin)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
scanin = &ascanin;
|
scanin = &ascanin;
|
||||||
token = DTOK_END;
|
token = DTOK_END;
|
||||||
num_value = 0;
|
num_value = 0;
|
||||||
|
@ -95,9 +95,19 @@ template <> DLL_HEADER Ng_Element Ng_GetElement<1> (int nr)
|
|||||||
|
|
||||||
Ng_Element ret;
|
Ng_Element ret;
|
||||||
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
||||||
ret.npoints = el.GetNP();
|
|
||||||
ret.points = (int*)&(el[0]);
|
ret.points.num = el.GetNP();
|
||||||
|
ret.points.ptr = (int*)&(el[0]);
|
||||||
|
|
||||||
|
ret.vertices.num = 2;
|
||||||
|
ret.vertices.ptr = (int*)&(el[0]);
|
||||||
|
|
||||||
|
ret.edges.num = 1;
|
||||||
|
ret.edges.ptr = mesh->GetTopology().GetSegmentElementEdgesPtr (nr);
|
||||||
|
|
||||||
|
ret.faces.num = 0;
|
||||||
|
ret.faces.ptr = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,8 +117,18 @@ template <> DLL_HEADER Ng_Element Ng_GetElement<2> (int nr)
|
|||||||
|
|
||||||
Ng_Element ret;
|
Ng_Element ret;
|
||||||
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
||||||
ret.npoints = el.GetNP();
|
ret.points.num = el.GetNP();
|
||||||
ret.points = (int*)&el[0];
|
ret.points.ptr = (int*)&el[0];
|
||||||
|
|
||||||
|
ret.vertices.num = el.GetNV();
|
||||||
|
ret.vertices.ptr = (int*)&(el[0]);
|
||||||
|
|
||||||
|
ret.edges.num = MeshTopology::GetNEdges (el.GetType());
|
||||||
|
ret.edges.ptr = mesh->GetTopology().GetSurfaceElementEdgesPtr (nr);
|
||||||
|
|
||||||
|
ret.faces.num = MeshTopology::GetNFaces (el.GetType());
|
||||||
|
ret.faces.ptr = mesh->GetTopology().GetSurfaceElementFacesPtr (nr);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,8 +138,18 @@ template <> DLL_HEADER Ng_Element Ng_GetElement<3> (int nr)
|
|||||||
|
|
||||||
Ng_Element ret;
|
Ng_Element ret;
|
||||||
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
ret.type = NG_ELEMENT_TYPE(el.GetType());
|
||||||
ret.npoints = el.GetNP();
|
ret.points.num = el.GetNP();
|
||||||
ret.points = (int*)&el[0];
|
ret.points.ptr = (int*)&el[0];
|
||||||
|
|
||||||
|
ret.vertices.num = el.GetNV();
|
||||||
|
ret.vertices.ptr = (int*)&(el[0]);
|
||||||
|
|
||||||
|
ret.edges.num = MeshTopology::GetNEdges (el.GetType());
|
||||||
|
ret.edges.ptr = mesh->GetTopology().GetElementEdgesPtr (nr);
|
||||||
|
|
||||||
|
ret.faces.num = MeshTopology::GetNFaces (el.GetType());
|
||||||
|
ret.faces.ptr = mesh->GetTopology().GetElementFacesPtr (nr);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user