51 "PA Only supports Ordering::byNODES!");
76 MFEM_VERIFY(dim == 2 || dim == 3,
"Dimension not supported");
81 pa_adj.
SetSize(ne * nq * dim * dim, mt);
90 const int nq1d = q1d * q1d * (
dim==3 ? q1d : 1);
91 MFEM_VERIFY(coeff.
Size() == 1 || coeff.
Size() == nq1d*ne,
"Invalid coeff");
92 MFEM_VERIFY(ir->
GetWeights().
Size() == nq1d,
"Invalid weights size");
95 const bool const_coeff = coeff.
Size() == 1;
100 constexpr int VDIM = 2,
DIM = 2;
101 const auto W =
Reshape(w_r, Q1D, Q1D);
102 const auto C = const_coeff ?
110 MFEM_FOREACH_THREAD_DIRECT(qy, y, Q1D)
112 MFEM_FOREACH_THREAD_DIRECT(qx, x, Q1D)
114 const real_t J11 = J(qx, qy, 0, 0, e), J12 = J(qx, qy, 0, 1, e);
115 const real_t J21 = J(qx, qy, 1, 0, e), J22 = J(qx, qy, 1, 1, e);
117 const real_t A11 = +J22, A12 = -J12;
118 const real_t A21 = -J21, A22 = +J11;
120 const real_t w = W(qx, qy);
121 const real_t c = const_coeff ? C(0, 0, 0) : C(qx, qy, e);
122 A(0, 0, qx, qy, e) = w * c * A11;
123 A(1, 0, qx, qy, e) = w * c * A12;
124 A(0, 1, qx, qy, e) = w * c * A21;
125 A(1, 1, qx, qy, e) = w * c * A22;
133 constexpr int VDIM = 3,
DIM = 3;
134 const auto W =
Reshape(w_r, Q1D, Q1D, Q1D);
135 const auto C = const_coeff ?
143 MFEM_FOREACH_THREAD_DIRECT(qz, z, Q1D)
145 MFEM_FOREACH_THREAD_DIRECT(qy, y, Q1D)
147 MFEM_FOREACH_THREAD_DIRECT(qx, x, Q1D)
149 const real_t J11 = J(qx, qy, qz, 0, 0, e),
150 J12 = J(qx, qy, qz, 0, 1, e),
151 J13 = J(qx, qy, qz, 0, 2, e);
152 const real_t J21 = J(qx, qy, qz, 1, 0, e),
153 J22 = J(qx, qy, qz, 1, 1, e),
154 J23 = J(qx, qy, qz, 1, 2, e);
155 const real_t J31 = J(qx, qy, qz, 2, 0, e),
156 J32 = J(qx, qy, qz, 2, 1, e),
157 J33 = J(qx, qy, qz, 2, 2, e);
159 const_coeff ? C(0, 0, 0, 0) : C(qx, qy, qz, e);
160 const real_t cw = W(qx, qy, qz) * c;
162 const real_t A11 = (J22 * J33) - (J23 * J32);
163 const real_t A12 = (J32 * J13) - (J12 * J33);
164 const real_t A13 = (J12 * J23) - (J22 * J13);
165 const real_t A21 = (J31 * J23) - (J21 * J33);
166 const real_t A22 = (J11 * J33) - (J13 * J31);
167 const real_t A23 = (J21 * J13) - (J11 * J23);
168 const real_t A31 = (J21 * J32) - (J31 * J22);
169 const real_t A32 = (J31 * J12) - (J11 * J32);
170 const real_t A33 = (J11 * J22) - (J12 * J21);
172 A(0, 0, qx, qy, qz, e) = cw * A11;
173 A(1, 0, qx, qy, qz, e) = cw * A12;
174 A(2, 0, qx, qy, qz, e) = cw * A13;
175 A(0, 1, qx, qy, qz, e) = cw * A21;
176 A(1, 1, qx, qy, qz, e) = cw * A22;
177 A(2, 1, qx, qy, qz, e) = cw * A23;
178 A(0, 2, qx, qy, qz, e) = cw * A31;
179 A(1, 2, qx, qy, qz, e) = cw * A32;
180 A(2, 2, qx, qy, qz, e) = cw * A33;
188 MFEM_ABORT(
"dim " <<
dim <<
" not supported!");