AbstractLinearParabolicPdeSystemForCoupledOdeSystem.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 ABSTRACTLINEARPARABOLICPDESYSTEMFORCOUPLEDODESYSTEM_HPP_
00030 #define ABSTRACTLINEARPARABOLICPDESYSTEMFORCOUPLEDODESYSTEM_HPP_
00031
00032 #include "UblasCustomFunctions.hpp"
00033 #include "ChastePoint.hpp"
00034 #include "Node.hpp"
00035 #include "Element.hpp"
00036 #include <petscvec.h>
00037
00052 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM=ELEMENT_DIM, unsigned PROBLEM_DIM=1>
00053 class AbstractLinearParabolicPdeSystemForCoupledOdeSystem
00054 {
00055 public:
00062 virtual double ComputeDuDtCoefficientFunction(const ChastePoint<SPACE_DIM>& rX, unsigned pdeIndex)=0;
00063
00072 virtual double ComputeSourceTerm(const ChastePoint<SPACE_DIM>& rX, c_vector<double,PROBLEM_DIM>& rU, std::vector<double>& rOdeSolution, unsigned pdeIndex)=0;
00073
00082 virtual double ComputeSourceTermAtNode(const Node<SPACE_DIM>& rNode, c_vector<double,PROBLEM_DIM>& rU, std::vector<double>& rOdeSolution, unsigned pdeIndex);
00083
00091 virtual c_matrix<double, SPACE_DIM, SPACE_DIM> ComputeDiffusionTerm(const ChastePoint<SPACE_DIM>& rX, unsigned pdeIndex, Element<ELEMENT_DIM,SPACE_DIM>* pElement=NULL)=0;
00092
00096 virtual ~AbstractLinearParabolicPdeSystemForCoupledOdeSystem()
00097 {}
00098 };
00099
00101
00103
00104 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM, unsigned PROBLEM_DIM>
00105 double AbstractLinearParabolicPdeSystemForCoupledOdeSystem<ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM>::ComputeSourceTermAtNode(const Node<SPACE_DIM>& rNode, c_vector<double,PROBLEM_DIM>& rU, std::vector<double>& rOdeSolution, unsigned pdeIndex)
00106 {
00107 return ComputeSourceTerm(rNode.GetPoint(), rU, rOdeSolution, pdeIndex);
00108 }
00109
00110 #endif