AbstractLinearEllipticPde.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
00030
00031
00032
00033
00034
00035
00036 #ifndef _ABSTRACTLINEARELLIPTICPDE_HPP_
00037 #define _ABSTRACTLINEARELLIPTICPDE_HPP_
00038
00039 #include "ChasteSerialization.hpp"
00040 #include "ClassIsAbstract.hpp"
00041
00042 #include "UblasCustomFunctions.hpp"
00043 #include "ChastePoint.hpp"
00044 #include "Node.hpp"
00045 #include "Element.hpp"
00046 #include <petscvec.h>
00047
00058 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00059 class AbstractLinearEllipticPde
00060 {
00061 private:
00062
00064 friend class boost::serialization::access;
00071 template<class Archive>
00072 void serialize(Archive & archive, const unsigned int version)
00073 {
00074 }
00075
00076 public:
00077
00081 AbstractLinearEllipticPde()
00082 {}
00083
00087 virtual ~AbstractLinearEllipticPde()
00088 {}
00089
00097 virtual double ComputeConstantInUSourceTerm(const ChastePoint<SPACE_DIM>& rX, Element<ELEMENT_DIM,SPACE_DIM>* pElement)=0;
00098
00106 virtual double ComputeLinearInUCoeffInSourceTerm(const ChastePoint<SPACE_DIM>& rX,
00107 Element<ELEMENT_DIM,SPACE_DIM>* pElement)=0;
00108
00115 virtual c_matrix<double, SPACE_DIM, SPACE_DIM> ComputeDiffusionTerm(const ChastePoint<SPACE_DIM>& rX)=0;
00116
00123 virtual double ComputeConstantInUSourceTermAtNode(const Node<SPACE_DIM>& rNode);
00124
00131 virtual double ComputeLinearInUCoeffInSourceTermAtNode(const Node<SPACE_DIM>& rNode);
00132 };
00133
00134 TEMPLATED_CLASS_IS_ABSTRACT_2_UNSIGNED(AbstractLinearEllipticPde)
00135
00136
00137
00139
00140 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00141 double AbstractLinearEllipticPde<ELEMENT_DIM, SPACE_DIM>::ComputeConstantInUSourceTermAtNode(const Node<SPACE_DIM>& rNode)
00142 {
00143 return ComputeConstantInUSourceTerm(rNode.GetPoint(), NULL);
00144 }
00145
00146 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00147 double AbstractLinearEllipticPde<ELEMENT_DIM, SPACE_DIM>::ComputeLinearInUCoeffInSourceTermAtNode(const Node<SPACE_DIM>& rNode)
00148 {
00149 return ComputeLinearInUCoeffInSourceTerm(rNode.GetPoint(), NULL);
00150 }
00151
00152 #endif //_ABSTRACTLINEARELLIPTICPDE_HPP_