void MAST::MindlinBendingOperator:: _transverse_shear_operations(const std::vector<std::vector<Real> >& phi, const std::vector<std::vector<libMesh::RealVectorValue> >& dphi, const std::vector<Real>& JxW, const unsigned int qp, const RealMatrixX& material, FEMOperatorMatrix& Bmat, RealVectorX& phi_vec, RealVectorX& vec_n2, RealVectorX& vec_2, RealMatrixX& mat_n2n2, RealMatrixX& mat_2n2, bool request_jacobian, RealVectorX& local_f, RealMatrixX& local_jac) { // initialize the strain operator for ( unsigned int i_nd=0; i_nd<phi.size(); i_nd++ ) phi_vec(i_nd) = dphi[i_nd][qp](0); // dphi/dx Bmat.set_shape_function(0, 2, phi_vec); // gamma-xz: w for ( unsigned int i_nd=0; i_nd<phi.size(); i_nd++ ) phi_vec(i_nd) = dphi[i_nd][qp](1); // dphi/dy Bmat.set_shape_function(1, 2, phi_vec); // gamma-yz : w for ( unsigned int i_nd=0; i_nd<phi.size(); i_nd++ ) phi_vec(i_nd) = phi[i_nd][qp]; // phi Bmat.set_shape_function(0, 4, phi_vec); // gamma-xz: thetay phi_vec *= -1.0; Bmat.set_shape_function(1, 3, phi_vec); // gamma-yz : thetax // now add the transverse shear component Bmat.vector_mult(vec_2, _structural_elem.local_solution()); vec_2 = material * vec_2; Bmat.vector_mult_transpose(vec_n2, vec_2); local_f += JxW[qp] * vec_n2; if (request_jacobian) { // now add the transverse shear component Bmat.left_multiply(mat_2n2, material); Bmat.right_multiply_transpose(mat_n2n2, mat_2n2); local_jac += JxW[qp] * mat_n2n2; } }