9#include <kernel/geometry/conformal_mesh.hpp>
10#include <kernel/geometry/index_calculator.hpp>
11#include <kernel/geometry/mesh_part.hpp>
12#include <kernel/geometry/intern/shape_convert_index.hpp>
13#include <kernel/geometry/intern/shape_convert_target.hpp>
14#include <kernel/geometry/intern/shape_convert_traits.hpp>
15#include <kernel/geometry/intern/shape_convert_vertex.hpp>
33 template<
typename Mesh_>
35 class ShapeConvertFactory;
66 public Factory<ConformalMesh<Shape_, num_coords_, Coord_> >
70 typedef Shape_ ShapeType;
71 typedef typename Intern::OtherShape<Shape_>::Type OtherShapeType;
80 static constexpr int shape_dim = ShapeType::dimension;
85 Index _num_entities_in[shape_dim + 1];
87 Index _num_entities_out[shape_dim + 1];
91 _other_mesh(other_mesh)
94 for(
int i(0); i <= shape_dim; ++i)
96 _num_entities_out[i] = _num_entities_in[i] = _other_mesh.
get_num_entities(i);
100 Intern::EntityCountWrapper<Intern::ShapeConvertTraits, OtherShapeType>::query(_num_entities_out);
103 virtual Index get_num_entities(
int dim)
override
105 return _num_entities_out[dim];
108 virtual void fill_vertex_set(VertexSetType& vertex_set)
override
111 Intern::ShapeConvertVertexWrapper<OtherShapeType, VertexSetType>
112 ::refine(vertex_set, _other_mesh.
get_vertex_set(), _other_mesh.get_index_set_holder());
115 virtual void fill_index_sets(IndexSetHolderType& index_set_holder)
override
118 Intern::ShapeConvertIndexWrapper<ShapeType>
119 ::refine(index_set_holder, _num_entities_in, _other_mesh.get_index_set_holder());
135 public Factory<MeshPart<ConformalMesh<Shape_, Shape_::dimension, Coord_> > >
139 typedef Shape_ ShapeType;
140 typedef typename Intern::OtherShape<Shape_>::Type OtherShapeType;
151 static constexpr int shape_dim = ShapeType::dimension;
156 Index _num_entities_in[shape_dim + 1];
158 Index _num_entities_out[shape_dim + 1];
162 _other_mesh(other_mesh)
165 for(
int i(0); i <= shape_dim; ++i)
167 _num_entities_out[i] = _num_entities_in[i] = _other_mesh.
get_num_entities(i);
171 Intern::EntityCountWrapper<Intern::ShapeConvertTraits, OtherShapeType>::query(_num_entities_out);
175 virtual Index get_num_entities(
int dim)
177 return _num_entities_out[dim];
180 virtual int get_num_coords()
182 return _other_mesh.get_vertex_set().get_num_coords();
185 virtual int get_vertex_stride()
187 return _other_mesh.get_vertex_set().get_stride();
190 virtual void fill_vertex_set(VertexSetType& vertex_set)
193 Intern::ShapeConvertVertexWrapper<OtherShapeType, VertexSetType>
194 ::refine(vertex_set, _other_mesh.get_vertex_set(), _other_mesh.get_index_set_holder());
197 virtual void fill_index_sets(IndexSetHolderType& index_set_holder)
200 Intern::ShapeConvertIndexWrapper<ShapeType>
201 ::refine(index_set_holder, _num_entities_in, _other_mesh.get_index_set_holder());
207 virtual void fill_target_sets(TargetSetHolderType& )
Mesh Factory class template.
Class template for partial meshes.
TargetSetHolder< ShapeType > TargetSetHolderType
Target set holder type.
IndexSetHolder< ShapeType > IndexSetHolderType
Index set holder type.
Index get_num_entities(int dim) const
Returns the number of entities.
static void compute(IndexSetHolder< Shape_ > &index_set_holder)
Routine that does the actual work.
Shape-Conversion Mesh Factory class template.
Mesh_ MeshType
the output mesh type
ShapeConvertFactory(const OtherMeshType &other_mesh)
Constructor.
typedef OtherMeshType
the input mesh type
std::uint64_t Index
Index data type.
Fixed-Sized Vertex Set class template.