Hello again all,
I've been working at getting GMG + fieldsplit functioning together and
am running into some difficulties which I hope I could get some feedback on.
In short, I cant seem to properly extract the sub-projections needed for
GMG when considering problems with mutiple variables. It seems to me
that this is an issue with maintaining a consistent dof ordering when
passing the row and column index vectors to
PetscMatrix::create_submatrix(), an order which needs to be "in sync"
with the ordering of dofs coming from System::projection_matrix().
For example if I wish to extract the velocity sub-block in a Stokes type
problem, my first attempt was to simply use the
DofMap::local_variable_indices(), concatenating the relevant variable
dofs and passing them to create_submatrix() but this seemed to provide
incorrectly sorted SubMats which later manifests as deteriorated
convergence on coarser grid GMG levels.
I also tried looping over active local elem, and getting their parents
old_dof_indicies but this seems to provide the same submat as the
earlier attempts and appears to still be ordered by variable. I'll also
note that sorting these vectors seems to only make matters worse.
Ive been playing with these ideas in a branch [1] which adds a unit test
that attempts to add two vars to a system, and extract the whole
"sub"matrix which should be equivalent to the global projection and I
cant seem to find the right way to do this. Does anyone have any
suggestions on some other DoF ordering extraction I can try, or maybe Im
going about this in the wrong way altogether?
Thanks as always for any information you can provide,
- Boris
[1] : https://github.com/bboutkov/libmesh/tree/subproj_test
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel