32 #ifndef CORE_BASIS_QUADBICUBICHMT_H
33 #define CORE_BASIS_QUADBICUBICHMT_H 1
47 static int dofs() {
return 12; }
69 template<
class VECTOR>
70 inline void get_weights(
const VECTOR& coords,
double *w)
const
73 template<
class VECTOR>
78 template <
class ElemData,
class VECTOR>
83 return (T)(w[0] * cd.node0() +
84 w[1] * this->
derivs_[cd.node0_index()][0] +
85 w[2] * this->
derivs_[cd.node0_index()][1] +
87 w[4] * this->
derivs_[cd.node1_index()][0] +
88 w[5] * this->
derivs_[cd.node1_index()][1] +
90 w[7] * this->
derivs_[cd.node2_index()][0] +
91 w[8] * this->
derivs_[cd.node2_index()][1] +
93 w[10] * this->
derivs_[cd.node3_index()][0] +
94 w[11] * this->
derivs_[cd.node3_index()][1]);
98 template <
class ElemData,
class VECTOR1,
class VECTOR2>
99 void derivate(
const VECTOR1 &coords,
const ElemData &cd,
100 VECTOR2 &derivs)
const
106 derivs[0] =
static_cast<typename VECTOR2::value_type
>(
108 w[1]*this->
derivs_[cd.node0_index()][0] +
109 w[2]*this->
derivs_[cd.node0_index()][1] +
111 w[4]*this->
derivs_[cd.node1_index()][0] +
112 w[5]*this->
derivs_[cd.node1_index()][1] +
114 w[7]*this->
derivs_[cd.node2_index()][0] +
115 w[8]*this->
derivs_[cd.node2_index()][1] +
117 w[10]*this->
derivs_[cd.node3_index()][0] +
118 w[11]*this->
derivs_[cd.node3_index()][1]);
120 derivs[1] =
static_cast<typename VECTOR2::value_type
>(
122 w[13]*this->
derivs_[cd.node0_index()][0] +
123 w[14]*this->
derivs_[cd.node0_index()][1] +
125 w[16]*this->
derivs_[cd.node1_index()][0] +
126 w[17]*this->
derivs_[cd.node1_index()][1] +
128 w[19]*this->
derivs_[cd.node2_index()][0] +
129 w[20]*this->
derivs_[cd.node2_index()][1] +
131 w[22]*this->
derivs_[cd.node3_index()][0] +
132 w[23]*this->
derivs_[cd.node3_index()][1]);
136 template <
class ElemData,
class VECTOR>
138 const ElemData &cd)
const
141 return CL.
get_coords(
this, coords, value, cd);
145 template <
class ElemData>
148 return get_arc2d_length<CrvGaussian2<double> >(
this, edge, cd);
152 template <
class ElemData>
153 double get_area(
const unsigned face,
const ElemData &cd)
const
155 return get_area2<QuadGaussian3<double> >(
this, face, cd);
159 template <
class ElemData>
165 static const std::string
type_name(
int n = -1);
178 ASSERT((n >= -1) && n <= 1);
186 static const std::string nm(
"QuadBicubicHmt");
208 std::string(__FILE__),
222 Pio(stream, this->derivs_);
virtual void io(Piostream &str)
Definition: QuadBicubicHmt.h:218
Definition: Persistent.h:89
static int dofs()
return degrees of freedom
Definition: QuadBicubicHmt.h:47
void derivate(const VECTOR1 &coords, const ElemData &cd, VECTOR2 &derivs) const
get first derivative at parametric coordinate
Definition: QuadBicubicHmt.h:99
Class for describing unit geometry of QuadBicubicHmt.
Definition: QuadBicubicHmt.h:42
Definition: TypeDescription.h:45
std::vector< const TypeDescription * > td_vec
Definition: TypeDescription.h:56
void get_derivate_weights(const VECTOR &coords, double *w) const
Definition: QuadBicubicHmt.h:74
void get_weights(const VECTOR &coords, double *w) const
Definition: QuadBicubicHmt.h:70
#define ASSERT(condition)
Definition: Assert.h:110
Definition: QuadElementWeights.h:36
virtual int begin_class(const std::string &name, int current_version)
Definition: Persistent.cc:143
static int polynomial_order()
Definition: QuadBicubicHmt.h:67
const int QUADBICUBICHMT_VERSION
Definition: QuadBicubicHmt.h:215
const string find_type_name(float *)
Definition: TypeName.cc:63
Definition: QuadSamplingSchemes.h:42
const char * name[]
Definition: BoostGraphExampleTests.cc:87
T interpolate(const VECTOR &coords, const ElemData &cd) const
get value at parametric coordinate
Definition: QuadBicubicHmt.h:79
virtual ~QuadBicubicHmt()
Definition: QuadBicubicHmt.h:65
QuadBicubicHmt()
Definition: QuadBicubicHmt.h:64
QuadBicubicHmtUnitElement()
Definition: QuadBicubicHmt.h:44
Definition: QuadBilinearLgn.h:175
void get_cubic_derivate_weights(const VECTOR &coords, double *w) const
get derivative weight factors at parametric coordinate
Definition: QuadElementWeights.h:125
Class for describing unit geometry of QuadBilinearLgn.
Definition: QuadBilinearLgn.h:46
bool get_coords(const ElemBasis *pEB, VECTOR &coords, const T &value, const ElemData &cd) const
find value in interpolation for given value
Definition: QuadBilinearLgn.h:184
static const std::string make_template_id(const std::string &templateName, const std::string &templateParam)
Definition: TypeName.h:62
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
static const std::string type_name(int n=-1)
Definition: QuadBicubicHmt.h:176
double get_arc_length(const unsigned edge, const ElemData &cd) const
get arc length for edge
Definition: QuadBicubicHmt.h:146
std::vector< std::vector< T > > derivs_
Definition: Basis.h:160
virtual void end_class()
Definition: Persistent.cc:178
Definition: QuadBicubicHmt.h:54
bool get_coords(VECTOR &coords, const T &value, const ElemData &cd) const
get parametric coordinate for value within the element
Definition: QuadBicubicHmt.h:137
Class for creating geometrical approximations of Quad meshes.
Definition: QuadBilinearLgn.h:108
double get_area(const unsigned face, const ElemData &cd) const
get area
Definition: QuadBicubicHmt.h:153
T value_type
Definition: QuadBicubicHmt.h:62
int n
Definition: eab.py:9
virtual ~QuadBicubicHmtUnitElement()
Definition: QuadBicubicHmt.h:45
double get_volume(const ElemData &) const
get volume
Definition: QuadBicubicHmt.h:160
void get_cubic_weights(const VECTOR &coords, double *w) const
Definition: QuadElementWeights.h:106
Class with weights and coordinates for 3rd order Gaussian integration.
Definition: QuadBilinearLgn.h:287
Definition: TypeDescription.h:49
const TypeDescription * get_type_description(Core::Basis::ConstantBasis< T > *)
Definition: Constant.h:209