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 #ifndef _CELLBASEDSIMULATIONWITHPDESASSEMBLER_HPP_
00029 #define _CELLBASEDSIMULATIONWITHPDESASSEMBLER_HPP_
00030
00031
00032 #include "TetrahedralMesh.hpp"
00033 #include "SimpleLinearEllipticSolver.hpp"
00034 #include "GaussianQuadratureRule.hpp"
00035
00036
00037
00038
00046 template<unsigned DIM>
00047 class CellBasedSimulationWithPdesAssembler
00048 : public SimpleLinearEllipticSolver<DIM, DIM>
00049 {
00050 private:
00051
00056 double mConstantInUSourceTerm;
00057
00062 double mLinearInUCoeffInSourceTerm;
00063
00064 protected:
00065
00077 virtual c_vector<double, 1*(DIM+1)> ComputeVectorTerm(
00078 c_vector<double, DIM+1>& rPhi,
00079 c_matrix<double, DIM, DIM+1>& rGradPhi,
00080 ChastePoint<DIM>& rX,
00081 c_vector<double, 1>& rU,
00082 c_matrix<double, 1, DIM>& rGradU ,
00083 Element<DIM, DIM>* pElement);
00084
00096 virtual c_matrix<double, 1*(DIM+1), 1*(DIM+1)> ComputeMatrixTerm(
00097 c_vector<double, DIM+1>& rPhi,
00098 c_matrix<double, DIM, DIM+1>& rGradPhi,
00099 ChastePoint<DIM>& rX,
00100 c_vector<double, 1>& rU,
00101 c_matrix<double, 1, DIM>& rGradU,
00102 Element<DIM, DIM>* pElement);
00103
00107 void ResetInterpolatedQuantities();
00108
00115 void IncrementInterpolatedQuantities(double phiI, const Node<DIM>* pNode);
00116
00123 void InitialiseForSolve(Vec initialSolution);
00124
00125 public:
00126
00135 CellBasedSimulationWithPdesAssembler(TetrahedralMesh<DIM,DIM>* pMesh,
00136 AbstractLinearEllipticPde<DIM,DIM>* pPde,
00137 BoundaryConditionsContainer<DIM,DIM,1>* pBoundaryConditions,
00138 unsigned numQuadPoints=2);
00139
00143 ~CellBasedSimulationWithPdesAssembler();
00144 };
00145
00146 #endif