32 #ifndef CORE_BASIS_CRVLINEARLGN_H
33 #define CORE_BASIS_CRVLINEARLGN_H 1
91 static double length(
int ) {
return 1.; }
92 static double area(
int ) {
return 0.; }
93 static double volume() {
return 0.; }
107 template<
class VECTOR>
109 const unsigned div_per_unit,
110 VECTOR& coords)
const
112 typedef typename VECTOR::value_type VECTOR2;
113 coords.resize(div_per_unit + 1);
114 for(
unsigned i = 0; i <= div_per_unit; i++)
117 coords[i][0] =
static_cast<typename VECTOR2::value_type
>(
118 (double)i / (
double)div_per_unit);
125 template<
class VECTOR>
128 VECTOR& coords)
const
138 template <
class ElemBasis>
141 typedef typename ElemBasis::value_type
T;
147 template <
class ElemData,
class VECTOR>
149 const T& value,
const ElemData &cd)
const
157 template<
class VECTOR>
170 template <
class ElemData,
class VECTOR>
172 const ElemData &cd, VECTOR &guess)
const
174 double dist = DBL_MAX;
181 for (
int x = 1; x < end; x++) {
182 coord[0] = x / (double) end;
186 pElem->derivate(coord, cd, derivs);
233 T CrvGaussian2<T>::GaussianWeights[2] = {.5, .5};
250 {{0.11270166537950}, {0.5}, {0.88729833462050}};
253 T CrvGaussian3<T>::GaussianWeights[3] =
254 {.2777777777, .4444444444, .2777777777};
278 template<
class VECTOR>
282 template<
class VECTOR>
288 template <
class ElemData,
class VECTOR>
293 return (T)(w[0] * cd.node0() + w[1] * cd.node1());
297 template <
class ElemData,
class VECTOR1,
class VECTOR2>
299 VECTOR2 &derivs)
const
302 derivs[0] =
static_cast<typename VECTOR2::value_type
>(cd.node1()-cd.node0());
306 template <
class ElemData,
class VECTOR>
308 const ElemData &cd)
const
311 return CL.
get_coords(
this, coords, value, cd);
315 template <
class ElemData>
318 return get_arc1d_length<CrvGaussian1<double> >(
this, edge, cd);
322 template <
class ElemData>
323 double get_area(
const unsigned ,
const ElemData & )
const
329 template <
class ElemData>
335 template <
class VECTOR>
338 std::vector<VECTOR> &coords)
const
341 VECTOR &tmp = coords[0];
344 VECTOR &tmp1 = coords[1];
349 static const std::string
type_name(
int n = -1);
361 ASSERT((n >= -1) && n <= 1);
369 static const std::string nm(
"CrvLinearLgn");
391 std::string(__FILE__),
static int number_of_edges()
return number of edges
Definition: CrvLinearLgn.h:80
CrvLocate()
Definition: CrvLinearLgn.h:143
ElemBasis::value_type T
Definition: CrvLinearLgn.h:141
double get_arc_length(const unsigned edge, const ElemData &cd) const
get arc length for edge
Definition: CrvLinearLgn.h:316
void get_linear_derivate_weights(const VECTOR &, double *w) const
get derivative weight factors at parametric coordinate
Definition: CrvElementWeights.h:51
Definition: CrvSamplingSchemes.h:43
double check_zero(const VECTOR &derivs, double epsilon=1e-7)
Definition: Locate.h:709
Definition: CrvElementWeights.h:38
specializations of template<class T> find_type_name() function for build-in and simple types not deri...
static T GaussianWeights[3]
Definition: CrvLinearLgn.h:242
static int polynomial_order()
Definition: CrvLinearLgn.h:276
Definition: Persistent.h:89
static int number_of_mesh_vertices()
return number of vertices in mesh
Definition: CrvLinearLgn.h:72
bool get_coords(VECTOR &coords, const T &value, const ElemData &cd) const
get parametric coordinate for value within the element
Definition: CrvLinearLgn.h:307
CrvLinearLgn()
Definition: CrvLinearLgn.h:272
static SCISHARE double unit_vertices[2][1]
Parametric coordinates of vertices.
Definition: CrvLinearLgn.h:52
void approx_face(const unsigned, const unsigned, VECTOR &coords) const
Definition: CrvLinearLgn.h:126
static int number_of_vertices()
return number of vertices
Definition: CrvLinearLgn.h:68
bool check_coords(const VECTOR &x) const
Definition: CrvLinearLgn.h:158
static T GaussianWeights[2]
Definition: CrvLinearLgn.h:223
Definition: TypeDescription.h:45
#define SCISHARE
Definition: share.h:39
std::vector< const TypeDescription * > td_vec
Definition: TypeDescription.h:56
#define ASSERT(condition)
Definition: Assert.h:110
Class for describing interfaces to basis elements.
Definition: Basis.h:48
Class for describing unit geometry of CrvLinearLgn.
Definition: CrvLinearLgn.h:50
static int faces_of_cell()
return number of faces per cell
Definition: CrvLinearLgn.h:88
virtual int begin_class(const std::string &name, int current_version)
Definition: Persistent.cc:143
T interpolate(const VECTOR &coords, const ElemData &cd) const
get value at parametric coordinate
Definition: CrvLinearLgn.h:289
const string find_type_name(float *)
Definition: TypeName.cc:63
Class with weights and coordinates for 1st order Gaussian integration.
Definition: CrvLinearLgn.h:199
static SCISHARE int unit_edges[1][2]
References to vertices of unit edge.
Definition: CrvLinearLgn.h:53
static T GaussianPoints[1][1]
Definition: CrvLinearLgn.h:203
void get_derivate_weights(const VECTOR &coords, double *w) const
Definition: CrvLinearLgn.h:283
static int domain_dimension()
return dimension of domain
Definition: CrvLinearLgn.h:60
static const std::string type_name(int n=-1)
Definition: CrvLinearLgn.h:359
Definition: CrvLinearLgn.h:139
Class for creating geometrical approximations of Crv meshes.
Definition: CrvLinearLgn.h:99
const char * name[]
Definition: BoostGraphExampleTests.cc:87
void get_weights(const VECTOR &coords, double *w) const
Definition: CrvLinearLgn.h:279
Definition: StackVector.h:50
static double area(int)
return area
Definition: CrvLinearLgn.h:92
CrvApprox()
Definition: CrvLinearLgn.h:101
static int GaussianNum
Definition: CrvLinearLgn.h:202
bool get_coords(const ElemBasis *pEB, VECTOR &coords, const T &value, const ElemData &cd) const
find coordinate in interpolation for given value
Definition: CrvLinearLgn.h:148
static T GaussianPoints[2][1]
Definition: CrvLinearLgn.h:222
double get_volume(const ElemData &) const
get volume
Definition: CrvLinearLgn.h:330
static double length(int)
return length
Definition: CrvLinearLgn.h:91
virtual void io(Piostream &str)
Definition: CrvLinearLgn.h:400
static T GaussianPoints[3][1]
Definition: CrvLinearLgn.h:241
T value_type
Definition: CrvLinearLgn.h:270
Class with weights and coordinates for 2nd order Gaussian integration.
Definition: CrvLinearLgn.h:218
static double domain_size()
return size of the domain
Definition: CrvLinearLgn.h:64
static const std::string make_template_id(const std::string &templateName, const std::string &templateParam)
Definition: TypeName.h:62
static int dofs()
return degrees of freedom
Definition: CrvLinearLgn.h:76
static int GaussianNum
Definition: CrvLinearLgn.h:221
static double volume()
return volume
Definition: CrvLinearLgn.h:93
static int GaussianNum
Definition: CrvLinearLgn.h:240
bool compare_distance(const T &interp, const T &val, double &cur_d, double dist)
Definition: Locate.h:667
virtual void end_class()
Definition: Persistent.cc:178
bool get_iterative(const ElemBasis *pElem, VECTOR &x, const T &value, const ElemData &cd) const
find value in interpolation for given value
Definition: Locate.h:638
const int CRVLINEARLGN_VERSION
Definition: CrvLinearLgn.h:397
virtual ~CrvLinearLgnUnitElement()
Definition: CrvLinearLgn.h:57
void initial_guess(const ElemBasis *pElem, const T &val, const ElemData &cd, VECTOR &guess) const
Definition: CrvLinearLgn.h:171
Definition: CrvLinearLgn.h:261
void resize(size_t size, const value_type &val=value_type())
Definition: StackVector.h:61
void approx_edge(const unsigned, const unsigned, std::vector< VECTOR > &coords) const
Definition: CrvLinearLgn.h:336
virtual ~CrvLocate()
Definition: CrvLinearLgn.h:144
static SCISHARE double unit_center[1]
Definition: CrvLinearLgn.h:54
void approx_edge(const unsigned, const unsigned div_per_unit, VECTOR &coords) const
Definition: CrvLinearLgn.h:108
int n
Definition: eab.py:9
virtual ~CrvLinearLgn()
Definition: CrvLinearLgn.h:273
CrvLinearLgnUnitElement()
Definition: CrvLinearLgn.h:56
static int vertices_of_face()
return number of vertices per face
Definition: CrvLinearLgn.h:84
void get_linear_weights(const VECTOR &coords, double *w) const
Definition: CrvElementWeights.h:42
double get_area(const unsigned, const ElemData &) const
get area
Definition: CrvLinearLgn.h:323
Class with weights and coordinates for 3rd order Gaussian integration.
Definition: CrvLinearLgn.h:237
virtual ~CrvApprox()
Definition: CrvLinearLgn.h:102
Definition: TypeDescription.h:49
static T GaussianWeights[1]
Definition: CrvLinearLgn.h:204
void derivate(const VECTOR1 &, const ElemData &cd, VECTOR2 &derivs) const
get first derivative at parametric coordinate
Definition: CrvLinearLgn.h:298
const TypeDescription * get_type_description(Core::Basis::ConstantBasis< T > *)
Definition: Constant.h:209