Chi-Tech
pwl_slab_04_initqpdata.cc
Go to the documentation of this file.
2
4
6{
7
8finite_element::VolumetricQuadraturePointData
10{
11 //=================================== Determine number of internal qpoints
12 size_t ttl_num_vol_qpoints = volume_quadrature_.qpoints_.size();
13
14 //=================================== Declare necessary vars
15 std::vector<unsigned int> V_quadrature_point_indices;
16 VecVec3 V_qpoints_xyz;
17 std::vector<VecDbl> V_shape_value;
18 std::vector<VecVec3> V_shape_grad;
19 VecDbl V_JxW;
20 size_t V_num_nodes;
21
22 //=================================== Init volumetric quadrature
23 V_quadrature_point_indices.reserve(ttl_num_vol_qpoints);
24 for (unsigned int qp = 0; qp < ttl_num_vol_qpoints; ++qp)
25 V_quadrature_point_indices.push_back(qp);
26
27 V_shape_value.reserve(num_nodes_);
28 V_shape_grad.reserve(num_nodes_);
29 for (size_t i = 0; i < num_nodes_; i++)
30 {
31 VecDbl node_shape_value;
32 VecVec3 node_shape_grad;
33
34 node_shape_value.reserve(ttl_num_vol_qpoints);
35 node_shape_grad.reserve(ttl_num_vol_qpoints);
36
37 for (const auto& qpoint : volume_quadrature_.qpoints_)
38 {
39 node_shape_value.push_back(SlabShape(i, qpoint));
40 node_shape_grad.emplace_back(0.0, // x
41 0.0, // y
42 SlabGradShape(i)); // z
43 } // for qp
44
45 V_shape_value.push_back(node_shape_value);
46 V_shape_grad.push_back(node_shape_grad);
47 } // for i
48
49 V_JxW.reserve(ttl_num_vol_qpoints);
50 V_qpoints_xyz.reserve(ttl_num_vol_qpoints);
51 const double J = h_;
52 for (size_t qp = 0; qp < ttl_num_vol_qpoints; ++qp)
53 {
54 const double w = volume_quadrature_.weights_[qp];
55 V_JxW.push_back(J * w);
56
57 const double qp_xyz_tilde = volume_quadrature_.qpoints_[qp][0];
58 V_qpoints_xyz.push_back(v0_ +
59 J * chi_mesh::Vector3(0.0, 0.0, qp_xyz_tilde));
60 } // for qp
61
62 V_num_nodes = num_nodes_;
63
64 return finite_element::VolumetricQuadraturePointData(V_quadrature_point_indices,
65 V_qpoints_xyz,
66 V_shape_value,
67 V_shape_grad,
68 V_JxW,
70 V_num_nodes);
71}
72
75{
76 const bool ON_SURFACE = true;
77
78 //=================================== Init surface quadrature
79 size_t num_srf_qpoints = 1;
80
81 const unsigned int f = face_index;
82
83 //=================================== Declare necessary vars
84 std::vector<unsigned int> F_quadrature_point_indices;
85 VecVec3 F_qpoints_xyz;
86 std::vector<VecDbl> F_shape_value;
87 std::vector<VecVec3> F_shape_grad;
88 VecDbl F_JxW;
89 VecVec3 F_normals;
90 size_t F_num_nodes;
91
92 size_t ttl_num_face_qpoints = num_srf_qpoints;
93
94 F_quadrature_point_indices.reserve(ttl_num_face_qpoints);
95 for (unsigned int qp = 0; qp < ttl_num_face_qpoints; ++qp)
96 F_quadrature_point_indices.push_back(qp);
97
98 F_normals.reserve(ttl_num_face_qpoints);
99 for (size_t qp = 0; qp < ttl_num_face_qpoints; ++qp)
100 F_normals.push_back(normals_[f]);
101
102 F_shape_value.reserve(num_nodes_);
103 F_shape_grad.reserve(num_nodes_);
104 for (size_t i = 0; i < num_nodes_; i++)
105 {
106 VecDbl node_shape_value;
107 VecVec3 node_shape_grad;
108
109 node_shape_value.reserve(ttl_num_face_qpoints);
110 node_shape_grad.reserve(ttl_num_face_qpoints);
111
112 for (const auto& qpoint : {chi_mesh::Vector3(0.0, 0.0, 0.0)})
113 {
114 node_shape_value.push_back(SlabShape(i, qpoint, ON_SURFACE, f));
115 node_shape_grad.emplace_back(0.0, // x
116 0.0, // y
117 SlabGradShape(i)); // z
118 } // for qp
119 F_shape_value.push_back(node_shape_value);
120 F_shape_grad.push_back(node_shape_grad);
121 } // for i
122
123 F_JxW.reserve(ttl_num_face_qpoints);
124 F_qpoints_xyz.reserve(ttl_num_face_qpoints);
125 const double JxW = 1.0;
126 for (size_t qp = 0; qp < num_srf_qpoints; ++qp)
127 {
128 F_JxW.push_back(JxW);
129
130 F_qpoints_xyz.push_back(chi_mesh::Vector3(0.0, 0.0, f));
131 }
132
133 F_num_nodes = 1;
134
135 return finite_element::SurfaceQuadraturePointData(F_quadrature_point_indices,
136 F_qpoints_xyz,
137 F_shape_value,
138 F_shape_grad,
139 F_JxW,
140 F_normals,
142 F_num_nodes);
143}
144
145} // namespace chi_math::cell_mapping
const std::vector< std::vector< int > > face_node_mappings_
Definition: CellMapping.h:130
const size_t num_nodes_
Definition: CellMapping.h:120
std::vector< chi_math::QuadraturePointXYZ > qpoints_
Definition: quadrature.h:37
std::vector< double > weights_
Definition: quadrature.h:38
finite_element::VolumetricQuadraturePointData MakeVolumetricQuadraturePointData() const override
finite_element::SurfaceQuadraturePointData MakeSurfaceQuadraturePointData(size_t face_index) const override
double SlabShape(uint32_t index, const chi_mesh::Vector3 &qpoint, bool on_surface=false, uint32_t edge=0) const
VectorN< 3 > Vector3