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
00055 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM=ELEMENT_DIM, unsigned PROBLEM_DIM=1>
00056 class AbstractLinearParabolicPdeSystemForCoupledOdeSystem
00057 {
00058 public:
00065 virtual double ComputeDuDtCoefficientFunction(const ChastePoint<SPACE_DIM>& rX, unsigned pdeIndex)=0;
00066
00075 virtual double ComputeSourceTerm(const ChastePoint<SPACE_DIM>& rX, c_vector<double,PROBLEM_DIM> u, std::vector<double> odeSolution, unsigned pdeIndex)=0;
00076
00085 virtual double ComputeSourceTermAtNode(const Node<SPACE_DIM>& rNode, c_vector<double,PROBLEM_DIM> u, std::vector<double> odeSolution, unsigned pdeIndex);
00086
00094 virtual c_matrix<double, SPACE_DIM, SPACE_DIM> ComputeDiffusionTerm(const ChastePoint<SPACE_DIM>& rX, unsigned pdeIndex, Element<ELEMENT_DIM,SPACE_DIM>* pElement=NULL)=0;
00095
00099 virtual ~AbstractLinearParabolicPdeSystemForCoupledOdeSystem()
00100 {}
00101 };
00102
00104
00106
00107 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM, unsigned PROBLEM_DIM>
00108 double AbstractLinearParabolicPdeSystemForCoupledOdeSystem<ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM>::ComputeSourceTermAtNode(const Node<SPACE_DIM>& rNode, c_vector<double,PROBLEM_DIM> u, std::vector<double> odeSolution, unsigned pdeIndex)
00109 {
00110 return ComputeSourceTerm(rNode.GetPoint(), u, odeSolution, pdeIndex);
00111 }
00112
00113 #endif