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 "AbstractFeObjectAssembler.hpp"
00041 #include "AbstractBidomainSolver.hpp"
00042 #include "HeartConfig.hpp"
00043 #include "BidomainAssembler.hpp"
00044 #include "BidomainMassMatrixAssembler.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
00074 void InitialiseForSolve(Vec initialSolution);
00075
00084 void SetupLinearSystem(Vec currentSolution, bool computeMatrix);
00085
00086
00087
00088 public:
00098 MatrixBasedBidomainSolver(bool bathSimulation,
00099 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* pMesh,
00100 BidomainTissue<SPACE_DIM>* pTissue,
00101 BoundaryConditionsContainer<ELEMENT_DIM,SPACE_DIM,2>* pBoundaryConditions,
00102 unsigned numQuadPoints = 2);
00103
00104 ~MatrixBasedBidomainSolver();
00105 };
00106
00107
00108 #endif
00109