[petsc-users] Help for MatNullSpaceCreateRigidBody
Jordi Manyer Fuertes
jordi.manyer at monash.edu
Tue Dec 5 06:57:23 CST 2023
Thanks for the prompt response. Both answers look like what I'm doing.
After playing a bit more with solver, I managed to make it run in
parallel with different boundary conditions (full dirichlet bcs, vs
mixed newmann + dirichlet). This raises two questions:
- How relevant are boundary conditions (eliminating dirichlet rows/cols
vs weak newmann bcs) to the solver? Should I modify something when
changing boundary conditions?
- Also, the solver did well with the old bcs when run in a single
processor (but not in parallel). This seems odd, since parallel and
serial behavior should be consistent (or not?). Could it be fault of the
PCGAMG? I believe the default local solver is ILU, shoud I be changing
it to LU or something else for these kind of problems?
Thank you both again,
Jordi
On 5/12/23 04:46, Matthew Knepley wrote:
> On Mon, Dec 4, 2023 at 12:01 PM Jordi Manyer Fuertes via petsc-users
> <petsc-users at mcs.anl.gov> wrote:
>
> Dear PETSc users/developpers,
>
> I am currently trying to use the method `MatNullSpaceCreateRigidBody`
> together with `PCGAMG` to efficiently precondition an elasticity
> solver
> in 2D/3D.
>
> I have managed to make it work in serial (or with 1 MPI rank) with
> h-independent number of iterations (which is great), but the solver
> diverges in parallel.
>
> I assume it has to do with the coordinate vector I am building the
> null-space with not being correctly setup. The documentation is
> not that
> clear on which nodes exactly have to be set in each partition.
> Does it
> require nodes corresponding to owned dofs, or all dofs in each
> partition
> (owned+ghost)? What ghost layout should the `Vec` have?
>
> Any other tips about what I might be doing wrong?
>
>
> What we assume is that you have some elastic problem formulated in
> primal unknowns (displacements) so that the solution vector looks like
> this:
>
> [ d^0_x d^0_y d^0_z d^1_x ..... ]
>
> or whatever spatial dimension you have. We expect to get a global
> vector that looks like that, but instead
> of displacements, we get the coordinates that each displacement
> corresponds to. We make the generators of translations:
>
> [ 1 0 0 1 0 0 1 0 0 1 0 0... ]
> [ 0 1 0 0 1 0 0 1 0 0 1 0... ]
> [ 0 0 1 0 0 1 0 0 1 0 0 1... ]
>
> for which we do not need the coordinates, and then the generators of
> rotations about each axis, for which
> we _do_ need the coordinates, since we need to know how much each
> point moves if you rotate about some center.
>
> Does that make sense?
>
> Thanks,
>
> Matt
>
> Thanks,
>
> Jordi
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20231205/bd372563/attachment.html>
More information about the petsc-users
mailing list