26 "Only value map type supported");
42 MFEM_VERIFY(vdim == fes.
GetVDim(),
"vdim != fes.GetVDim()");
43 MFEM_VERIFY(vdim == mesh->
Dimension(),
"vdim != dim");
51 const int nq = ir->GetNPoints();
59 if (!(
dim == 2 ||
dim == 3)) { MFEM_ABORT(
"Dimension not supported."); }
71 MFEM_VERIFY(
VQ->
GetVDim() == vdim,
"VQ vdim vs. vdim error");
76 MFEM_VERIFY(
MQ->
GetVDim() == vdim,
"MQ dimension vs. vdim error");
77 MFEM_VERIFY(coeff.
Size() == (vdim*vdim) *
ne * nq,
"MQ size error");
84 const bool matrix_coeff =
coeff_vdim == vdim * vdim;
85 MFEM_VERIFY(const_coeff + vector_coeff + matrix_coeff == 1,
"");
89 const auto w_r = ir->GetWeights().Read();
93 const auto W =
Reshape(w_r, q1d, q1d);
100 MFEM_FOREACH_THREAD(qy, y, q1d)
102 MFEM_FOREACH_THREAD(qx, x, q1d)
104 const real_t J11 = J(qx, qy, 0, 0, e), J12 = J(qx, qy, 1, 0, e);
105 const real_t J21 = J(qx, qy, 0, 1, e), J22 = J(qx, qy, 1, 1, e);
106 const real_t detJ = (J11 * J22) - (J21 * J12);
107 const real_t w_det = W(qx, qy) * detJ;
108 D(qx, qy, 0, e) = C(0, qx, qy, e) * w_det;
109 if (const_coeff) {
continue; }
110 D(qx, qy, 1, e) = C(1, qx, qy, e) * w_det;
111 if (vector_coeff) {
continue; }
112 assert(matrix_coeff);
113 D(qx, qy, 2, e) = C(2, qx, qy, e) * w_det;
114 D(qx, qy, 3, e) = C(3, qx, qy, e) * w_det;
121 const auto W =
Reshape(w_r, q1d, q1d, q1d);
128 MFEM_FOREACH_THREAD(qz, z, q1d)
130 MFEM_FOREACH_THREAD(qy, y, q1d)
132 MFEM_FOREACH_THREAD(qx, x, q1d)
134 const real_t J11 = J(qx, qy, qz, 0, 0, e),
135 J12 = J(qx, qy, qz, 0, 1, e),
136 J13 = J(qx, qy, qz, 0, 2, e);
137 const real_t J21 = J(qx, qy, qz, 1, 0, e),
138 J22 = J(qx, qy, qz, 1, 1, e),
139 J23 = J(qx, qy, qz, 1, 2, e);
140 const real_t J31 = J(qx, qy, qz, 2, 0, e),
141 J32 = J(qx, qy, qz, 2, 1, e),
142 J33 = J(qx, qy, qz, 2, 2, e);
143 const real_t detJ = J11 * (J22 * J33 - J32 * J23) -
144 J21 * (J12 * J33 - J32 * J13) +
145 J31 * (J12 * J23 - J22 * J13);
146 const real_t w_det = W(qx, qy, qz) * detJ;
147 D(qx, qy, qz, 0, e) = C(0, qx, qy, qz, e) * w_det;
148 if (const_coeff) {
continue; }
149 D(qx, qy, qz, 1, e) = C(1, qx, qy, qz, e) * w_det;
150 D(qx, qy, qz, 2, e) = C(2, qx, qy, qz, e) * w_det;
151 if (vector_coeff) {
continue; }
152 D(qx, qy, qz, 3, e) = C(3, qx, qy, qz, e) * w_det;
153 D(qx, qy, qz, 4, e) = C(4, qx, qy, qz, e) * w_det;
154 D(qx, qy, qz, 5, e) = C(5, qx, qy, qz, e) * w_det;
155 D(qx, qy, qz, 6, e) = C(6, qx, qy, qz, e) * w_det;
156 D(qx, qy, qz, 7, e) = C(7, qx, qy, qz, e) * w_det;
157 D(qx, qy, qz, 8, e) = C(8, qx, qy, qz, e) * w_det;
165 MFEM_ABORT(
"Unknown VectorMassIntegrator::AssemblePA kernel for"
166 <<
" dim:" <<
dim <<
", vdim:" << vdim <<
", sdim:" << sdim);
176 static const auto vector_mass_kernel_specializations =
178 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 2,2>::Add(),
179 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 3,3>::Add(),
180 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 3,4>::Add(),
181 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 4,4>::Add(),
182 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 4,6>::Add(),
183 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 5,5>::Add(),
184 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 6,6>::Add(),
185 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 7,7>::Add(),
186 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 8,8>::Add(),
187 VectorMassIntegrator::VectorMassAddMultPA::Specialization<2, 9,9>::Add(),
189 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 2,2>::Add(),
190 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 2,3>::Add(),
191 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 3,4>::Add(),
192 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 3,5>::Add(),
193 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 4,5>::Add(),
194 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 4,6>::Add(),
195 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 4,8>::Add(),
196 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 5,6>::Add(),
197 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 5,8>::Add(),
198 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 6,7>::Add(),
199 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 7,8>::Add(),
200 VectorMassIntegrator::VectorMassAddMultPA::Specialization<3, 8,9>::Add(),
202 MFEM_CONTRACT_VAR(vector_mass_kernel_specializations);
214 MFEM_VERIFY(
coeff_vdim == 1,
"coeff_vdim != 1");
215 MFEM_VERIFY(!
VQ && !
MQ,
"VQ and MQ not supported");
218 static const auto vector_mass_assemble_diagonal_kernel_specializations =
220 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 2>::Add(),
221 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 3>::Add(),
222 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 4>::Add(),
223 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 5>::Add(),
224 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 6>::Add(),
225 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 7>::Add(),
226 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<2, 8>::Add(),
228 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 2>::Add(),
229 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 3>::Add(),
230 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 4>::Add(),
231 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 5>::Add(),
232 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 6>::Add(),
233 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 7>::Add(),
234 VectorMassIntegrator::VectorMassAssembleDiagonalPA::Specialization<3, 8>::Add(),
236 MFEM_CONTRACT_VAR(vector_mass_assemble_diagonal_kernel_specializations);
238 VectorMassAssembleDiagonalPA::Run(
dim,
quad1D,