PlaneStimulusCellFactory.hpp
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
00030 #ifndef PLANESTIMULUSCELLFACTORY_HPP_
00031 #define PLANESTIMULUSCELLFACTORY_HPP_
00032
00033 #include <boost/shared_ptr.hpp>
00034
00035 #include "AbstractCardiacCellFactory.hpp"
00036 #include "LogFile.hpp"
00037 #include "SimpleStimulus.hpp"
00038
00042 template<class CELL, unsigned ELEMENT_DIM, unsigned SPACE_DIM = ELEMENT_DIM>
00043 class PlaneStimulusCellFactory : public AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>
00044 {
00045 protected:
00047 boost::shared_ptr<SimpleStimulus> mpStimulus;
00048
00049 public:
00055 PlaneStimulusCellFactory(double stimulusMagnitude=-600, double stimulusDuration=0.5)
00056 : AbstractCardiacCellFactory<ELEMENT_DIM,SPACE_DIM>()
00057 {
00058 mpStimulus.reset(new SimpleStimulus(stimulusMagnitude, stimulusDuration));
00059 LOG(1, "Defined a PlaneStimulusCellFactory<"<<SPACE_DIM<<"> with SimpleStimulus("<<stimulusMagnitude<<","<< stimulusDuration<< ")\n");
00060 }
00061
00066 AbstractCardiacCell* CreateCardiacCellForTissueNode(unsigned node)
00067 {
00068 double x = this->GetMesh()->GetNode(node)->GetPoint()[0];
00069
00071 if (x*x<=1e-10)
00072 {
00073 return new CELL(this->mpSolver, mpStimulus);
00074 }
00075 else
00076 {
00077 return new CELL(this->mpSolver, this->mpZeroStimulus);
00078 }
00079 }
00080 };
00081
00082
00083 #endif