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