I'm considering a multigrid method for the Stokes problem. I need to have an approximation of Schur complement at each level that is represented by a matrix-free operator.
The problem is that in case of adaptive mesh refinement MGConstrainedDoFs assumes zero boundary condition at refinement edges. In my case that behaviour is unwanted. I have looked through the implementation of MGConstrainedDoFs and it looks like it will require changing initialize() function by adding 1 additional parameter:
MGConstrainedDoFs::initialize ( const DoFHandler< dim, spacedim > & dof,
const MGLevelObject< IndexSet > & level_relevant_dofs = MGLevelObject<IndexSet>()
const bool& set_zero_constrain_at_refinement_edge=true)
And adding if in line 331:
if(set_zero_constrain_at_refinement_edge)
MGTools::extract_inner_interface_dofs(dof, refinement_edge_indices);
The other option to implement my MG preconditioner is to rewrite MGConstrainedDoFs together with all MG classes that rely on it.
Best,
Michał