8finite_element::VolumetricQuadraturePointData
14 num_tets += face.sides.size();
17 size_t ttl_num_vol_qpoints = num_tets * num_vol_qpoints;
20 std::vector<unsigned int> V_quadrature_point_indices;
22 std::vector<VecDbl> V_shape_value;
23 std::vector<VecVec3> V_shape_grad;
28 V_quadrature_point_indices.reserve(ttl_num_vol_qpoints);
29 for (
unsigned int qp = 0; qp < ttl_num_vol_qpoints; ++qp)
30 V_quadrature_point_indices.push_back(qp);
39 node_shape_value.reserve(ttl_num_vol_qpoints);
40 node_shape_grad.reserve(ttl_num_vol_qpoints);
44 for (
size_t s = 0; s <
face_data_[f].sides.size(); s++)
56 V_shape_value.push_back(node_shape_value);
57 V_shape_grad.push_back(node_shape_grad);
60 V_JxW.reserve(ttl_num_vol_qpoints);
61 V_qpoints_xyz.reserve(ttl_num_vol_qpoints);
64 for (
const auto& side : face.sides)
66 for (
size_t qp = 0; qp < num_vol_qpoints; ++qp)
69 V_JxW.push_back(side.detJ * w);
72 V_qpoints_xyz.push_back(side.v0 + side.J * qp_xyz_tilde);
91 const bool ON_SURFACE =
true;
96 unsigned int f = face_index;
98 std::vector<unsigned int> F_quadrature_point_indices;
100 std::vector<VecDbl> F_shape_value;
101 std::vector<VecVec3> F_shape_grad;
107 size_t ttl_num_face_qpoints = num_tris * num_srf_qpoints;
109 F_quadrature_point_indices.reserve(ttl_num_face_qpoints);
110 for (
unsigned int qp = 0; qp < ttl_num_face_qpoints; ++qp)
111 F_quadrature_point_indices.push_back(qp);
113 F_normals.reserve(ttl_num_face_qpoints);
114 for (
size_t qp = 0; qp < ttl_num_face_qpoints; ++qp)
124 node_shape_value.reserve(ttl_num_face_qpoints);
125 node_shape_grad.reserve(ttl_num_face_qpoints);
127 for (
size_t s = 0; s <
face_data_[f].sides.size(); s++)
131 node_shape_value.push_back(
FaceSideShape(f, s, i, qpoint, ON_SURFACE));
137 F_shape_value.push_back(node_shape_value);
138 F_shape_grad.push_back(node_shape_grad);
141 F_JxW.reserve(ttl_num_face_qpoints);
142 F_qpoints_xyz.reserve(ttl_num_face_qpoints);
144 for (
size_t qp = 0; qp < num_srf_qpoints; ++qp)
147 F_JxW.push_back(side.detJ_surf * w);
150 F_qpoints_xyz.push_back(side.v0 + side.J * qp_xyz_tilde);
const std::vector< std::vector< int > > face_node_mappings_
std::vector< chi_math::QuadraturePointXYZ > qpoints_
std::vector< double > weights_
std::vector< double > VecDbl
std::vector< chi_mesh::Vector3 > VecVec3
const QuadratureTriangle & surface_quadrature_
std::vector< FEface_data > face_data_
Holds determinants and data tet-by-tet.
const QuadratureTetrahedron & volume_quadrature_
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
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