Chaste Release::3.1
BidomainProblem< DIM > Class Template Reference

#include <BidomainProblem.hpp>

Inheritance diagram for BidomainProblem< DIM >:
Collaboration diagram for BidomainProblem< DIM >:

List of all members.

Public Member Functions

 BidomainProblem (AbstractCardiacCellFactory< DIM > *pCellFactory, bool hasBath=false)
 BidomainProblem ()
void SetFixedExtracellularPotentialNodes (std::vector< unsigned > nodes)
void SetNodeForAverageOfPhiZeroed (unsigned node)
BidomainTissue< DIM > * GetBidomainTissue ()
void WriteInfo (double time)
virtual void DefineWriterColumns (bool extending)
virtual void WriteOneStep (double time, Vec voltageVec)
void PreSolveChecks ()
void AtBeginningOfTimestep (double time)
void OnEndOfTimestep (double time)
void SetUpAdditionalStoppingTimes (std::vector< double > &rAdditionalStoppingTimes)
template<class Archive >
void LoadExtraArchiveForBidomain (Archive &archive, unsigned version)
bool GetHasBath ()
void SetElectrodes ()

Protected Member Functions

Vec CreateInitialCondition ()
void AnalyseMeshForBath ()
virtual AbstractCardiacTissue
< DIM > * 
CreateCardiacTissue ()
virtual
AbstractDynamicLinearPdeSolver
< DIM, DIM, 2 > * 
CreateSolver ()

Protected Attributes

BidomainTissue< DIM > * mpBidomainTissue
std::vector< unsignedmFixedExtracellularPotentialNodes
unsigned mExtracelluarColumnId
unsigned mRowForAverageOfPhiZeroed
bool mHasBath
boost::shared_ptr< Electrodes
< DIM > > 
mpElectrodes
AbstractBidomainSolver< DIM,
DIM > * 
mpSolver

Private Member Functions

template<class Archive >
void save (Archive &archive, const unsigned int version) const
template<class Archive >
void load (Archive &archive, const unsigned int version)

Friends

class boost::serialization::access
class TestPCTwoLevelsBlockDiagonal
class TestBidomainWithBathProblem
class TestCardiacSimulationArchiver

Detailed Description

template<unsigned DIM>
class BidomainProblem< DIM >

Class which specifies and solves a bidomain problem.

The solution vector is of the form: (V_1, phi_1, V_2, phi_2, ......, V_N, phi_N), where V_j is the voltage at node j and phi_j is the extracellular potential at node j.

Definition at line 65 of file BidomainProblem.hpp.


Constructor & Destructor Documentation

template<unsigned DIM>
BidomainProblem< DIM >::BidomainProblem ( AbstractCardiacCellFactory< DIM > *  pCellFactory,
bool  hasBath = false 
)

Constructor

Parameters:
pCellFactoryUser defined cell factory which shows how the pde should create cells.
hasBathWhether the simulation has a bath (if this is true, all elements with attribute = 1 will be set to be bath elements (the rest should have attribute = 0)).

Definition at line 156 of file BidomainProblem.cpp.

References BidomainProblem< DIM >::mFixedExtracellularPotentialNodes.

template<unsigned DIM>
BidomainProblem< DIM >::BidomainProblem ( )

Constructor just used for archiving

Definition at line 167 of file BidomainProblem.cpp.

References BidomainProblem< DIM >::mFixedExtracellularPotentialNodes.


Member Function Documentation

template<unsigned DIM>
void BidomainProblem< DIM >::AtBeginningOfTimestep ( double  time) [virtual]

Called at beginning of each time step in the main time-loop in AbstractCardiacProblem::Solve(). Overloaded here to switch on the electrodes (if there are any).

Parameters:
timethe current time

Todo:
#1159 #1324 heart/src/problem/AbstractCardiacProblem.hpp:657 expects both pointing at the same place when unarchiving

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 292 of file BidomainProblem.cpp.

template<unsigned DIM>
AbstractCardiacTissue< DIM > * BidomainProblem< DIM >::CreateCardiacTissue ( ) [protected, virtual]

Create our bidomain PDE object

Implements AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 116 of file BidomainProblem.cpp.

References HeartConfig::GetUseStateVariableInterpolation(), and HeartConfig::Instance().

template<unsigned DIM>
Vec BidomainProblem< DIM >::CreateInitialCondition ( ) [protected, virtual]
template<unsigned DIM>
AbstractDynamicLinearPdeSolver< DIM, DIM, 2 > * BidomainProblem< DIM >::CreateSolver ( ) [protected, virtual]
template<unsigned DIM>
void BidomainProblem< DIM >::DefineWriterColumns ( bool  extending) [virtual]

Define what variables are written to the primary results file. Adds the extracellular potential.

Parameters:
extendingwhether we are extending an existing results file

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 229 of file BidomainProblem.cpp.

References AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineExtraVariablesWriterColumns(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineWriterColumns().

template<unsigned DIM>
BidomainTissue< DIM > * BidomainProblem< DIM >::GetBidomainTissue ( )

Get the pde. Can only be called after Initialise()

Definition at line 196 of file BidomainProblem.cpp.

template<unsigned DIM>
bool BidomainProblem< DIM >::GetHasBath ( ) [virtual]

Return whether this is a bidomain problem with bath or not

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 381 of file BidomainProblem.cpp.

template<unsigned DIM>
template<class Archive >
void BidomainProblem< DIM >::load ( Archive &  archive,
const unsigned int  version 
) [inline, private]

Load the member variables from an archive.

Parameters:
archive
version

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 97 of file BidomainProblem.hpp.

template<unsigned DIM>
template<class Archive >
void BidomainProblem< DIM >::LoadExtraArchiveForBidomain ( Archive &  archive,
unsigned  version 
)

Used when loading a set of archives written by a parallel simulation onto a single process. Loads data from the given process-specific archive (written by a non-master process) and merges it into our data.

Parameters:
archivethe archive to load
versionthe archive file version
Note:
The process-specific archives currently contain the following data. If the layout changes, then this method will need to be altered, since it hard-codes knowledge of the order in which things are archived.
  1. Stuff known by AbstractCardiacProblem
  2. mpElectrodes->mpBoundaryConditionsContainer

This gets called by AbstractCardiacProblem::LoadExtraArchive when it's done the generic stuff.

Todo:
#1159 sanity check that the contents of p_bcc and mpElectrodes->GetBoundaryConditionsContainer() match.

Definition at line 300 of file BidomainProblem.hpp.

References AbstractCardiacProblem< DIM, DIM, 2 >::mpBoundaryConditionsContainer, and AbstractCardiacProblem< DIM, DIM, 2 >::mpMesh.

Referenced by AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::LoadExtraArchive().

template<unsigned DIM>
void BidomainProblem< DIM >::OnEndOfTimestep ( double  time) [virtual]

Called at end of each time step in the main time-loop in AbstractCardiacProblem::Solve(). Overloaded here to switch off the electrodes (if there are any).

Parameters:
timethe current time

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 333 of file BidomainProblem.cpp.

References HeartConfig::Instance().

template<unsigned DIM>
void BidomainProblem< DIM >::PreSolveChecks ( ) [virtual]

Performs a series of checks before solving. Checks that a suitable method of resolving the singularity is being used.

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 255 of file BidomainProblem.cpp.

References EXCEPTION, HeartConfig::GetUseRelativeTolerance(), HeartConfig::Instance(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::PreSolveChecks().

template<unsigned DIM>
template<class Archive >
void BidomainProblem< DIM >::save ( Archive &  archive,
const unsigned int  version 
) const [inline, private]

Save the member variables to an archive.

Parameters:
archive
version

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 80 of file BidomainProblem.hpp.

template<unsigned DIM>
void BidomainProblem< DIM >::SetElectrodes ( ) [virtual]

Set an electrode object (which provides boundary conditions). Only valid if there is a bath.

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 275 of file BidomainProblem.cpp.

References HeartConfig::Instance().

template<unsigned DIM>
void BidomainProblem< DIM >::SetFixedExtracellularPotentialNodes ( std::vector< unsigned nodes)

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.

Parameters:
nodesthe 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 178 of file BidomainProblem.cpp.

template<unsigned DIM>
void BidomainProblem< DIM >::SetNodeForAverageOfPhiZeroed ( unsigned  node)

Set which row of the linear system should be used to enforce the condition that the average of phi_e is zero. If not called, this condition will not be used.

Parameters:
nodethe mesh node index giving the row at which to impose the constraint

Definition at line 190 of file BidomainProblem.cpp.

template<unsigned DIM>
void BidomainProblem< DIM >::SetUpAdditionalStoppingTimes ( std::vector< double > &  rAdditionalStoppingTimes) [virtual]

Method to fill in a vector of additional stopping times consisting of the times when the electrodes are to be turned on and off

Parameters:
rAdditionalStoppingTimesreference to vector that will contain the on and off times for the electrodes

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 371 of file BidomainProblem.cpp.

template<unsigned DIM>
void BidomainProblem< DIM >::WriteInfo ( double  time) [virtual]

Print out time and max/min voltage/phi_e values at current time.

Parameters:
timecurrent time.

Implements AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 203 of file BidomainProblem.cpp.

References PetscTools::AmMaster().

template<unsigned DIM>
void BidomainProblem< DIM >::WriteOneStep ( double  time,
Vec  voltageVec 
) [virtual]

Write one timestep of output data to the primary results file. Adds the extracellular potential to the results.

Parameters:
timethe current time
voltageVecthe solution vector to write

Implements AbstractCardiacProblem< DIM, DIM, 2 >.

Definition at line 244 of file BidomainProblem.cpp.

References AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::WriteExtraVariablesOneStep().


Friends And Related Function Documentation

template<unsigned DIM>
friend class boost::serialization::access [friend]

Needed for serialization.

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Reimplemented in BidomainWithBathProblem< DIM >.

Definition at line 68 of file BidomainProblem.hpp.


Member Data Documentation

template<unsigned DIM>
unsigned BidomainProblem< DIM >::mExtracelluarColumnId [protected]

Used by the writer

Definition at line 124 of file BidomainProblem.hpp.

template<unsigned DIM>
std::vector<unsigned> BidomainProblem< DIM >::mFixedExtracellularPotentialNodes [protected]

Nodes at which the extracellular voltage is fixed to zero (replicated)

Definition at line 122 of file BidomainProblem.hpp.

Referenced by BidomainProblem< DIM >::BidomainProblem().

template<unsigned DIM>
bool BidomainProblem< DIM >::mHasBath [protected]

Whether the mesh has a bath, ie whether this is a bath simulation

Definition at line 132 of file BidomainProblem.hpp.

Referenced by BidomainProblem< 3 >::load(), and BidomainProblem< 3 >::save().

template<unsigned DIM>
BidomainTissue<DIM>* BidomainProblem< DIM >::mpBidomainTissue [protected]

The bidomain PDE

Definition at line 119 of file BidomainProblem.hpp.

Referenced by BidomainProblem< 3 >::load(), and BidomainProblem< 3 >::save().

template<unsigned DIM>
boost::shared_ptr<Electrodes<DIM> > BidomainProblem< DIM >::mpElectrodes [protected]

Electrodes used to provide a shock

Definition at line 135 of file BidomainProblem.hpp.

Referenced by BidomainProblem< 3 >::load(), and BidomainProblem< 3 >::save().

template<unsigned DIM>
AbstractBidomainSolver<DIM,DIM>* BidomainProblem< DIM >::mpSolver [protected]

We need to save the solver that is being used to be able to switch off the electrodes (by adding default boundary conditions to the solver)

Reimplemented from AbstractCardiacProblem< DIM, DIM, 2 >.

Reimplemented in AdaptiveBidomainProblem.

Definition at line 154 of file BidomainProblem.hpp.

template<unsigned DIM>
unsigned BidomainProblem< DIM >::mRowForAverageOfPhiZeroed [protected]

Another method of resolving the singularity in the bidomain equations. Specifies a row of the matrix at which to impose an extra condition.

Definition at line 129 of file BidomainProblem.hpp.

Referenced by BidomainProblem< 3 >::load(), and BidomainProblem< 3 >::save().


The documentation for this class was generated from the following files: