I think that the problem can be avoided by splitting operator A into two 
parts: dirichlet nodes and other. The structure will be:
A1 0
0    I
and the operator A1 applies matrix-vector product using fixed values on 
Dirichlet nodes.

If I got it right, the problem is with this part of code:
Line:  1186 of  operatrors.h:
    // set zero Dirichlet values on the input vector (and remember the src 
and
    // dst values because we need to reset them at the end)
    for (unsigned int j=0; j<n_blocks(dst); ++j)
      {
        for (unsigned int i=0; i<edge_constrained_indices[j].size(); ++i)
          {
            edge_constrained_values[j][i] =
              std::pair<Number,Number>
              
(subblock(src,j).local_element(edge_constrained_indices[j][i]),
              
 subblock(dst,j).local_element(edge_constrained_indices[j][i]));
            subblock(const_cast<VectorType 
&>(src),j).local_element(edge_constrained_indices[j][i]) = 0.;
          }
      }

By replacing 0 with Dirichlet boundary value and then applying the operator 
without Dirichlet constrains the multiplication by A1 can be done. 
Multiplication by identity for Dirichlet nodes is already implemented. 
This will require some changes in matrix-free framework. MatrixFree object 
will handle only homogeneous constrains and Operator will handle the 
non-homogeneous one.  The same change have to be done 
in vmult_interface_down  and  vmult_interface_up.


-- 
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