If my understanding of how dofs are numbered is correct. Essentially what I want to do is

std::vector<bool> boundary_dofs (dof_handler.n_dofs(), false);
DoFTools::extract_boundary_dofs (dof_handler, ComponentMask(), boundary_dofs);

constraints.clear();
for (unsigned int i = dofs_per_block[0] + dofs_per_block[1]; i < dof_handler.n_dofs(); ++i)
{
     if(boundary_dofs[i] == true)
     {
         constraints.add_line (i);
\\ find 'corresponding_U_dof' of 'W_dof' with index 'i' according to above said criterion
         constraints.add_entry (i, corresponding_U_dof, 1);
     }
}
constraints.close ();

So I want a way to find 'corresponding_U_dof' from 'W_dof' with index 'i'. Or please suggest any other way to achieve this.

That's not enough. You also have to do something about the U dof that sits at the edge midpoint.

You will want to read the paper I pointed to to see how these constraints are computed. You can then try to look into the information you get out of FE_Q::get_face_interpolation_matrix() that can be used to interpolate between a Q1 and Q2 element. Essentially what you want to do is done in DoFTools::make_hanging_node_constraints(), which you could try to understand on a mesh with 2 cells for which one is a Q1 and one is a Q2 cell.

Best
 W.

--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 [email protected]
                           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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to