# Cardiac Mechanics Solvers

This page contains information on mechanics solvers for cardiac Chaste.

## Mechanics solvers

There are (as of the time of writing, Nov 2011) two mechanics solvers, an incompressible nonlinear elasticity solver and a compressible nonlinear elasticity solver, with the following hierarchy:

(Here and throughout this page we shorten class names - for example
`CompressibleSolver`

is actually called
`CompressibleNonlinearElasticitySolver`

). See
mechanics tutorials for more information on these
classes.

## Cardiac mechanics solvers

Cardiac mechanics solvers solve mechanics problems for which the forcing comes
from active tension developed in the tissue. Both incompressible and
compressible versions are required, and the cardiac-specific part of a
`CardiacMechanicsSolver`

doesn’t really care whether it is a compressible or
incompressible problem.

To complicate matters, there are two types of `CardiacMechanicsSolver`

, an
implicit solver and an explicit solver. The explicit solver basically uses
active tensions computed at the previous timestep, whereas the implicit solver
uses the current solution in computing the active tensions. (The appropriate
choice of solver depends on the types of contraction model used). For more
details on all of this see `[1]`

.

There are therefore four combinations:
`{incompressible,compressible} x {implicit,explicit}`

. The cardiac mechanics
solvers are templated over the solver they should inherit from.

To avoid `CardiacElectroMechanicsProblem`

(the class used by a user) also having
to be templated over the solver to use, which would be a pain for a user, all
declarations of the methods in `AbstractCardiacMechanicsSolver<SOLVER,DIM>`

are
in `AbstractCardiacMechanicsSolverInterface<DIM>`

, so that the problem class can
just hold a pointer to the latter:

`CardiacElectroMechanicsProblem<DIM>`

holds pointer to
`AbstractCardiacMechanicsSolverInterface<DIM>`

and allocates this to be one of

`ExplicitSolver<IncompressibleSolver,DIM>`

`ExplicitSolver<CompressibleSolver,DIM>`

`ImplicitSolver<IncompressibleSolver,DIM>`

`ImplicitSolver<CompressibleSolver,DIM>`

depending on whether the user wants compressible or incompressible, and based on which contraction model is used.

## References

`[1]`

Pathmanathan, Pras, et al. “Cardiac electromechanics: the effect of
contraction model on the mathematical problem and accuracy of the numerical
scheme.” *The Quarterly Journal of Mechanics & Applied Mathematics* 63.3 (2010):
375-399. link