geodynamics / pylith

PyLith is a finite element code for the solution of dynamic and quasi-static tectonic deformation problems.
Other
151 stars 96 forks source link

Add ability for user to identify blocks contributing to null space #38

Open baagaard-usgs opened 7 years ago

baagaard-usgs commented 7 years ago

PyLith currently automatically provides the PETSc solver with the null space corresponding to the rigid body motion of the entire domain. Through-going faults result in a larger null space associated with rigid body motion of each block of material between the through-going faults.

We need to give the user the ability to specify these blocks (each block could be specified by an array of material ids comprising the block) so that we can have PETSc compute these additional contributions to the null space and then specify them to the solver.

Add ability for user to add to the null space by providing sets of material blocks that can be used to compute a more complete null space.

Matt added DMPlexCreateRigidBodies() in plexfem.c.

DMPlexCreateRigidBodies - For the default global section, create rigid body modes by function space interpolation

Collective on DM

Input Arguments:
+ dm    - the DM
. nb    - The number of bodies
. label - The DMLabel marking each domain
. nids  - The number of ids per body
- ids   - An array of the label ids in sequence for each domain

See snes/tutorials.examples/ex62 line 435.

Implemented in baagaard/feature-multibody-nullspace.

DMPlexCreateRigidBodies() uses the PetscDS so it doesn't work in master where we don't use the PetscDS. This should be easily added to the multiphysics branch.

baagaard-usgs commented 6 years ago

This involves use of the discretization features used in the multiphysics development implementation, so it cannot be implemented until v3.0 or later.