void TriLagrangeShape::derivatives( Sample loc, NodeSet nodeset, size_t* vertex_indices_out, MsqVector<2>* d_coeff_d_xi_out, size_t& num_vtx, MsqError& err ) const { if (!nodeset.have_any_mid_node()) { num_vtx = 3; get_linear_derivatives( vertex_indices_out, d_coeff_d_xi_out ); return; } if (nodeset.have_any_mid_face_node()) { MSQ_SETERR(err)("TriLagrangeShape does not support mid-element nodes", MsqError::UNSUPPORTED_ELEMENT); return; } switch (loc.dimension) { case 0: derivatives_at_corner( loc.number, nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 1: derivatives_at_mid_edge( loc.number, nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 2: derivatives_at_mid_elem( nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; default: MSQ_SETERR(err)("Invalid/unsupported logical dimension",MsqError::INVALID_ARG); } }
void LinearHexahedron::derivatives( Sample loc, NodeSet nodeset, size_t* vertex_indices_out, MsqVector<3>* d_coeff_d_xi_out, size_t& num_vtx, MsqError& err ) const { if (nodeset.have_any_mid_node()) { MSQ_SETERR(err)(nonlinear_error, MsqError::UNSUPPORTED_ELEMENT ); return; } switch (loc.dimension) { case 0: derivatives_at_corner( loc.number, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 1: derivatives_at_mid_edge( loc.number, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 2: derivatives_at_mid_face( loc.number, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 3: derivatives_at_mid_elem( vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; default: MSQ_SETERR(err)("Invalid/unsupported logical dimension",MsqError::INVALID_ARG); } }
void QuadLagrangeShape::derivatives( Sample loc, NodeSet nodeset, size_t* vertex_indices_out, MsqVector<2>* d_coeff_d_xi_out, size_t& num_vtx, MsqError& err ) const { switch (loc.dimension) { case 0: derivatives_at_corner( loc.number, nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 1: derivatives_at_mid_edge( loc.number, nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; case 2: derivatives_at_mid_elem( nodeset, vertex_indices_out, d_coeff_d_xi_out, num_vtx ); break; default: MSQ_SETERR(err)("Invalid/unsupported logical dimension",MsqError::INVALID_ARG); } }