MappingFEField with MatrixFree: MG matrices does not use proper mappling

24 views
Skip to first unread message

Michał Wichrowski

unread,
Jun 23, 2020, 7:38:54 AM6/23/20
to deal.II User Group
Dear all,
I've got multigrid solver matrix-free for FSI in ALE formulation. For deforming grid I'm using MappingFEField, stored in std::shared_ptr<Mapping<dim>>. On the coarsest level I'm assembling the sparse matrix in standard way, I then initialize direct solver (MUMPS from Trilinos) and than I'm using it as a preconditioner in MGCoarseGridIterativeSolver. So I should get convergance of coarse solver in 1 iteration (or at most several iterations if the matrix is really badly conditioned). I also have a test that check if the matrix free operator is the same as assembled matrix (by doing  N vmults).

In case when the mesh is undeformed this is exactly what happens i.e, the solver coverges in 1 iteration. However if mesh is deformed the number of iterations of coarse level grows. The number of coarse iterations in case of Turek FSI3 benchmark may exceed 30. 

I've double-checked the solver, I'm updating mapping on every time step:
  system_mf_storage->update_mapping(*mapping);
  system_mf_storage_no_dirichlet->update_mapping(*mapping);
  for (unsigned int lvl = 0; lvl < triangulation.n_global_levels(); ++lvl)
    mg_level_data[lvl].update_mapping(*(level_mappings[lvl])); //level_mappings are shared pointers, the same as mapping.
I am also sure that I'm interpolating fine mapping to mg levels. 

The problem occurs only on level matrices, the system matrix that I'm solving is OK. The coarse solver assembler gets the same mapping as MatrixFree object. 

I've only spotted the problem at coarsest level, but I think it is also an issue on other levels. I am using 9.3.0-pre (cluster) and 9.2.0-pre (my PC)  versions of Deal.II, the same problem appears on both.

Best ,
Michał
Reply all
Reply to author
Forward
0 new messages