32 #ifndef CORE_BASIS_HEXTRIQUADRATICLGN_H
33 #define CORE_BASIS_HEXTRIQUADRATICLGN_H 1
46 static double unit_vertices[20][3];
77 template<
class VECTOR>
78 inline void get_weights(
const VECTOR& coords,
double *w)
const
81 template<
class VECTOR>
86 template <
class ElemData,
class VECTOR>
101 w[8] * this->
nodes_[cd.edge0_index()] +
102 w[9] * this->
nodes_[cd.edge1_index()] +
103 w[10] * this->
nodes_[cd.edge2_index()] +
104 w[11] * this->
nodes_[cd.edge3_index()] +
105 w[12] * this->
nodes_[cd.edge4_index()] +
106 w[13] * this->
nodes_[cd.edge5_index()] +
107 w[14] * this->
nodes_[cd.edge6_index()] +
108 w[15] * this->
nodes_[cd.edge7_index()] +
109 w[16] * this->
nodes_[cd.edge8_index()] +
110 w[17] * this->
nodes_[cd.edge9_index()] +
111 w[18] * this->
nodes_[cd.edge10_index()] +
112 w[19] * this->
nodes_[cd.edge11_index()]);
116 template <
class ElemData,
class VECTOR1,
class VECTOR2>
117 void derivate(
const VECTOR1 &coords,
const ElemData &cd,
118 VECTOR2 &derivs)
const
125 derivs[0]=
static_cast<typename VECTOR2::value_type
>(
134 w[8] * this->
nodes_[cd.edge0_index()] +
135 w[9] * this->
nodes_[cd.edge1_index()] +
136 w[10] * this->
nodes_[cd.edge2_index()] +
137 w[11] * this->
nodes_[cd.edge3_index()] +
138 w[12] * this->
nodes_[cd.edge4_index()] +
139 w[13] * this->
nodes_[cd.edge5_index()] +
140 w[14] * this->
nodes_[cd.edge6_index()] +
141 w[15] * this->
nodes_[cd.edge7_index()] +
142 w[16] * this->
nodes_[cd.edge8_index()] +
143 w[17] * this->
nodes_[cd.edge9_index()] +
144 w[18] * this->
nodes_[cd.edge10_index()] +
145 w[19] * this->
nodes_[cd.edge11_index()]);
147 derivs[1]=
static_cast<typename VECTOR2::value_type
>(
156 w[28] * this->
nodes_[cd.edge0_index()] +
157 w[29] * this->
nodes_[cd.edge1_index()] +
158 w[30] * this->
nodes_[cd.edge2_index()] +
159 w[31] * this->
nodes_[cd.edge3_index()] +
160 w[32] * this->
nodes_[cd.edge4_index()] +
161 w[33] * this->
nodes_[cd.edge5_index()] +
162 w[34] * this->
nodes_[cd.edge6_index()] +
163 w[35] * this->
nodes_[cd.edge7_index()] +
164 w[36] * this->
nodes_[cd.edge8_index()] +
165 w[37] * this->
nodes_[cd.edge9_index()] +
166 w[38] * this->
nodes_[cd.edge10_index()] +
167 w[39] * this->
nodes_[cd.edge11_index()]);
169 derivs[2]=
static_cast<typename VECTOR2::value_type
>(
178 w[48] * this->
nodes_[cd.edge0_index()] +
179 w[49] * this->
nodes_[cd.edge1_index()] +
180 w[50] * this->
nodes_[cd.edge2_index()] +
181 w[51] * this->
nodes_[cd.edge3_index()] +
182 w[52] * this->
nodes_[cd.edge4_index()] +
183 w[53] * this->
nodes_[cd.edge5_index()] +
184 w[54] * this->
nodes_[cd.edge6_index()] +
185 w[55] * this->
nodes_[cd.edge7_index()] +
186 w[56] * this->
nodes_[cd.edge8_index()] +
187 w[57] * this->
nodes_[cd.edge9_index()] +
188 w[58] * this->
nodes_[cd.edge10_index()] +
189 w[59] * this->
nodes_[cd.edge11_index()]);
194 template <
class ElemData,
class VECTOR>
196 const ElemData &cd)
const
199 return CL.
get_coords(
this, coords, value, cd);
203 template <
class ElemData>
206 return get_arc3d_length<CrvGaussian2<double> >(
this, edge, cd);
210 template <
class ElemData>
211 double get_area(
const unsigned face,
const ElemData &cd)
const
213 return get_area3<QuadGaussian3<double> >(
this, face, cd);
217 template <
class ElemData>
223 static const std::string
type_name(
int n = -1);
233 ASSERT((n >= -1) && n <= 1);
241 static const std::string nm(
"HexTriquadraticLgn");
261 std::string(__FILE__),
275 Pio(stream, this->nodes_);
double get_arc_length(const unsigned edge, const ElemData &cd) const
get arc length for edge
Definition: HexTriquadraticLgn.h:204
T value_type
Definition: HexTriquadraticLgn.h:69
T interpolate(const VECTOR &coords, const ElemData &cd) const
get value at parametric coordinate
Definition: HexTriquadraticLgn.h:87
void get_derivate_weights(const VECTOR &coords, double *w) const
Definition: HexTriquadraticLgn.h:82
Definition: HexElementsWeights.h:36
Definition: Persistent.h:89
static const std::string type_name(int n=-1)
Definition: HexTriquadraticLgn.h:231
static int number_of_vertices()
return number of vertices
Definition: HexTriquadraticLgn.h:51
void get_weights(const VECTOR &coords, double *w) const
Definition: HexTriquadraticLgn.h:78
double get_area(const unsigned face, const ElemData &cd) const
get area
Definition: HexTriquadraticLgn.h:211
HexTriquadraticLgnUnitElement()
Definition: HexTriquadraticLgn.h:48
Definition: TypeDescription.h:45
#define SCISHARE
Definition: share.h:39
std::vector< const TypeDescription * > td_vec
Definition: TypeDescription.h:56
std::vector< T > nodes_
Definition: Basis.h:159
Class for creating geometrical approximations of Hex meshes.
Definition: HexTrilinearLgn.h:112
#define ASSERT(condition)
Definition: Assert.h:110
virtual int begin_class(const std::string &name, int current_version)
Definition: Persistent.cc:143
void get_quadratic_weights(const VECTOR &coords, double *w) const
get weight factors at parametric coordinate
Definition: HexElementsWeights.h:87
const string find_type_name(float *)
Definition: TypeName.cc:63
const int HEXTRIQUADRATICLGN_VERSION
Definition: HexTriquadraticLgn.h:268
virtual ~HexTriquadraticLgn()
Definition: HexTriquadraticLgn.h:72
Class with weights and coordinates for 3rd order Gaussian integration.
Definition: HexTrilinearLgn.h:331
const char * name[]
Definition: BoostGraphExampleTests.cc:87
virtual void io(Piostream &str)
Definition: HexTriquadraticLgn.h:271
Class for describing interfaces to basis elements with additional nodes.
Definition: Basis.h:169
static int dofs()
return degrees of freedom
Definition: HexTriquadraticLgn.h:53
static int polynomial_order()
Definition: HexTriquadraticLgn.h:74
static const std::string make_template_id(const std::string &templateName, const std::string &templateParam)
Definition: TypeName.h:62
double get_volume(const ElemData &cd) const
get volume
Definition: HexTriquadraticLgn.h:218
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
virtual ~HexTriquadraticLgnUnitElement()
Definition: HexTriquadraticLgn.h:49
virtual void end_class()
Definition: Persistent.cc:178
Class for describing unit geometry of HexTriquadraticLgn.
Definition: HexTriquadraticLgn.h:44
HexTriquadraticLgn()
Definition: HexTriquadraticLgn.h:71
Definition: HexTriquadraticLgn.h:61
void derivate(const VECTOR1 &coords, const ElemData &cd, VECTOR2 &derivs) const
get first derivative at parametric coordinate
Definition: HexTriquadraticLgn.h:117
Definition: HexSamplingSchemes.h:43
Definition: HexTrilinearLgn.h:197
int n
Definition: eab.py:9
bool get_coords(const ElemBasis *pEB, VECTOR &coords, const T &value, const ElemData &cd) const
find value in interpolation for given value
Definition: HexTrilinearLgn.h:206
void get_quadratic_derivate_weights(const VECTOR &coords, double *w) const
get weight factors of derivative at parametric coordinate
Definition: HexElementsWeights.h:114
double get_volume3(const ElemBasis *pEB, const ElemData &cd)
Definition: Locate.h:179
bool get_coords(VECTOR &coords, const T &value, const ElemData &cd) const
get parametric coordinate for value within the element
Definition: HexTriquadraticLgn.h:195
Class for describing unit geometry of HexTrilinearLgn.
Definition: HexTrilinearLgn.h:49
Definition: TypeDescription.h:49
const TypeDescription * get_type_description(Core::Basis::ConstantBasis< T > *)
Definition: Constant.h:209