![]() |
Chaste Commit::333233612e3dcc941d260418acd7b5ccdc30390e
|
#include <ExtendedBidomainProblem.hpp>
Protected Member Functions | |
Vec | CreateInitialCondition () |
void | AnalyseMeshForBath () |
void | ProcessExtracellularStimulus () |
virtual AbstractCardiacTissue< DIM > * | CreateCardiacTissue () |
virtual AbstractDynamicLinearPdeSolver< DIM, DIM, 3 > * | CreateSolver () |
![]() | |
virtual void | CreateMeshFromHeartConfig () |
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 | TestArchivingExtendedBidomain |
Class which specifies and solves an extended bidomain problem.
See Buist ML, Poh YC. An Extended Bidomain Framework Incorporating Multiple Cell Types. Biophysical Journal, Volume 99, Issue 1, 13-18, 7 July 2010.
Briefly, the problems consits of 3 equations, 2 parabolic and one elliptic. The space is divided in 3 compartments:
The three unkowns are the the intracellular potential of the two cells and the extracellular potential. This class allows the user to specify the parameters specific for the these simulations and also different intracellular conductivities for the two cells.
The solution vector used for calculations is arranged as a striped vector with this order:
Unlike a bidomain problem, a node-wise extracellular stimulus can be set up in extended bidomain problems in absence of a bath. This is done by setting a stimulus factory via the method SetExtracellularStimulusFactory. See documentation of AbstractStimulusFactory and ElectrodesStimulusFactory for more details. Note that compatibility conditions will be taken care of by this class by calling specific methods within the stimulus factory class.
Definition at line 85 of file ExtendedBidomainProblem.hpp.
ExtendedBidomainProblem< DIM >::ExtendedBidomainProblem | ( | AbstractCardiacCellFactory< DIM > * | pCellFactory, |
AbstractCardiacCellFactory< DIM > * | pSecondCellFactory, | ||
bool | hasBath = false |
||
) |
Constructor
pCellFactory | User defined cell factory which shows how the pde should create cells. |
pSecondCellFactory | User defined cell factory which shows how the pde should create cells. |
hasBath | Whether 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 46 of file ExtendedBidomainProblem.cpp.
References ExtendedBidomainProblem< DIM >::mFixedExtracellularPotentialNodes.
ExtendedBidomainProblem< DIM >::ExtendedBidomainProblem | ( | ) |
Archiving constructor
Definition at line 63 of file ExtendedBidomainProblem.cpp.
References ExtendedBidomainProblem< DIM >::mFixedExtracellularPotentialNodes.
|
virtual |
Destructor
Definition at line 260 of file ExtendedBidomainProblem.cpp.
|
protected |
Annotate bath nodes with the correct region code, if a bath is present. Will throw if mHasBath is set but no bath is present in the mesh.
|
protectedvirtual |
Implements AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 141 of file ExtendedBidomainProblem.cpp.
References HeartConfig::GetIntracellularConductivities(), and HeartConfig::Instance().
|
protectedvirtual |
Create normal initial condition but overwrite V to zero for bath nodes, if there are any.
Reimplemented from AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 78 of file ExtendedBidomainProblem.cpp.
References DistributedVector::Begin(), DistributedVectorFactory::CreateDistributedVector(), DistributedVectorFactory::CreateVec(), DistributedVector::End(), and DistributedVector::Restore().
|
protectedvirtual |
Implements AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 228 of file ExtendedBidomainProblem.cpp.
|
virtual |
Define what variables are written to the primary results file. Hardcoded variable names are "V", "V_2" and "Phi_e" for the three variables. If you request any extra variable (via HeartConfig), this method will also define the extra variables by calling a method in the parent class.
extending | whether we are extending an existing results file |
Reimplemented from AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 341 of file ExtendedBidomainProblem.cpp.
References AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineExtraVariablesWriterColumns(), TimeStepper::EstimateTimeSteps(), and HeartConfig::Instance().
ExtendedBidomainTissue< DIM > * ExtendedBidomainProblem< DIM >::GetExtendedBidomainTissue | ( | ) |
Definition at line 306 of file ExtendedBidomainProblem.cpp.
|
virtual |
Reimplemented from AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 438 of file ExtendedBidomainProblem.cpp.
|
inlineprivate |
Load the member variables from an archive.
archive | |
version |
Definition at line 160 of file ExtendedBidomainProblem.hpp.
References DistributedVector::Begin(), PetscTools::Destroy(), DistributedVector::End(), ArchiveLocationInfo::GetArchiveRelativePath(), Hdf5DataReader::GetVariableOverNodes(), FileFinder::IsAbsolutePath(), ExtendedBidomainProblem< DIM >::mAmFirstCell, ExtendedBidomainProblem< DIM >::mAmGap, ExtendedBidomainProblem< DIM >::mAmSecondCell, ExtendedBidomainProblem< DIM >::mApplyAveragePhieZeroConstraintAfterSolving, ExtendedBidomainProblem< DIM >::mCmFirstCell, ExtendedBidomainProblem< DIM >::mCmSecondCell, ExtendedBidomainProblem< DIM >::mFixedExtracellularPotentialNodes, ExtendedBidomainProblem< DIM >::mGGap, ExtendedBidomainProblem< DIM >::mGgapHeterogeneityRegions, ExtendedBidomainProblem< DIM >::mGgapHeterogenousValues, ExtendedBidomainProblem< DIM >::mHasBath, ExtendedBidomainProblem< DIM >::mIntracellularConductivitiesSecondCell, ExtendedBidomainProblem< DIM >::mpExtendedBidomainTissue, AbstractCardiacProblem< DIM, DIM, 3 >::mpMesh, ExtendedBidomainProblem< DIM >::mRowForAverageOfPhiZeroed, AbstractCardiacProblem< DIM, DIM, 3 >::mSolution, ExtendedBidomainProblem< DIM >::mUserHasSetBidomainValuesExplicitly, ExtendedBidomainProblem< DIM >::mUserSpecifiedSecondCellConductivities, ExtendedBidomainProblem< DIM >::mUserSuppliedExtracellularStimulus, ExtendedBidomainProblem< DIM >::mVariablesIDs, and DistributedVector::Restore().
|
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, 3 >.
Definition at line 418 of file ExtendedBidomainProblem.cpp.
References EXCEPTION, HeartConfig::Instance(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::PreSolveChecks().
|
protected |
Small helper tidy-up method that incorporates everything related to the initialisation of the extracellular stimulus.
It checks whether there is any extracellular stimulus, If not, it creates a one (with default implementation to zero stimulus). In any case, it passes the mesh into the stimulus, calls the SetCompatibleExtracellularStimulus method and also checks if there are any grounded nodes. If so, it calls SetFixedExtracellularPotentialNodes.
Definition at line 105 of file ExtendedBidomainProblem.cpp.
References PetscTools::Barrier().
|
inlineprivate |
Save the member variables to an archive.
archive | |
version |
Definition at line 99 of file ExtendedBidomainProblem.hpp.
References Hdf5DataWriter::DefineFixedDimension(), Hdf5DataWriter::DefineUnlimitedDimension(), Hdf5DataWriter::DefineVariable(), Hdf5DataWriter::EndDefineMode(), ArchiveLocationInfo::GetArchiveRelativePath(), ExtendedBidomainProblem< DIM >::mAmFirstCell, ExtendedBidomainProblem< DIM >::mAmGap, ExtendedBidomainProblem< DIM >::mAmSecondCell, ExtendedBidomainProblem< DIM >::mApplyAveragePhieZeroConstraintAfterSolving, ExtendedBidomainProblem< DIM >::mCmFirstCell, ExtendedBidomainProblem< DIM >::mCmSecondCell, ExtendedBidomainProblem< DIM >::mFixedExtracellularPotentialNodes, ExtendedBidomainProblem< DIM >::mGGap, ExtendedBidomainProblem< DIM >::mGgapHeterogeneityRegions, ExtendedBidomainProblem< DIM >::mGgapHeterogenousValues, ExtendedBidomainProblem< DIM >::mHasBath, ExtendedBidomainProblem< DIM >::mIntracellularConductivitiesSecondCell, ExtendedBidomainProblem< DIM >::mpExtendedBidomainTissue, AbstractCardiacProblem< DIM, DIM, 3 >::mpMesh, ExtendedBidomainProblem< DIM >::mRowForAverageOfPhiZeroed, AbstractCardiacProblem< DIM, DIM, 3 >::mSolution, ExtendedBidomainProblem< DIM >::mUserHasSetBidomainValuesExplicitly, ExtendedBidomainProblem< DIM >::mUserSpecifiedSecondCellConductivities, ExtendedBidomainProblem< DIM >::mUserSuppliedExtracellularStimulus, ExtendedBidomainProblem< DIM >::mVariablesIDs, Hdf5DataWriter::PutStripedVector(), and Hdf5DataWriter::PutUnlimitedVariable().
void ExtendedBidomainProblem< DIM >::SetExtendedBidomainParameters | ( | double | Am1, |
double | Am2, | ||
double | AmGap, | ||
double | Cm1, | ||
double | Cm2, | ||
double | Ggap | ||
) |
Allow the user to specify different values for the bidomain parameters in the extened bidomain framework. This method switches the mUserHasSetBidomainValuesExplicitly to true and tells the problem to overwrite the corresponding parameters in HeartConfig. It needs to be called before Initialise() to have any effect.
Am1 | value of the surface-to-volume ratio for the first cell |
Am2 | value of the surface-to-volume ratio for the second cell |
AmGap | value of the surface-to-volume ratio for the gap junction |
Cm1 | value of the capacitance for the first cell |
Cm2 | value of the capacitance for the second cell |
Ggap | value, in mS of the gap junction conductance |
Definition at line 197 of file ExtendedBidomainProblem.cpp.
void ExtendedBidomainProblem< DIM >::SetExtracellularStimulusFactory | ( | AbstractStimulusFactory< DIM > * | pFactory | ) |
Sets a stimulus factory as the extracellular one.
pFactory | the factory to be set. |
Definition at line 221 of file ExtendedBidomainProblem.cpp.
void ExtendedBidomainProblem< 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.
nodes | the nodes to be fixed. |
Definition at line 279 of file ExtendedBidomainProblem.cpp.
void ExtendedBidomainProblem< DIM >::SetGgapHeterogeneities | ( | std::vector< boost::shared_ptr< AbstractChasteRegion< DIM > > > & | rGgapHeterogeneityRegions, |
std::vector< double > & | rGgapValues | ||
) |
Set the values of mCellHeterogeneityRegions and mGgapValues for the heterogeneities of Ggap. It just sets the member variables here that will later be passed on to the tissue object. It also checks that the two have the same size. Throws otherwise.
rGgapHeterogeneityRegions | a vector of heterogeneity regions for gap junctions |
rGgapValues | a vector (of the same size as rGgapHeterogeneityRegions) with the respective values of Ggap for every region. |
Definition at line 210 of file ExtendedBidomainProblem.cpp.
References EXCEPTION.
void ExtendedBidomainProblem< DIM >::SetHasBath | ( | bool | hasBath | ) |
Set whether there is a bath or not. Useful for covering exceptions only (for example if bath problems are not supported and there is no method to analyse the mesh for a bath).
hasBath | whether we want the problem to have bath or not. |
Definition at line 444 of file ExtendedBidomainProblem.cpp.
void ExtendedBidomainProblem< DIM >::SetIntracellularConductivitiesForSecondCell | ( | c_vector< double, DIM > | conductivities | ) |
Allow the user to specify different values for the conductivities of the second cell type
conductivities | : the intracellular conductivities of the second cell that you wish to set |
Definition at line 269 of file ExtendedBidomainProblem.cpp.
void ExtendedBidomainProblem< 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.
node | the mesh node index giving the row at which to impose the constraint |
Definition at line 292 of file ExtendedBidomainProblem.cpp.
|
virtual |
Print out time and max/min of the intracellular potential of the two cells and phi_e values at current time.
time | current time. |
Implements AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 313 of file ExtendedBidomainProblem.cpp.
References PetscTools::AmMaster(), and CHASTE_PETSC_NULLPTR.
|
virtual |
Write one timestep of output data to the primary results file. The solution of the problem is in terms of V_1, V_2 and Phi_e (i.e., transmembrane potentials of the two cells plus extracellular potential). It then writes to file V_1, V_2 and Phi_e.
It also writes any extra variable (defined by HeartConfig). Note that it does the job by calling the method in the parent class. This implies that the extra variable must be in the first cell (not the second) because the generic method to write extra variables only looks into the first cell factory.
time | the current time |
voltageVec | the solution vector to write |
Implements AbstractCardiacProblem< DIM, DIM, 3 >.
Definition at line 381 of file ExtendedBidomainProblem.cpp.
References DistributedVector::Begin(), PetscTools::Destroy(), DistributedVector::End(), DistributedVector::Restore(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::WriteExtraVariablesOneStep().
|
friend |
Needed for serialization.
Definition at line 88 of file ExtendedBidomainProblem.hpp.
|
friend |
Definition at line 90 of file ExtendedBidomainProblem.hpp.
|
protected |
Am for the first cell, set by the user and, if so, set into the PDE
Definition at line 268 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Am for the gap junctions, set by the user and, if so, set into the PDE
Definition at line 272 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Am for the second cell, set by the user and, if so, set into the PDE
Definition at line 270 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
An alternative method for constraining the solution and resolving singularity. Singular system is solved and THEN the constraint is applied on the phi_e (after calculating.
This variable is checked within the specialization of "OnEndOfTimestep" method. False by default as initialised in the constructor.
Definition at line 308 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Cm for the first cell, set by the user and, if so, set into the PDE
Definition at line 274 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Cm for the second cell, set by the user and, if so, set into the PDE
Definition at line 276 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Nodes at which the extracellular voltage is fixed to zero (replicated)
Definition at line 246 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::ExtendedBidomainProblem(), ExtendedBidomainProblem< DIM >::ExtendedBidomainProblem(), ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Conductance, in mS of the gap junction conductance, set by the user and, if so, set into the PDE (otherwise its default value is 0
Definition at line 279 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Vector of Ggap heterogeneity regions. Set by the user, it is passed on to the tissue object. If empty (i.e., the user did not specify any heterogeneities) then the empty vector will still be passed to the tissue object, which, seeing the empty vector, will apply mGgap everywhere
Definition at line 286 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Corresponding vector of values of Ggap for every heterogeneous region in mGgapHeterogeneityRegions
Definition at line 289 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Whether the mesh has a bath, ie whether this is a bath simulation
Definition at line 314 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
stores the values of the conductivities for the second cell.
Definition at line 249 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
The bidomain tissue object for the extended problem
Definition at line 243 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Factory to generate the stimulus
Definition at line 293 of file ExtendedBidomainProblem.hpp.
|
protected |
The cell factory creates the cells for each node
Definition at line 240 of file ExtendedBidomainProblem.hpp.
|
protected |
We need to save the assembler that is being used to be able to switch off the electrodes (by adding default boundary conditions to the assembler)
Definition at line 345 of file ExtendedBidomainProblem.hpp.
|
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 299 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
flag used to check whwther the user wanted specific, out-of-heartconfig values
Definition at line 265 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Flag for checking that the user specified conductivities for the second cell. Get method available for this variable.
Definition at line 262 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
keeps track of whether the user set an extracellular stimulus. True if the user did.
Definition at line 311 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Used by the writer, stores the variable output names
Definition at line 258 of file ExtendedBidomainProblem.hpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), and ExtendedBidomainProblem< DIM >::save().
|
protected |
Used by the writer, extracellular potential
Definition at line 256 of file ExtendedBidomainProblem.hpp.
|
protected |
Used by the writer, transmembrane potential of the first cell
Definition at line 252 of file ExtendedBidomainProblem.hpp.
|
protected |
Used by the writer, transmembrane potential of the second cell
Definition at line 254 of file ExtendedBidomainProblem.hpp.