netgen/libsrc/include/nginterface_v2.hpp

176 lines
3.2 KiB
C++
Raw Normal View History

2009-07-20 14:36:36 +06:00
#ifndef NGINTERFACE_V2
#define NGINTERFACE_V2
/**************************************************************************/
/* File: nginterface_v2.hpp */
/* Author: Joachim Schoeberl */
/* Date: May 09 */
/**************************************************************************/
2009-04-03 20:39:52 +06:00
2009-07-20 14:36:36 +06:00
/*
C++ interface to Netgen
*/
namespace netgen
{
class Ng_Element
2009-07-13 19:03:01 +06:00
{
2009-07-20 14:36:36 +06:00
class Ng_Points
{
public:
int num;
const int * ptr;
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
int Size() const { return num; }
int operator[] (int i) const { return ptr[i]-1; }
};
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
class Ng_Vertices
{
public:
int num;
const int * ptr;
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
int Size() const { return num; }
int operator[] (int i) const { return ptr[i]-1; }
};
2009-04-03 20:39:52 +06:00
2009-07-20 14:36:36 +06:00
class Ng_Edges
{
public:
int num;
const int * ptr;
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
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:
NG_ELEMENT_TYPE type;
NG_ELEMENT_TYPE GetType() const { return type; }
Ng_Points points; // all points
Ng_Vertices vertices;
Ng_Edges edges;
Ng_Faces faces;
2009-07-13 19:03:01 +06:00
};
2009-04-03 20:39:52 +06:00
2009-07-20 14:36:36 +06:00
template <int DIM>
DLL_HEADER int Ng_GetNElements ();
template <int DIM>
DLL_HEADER Ng_Element Ng_GetElement (int nr);
2009-09-07 17:50:13 +06:00
class Ng_Point
{
public:
double * pt;
double operator[] (int i)
{ return pt[i]; }
};
2009-07-20 14:36:36 +06:00
2009-09-07 17:50:13 +06:00
DLL_HEADER Ng_Point Ng_GetPoint (int nr);
2009-07-20 14:36:36 +06:00
template <int DIM> class Ng_Node;
template <>
class Ng_Node<1>
2009-04-03 20:39:52 +06:00
{
2009-07-20 14:36:36 +06:00
class Ng_Vertices
{
public:
const int * ptr;
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
int Size() const { return 2; }
int operator[] (int i) const { return ptr[i]-1; }
};
2009-07-13 19:03:01 +06:00
2009-07-20 14:36:36 +06:00
public:
Ng_Vertices vertices;
};
2010-05-17 15:00:30 +06:00
template <>
class Ng_Node<2>
{
class Ng_Vertices
{
public:
int nv;
const int * ptr;
int Size() const { return nv; }
int operator[] (int i) const { return ptr[i]-1; }
};
class Ng_Edges
{
public:
int ned;
const int * ptr;
int Size() const { return ned; }
int operator[] (int i) const { return ptr[i]-1; }
};
public:
Ng_Vertices vertices;
Ng_Edges edges;
};
2009-07-20 14:36:36 +06:00
template <int DIM>
DLL_HEADER Ng_Node<DIM> Ng_GetNode (int nr);
2009-04-03 20:39:52 +06:00
2009-07-20 14:36:36 +06:00
template <int DIM>
DLL_HEADER int Ng_GetNNodes ();
2009-04-03 20:39:52 +06:00
2009-07-19 23:33:25 +06:00
2009-07-20 14:36:36 +06:00
/// Curved Elements:
/// xi..... DIM_EL local coordinates
/// sxi ... step xi
/// x ..... DIM_SPACE global coordinates
/// dxdxi...DIM_SPACE x DIM_EL Jacobian matrix (row major storage)
template <int DIM_EL, int DIM_SPACE>
DLL_HEADER void Ng_MultiElementTransformation (int elnr, int npts,
2010-04-22 18:28:55 +06:00
const double * xi, size_t sxi,
double * x, size_t sx,
double * dxdxi, size_t sdxdxi);
2009-07-20 14:36:36 +06:00
template <int DIM>
DLL_HEADER int Ng_GetElementIndex (int nr);
}
#endif