Chaste  Release::2018.1
ElectrodesStimulusFactory< DIM > Class Template Reference

#include <ElectrodesStimulusFactory.hpp>

+ Inheritance diagram for ElectrodesStimulusFactory< DIM >:
+ Collaboration diagram for ElectrodesStimulusFactory< DIM >:

Public Member Functions

 ElectrodesStimulusFactory (std::vector< std::pair< AbstractChasteRegion< DIM > *, AbstractChasteRegion< DIM > * > > &rElectrodePairs, std::vector< double > &rStimulusMagnitudes, std::vector< double > &rDurations, std::vector< double > &rPeriods, std::vector< double > &rStarts, std::vector< double > &rEnds)
 
boost::shared_ptr
< AbstractStimulusFunction
CreateStimulusForNode (Node< DIM > *pNode)
 
 ~ElectrodesStimulusFactory ()
 
void SetCompatibleExtracellularStimulus ()
 
void GroundSecondElectrode (bool grounded)
 
- Public Member Functions inherited from AbstractStimulusFactory< DIM >
virtual boost::shared_ptr
< AbstractStimulusFunction
CreateStimulusForNode (Node< ELEMENT_DIM > *pNode)
 
virtual unsigned GetNumberOfCells ()
 
 AbstractStimulusFactory ()
 
virtual ~AbstractStimulusFactory ()
 
void SetMesh (AbstractTetrahedralMesh< ELEMENT_DIM, ELEMENT_DIM > *pMesh)
 
AbstractTetrahedralMesh
< ELEMENT_DIM, ELEMENT_DIM > * 
GetMesh ()
 
std::vector
< AbstractChasteRegion
< ELEMENT_DIM > * > 
GetRegionsToBeGrounded ()
 

Protected Types

typedef LinearBasisFunction< DIM > BasisFunction
 

Protected Member Functions

void CheckForElectrodesIntersection ()
 
double ComputeElectrodeTotalFlux (AbstractChasteRegion< DIM > *pRegion, double stimulusMagnitude)
 

Protected Attributes

std::vector< std::pair
< AbstractChasteRegion< DIM >
*, AbstractChasteRegion< DIM > * > > & 
mrElectrodePairs
 
std::vector< double > & mrMagnitudes
 
std::vector< double > & mrDurations
 
std::vector< double > & mrPeriods
 
std::vector< double > & mrStarts
 
std::vector< double > & mrEnds
 
std::vector< doublemMagnitudesElectrode1
 
std::vector< doublemMagnitudesElectrode2
 
bool mGroundSecondElectrode
 
- Protected Attributes inherited from AbstractStimulusFactory< DIM >
AbstractTetrahedralMesh
< ELEMENT_DIM, ELEMENT_DIM > * 
mpMesh
 
std::vector
< AbstractChasteRegion
< ELEMENT_DIM > * > 
mGroundedRegions
 

Friends

class TestStimulusFactory
 

Detailed Description

template<unsigned DIM>
class ElectrodesStimulusFactory< DIM >

This class implements the specification of tow electrodes with a RegularStimulus applied to them. It makes sure the compatibility conditions is verified by scaling the magnitude of the second electrode according to the flux flowing thorugh each of them.

User needs to pass in a vector of pairs of electrodes and, for each pair, the stimulation parameters. This class will then implement the CreateStimulusForNode accordingly by creating a RegularStimulus object for each node. Each node belonging to any "first electrode" will have an extracellular volume stimulus equals to the value that is passed in, while each node belonging to any "second elecrode" will have an extracellular volume stimulus corrected by the flux (proportional to electrode volume) in such a way that compatibility conditions of the extended bidomain equations are followed.

It is possible to ground all second electrodes by calling GroundSecondElectrode. In this case, the member variable mGroundSecondElectrode will have size > 0 and other classes can behave accordingly (e.g., problem class will set Dirichlet boundary conditions accordingly).

Definition at line 67 of file ElectrodesStimulusFactory.hpp.

Member Typedef Documentation

template<unsigned DIM>
typedef LinearBasisFunction<DIM> ElectrodesStimulusFactory< DIM >::BasisFunction
protected

typedef for basis function

Definition at line 121 of file ElectrodesStimulusFactory.hpp.

Constructor & Destructor Documentation

template<unsigned DIM>
ElectrodesStimulusFactory< DIM >::ElectrodesStimulusFactory ( std::vector< std::pair< AbstractChasteRegion< DIM > *, AbstractChasteRegion< DIM > * > > &  rElectrodePairs,
std::vector< double > &  rStimulusMagnitudes,
std::vector< double > &  rDurations,
std::vector< double > &  rPeriods,
std::vector< double > &  rStarts,
std::vector< double > &  rEnds 
)

Constructor. Electrodes and stimulation parameters need to be passed in.

Parameters
rElectrodePairsthe pairs of electrodes
rStimulusMagnitudesthe magnitudes of the stimuli (microA / cm^3). First electrode will have magnitude value and second electrode will have -magnitude (before being corrected to ensure equal flux).
rDurationsthe duration of each stimulus (ms)
rPeriodsthe period of each stimulus (ms)
rStartsthe start time of each stimulus (ms).
rEndsthe end of each stimulation (ms)

Definition at line 44 of file ElectrodesStimulusFactory.cpp.

References EXCEPTION, ElectrodesStimulusFactory< DIM >::mMagnitudesElectrode1, ElectrodesStimulusFactory< DIM >::mMagnitudesElectrode2, and ElectrodesStimulusFactory< DIM >::mrMagnitudes.

template<unsigned DIM>
ElectrodesStimulusFactory< DIM >::~ElectrodesStimulusFactory ( )

Destructor

Definition at line 72 of file ElectrodesStimulusFactory.cpp.

Member Function Documentation

template<unsigned DIM>
void ElectrodesStimulusFactory< DIM >::CheckForElectrodesIntersection ( )
protected

Helper method to check if any of the electrodes intersects with the other. it needs to check whether any element that conatins any node of electrode 1 does not conatin also nodes of eledtrode 2

Definition at line 77 of file ElectrodesStimulusFactory.cpp.

References PetscTools::Barrier(), and EXCEPTION.

template<unsigned DIM>
double ElectrodesStimulusFactory< DIM >::ComputeElectrodeTotalFlux ( AbstractChasteRegion< DIM > *  pRegion,
double  stimulusMagnitude 
)
protected

Helper method to compute electrode flux. This method is the main functionality of this class.

It essentially computes the contribution of each electrode to the RHS vector of the linear system. The loops over elements and gauss points mimicks the ones in AssembleOnElement. Interpolation is done for the value of the magnitude of the electrode.

NOTE that this method assumes the use of a 2nd order Gauss quadrature rule (the default value of Chaste FE assemblers).

Parameters
pRegionthe electrode
stimulusMagnitudethe stimulus magnitude
Returns
electrode flux

Definition at line 185 of file ElectrodesStimulusFactory.cpp.

References AbstractChasteRegion< SPACE_DIM >::DoesContain(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetIndex(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNodeIteratorBegin(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), GaussianQuadratureRule< ELEMENT_DIM >::GetNumQuadPoints(), GaussianQuadratureRule< ELEMENT_DIM >::GetWeight(), and GaussianQuadratureRule< ELEMENT_DIM >::rGetQuadPoint().

template<unsigned DIM>
boost::shared_ptr< AbstractStimulusFunction > ElectrodesStimulusFactory< DIM >::CreateStimulusForNode ( Node< DIM > *  pNode)
Returns
Creates an appropriate stimulus for each node as to abide compatibility conditions.
Parameters
pNodethe node for which to create the stimulus

Definition at line 161 of file ElectrodesStimulusFactory.cpp.

References Node< SPACE_DIM >::GetPoint().

template<unsigned DIM>
void ElectrodesStimulusFactory< DIM >::GroundSecondElectrode ( bool  grounded)

Allow the user to ground the second electrode

Parameters
grounded: true if second electrode is grounded

Definition at line 116 of file ElectrodesStimulusFactory.cpp.

template<unsigned DIM>
void ElectrodesStimulusFactory< DIM >::SetCompatibleExtracellularStimulus ( )
virtual

This method checks whether the users wanted a grounded electrode. If so, it fills in mGroundedRegions accordingly.

If not, it calls ComputeElectrodeTotalFlux and scales the magnitudes of the electrodes stimuli accordingly

Reimplemented from AbstractStimulusFactory< DIM >.

Definition at line 122 of file ElectrodesStimulusFactory.cpp.

References PetscTools::ReplicateException().

Member Data Documentation

template<unsigned DIM>
bool ElectrodesStimulusFactory< DIM >::mGroundSecondElectrode
protected

Whether the second electrode is grounded

Definition at line 111 of file ElectrodesStimulusFactory.hpp.

template<unsigned DIM>
std::vector<double> ElectrodesStimulusFactory< DIM >::mMagnitudesElectrode1
protected

Used to store temporarily magnitudes of electrode 1 for correction

Definition at line 102 of file ElectrodesStimulusFactory.hpp.

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

template<unsigned DIM>
std::vector<double> ElectrodesStimulusFactory< DIM >::mMagnitudesElectrode2
protected

Used to store temporarily magnitudes of electrode 2 for correction

Definition at line 107 of file ElectrodesStimulusFactory.hpp.

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

template<unsigned DIM>
std::vector<double>& ElectrodesStimulusFactory< DIM >::mrDurations
protected

Vector of stimuli durations (ms). Must be the same size as mrElectrodePairs.

Definition at line 85 of file ElectrodesStimulusFactory.hpp.

template<unsigned DIM>
std::vector<std::pair<AbstractChasteRegion<DIM>*, AbstractChasteRegion<DIM>*> >& ElectrodesStimulusFactory< DIM >::mrElectrodePairs
protected

Vector of pairs, each pair representing a pair of electrodes.

Definition at line 76 of file ElectrodesStimulusFactory.hpp.

template<unsigned DIM>
std::vector<double>& ElectrodesStimulusFactory< DIM >::mrEnds
protected

Vector of stimuli end times (ms). Must be the same size as mrElectrodePairs.

Definition at line 97 of file ElectrodesStimulusFactory.hpp.

template<unsigned DIM>
std::vector<double>& ElectrodesStimulusFactory< DIM >::mrMagnitudes
protected

Vector of stimuli magnitudes (microA / cm^3). Must be the same size as mrElectrodePairs.

Definition at line 81 of file ElectrodesStimulusFactory.hpp.

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

template<unsigned DIM>
std::vector<double>& ElectrodesStimulusFactory< DIM >::mrPeriods
protected

Vector of stimuli periods (ms). Must be the same size as mrElectrodePairs.

Definition at line 89 of file ElectrodesStimulusFactory.hpp.

template<unsigned DIM>
std::vector<double>& ElectrodesStimulusFactory< DIM >::mrStarts
protected

Vector of stimuli start times (ms). Must be the same size as mrElectrodePairs.

Definition at line 93 of file ElectrodesStimulusFactory.hpp.


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