32 #ifndef CORE_BASIS_TETQUADRATICLGN_H
33 #define CORE_BASIS_TETQUADRATICLGN_H 1
45 static double unit_vertices[10][3];
78 template<
class VECTOR>
79 inline void get_weights(
const VECTOR& coords,
double *w)
const
82 template<
class VECTOR>
87 template <
class ElemData,
class VECTOR>
93 return (T)(w[0] * cd.node0() +
97 w[4] * this->
nodes_[cd.edge0_index()] +
98 w[5] * this->
nodes_[cd.edge1_index()] +
99 w[6] * this->
nodes_[cd.edge2_index()] +
100 w[7] * this->
nodes_[cd.edge3_index()] +
101 w[8] * this->
nodes_[cd.edge4_index()] +
102 w[9] * this->
nodes_[cd.edge5_index()]);
106 template <
class ElemData,
class VECTOR1,
class VECTOR2>
107 void derivate(
const VECTOR1 &coords,
const ElemData &cd,
108 VECTOR2 &derivs)
const
115 derivs[0]=
static_cast<typename VECTOR2::value_type
>(
118 w[4]*this->
nodes_[cd.edge0_index()] +
119 w[5]*this->
nodes_[cd.edge1_index()] +
120 w[6]*this->
nodes_[cd.edge2_index()] +
121 w[7]*this->
nodes_[cd.edge3_index()] +
122 w[8]*this->
nodes_[cd.edge4_index()]);
124 derivs[1]=
static_cast<typename VECTOR2::value_type
>(
127 w[14]*this->
nodes_[cd.edge0_index()] +
128 w[15]*this->
nodes_[cd.edge1_index()] +
129 w[16]*this->
nodes_[cd.edge2_index()] +
130 w[17]*this->
nodes_[cd.edge3_index()] +
131 w[19]*this->
nodes_[cd.edge5_index()]);
133 derivs[2]=
static_cast<typename VECTOR2::value_type
>(
136 w[24]*this->
nodes_[cd.edge0_index()] +
137 w[26]*this->
nodes_[cd.edge2_index()] +
138 w[27]*this->
nodes_[cd.edge3_index()] +
139 w[28]*this->
nodes_[cd.edge4_index()] +
140 w[29]*this->
nodes_[cd.edge5_index()]);
144 template <
class ElemData,
class VECTOR>
146 const ElemData &cd)
const
149 return CL.
get_coords(
this, coords, value, cd);
153 template <
class ElemData>
156 return get_arc3d_length<CrvGaussian2<double> >(
this, edge, cd);
160 template <
class ElemData>
161 double get_area(
const unsigned face,
const ElemData &cd)
const
163 return get_area3<TriGaussian3<double> >(
this, face, cd);
167 template <
class ElemData>
174 static const std::string
type_name(
int n = -1);
185 ASSERT((n >= -1) && n <= 1);
193 static const std::string nm(
"TetQuadraticLgn");
213 std::string(__FILE__),
227 Pio(stream, this->nodes_);
Class with weights and coordinates for 3rd order Gaussian integration.
Definition: TetLinearLgn.h:341
void get_weights(const VECTOR &coords, double *w) const
Definition: TetQuadraticLgn.h:79
T value_type
Definition: TetQuadraticLgn.h:71
Class for describing unit geometry of TetLinearLgn.
Definition: TetLinearLgn.h:47
Definition: Persistent.h:89
void get_quadratic_weights(const VECTOR &coords, double *w) const
get weight factors at parametric coordinate
Definition: TetElementWeights.h:69
Definition: TypeDescription.h:45
#define SCISHARE
Definition: share.h:39
std::vector< const TypeDescription * > td_vec
Definition: TypeDescription.h:56
Definition: TetElementWeights.h:36
std::vector< T > nodes_
Definition: Basis.h:159
#define ASSERT(condition)
Definition: Assert.h:110
Definition: TetLinearLgn.h:205
virtual int begin_class(const std::string &name, int current_version)
Definition: Persistent.cc:143
const string find_type_name(float *)
Definition: TypeName.cc:63
void derivate(const VECTOR1 &coords, const ElemData &cd, VECTOR2 &derivs) const
get first derivative at parametric coordinate
Definition: TetQuadraticLgn.h:107
virtual void io(Piostream &str)
Definition: TetQuadraticLgn.h:223
const char * name[]
Definition: BoostGraphExampleTests.cc:87
Class for describing unit geometry of TetQuadraticLgn.
Definition: TetQuadraticLgn.h:43
double get_arc_length(const unsigned edge, const ElemData &cd) const
get arc length for edge
Definition: TetQuadraticLgn.h:154
void get_derivate_weights(const VECTOR &coords, double *w) const
Definition: TetQuadraticLgn.h:83
Class for creating geometrical approximations of Tet meshes.
Definition: TetLinearLgn.h:112
Class for describing interfaces to basis elements with additional nodes.
Definition: Basis.h:169
static const std::string make_template_id(const std::string &templateName, const std::string &templateParam)
Definition: TypeName.h:62
static int dofs()
Definition: TetQuadraticLgn.h:55
T interpolate(const VECTOR &coords, const ElemData &cd) const
get value at parametric coordinate
Definition: TetQuadraticLgn.h:88
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
Definition: TetSamplingSchemes.h:42
double get_volume(const ElemData &cd) const
get volume
Definition: TetQuadraticLgn.h:168
static int number_of_vertices()
return number of vertices
Definition: TetQuadraticLgn.h:51
virtual void end_class()
Definition: Persistent.cc:178
virtual ~TetQuadraticLgn()
Definition: TetQuadraticLgn.h:74
TetQuadraticLgn()
Definition: TetQuadraticLgn.h:73
bool get_coords(VECTOR &coords, const T &value, const ElemData &cd) const
get parametric coordinate for value within the element
Definition: TetQuadraticLgn.h:145
static const std::string type_name(int n=-1)
Definition: TetQuadraticLgn.h:183
Definition: TetQuadraticLgn.h:63
int n
Definition: eab.py:9
virtual ~TetQuadraticLgnUnitElement()
Definition: TetQuadraticLgn.h:48
static int polynomial_order()
Definition: TetQuadraticLgn.h:76
double get_area(const unsigned face, const ElemData &cd) const
get area
Definition: TetQuadraticLgn.h:161
const int TETQUADRATICLGN_VERSION
Definition: TetQuadraticLgn.h:220
TetQuadraticLgnUnitElement()
Definition: TetQuadraticLgn.h:47
double get_volume3(const ElemBasis *pEB, const ElemData &cd)
Definition: Locate.h:179
void get_quadratic_derivate_weights(const VECTOR &coords, double *w) const
get weight factors of derivative at parametric coordinate
Definition: TetElementWeights.h:86
bool get_coords(const ElemBasis *pEB, VECTOR &coords, const T &value, const ElemData &cd) const
find coodinate in interpolation for given value
Definition: TetLinearLgn.h:214
Definition: TypeDescription.h:49
const TypeDescription * get_type_description(Core::Basis::ConstantBasis< T > *)
Definition: Constant.h:209