Chi-Tech
PieceWiseLinearPolyhedronMapping.h
Go to the documentation of this file.
1#ifndef PWL_POLYHEDRON_VALUES_H
2#define PWL_POLYHEDRON_VALUES_H
3
7#include "mesh/Cell/cell.h"
8
9// ###################################################################
11{
12 /**Object for handling piecewise linear
13 * shape functions on polyhedron shaped 3D cells.
14 * \ingroup doc_CellMappings*/
16{
17public:
18 // 00_constrdestr.cc
20 const chi_mesh::MeshContinuum& ref_grid,
21 const QuadratureTetrahedron& volume_quadrature,
22 const QuadratureTriangle& surface_quadrature);
23
25 MakeVolumetricQuadraturePointData() const override;
26
28 MakeSurfaceQuadraturePointData(size_t face_index) const override;
29
30 // ############################################### Actual shape functions
31 // as function of cartesian
32 // coordinates
33 double ShapeValue(int i, const chi_mesh::Vector3& xyz) const override;
34
36 const chi_mesh::Vector3& xyz) const override;
37
38 void ShapeValues(const chi_mesh::Vector3& xyz,
39 std::vector<double>& shape_values) const override;
40
41 void GradShapeValues(
42 const chi_mesh::Vector3& xyz,
43 std::vector<chi_mesh::Vector3>& gradshape_values) const override;
44
45private:
46 // ################################################## Define standard
47 // tetrahedron linear shape
48 // functions
49 // 01a_reftet.cc
50 static double TetShape(uint32_t index,
51 const chi_mesh::Vector3& qpoint,
52 bool on_surface = false);
53
54 static double TetGradShape_x(uint32_t index);
55 static double TetGradShape_y(uint32_t index);
56 static double TetGradShape_z(uint32_t index);
57
58 // ################################################## Shape functions per
59 // face-side 01b_sidevalues.cc
60 double FaceSideShape(uint32_t face_index,
61 uint32_t side_index,
62 uint32_t i,
63 const chi_mesh::Vector3& qpoint,
64 bool on_surface = false) const;
65
66 double FaceSideGradShape_x(uint32_t face_index,
67 uint32_t side_index,
68 uint32_t i) const;
69
70 double FaceSideGradShape_y(uint32_t face_index,
71 uint32_t side_index,
72 uint32_t i) const;
73
74 double FaceSideGradShape_z(uint32_t face_index,
75 uint32_t side_index,
76 uint32_t i) const;
77 /**Stores the data for each side's tetrahedron. */
79 {
80 double detJ = 0.0;
81 double detJ_surf = 0.0;
82 std::vector<uint64_t> v_index;
87 };
88 // Goes into
89 /**Stores data for each face.*/
91 {
92 std::vector<FEside_data3d> sides;
94 };
95 // Goes int face_data
96
97 /**Lowest level of mapping dof i.*/
99 {
100 int index = -1;
101 bool part_of_face = false;
102 };
103 // Goes into
104 /**Intermediate level of mapping.*/
106 {
107 std::vector<FEnodeSideMap> side_map;
108 };
109 // Goes into
110 /**Node map per face.*/
112 {
113 std::vector<FEnodeFaceMap> face_map;
114 };
115 // Goes into node_maps
116 // node n
117 // face f
118 // side s
119 // node_maps[n]->face_map[f]->side_map[s]
120
121 std::vector<double> face_betaf_; ///< Face Beta-factor.
122 double alphac_; ///< Cell alpha-factor.
123
124 std::vector<FEface_data>
125 face_data_; ///< Holds determinants and data tet-by-tet.
126 std::vector<FEnodeMap> node_side_maps_; ///< Maps nodes to side tets.
127
130};
131
132} // namespace chi_math
133
134#endif
double ShapeValue(int i, const chi_mesh::Vector3 &xyz) const override
std::vector< FEnodeMap > node_side_maps_
Maps nodes to side tets.
void ShapeValues(const chi_mesh::Vector3 &xyz, std::vector< double > &shape_values) const override
std::vector< FEface_data > face_data_
Holds determinants and data tet-by-tet.
PieceWiseLinearPolyhedronMapping(const chi_mesh::Cell &polyh_cell, const chi_mesh::MeshContinuum &ref_grid, const QuadratureTetrahedron &volume_quadrature, const QuadratureTriangle &surface_quadrature)
void GradShapeValues(const chi_mesh::Vector3 &xyz, std::vector< chi_mesh::Vector3 > &gradshape_values) const override
chi_mesh::Vector3 GradShapeValue(int i, const chi_mesh::Vector3 &xyz) const override
finite_element::SurfaceQuadraturePointData MakeSurfaceQuadraturePointData(size_t face_index) const override
finite_element::VolumetricQuadraturePointData MakeVolumetricQuadraturePointData() const override
double FaceSideGradShape_y(uint32_t face_index, uint32_t side_index, uint32_t i) const
static double TetShape(uint32_t index, const chi_mesh::Vector3 &qpoint, bool on_surface=false)
double FaceSideShape(uint32_t face_index, uint32_t side_index, uint32_t i, const chi_mesh::Vector3 &qpoint, bool on_surface=false) const
double FaceSideGradShape_x(uint32_t face_index, uint32_t side_index, uint32_t i) const
double FaceSideGradShape_z(uint32_t face_index, uint32_t side_index, uint32_t i) const