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 MATRIXBASEDBIDOMAINSOLVER_HPP_
00031 #define MATRIXBASEDBIDOMAINSOLVER_HPP_
00032
00033
00034 #include "UblasIncludes.hpp"
00035
00036
00037 #include <vector>
00038 #include <petscvec.h>
00039
00040 #include "AbstractBidomainSolver.hpp"
00041 #include "HeartConfig.hpp"
00042 #include "BidomainAssembler.hpp"
00043 #include "BidomainMassMatrixAssembler.hpp"
00044 #include "BidomainCorrectionTermAssembler.hpp"
00045
00046 #include <boost/numeric/ublas/vector_proxy.hpp>
00047
00054 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00055 class MatrixBasedBidomainSolver : public AbstractBidomainSolver<ELEMENT_DIM,SPACE_DIM>
00056 {
00057 private:
00061 Mat mMassMatrix;
00062
00067 Vec mVecForConstructingRhs;
00068
00073 BidomainCorrectionTermAssembler<ELEMENT_DIM,SPACE_DIM>* mpBidomainCorrectionTermAssembler;
00074
00075
00081 void InitialiseForSolve(Vec initialSolution);
00082
00091 void SetupLinearSystem(Vec currentSolution, bool computeMatrix);
00092
00093
00094
00095 public:
00105 MatrixBasedBidomainSolver(bool bathSimulation,
00106 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00107 BidomainTissue<SPACE_DIM>* pTissue,
00108 BoundaryConditionsContainer<ELEMENT_DIM,SPACE_DIM,2>* pBoundaryConditions,
00109 unsigned numQuadPoints = 2);
00110
00111 ~MatrixBasedBidomainSolver();
00112 };
00113
00114
00115 #endif
00116