ZeroNetChargeElectrodes.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "ZeroNetChargeElectrodes.hpp"
00030 #include "ElectrodesStimulusFactory.hpp"
00031 #include "RegularStimulusZeroNetCharge.hpp"
00032 #include "DistributedTetrahedralMesh.hpp"
00033 #include "IsNan.hpp"
00034 #include "HeartConfig.hpp"
00035 #include "GaussianQuadratureRule.hpp"
00036
00037 template<unsigned DIM>
00038 ZeroNetChargeElectrodes<DIM>::ZeroNetChargeElectrodes(std::vector<std::pair<AbstractChasteRegion<DIM>*, AbstractChasteRegion<DIM>*> >& rElectrodePairs,
00039 std::vector<double>& rStimulusMagnitudes,
00040 std::vector<double>& rDurations,
00041 std::vector<double>& rPeriods,
00042 std::vector<double>& rStarts,
00043 std::vector<double>& rEnds)
00044 : ElectrodesStimulusFactory<DIM>(rElectrodePairs, rStimulusMagnitudes, rDurations, rPeriods, rStarts, rEnds)
00045 {
00046
00047 }
00048
00049 template<unsigned DIM>
00050 ZeroNetChargeElectrodes<DIM>::~ZeroNetChargeElectrodes()
00051 {
00052 }
00053
00054
00055 template<unsigned DIM>
00056 boost::shared_ptr<AbstractStimulusFunction> ZeroNetChargeElectrodes<DIM>::CreateStimulusForNode(unsigned nodeIndex)
00057 {
00058 boost::shared_ptr<RegularStimulusZeroNetCharge> p_stimulus;
00059 for (unsigned pair_index = 0; pair_index < this->mrElectrodePairs.size(); pair_index++)
00060 {
00061 if (this->mrElectrodePairs[pair_index].first->DoesContain(this->mpMesh->GetNode(nodeIndex)->GetPoint()) )
00062 {
00063 p_stimulus.reset ( new RegularStimulusZeroNetCharge(this->mMagnitudesElectrode1[pair_index], this->mrDurations[pair_index], this->mrPeriods[pair_index], this->mrStarts[pair_index], this->mrEnds[pair_index]));
00064 }
00065 else if (this->mrElectrodePairs[pair_index].second->DoesContain(this->mpMesh->GetNode(nodeIndex)->GetPoint()) )
00066 {
00067 p_stimulus.reset ( new RegularStimulusZeroNetCharge(this->mMagnitudesElectrode2[pair_index], this->mrDurations[pair_index], this->mrPeriods[pair_index], this->mrStarts[pair_index], this->mrEnds[pair_index]));
00068 }
00069 else
00070 {
00071 p_stimulus.reset ( new RegularStimulusZeroNetCharge(0.0, this->mrDurations[pair_index], this->mrPeriods[pair_index], this->mrStarts[pair_index], this->mrEnds[pair_index]) );
00072 }
00073 }
00074 return p_stimulus;
00075 }
00076
00077
00079
00081
00082 template class ZeroNetChargeElectrodes<1>;
00083 template class ZeroNetChargeElectrodes<2>;
00084 template class ZeroNetChargeElectrodes<3>;
00085