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;
}
Пример #3
0
 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;
   }
 }