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
