Chaste
Release::2017.1
|
#include <AbstractBidomainSolver.hpp>
Protected Member Functions | |
void | InitialiseForSolve (Vec initialSolution) |
virtual void | CheckCompatibilityCondition () |
void | PrepareForSetupLinearSystem (Vec existingSolution) |
virtual void | FinaliseLinearSystem (Vec existingSolution) |
virtual Vec | GenerateNullBasis () const |
void | FinaliseForBath (bool computeMatrix, bool computeVector) |
Protected Member Functions inherited from AbstractDynamicLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, 2 > | |
void | InitialiseHdf5Writer () |
void | WriteOneStep (double time, Vec solution) |
Abstract Bidomain class containing some common functionality Inherits from AbstractDynamicLinearPdeSolver so child classes must implement SetupLinearSystem()
Definition at line 49 of file AbstractBidomainSolver.hpp.
AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractBidomainSolver | ( | bool | bathSimulation, |
AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > * | pMesh, | ||
BidomainTissue< SPACE_DIM > * | pTissue, | ||
BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, 2 > * | pBoundaryConditions | ||
) |
Constructor
bathSimulation | whether the simulation has a perfusing bath |
pMesh | pointer to the mesh |
pTissue | pointer to the tissue |
pBoundaryConditions | pointer to the boundary conditions container |
Definition at line 234 of file AbstractBidomainSolver.cpp.
References HeartConfig::Instance(), AbstractDynamicLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, 2 >::mMatrixIsConstant, AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mNullSpaceCreated, AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mpConfig, and AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mRowForAverageOfPhiZeroed.
|
virtual |
Destructor
Definition at line 257 of file AbstractBidomainSolver.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=1,3,5,..) 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,1,0,1....,0,1), so v.b = sum_{i=1,3,5..} b_i.
Definition at line 198 of file AbstractBidomainSolver.cpp.
References DistributedVector::Begin(), DistributedVector::End(), and EXCEPTION.
|
protected |
Apply any changes needed to the linear system for problems that include a bath. Checks the voltage-voltage block of the matrix at bath-nodes is zero, and puts a 1 on the diagonal.
Precondition: This method requires the system matrix to be in assembled state. Call FinaliseLhsMatrix() on your linear system if required.
computeMatrix | Whether the LHS matrix of the linear system has been computed |
computeVector | Whether the RHS vector of the linear system has been computed |
Definition at line 307 of file AbstractBidomainSolver.cpp.
References LinearSystem::GetLhsMatrix(), LinearSystem::GetMatrixElement(), LinearSystem::GetOwnershipRange(), LinearSystem::GetSize(), HeartRegionCode::IsRegionBath(), AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mBathSimulation, AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::mpLinearSystem, AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::mpMesh, LinearSystem::rGetLhsMatrix(), LinearSystem::rGetRhsVector(), PetscMatTools::SetElement(), and PetscVecTools::SetElement().
|
protectedvirtual |
FinaliseAssembleSystem
Called at the end of SetupLinearSystem(), before the system is solved.
If no dirichlet boundary conditions (i) Check compatibility condition to check we are solving a linear system that can be solved Then either: (a) If not setting average(phi)=0, we are solving a singular system, so set up a null space. (b) Apply average(phi)=0 constraint by altering the last row, to get a non-singular system
existingSolution | Solution at current time |
Reimplemented from AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
Definition at line 129 of file AbstractBidomainSolver.cpp.
References PetscTools::Destroy().
|
protectedvirtual |
Called by FinaliseAssembleSystem to get the null basis to use for the particular formulation of the bidomain equations used.
Definition at line 105 of file AbstractBidomainSolver.cpp.
References DistributedVector::Begin(), DistributedVectorFactory::CreateDistributedVector(), DistributedVectorFactory::CreateVec(), DistributedVector::End(), and DistributedVector::Restore().
|
inline |
Definition at line 192 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< 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 >.
Reimplemented in BidomainSolver< ELEMENT_DIM, SPACE_DIM >.
Definition at line 43 of file AbstractBidomainSolver.cpp.
References PetscTools::AmMaster(), AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::InitialiseForSolve(), HeartConfig::Instance(), and PetscMatTools::TurnOffVariableAllocationError().
Referenced by BidomainSolver< ELEMENT_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 99 of file AbstractBidomainSolver.cpp.
References PdeSimulationTime::GetNextTime(), and PdeSimulationTime::GetTime().
|
inline |
Reset the boundary conditions being used. The caller should deal with deleting the old bcc pointer.
pBcc | The new boundary conditions container. |
Definition at line 202 of file AbstractBidomainSolver.hpp.
Referenced by BidomainProblem< DIM >::AtBeginningOfTimestep(), and BidomainProblem< DIM >::OnEndOfTimestep().
void AbstractBidomainSolver< 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. |
Definition at line 262 of file AbstractBidomainSolver.cpp.
References BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::AddDirichletBoundaryCondition(), EXCEPTION, AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GetBoundaryConditions(), AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mFixedExtracellularPotentialNodes, AbstractLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::mpMesh, and AbstractBoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ResetDirichletCommunication().
Referenced by BidomainProblem< DIM >::CreateSolver().
void AbstractBidomainSolver< 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. Ought to be an odd number... |
Definition at line 295 of file AbstractBidomainSolver.cpp.
References EXCEPTION, and AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::mRowForAverageOfPhiZeroed.
|
protected |
Whether the simulation involves a perfusing bath
Definition at line 53 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::FinaliseForBath().
|
protected |
Used when pinning nodes to resolve singularity. This vector indicates the global indices of the nodes to be pinned
Definition at line 70 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetFixedExtracellularPotentialNodes().
|
protected |
Used when intialising null-space solver to resolve singularity
Definition at line 62 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractBidomainSolver().
|
protected |
The PDE to be solved.
Definition at line 56 of file AbstractBidomainSolver.hpp.
Referenced by BidomainSolver< ELEMENT_DIM, SPACE_DIM >::BidomainSolver().
|
protected |
Boundary conditions
Definition at line 59 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< DIM, DIM >::GetBoundaryConditions().
|
protected |
Local cache of the configuration singleton instance
Definition at line 65 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractBidomainSolver().
|
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 77 of file AbstractBidomainSolver.hpp.
Referenced by AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::AbstractBidomainSolver(), and AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetRowForAverageOfPhiZeroed().