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
00070 if (x*x<=1e-10)
00071 {
00072 return new CELL(this->mpSolver, mpStimulus);
00073 }
00074 else
00075 {
00076 return new CELL(this->mpSolver, this->mpZeroStimulus);
00077 }
00078 }
00079 };
00080
00081
00082 #endif