12 MatDbl IntV_gradShapeI_gradShapeJ,
17 std::vector<MatDbl> IntS_shapeI_shapeJ,
18 std::vector<VecDbl> IntS_shapeI,
19 std::vector<MatVec3> IntS_shapeI_gradshapeJ,
20 std::vector<std::vector<int>> face_dof_mappings,
22 : IntV_gradShapeI_gradShapeJ_(std::move(IntV_gradShapeI_gradShapeJ)),
23 IntV_shapeI_gradshapeJ_(std::move(IntV_shapeI_gradshapeJ)),
24 IntV_shapeI_shapeJ_(std::move(IntV_shapeI_shapeJ)),
25 IntV_shapeI_(std::move(IntV_shapeI)),
26 IntV_gradshapeI_(std::move(IntV_gradshapeI)),
27 IntS_shapeI_shapeJ_(std::move(IntS_shapeI_shapeJ)),
28 IntS_shapeI_(std::move(IntS_shapeI)),
29 IntS_shapeI_gradshapeJ_(std::move(IntS_shapeI_gradshapeJ)),
30 face_dof_mappings_(std::move(face_dof_mappings)),
42 std::vector<FaceQPData> faces_qp_data;
43 for (
size_t f = 0; f < cell_mapping.
ReferenceCell().faces_.size(); ++f)
46 const auto n_dof_per_cell = internal_data.
NumNodes();
48 MatDbl IntV_gradshapeI_gradshapeJ(n_dof_per_cell,
VecDbl(n_dof_per_cell));
55 std::vector<VecDbl>
IntS_shapeI(faces_qp_data.size());
59 for (
unsigned int i = 0; i < n_dof_per_cell; ++i)
61 for (
unsigned int j = 0; j < n_dof_per_cell; ++j)
63 for (
const auto& qp : internal_data.QuadraturePointIndices())
65 IntV_gradshapeI_gradshapeJ[i][j] +=
66 internal_data.ShapeGrad(i, qp).Dot(internal_data.ShapeGrad(j, qp)) *
67 internal_data.JxW(qp);
70 internal_data.ShapeGrad(j, qp) *
71 internal_data.JxW(qp);
74 internal_data.ShapeValue(j, qp) *
75 internal_data.JxW(qp);
79 for (
const auto& qp : internal_data.QuadraturePointIndices())
81 IntV_shapeI[i] += internal_data.ShapeValue(i, qp) * internal_data.JxW(qp);
84 internal_data.ShapeGrad(i, qp) * internal_data.JxW(qp);
89 for (
size_t f = 0; f < faces_qp_data.size(); ++f)
95 for (
unsigned int i = 0; i < n_dof_per_cell; ++i)
97 for (
unsigned int j = 0; j < n_dof_per_cell; ++j)
99 for (
const auto& qp : faces_qp_data[f].QuadraturePointIndices())
102 faces_qp_data[f].ShapeValue(j, qp) *
103 faces_qp_data[f].JxW(qp);
106 faces_qp_data[f].ShapeValue(i, qp) *
107 faces_qp_data[f].ShapeGrad(j, qp) * faces_qp_data[f].JxW(qp);
111 for (
const auto& qp : faces_qp_data[f].QuadraturePointIndices())
114 faces_qp_data[f].ShapeValue(i, qp) * faces_qp_data[f].JxW(qp);
135 unsigned int j)
const
144 unsigned int j)
const
152 unsigned int j)
const
172 unsigned int j)
const
176 auto& rowI = face_data.at(i);
182 unsigned int i)
const
186 value = face_data.at(i);
191 unsigned int face,
unsigned int i,
unsigned int j)
const
195 auto& rowI = face_data.at(i);
UnitIntegralContainer(MatDbl IntV_gradShapeI_gradShapeJ, MatVec3 IntV_shapeI_gradshapeJ, MatDbl IntV_shapeI_shapeJ, VecDbl IntV_shapeI, VecVec3 IntV_gradshapeI, std::vector< MatDbl > IntS_shapeI_shapeJ, std::vector< VecDbl > IntS_shapeI, std::vector< MatVec3 > IntS_shapeI_gradshapeJ, std::vector< std::vector< int > > face_dof_mappings, size_t num_nodes)
MatDbl IntV_gradShapeI_gradShapeJ_
static UnitIntegralContainer Make(const chi_math::CellMapping &cell_mapping)
chi_mesh::Vector3 IntV_shapeI_gradshapeJ(unsigned int i, unsigned int j) const
chi_mesh::Vector3 IntV_gradshapeI(unsigned int i) const
std::vector< VecDbl > IntS_shapeI_
double IntV_shapeI(unsigned int i) const
double IntV_shapeI_shapeJ(unsigned int i, unsigned int j) const
MatVec3 IntV_shapeI_gradshapeJ_
std::vector< MatDbl > IntS_shapeI_shapeJ_
std::vector< double > VecDbl
chi_mesh::Vector3 IntS_shapeI_gradshapeJ(unsigned int face, unsigned int i, unsigned int j) const
MatDbl IntV_shapeI_shapeJ_
double IntV_gradShapeI_gradShapeJ(unsigned int i, unsigned int j) const
std::vector< chi_mesh::Vector3 > VecVec3
std::vector< VecDbl > MatDbl
double IntS_shapeI(unsigned int face, unsigned int i) const
std::vector< VecVec3 > MatVec3
std::vector< MatVec3 > IntS_shapeI_gradshapeJ_
double IntS_shapeI_shapeJ(unsigned int face, unsigned int i, unsigned int j) const
const std::vector< std::vector< int > > & GetFaceNodeMappings() const
virtual finite_element::VolumetricQuadraturePointData MakeVolumetricQuadraturePointData() const =0
virtual finite_element::SurfaceQuadraturePointData MakeSurfaceQuadraturePointData(size_t face_index) const =0
const chi_mesh::Cell & ReferenceCell() const