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.