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