Beispiel #1
0
unsigned int FEInterface::n_dofs_at_node(const unsigned int dim,
                                         const FEType& fe_t,
                                         const ElemType t,
                                         const unsigned int n)
{
#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS

  if ( is_InfFE_elem(t) )
    return ifem_n_dofs_at_node(dim, fe_t, t, n);

#endif

  const Order o = fe_t.order;

  fe_with_vec_switch(n_dofs_at_node(t, o, n));

  libmesh_error();
  return 0;
}
Beispiel #2
0
void FE<Dim,T>::dofs_on_edge(const Elem* const elem,
                             const Order o,
                             unsigned int e,
                             std::vector<unsigned int>& di)
{
  libmesh_assert(elem);
  libmesh_assert_less (e, elem->n_edges());

  di.clear();
  unsigned int nodenum = 0;
  const unsigned int n_nodes = elem->n_nodes();
  for (unsigned int n = 0; n != n_nodes; ++n)
    {
      const unsigned int n_dofs = n_dofs_at_node(elem->type(),
                                                 static_cast<Order>(o + elem->p_level()), n);
      if (elem->is_node_on_edge(n, e))
        for (unsigned int i = 0; i != n_dofs; ++i)
          di.push_back(nodenum++);
      else
        nodenum += n_dofs;
    }
}