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->ConstructRegularSlabMesh(width/numElectricsElementsEachDir, width, width);
00085
00086
00087 this->mpMechanicsMesh = new QuadraticMesh<DIM>(width/numMechanicsElementsEachDir, width, width);
00088 LOG(2, "Width of meshes is " << width);
00089 LOG(2, "Num nodes in electrical and mechanical meshes are: " << this->mpElectricsMesh->GetNumNodes() << ", " << this->mpMechanicsMesh->GetNumNodes() << "\n");
00090
00091
00092 this->mFixedNodes.clear();
00093 for(unsigned i=0; i<this->mpMechanicsMesh->GetNumNodes(); i++)
00094 {
00095 if( fabs(this->mpMechanicsMesh->GetNode(i)->rGetLocation()[0])<1e-6)
00096 {
00097 this->mFixedNodes.push_back(i);
00098 }
00099 }
00100
00101 LOG(2, "Fixed the " << this->mFixedNodes.size() << " nodes on x=0");
00102 }
00103
00104 ~CardiacElectroMechProbRegularGeom()
00105 {
00106 delete this->mpElectricsMesh;
00107 delete this->mpMechanicsMesh;
00108 }
00109 };
00110
00111 #endif