Dear all,

I really appreciate your advice on the aproach to take in problem below: 

Here is the setting:
I have a m \times n matrix A which I assemble by evaluating the second
derivatives and jump at each quadrature point (m = number of all quadrature
points, n = number of all dofs).
Now I would like to impose a set of inhomogeneous constrains of form \sum
c_ij x_j = g_i strictly to above matrix. (n ~ 10^6 and number of constrains
~ n / 10). The constraints come from imposing some average strictly over
cells.
Notice what I actually solve is of the form A^t D A y = A^t w in an
iterative solver where D and w change in each iteration. 

Obviously, I have to remove some columns from A, and modify the A and
r.h.s. accordingly. A related functionality is offered in deal.ii through
ConstraintMatrix class, but when I read the actual code in this class, it
looks all of these methods (in particular condense, and
distribute_local_to_global) assume A is a square matrix. 

I think FilteredMatrix in this case is also not an option as it assumes
the constraint matrix t (C x = g), has exactly one 1 in each row.

At present, I simply assume the constraints are coming from averaging over
only one cell (so the sparsity pattern actually does not change during
condensation process here) and I handle the condensation by myself manually
making relevant columns zero. Then I form A^t D A, add a 1 to the main
diagonal of A^t D A wherever relevant. But I guess this is not an (easy)
option if I relax this assumption. Further, I guess I will have the same
issue there with hanging node constraints, if I use an adaptive scheme.

Is there anyway to do this without implementing my own ConstraintMatrix
class from scratch? 

Thank you very much for your time and help,
Habib.
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii

Reply via email to