Matrix AC3D8HexWithSensitivity::getFaceNodalCoords(int face_num) { int nodes_in_face = 8; Matrix N_coord(nodes_in_face,dim); if (face_num < 1 || face_num > 6) { opserr << "invalid face number!\n"; return N_coord; } ID face_nodes(nodes_in_face); localFaceMapping(face_num, face_nodes); int i; for(i = 0; i < nodes_in_face; i++) { const Vector &ndCrds = theNodes[face_nodes(i)]->getCrds(); N_coord(i,0) = ndCrds(0); N_coord(i,1) = ndCrds(1); N_coord(i,2) = ndCrds(2); } return N_coord; }
const Matrix & AC3D8HexWithSensitivity::getDamp(void) { C.Zero(); if (impVals == 0) { return C; } int i, nodes_in_face = 8; ID face_nodes(nodes_in_face); Matrix Cf(nodes_in_face, nodes_in_face); for(i = 1; i <= 6; i++) { if(impVals[i-1] != 0.0) { Cf = get_face_impedance(i); localFaceMapping(i, face_nodes); if(impVals[i-1] != 1.0) { Cf = Cf*impVals[i-1]; } C.Assemble(Cf, face_nodes, face_nodes); } } return C; }
void operator()(const typename ElementT::NodesT& nodes, NormalsT& normals) { const mesh::ElementType::FaceConnectivity& face_conn = ElementT::faces(); const mesh::ElementType& face_etype = ElementT::face_type(0); const Uint nb_face_nodes = face_etype.nb_nodes(); RealMatrix face_nodes(nb_face_nodes, ElementT::dimension); RealVector normal(ElementT::dimension); for(Uint i = 0; i != ElementT::nb_faces; ++i) { for(Uint j = 0; j != nb_face_nodes; ++j) face_nodes.row(j) = nodes.row(face_conn.nodes[nb_face_nodes*i+j]); face_etype.compute_normal(face_nodes, normal); normals.row(i) = face_etype.area(face_nodes) * normal; } }