54 const Elem *
const elem,
55 const std::vector<Point> & qp,
57 std::vector<std::vector<OutputShape>> & phi,
64 libmesh_error_msg(
"These element transformations only make sense in 2D and 3D.");
97 phi[i][p](0) = dxidx_map[p]*phi_ref.slice(0) + detadx_map[p]*phi_ref.slice(1);
99 phi[i][p](1) = dxidy_map[p]*phi_ref.slice(0) + detady_map[p]*phi_ref.slice(1);
101 phi[i][p](2) = dxidz_map[p]*phi_ref.slice(0) + detadz_map[p]*phi_ref.slice(1);
143 phi[i][p].slice(0) = dxidx_map[p]*phi_ref.slice(0) + detadx_map[p]*phi_ref.slice(1)
144 + dzetadx_map[p]*phi_ref.slice(2);
146 phi[i][p].slice(1) = dxidy_map[p]*phi_ref.slice(0) + detady_map[p]*phi_ref.slice(1)
147 + dzetady_map[p]*phi_ref.slice(2);
149 phi[i][p].slice(2) = dxidz_map[p]*phi_ref.slice(0) + detadz_map[p]*phi_ref.slice(1)
150 + dzetadz_map[p]*phi_ref.slice(2);
156 libmesh_error_msg(
"Invalid dim = " <<
dim);
163 const std::vector<Point> &,
165 std::vector<std::vector<OutputShape>> & curl_phi)
const
171 libmesh_error_msg(
"These element transformations only make sense in 2D and 3D.");
183 const std::vector<std::vector<OutputShape>> & dphi_dxi = fe.
get_dphidxi();
184 const std::vector<std::vector<OutputShape>> & dphi_deta = fe.
get_dphideta();
192 const Real curl_ref = dphi_dxi[i][p].slice(1) - dphi_deta[i][p].slice(0);
193 curl_phi[i][p].slice(0) = curl_ref * (dxidy_map[p]*detadz_map[p] - dxidz_map[p]*detady_map[p]);
194 curl_phi[i][p].slice(1) = curl_ref * -(dxidx_map[p]*detadz_map[p] - dxidz_map[p]*detadx_map[p]);
195 curl_phi[i][p].slice(2) = curl_ref * (dxidx_map[p]*detady_map[p] - dxidy_map[p]*detadx_map[p]);
203 const std::vector<std::vector<OutputShape>> & dphi_dxi = fe.
get_dphidxi();
204 const std::vector<std::vector<OutputShape>> & dphi_deta = fe.
get_dphideta();
205 const std::vector<std::vector<OutputShape>> & dphi_dzeta = fe.
get_dphidzeta();
216 Real dx_dxi = dxyz_dxi[p](0);
217 Real dx_deta = dxyz_deta[p](0);
218 Real dx_dzeta = dxyz_dzeta[p](0);
220 Real dy_dxi = dxyz_dxi[p](1);
221 Real dy_deta = dxyz_deta[p](1);
222 Real dy_dzeta = dxyz_dzeta[p](1);
224 Real dz_dxi = dxyz_dxi[p](2);
225 Real dz_deta = dxyz_deta[p](2);
226 Real dz_dzeta = dxyz_dzeta[p](2);
228 const Real inv_jac = 1.0/J[p];
240 curl_phi[i][p].slice(0) = inv_jac*( dx_dxi*( dphi_deta[i][p].slice(2) -
241 dphi_dzeta[i][p].slice(1) ) +
242 dx_deta*( dphi_dzeta[i][p].slice(0) -
243 dphi_dxi[i][p].slice(2) ) +
244 dx_dzeta*( dphi_dxi[i][p].slice(1) -
245 dphi_deta[i][p].slice(0) ) );
247 curl_phi[i][p].slice(1) = inv_jac*( dy_dxi*( dphi_deta[i][p].slice(2) -
248 dphi_dzeta[i][p].slice(1) ) +
249 dy_deta*( dphi_dzeta[i][p].slice(0)-
250 dphi_dxi[i][p].slice(2) ) +
251 dy_dzeta*( dphi_dxi[i][p].slice(1) -
252 dphi_deta[i][p].slice(0) ) );
254 curl_phi[i][p].slice(2) = inv_jac*( dz_dxi*( dphi_deta[i][p].slice(2) -
255 dphi_dzeta[i][p].slice(1) ) +
256 dz_deta*( dphi_dzeta[i][p].slice(0) -
257 dphi_dxi[i][p].slice(2) ) +
258 dz_dzeta*( dphi_dxi[i][p].slice(1) -
259 dphi_deta[i][p].slice(0) ) );
266 libmesh_error_msg(
"Invalid dim = " <<
dim);