Chi-Tech
pwl_polyhedron_01b_sidevalues.cc
Go to the documentation of this file.
2
4{
5
6/**Precomputes the shape function values of a face-side pair
7 * at a quadrature point*/
9 uint32_t side_index,
10 uint32_t i,
11 const chi_mesh::Vector3& qpoint,
12 bool on_surface /*=false*/) const
13{
14 double value = 0.0;
15 int index =
16 node_side_maps_[i].face_map[face_index].side_map[side_index].index;
17 double betaf = face_betaf_[face_index];
18
19 value += TetShape(index, qpoint, on_surface);
20 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
21 {
22 value += betaf * TetShape(1, qpoint, on_surface);
23 }
24 value += alphac_ * TetShape(3, qpoint, on_surface);
25
26 return value;
27}
28
29/**Precomputes the gradx-shape function values of a face-side pair
30 * at a quadrature point*/
32 uint32_t side_index,
33 uint32_t i) const
34{
35 double value = 0.0;
36 double tetdfdx = 0.0;
37 double tetdfdy = 0.0;
38 double tetdfdz = 0.0;
39 int index =
40 node_side_maps_[i].face_map[face_index].side_map[side_index].index;
41 double betaf = face_betaf_[face_index];
42
43 tetdfdx += TetGradShape_x(index);
44 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
45 {
46 tetdfdx += betaf * TetGradShape_x(1);
47 }
48 tetdfdx += alphac_ * TetGradShape_x(3);
49
50 tetdfdy += TetGradShape_y(index);
51 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
52 {
53 tetdfdy += betaf * TetGradShape_y(1);
54 }
55 tetdfdy += alphac_ * TetGradShape_y(3);
56
57 tetdfdz += TetGradShape_z(index);
58 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
59 {
60 tetdfdz += betaf * TetGradShape_z(1);
61 }
62 tetdfdz += alphac_ * TetGradShape_z(3);
63
64 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(0, 0) * tetdfdx;
65 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(0, 1) * tetdfdy;
66 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(0, 2) * tetdfdz;
67
68 return value;
69}
70
71/**Precomputes the grady-shape function values of a face-side pair
72 * at a quadrature point*/
74 uint32_t side_index,
75 uint32_t i) const
76{
77 double value = 0.0;
78 double tetdfdx = 0.0;
79 double tetdfdy = 0.0;
80 double tetdfdz = 0.0;
81 int index =
82 node_side_maps_[i].face_map[face_index].side_map[side_index].index;
83 double betaf = face_betaf_[face_index];
84
85 tetdfdx += TetGradShape_x(index);
86 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
87 {
88 tetdfdx += betaf * TetGradShape_x(1);
89 }
90 tetdfdx += alphac_ * TetGradShape_x(3);
91
92 tetdfdy += TetGradShape_y(index);
93 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
94 {
95 tetdfdy += betaf * TetGradShape_y(1);
96 }
97 tetdfdy += alphac_ * TetGradShape_y(3);
98
99 tetdfdz += TetGradShape_z(index);
100 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
101 {
102 tetdfdz += betaf * TetGradShape_z(1);
103 }
104 tetdfdz += alphac_ * TetGradShape_z(3);
105
106 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(1, 0) * tetdfdx;
107 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(1, 1) * tetdfdy;
108 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(1, 2) * tetdfdz;
109
110 return value;
111}
112
113/**Precomputes the gradz-shape function values of a face-side pair
114 * at a quadrature point*/
116 uint32_t side_index,
117 uint32_t i) const
118{
119 double value = 0.0;
120 double tetdfdx = 0.0;
121 double tetdfdy = 0.0;
122 double tetdfdz = 0.0;
123 int index =
124 node_side_maps_[i].face_map[face_index].side_map[side_index].index;
125 double betaf = face_betaf_[face_index];
126
127 tetdfdx += TetGradShape_x(index);
128 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
129 {
130 tetdfdx += betaf * TetGradShape_x(1);
131 }
132 tetdfdx += alphac_ * TetGradShape_x(3);
133
134 tetdfdy += TetGradShape_y(index);
135 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
136 {
137 tetdfdy += betaf * TetGradShape_y(1);
138 }
139 tetdfdy += alphac_ * TetGradShape_y(3);
140
141 tetdfdz += TetGradShape_z(index);
142 if (node_side_maps_[i].face_map[face_index].side_map[side_index].part_of_face)
143 {
144 tetdfdz += betaf * TetGradShape_z(1);
145 }
146 tetdfdz += alphac_ * TetGradShape_z(3);
147
148 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(2, 0) * tetdfdx;
149 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(2, 1) * tetdfdy;
150 value += face_data_[face_index].sides[side_index].JTinv.GetIJ(2, 2) * tetdfdz;
151
152 return value;
153}
154
155} // namespace chi_math::cell_mapping
std::vector< FEnodeMap > node_side_maps_
Maps nodes to side tets.
std::vector< FEface_data > face_data_
Holds determinants and data tet-by-tet.
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