34 scalar_type is_in(
const base_node& point)
const{
35 GMM_ASSERT1(point.size() >= 2,
"Invalid dimension of pt " << point);
38 return ori_ref_convex_->is_in(point_2d);
42 GMM_ASSERT1(point.size() >= 2,
"Invalid dimension of pt " << point);
43 base_node point2D = point;
45 return ori_ref_convex_->is_in_face(f, point2D);
47 torus_reference(bgeot::pconvex_ref ori_ref_convex) :
49 torus_structure_descriptor(ori_ref_convex->structure()), ori_ref_convex->is_basic())
51 ori_ref_convex_ = ori_ref_convex;
52 convex<base_node>::points().resize(cvs->nb_points());
53 normals_.resize(ori_ref_convex->normals().size());
55 const std::vector<base_small_vector> &ori_normals = ori_ref_convex->normals();
56 const stored_point_tab &ori_points = ori_ref_convex->points();
57 for(
size_type n = 0; n < ori_normals.size(); ++n){
58 normals_[n] = ori_normals[n];
59 normals_[n].resize(3);
62 std::copy(ori_points.begin(), ori_points.end(), convex<base_node>::points().begin());
63 for(
size_type pt = 0; pt < convex<base_node>::points().size(); ++pt){
64 convex<base_node>::points()[pt].resize(3);
66 ppoints = store_point_tab(convex<base_node>::points());
70 bgeot::pconvex_ref ori_ref_convex_;
77 dal::pstatic_stored_object_key
78 pk = std::make_shared<torus_structure_key>(ori_structure);
80 if (o)
return std::dynamic_pointer_cast<const convex_structure>(o);
82 auto p = std::make_shared<torus_structure>();
84 p->Nc = dim_type(ori_structure->dim() + 1);
85 p->nbpt = ori_structure->nb_points();
86 p->nbf = ori_structure->nb_faces();
88 p->faces_struct.resize(p->nbf);
89 p->faces.resize(p->nbf);
92 p->faces_struct[j] = ori_structure->faces_structure()[j];
93 short_type nbIndex = ori_structure->nb_points_of_face(j);
94 p->faces[j].resize(nbIndex);
95 p->faces[j] = ori_structure->ind_points_of_face(j);
98 p->dir_points_.resize(ori_structure->ind_dir_points().size());
99 p->dir_points_ = ori_structure->ind_dir_points();
107 DAL_SIMPLE_KEY(torus_reference_key, pconvex_ref);
109 pconvex_ref ptorus_reference(pconvex_ref ori_convex_reference)
111 dal::pstatic_stored_object_key
112 pk = std::make_shared<torus_reference_key>(ori_convex_reference);
115 if (o)
return std::dynamic_pointer_cast<const bgeot::convex_of_reference>(o);
116 pconvex_ref p = std::make_shared<torus_reference>(ori_convex_reference);
118 dal::PERMANENT_STATIC_OBJECT);
125 poriginal_trans_->poly_vector_val(pt_2d, val);
129 bgeot::base_vector &val)
const{
132 poriginal_trans_->poly_vector_val(pt_2d, ind_ct, val);
139 poriginal_trans_->poly_vector_grad(pt2D, pc2D);
141 bgeot::base_vector base_value;
142 poriginal_trans_->poly_vector_val(pt2D, base_value);
147 for (bgeot::dim_type n = 0; n < 2; ++n) pc(i, n) = pc2D(i, n);
148 pc(i, 2) = base_value[i];
153 const bgeot::convex_ind_ct &ind_ct, bgeot::base_matrix &pc)
const{
156 bgeot::base_matrix pc2D(ind_ct.size(), 2);
157 poriginal_trans_->poly_vector_grad(pt2D, pc2D);
158 pc.resize(ind_ct.size(),
dim());
159 for (
size_type i = 0; i < ind_ct.size(); ++i){
160 for (bgeot::dim_type n = 0; n < 2; ++n) pc(i, n) = pc2D(i, n);
165 (
const bgeot::base_matrix &G,
const bgeot::base_matrix &pc, bgeot::base_matrix &K)
const{
169 for (
short_type i = 0; i < 2; ++i) K(2, i) = K(i, 2) = 0;
173 bgeot::base_matrix & )
const{
174 GMM_ASSERT1(
false,
"Sorry, Hessian is not supported in axisymmetric transformation.");
177 void torus_geom_trans::project_into_reference_convex(
base_node &pt)
const {
178 poriginal_trans_->project_into_reference_convex(pt);
182 : poriginal_trans_(poriginal_trans){
183 geometric_trans::is_lin = poriginal_trans_->is_linear();
184 geometric_trans::cvr = ptorus_reference(poriginal_trans_->convex_ref());
185 complexity_ = poriginal_trans_->complexity();
186 fill_standard_vertices();
187 name_ = poriginal_trans->debug_name();
191 return poriginal_trans_;
195 const torus_structure *cvs_torus =
dynamic_cast<const torus_structure *
>(cvs.get());
196 return cvs_torus != NULL;
202 dal::pstatic_stored_object_key
203 pk = std::make_shared<torus_geom_trans_key>(poriginal_trans);
206 if (o)
return std::dynamic_pointer_cast<const torus_geom_trans>(o);
214 const torus_geom_trans *pgt_torus =
dynamic_cast<const torus_geom_trans *
>(pgt.get());
215 return pgt_torus != NULL;
Base class for reference convexes.
dim_type dim() const
Dimension of the reference element.
size_type nb_points() const
Number of geometric nodes.
virtual void compute_K_matrix(const base_matrix &G, const base_matrix &pc, base_matrix &K) const
compute K matrix from multiplication of G with gradient
torus_structure which extends a 2 dimensional structure with a radial dimension
gmm::uint16_type short_type
used as the common short type integer in the library
std::shared_ptr< const convex_structure > pconvex_structure
Pointer on a convex structure description.
size_t size_type
used as the common size type in the library
pconvex_structure basic_structure(pconvex_structure cv)
Original structure (if concerned)
std::shared_ptr< const bgeot::geometric_trans > pgeometric_trans
pointer type for a geometric transformation
void add_stored_object(pstatic_stored_object_key k, pstatic_stored_object o, permanence perm)
Add an object with two optional dependencies.
pstatic_stored_object search_stored_object(pstatic_stored_object_key k)
Gives a pointer to an object from a key pointer.
virtual void poly_vector_val(const base_node &, bgeot::base_vector &) const
Gives the value of the functions vector at a certain point.
virtual void compute_K_matrix(const bgeot::base_matrix &, const bgeot::base_matrix &, bgeot::base_matrix &) const
compute K matrix from multiplication of G with gradient
virtual void poly_vector_grad(const base_node &, bgeot::base_matrix &) const
Gives the gradient of the functions vector at a certain point.
virtual void poly_vector_hess(const base_node &, bgeot::base_matrix &) const
Gives the hessian of the functions vector at a certain point.