CellBasedPdeSolver.hpp
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 CELLBASEDPDESOLVER_HPP_
00030 #define CELLBASEDPDESOLVER_HPP_
00031
00032 #include "SimpleLinearEllipticSolver.hpp"
00033 #include "TetrahedralMesh.hpp"
00034 #include "GaussianQuadratureRule.hpp"
00035
00041 template<unsigned DIM>
00042 class CellBasedPdeSolver
00043 : public SimpleLinearEllipticSolver<DIM, DIM>
00044 {
00045 private:
00046
00048 double mConstantInUSourceTerm;
00049
00051 double mLinearInUCoeffInSourceTerm;
00052
00053 protected:
00054
00068 virtual c_vector<double, 1*(DIM+1)> ComputeVectorTerm(
00069 c_vector<double, DIM+1>& rPhi,
00070 c_matrix<double, DIM, DIM+1>& rGradPhi,
00071 ChastePoint<DIM>& rX,
00072 c_vector<double, 1>& rU,
00073 c_matrix<double, 1, DIM>& rGradU ,
00074 Element<DIM, DIM>* pElement);
00075
00089 virtual c_matrix<double, 1*(DIM+1), 1*(DIM+1)> ComputeMatrixTerm(
00090 c_vector<double, DIM+1>& rPhi,
00091 c_matrix<double, DIM, DIM+1>& rGradPhi,
00092 ChastePoint<DIM>& rX,
00093 c_vector<double, 1>& rU,
00094 c_matrix<double, 1, DIM>& rGradU,
00095 Element<DIM, DIM>* pElement);
00096
00100 void ResetInterpolatedQuantities();
00101
00108 void IncrementInterpolatedQuantities(double phiI, const Node<DIM>* pNode);
00109
00116 void InitialiseForSolve(Vec initialSolution);
00117
00118 public:
00119
00128 CellBasedPdeSolver(TetrahedralMesh<DIM,DIM>* pMesh,
00129 AbstractLinearEllipticPde<DIM,DIM>* pPde,
00130 BoundaryConditionsContainer<DIM,DIM,1>* pBoundaryConditions,
00131 unsigned numQuadPoints=2);
00132
00136 ~CellBasedPdeSolver();
00137 };
00138
00139 #endif