I am currently working on a HDG solver and use step-51 as a reference. I found that the example does not work for a 3d setting along with adaptivity. It seems that an error is from "VectorTools::project_boundary_values", the error message I got is:

An error occurred in line <742> of file </org/groups/ceo/chenju/candi/install/tmp/unpack/deal.II-v9.2.0/include/deal.II/numerics/vector_tools_boundary.templates.h> in function     void dealii::VectorTools::internal::do_project_boundary_values(const M_or_MC<dim, spacedim>&, const DoFHandlerType<dim, spacedim>&, const std::map<unsigned int, const dealii::Function<spacedim, number>*>&, const Q_or_QC<(dim - 1)>&,std::map<unsigned int, number>&, std::vector<unsigned int>) [with int dim = 3; int spacedim = 3; DoFHandlerType = dealii::DoFHandler; M_or_MC = dealii::Mapping; Q_or_QC = dealii::Quadrature; number = double]
The violated condition was:
     level == cell->level()
Additional information:
    The mesh you use in projecting boundary values has hanging nodes at the boundary. This would require dealing with hanging node constraints when solving the linear system on the boundary, but this is not currently implemented.

The version of dealii I use is 9.2.0. I am wondering if there is any way to resolve this error.

Not easily. Basically, what is happening is that for *projection* of boundary values, you need to build and solve a linear system of only those degrees of freedom that are located on the boundary. The way this is currently done is unable to deal with hanging node constraints.

There are approaches to deal with this, but they are (as far as I know) not currently implemented and so even newer versions of deal.II will not support this. There are two options for you:
* You can use *interpolation* (rather than projection) of boundary values
* You can implement the missing functionality. We'd be happy to guide you on how this can be done, but it will involve a certain amount of work.


Besides this error, I also have a hard time investigating the vertice initiated by FE_FaceQ and would also like to seek some suggestions. Here is my code modified from step-51:

template <int dim>
   void HDG<dim>::assemble_system_one_cell(
     const typename DoFHandler<dim>::active_cell_iterator &cell,
     ScratchData &                                         scratch,
     PerTaskData &                                         task_data)
   {
       for( unsigned int face = 0; face < GeometryInfo< dim >::faces_per_cell; ++face ){             if(cell->face(face)->at_boundary() && (cell->face(face)->boundary_id() == 0)){
                  std::cout << "node points" << std::endl;
                  for (const auto v: cell->face(face)->vertex_indices()){

This uses a function that was introduced only in deal.II 9.3, I believe. But you can equivalently implement this line using
  for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_face; ++v)


Best
 W.
--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 bange...@colostate.edu
                           www: http://www.math.colostate.edu/~bangerth/

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/73a45aff-9d30-7a1c-89bb-34924a64c9de%40colostate.edu.

Reply via email to