CardiacElectroMechProbRegularGeom.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 #ifndef CARDIACELECTROMECHPROBREGULARGEOM_HPP_
00030 #define CARDIACELECTROMECHPROBREGULARGEOM_HPP_
00031
00032 #include "CardiacElectroMechanicsProblem.hpp"
00033
00039 template<unsigned DIM>
00040 class CardiacElectroMechProbRegularGeom : public CardiacElectroMechanicsProblem<DIM>
00041 {
00042 public:
00043
00058 CardiacElectroMechProbRegularGeom(ContractionModel contractionModel,
00059 double width,
00060 unsigned numMechanicsElementsEachDir,
00061 unsigned numElectricsElementsEachDir,
00062 AbstractCardiacCellFactory<DIM>* pCellFactory,
00063 double endTime,
00064 double electricsPdeTimeStep,
00065 unsigned numElecTimeStepsPerMechTimestep,
00066 double contractionModelOdeTimeStep,
00067 std::string outputDirectory = "")
00068 : CardiacElectroMechanicsProblem<DIM>(contractionModel,
00069 NULL, NULL, std::vector<unsigned>(),
00070 pCellFactory, endTime,
00071 electricsPdeTimeStep,
00072 numElecTimeStepsPerMechTimestep,
00073 contractionModelOdeTimeStep, outputDirectory)
00074 {
00075 assert(DIM==2);
00076
00077 assert(width > 0.0);
00078 assert(numMechanicsElementsEachDir > 0);
00079 assert(numElectricsElementsEachDir > 0);
00080
00081
00082 this->mpElectricsMesh = new TetrahedralMesh<DIM,DIM>();
00083
00084 this->mpElectricsMesh->ConstructRectangularMesh(numElectricsElementsEachDir,numElectricsElementsEachDir);
00085 this->mpElectricsMesh->Scale(width/numElectricsElementsEachDir,width/numElectricsElementsEachDir);
00086
00087
00088 this->mpMechanicsMesh = new QuadraticMesh<DIM>(width,width,numMechanicsElementsEachDir,numMechanicsElementsEachDir);
00089 LOG(2, "Width of meshes is " << width);
00090 LOG(2, "Num nodes in electrical and mechanical meshes are: " << this->mpElectricsMesh->GetNumNodes() << ", " << this->mpMechanicsMesh->GetNumNodes() << "\n");
00091
00092
00093 this->mFixedNodes.clear();
00094 for(unsigned i=0; i<this->mpMechanicsMesh->GetNumNodes(); i++)
00095 {
00096 if( fabs(this->mpMechanicsMesh->GetNode(i)->rGetLocation()[0])<1e-6)
00097 {
00098 this->mFixedNodes.push_back(i);
00099 }
00100 }
00101
00102 LOG(2, "Fixed the " << this->mFixedNodes.size() << " nodes on x=0");
00103 }
00104
00105 ~CardiacElectroMechProbRegularGeom()
00106 {
00107 delete this->mpElectricsMesh;
00108 delete this->mpMechanicsMesh;
00109 }
00110 };
00111
00112 #endif