Chaste
Release::2017.1
|
#include <AbstractExtendedBidomainSolver.hpp>
Protected Member Functions | |
void | InitialiseForSolve (Vec initialSolution) |
virtual void | CheckCompatibilityCondition () |
void | PrepareForSetupLinearSystem (Vec existingSolution) |
virtual void | FinaliseLinearSystem (Vec existingSolution) |
virtual Vec | GenerateNullBasis () const |
Protected Member Functions inherited from AbstractDynamicLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, 3 > | |
void | InitialiseHdf5Writer () |
void | WriteOneStep (double time, Vec solution) |
Abstract class with shared functionalities for different extended bidomain solvers.
Definition at line 50 of file AbstractExtendedBidomainSolver.hpp.
AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractExtendedBidomainSolver | ( | bool | bathSimulation, |
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > * | pMesh, | ||
ExtendedBidomainTissue< SPACE_DIM > * | pTissue, | ||
BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, 3 > * | pBcc | ||
) |
Constructor stores the mesh and pde and sets up boundary conditions.
bathSimulation | Whether the simulation has a perfusing bath |
pMesh | pointer to the mesh |
pTissue | pointer to the PDE |
pBcc | pointer to the boundary conditions container |
Definition at line 202 of file AbstractExtendedBidomainSolver.cpp.
References HeartConfig::Instance(), AbstractDynamicLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, 3 >::mMatrixIsConstant, AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mNullSpaceCreated, AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mpConfig, AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mpExtendedBidomainAssembler, and AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mRowForAverageOfPhiZeroed.
|
virtual |
Destructor.
Definition at line 227 of file AbstractExtendedBidomainSolver.cpp.
|
protectedvirtual |
Checks whether the linear system will have a solution (if so, infinite solutions) instead of zero solutions. The condition is, if the linear system is Ax=b, that sum b_i over for all the PHI_E components (ie i=2,5,8,..) is zero.
This check is not made if running in parallel, or in debug mode.
The reason why the sum must be zero: the Fredholm alternative states that a singular system Ax=b has a solution if and only if v.b=0 for all v in ker(A) (ie all v such that Av=b). The nullspace ker(A) is one dimensional with basis vector v = (0,0,1,0,0,1....0,0,1), so v.b = sum_{i=2,5,8..} b_i.
Definition at line 166 of file AbstractExtendedBidomainSolver.cpp.
References DistributedVector::Begin(), DistributedVector::End(), and EXCEPTION.
|
protectedvirtual |
FinaliseAssembleSystem
Called at the end of SetupLinearSystem(), before the system is solver Here, used to avoid problems with phi_e drifting by one of 3 methods: pinning nodes, using a null space, or using an "average phi_e = 0" row.
existingSolution | Solution at current time |
Reimplemented from AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
Definition at line 111 of file AbstractExtendedBidomainSolver.cpp.
References PetscTools::Destroy().
|
protectedvirtual |
Called by FinaliseAssembleSystem to get the null basis to use for the particular formulation of the extended idomain equations used.
Definition at line 86 of file AbstractExtendedBidomainSolver.cpp.
References DistributedVector::Begin(), DistributedVectorFactory::CreateDistributedVector(), DistributedVectorFactory::CreateVec(), DistributedVector::End(), and DistributedVector::Restore().
|
inline |
Definition at line 186 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetFixedExtracellularPotentialNodes().
|
protectedvirtual |
Create the linear system object if it hasn't been already. Can use an initial solution as PETSc template, or base it on the mesh size.
initialSolution | an initial guess |
Reimplemented from AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
Definition at line 39 of file AbstractExtendedBidomainSolver.cpp.
References AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::InitialiseForSolve(), HeartConfig::Instance(), and PetscMatTools::TurnOffVariableAllocationError().
Referenced by ExtendedBidomainSolver< ELEM_DIM, SPACE_DIM >::InitialiseForSolve().
|
protectedvirtual |
PrepareForSetupLinearSystem
Called at the beginning of SetupLinearSystem(). Here, used to integrate cell model odes.
existingSolution | is the voltage to feed into the cell models |
Reimplemented from AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
Definition at line 80 of file AbstractExtendedBidomainSolver.cpp.
References PdeSimulationTime::GetNextTime(), and PdeSimulationTime::GetTime().
void AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetFixedExtracellularPotentialNodes | ( | std::vector< unsigned > | fixedExtracellularPotentialNodes | ) |
Set the nodes at which phi_e (the extracellular potential) is fixed to zero. This does not necessarily have to be called. If it is not, phi_e is only defined up to a constant.
fixedExtracellularPotentialNodes | the nodes to be fixed. |
NOTE: currently, the value of phi_e at the fixed nodes cannot be set to be anything other than zero.
Definition at line 232 of file AbstractExtendedBidomainSolver.cpp.
References BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::AddDirichletBoundaryCondition(), EXCEPTION, AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GetBoundaryConditions(), AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mFixedExtracellularPotentialNodes, AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mpBoundaryConditions, AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::mpMesh, and AbstractBoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ResetDirichletCommunication().
Referenced by ExtendedBidomainProblem< DIM >::CreateSolver().
void AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetRowForAverageOfPhiZeroed | ( | unsigned | rowMeanPhiEZero | ) |
Used when removing a single row to resolve singularity and replacing it with a constraint on the average phi_e being zero. It is set from the problem class.
rowMeanPhiEZero | indicates the row of the matrix to be replaced. |
Definition at line 264 of file AbstractExtendedBidomainSolver.cpp.
References EXCEPTION, and AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mRowForAverageOfPhiZeroed.
Referenced by ExtendedBidomainProblem< DIM >::CreateSolver().
|
protected |
Whether the simulation involves a perfusing bath
Definition at line 57 of file AbstractExtendedBidomainSolver.hpp.
|
protected |
Used when pinning nodes to resolve singularity. This vector indicates the global indices of the nodes to be pinned
Definition at line 82 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetFixedExtracellularPotentialNodes().
|
protected |
Used when intialising null-space solver to resolve singularity
Definition at line 76 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractExtendedBidomainSolver().
|
protected |
Boundary conditions
Definition at line 64 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< DIM, DIM >::GetBoundaryConditions(), and AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetFixedExtracellularPotentialNodes().
|
protected |
Local cache of the configuration singleton instance
Definition at line 73 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractExtendedBidomainSolver().
|
protected |
The extended bidomain assembler, used to set up the LHS matrix, (but not used to set uo the RHS)
Definition at line 70 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractExtendedBidomainSolver().
|
protected |
The tissue object over which to solve the equation
Definition at line 61 of file AbstractExtendedBidomainSolver.hpp.
|
protected |
Used when removing a single row to resolve singularity and replacing it with a constraint on the average phi_e being zero. This number indicates the row of the matrix to be replaced. This is INT_MAX if unset. It is set from the problem class.
Definition at line 90 of file AbstractExtendedBidomainSolver.hpp.
Referenced by AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractExtendedBidomainSolver(), and AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetRowForAverageOfPhiZeroed().