CellwiseSourcePde.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 CELLWISESOURCEPDE_HPP_
00030 #define CELLWISESOURCEPDE_HPP_
00031
00032 #include "ChasteSerialization.hpp"
00033 #include <boost/serialization/base_object.hpp>
00034
00035 #include "MeshBasedCellPopulation.hpp"
00036 #include "AbstractLinearEllipticPde.hpp"
00037
00041 template<unsigned DIM>
00042 class CellwiseSourcePde : public AbstractLinearEllipticPde<DIM,DIM>
00043 {
00044 friend class TestCellBasedPdes;
00045
00046 private:
00047
00049 friend class boost::serialization::access;
00056 template<class Archive>
00057 void serialize(Archive & archive, const unsigned int version)
00058 {
00059 archive & boost::serialization::base_object<AbstractLinearEllipticPde<DIM, DIM> >(*this);
00060 archive & mCoefficient;
00061 }
00062
00064 MeshBasedCellPopulation<DIM>& mrCellPopulation;
00065
00067 double mCoefficient;
00068
00069 public:
00070
00077 CellwiseSourcePde(MeshBasedCellPopulation<DIM>& rCellPopulation, double coefficient=0.0);
00078
00082 const MeshBasedCellPopulation<DIM>& rGetCellPopulation() const;
00083
00087 double GetCoefficient() const;
00088
00098 double ComputeConstantInUSourceTerm(const ChastePoint<DIM>& rX, Element<DIM,DIM>* pElement);
00099
00109 double ComputeLinearInUCoeffInSourceTerm(const ChastePoint<DIM>& rX, Element<DIM,DIM>* pElement);
00110
00116 double ComputeLinearInUCoeffInSourceTermAtNode(const Node<DIM>& rNode);
00117
00125 c_matrix<double,DIM,DIM> ComputeDiffusionTerm(const ChastePoint<DIM>& rX);
00126 };
00127
00128 #include "SerializationExportWrapper.hpp"
00129 EXPORT_TEMPLATE_CLASS_SAME_DIMS(CellwiseSourcePde)
00130
00131 namespace boost
00132 {
00133 namespace serialization
00134 {
00138 template<class Archive, unsigned DIM>
00139 inline void save_construct_data(
00140 Archive & ar, const CellwiseSourcePde<DIM>* t, const BOOST_PFTO unsigned int file_version)
00141 {
00142
00143 const MeshBasedCellPopulation<DIM>* p_cell_population = &(t->rGetCellPopulation());
00144 ar & p_cell_population;
00145 }
00146
00150 template<class Archive, unsigned DIM>
00151 inline void load_construct_data(
00152 Archive & ar, CellwiseSourcePde<DIM>* t, const unsigned int file_version)
00153 {
00154
00155 MeshBasedCellPopulation<DIM>* p_cell_population;
00156 ar >> p_cell_population;
00157
00158
00159 ::new(t)CellwiseSourcePde<DIM>(*p_cell_population);
00160 }
00161 }
00162 }
00163
00164 #endif