Title here
Summary here
This page gives a high-level overview of the code execution flow when solving a cardiac problem. To run simulations, see the User Tutorials. For an overview of the PDE solver hierarchy, see Finite Element Assemblers and Solvers. The steps that occur are as follows
AbstractCardiacProblem::Solve()
on their monodomain or
bidomain problem object (after calling Initialise
)AbstractCardiacProblem
owns a particular mono/bidomain finite element
solver (of base-class type AbstractDynamicLinearPdeSolver
; the concrete
class can be matrix-based or not; see
Finite Element Assemblers and Solvers
for more details); and for each printing timestep, does the following:Solve
on the solver.The Solve
method on AbstractDynamicLinearPdeSolver
does the following, for
each PDE timestep
PrepareForSetupLinearSystem
– solves cell models, see belowSetupLinearSystem
– see belowFinaliseLinearSystem
– relevant for bidomain solves, things like
checking compatibility, setting up a null spacePrepareForLinearSystem
is where the cell models are solved. It is
implemented in AbstractMonodomainSolver
/AbstractBidomainSolver
, where it
just calls SolveCellSystems
on the MonodomainTissue
/BidomainTissue
.
This is implemented in AbstractCardiacTissue::SolveCellSystems
, which
essentially does the following for each cell:ComputeExceptVoltage
to solve for all state variables
except V until the next PDE time stepUpdateCaches
. This calls the cell’s GetIIonic
to compute the
I_ion term and stores it in mIionicCacheReplicated
(replicated over
each process so no parallel communication is required later). It similarly
also calculates and caches the intracellular stimulus at each cell.SetupLinearSystem
uses any assemblers it has to set up the linear system
Ax=b that will be solved that timestep. A is just assembled once the
first timestep. For b the solver (or its assemblers) will require the ionic
current and stimulus at each cell; this is obtained by calling, for example,
mpMonodomainTissue->rGetIionicCacheReplicated()[index]
. For more details on
setting up b and the method SetupLinearSystem
see
Finite Element Assemblers and Solvers.