AveragedSourcePde.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 AVERAGEDSOURCEPDE_HPP_
00037 #define AVERAGEDSOURCEPDE_HPP_
00038
00039 #include "ChasteSerialization.hpp"
00040 #include <boost/serialization/base_object.hpp>
00041 #include <boost/serialization/vector.hpp>
00042
00043 #include "AbstractCellPopulation.hpp"
00044 #include "TetrahedralMesh.hpp"
00045 #include "AbstractLinearEllipticPde.hpp"
00046
00051 template<unsigned DIM>
00052 class AveragedSourcePde : public AbstractLinearEllipticPde<DIM,DIM>
00053 {
00054 friend class TestCellBasedPdes;
00055
00056 private:
00057
00059 friend class boost::serialization::access;
00066 template<class Archive>
00067 void serialize(Archive & archive, const unsigned int version)
00068 {
00069 archive & boost::serialization::base_object<AbstractLinearEllipticPde<DIM, DIM> >(*this);
00070 archive & mCoefficient;
00071 archive & mCellDensityOnCoarseElements;
00072 }
00073
00074 protected:
00075
00077 AbstractCellPopulation<DIM>& mrCellPopulation;
00078
00080 double mCoefficient;
00081
00083 std::vector<double> mCellDensityOnCoarseElements;
00084
00085 public:
00086
00093 AveragedSourcePde(AbstractCellPopulation<DIM>& rCellPopulation, double coefficient=0.0);
00094
00098 const AbstractCellPopulation<DIM>& rGetCellPopulation() const;
00099
00103 double GetCoefficient() const;
00104
00111 void virtual SetupSourceTerms(TetrahedralMesh<DIM,DIM>& rCoarseMesh, std::map<CellPtr, unsigned>* pCellPdeElementMap=NULL);
00112
00122 double ComputeConstantInUSourceTerm(const ChastePoint<DIM>& rX, Element<DIM,DIM>* pElement);
00123
00133 double ComputeLinearInUCoeffInSourceTerm(const ChastePoint<DIM>& rX, Element<DIM,DIM>* pElement);
00134
00142 c_matrix<double,DIM,DIM> ComputeDiffusionTerm(const ChastePoint<DIM>& rX);
00143
00149 double GetUptakeRateForElement(unsigned elementIndex);
00150 };
00151
00152 #include "SerializationExportWrapper.hpp"
00153 EXPORT_TEMPLATE_CLASS_SAME_DIMS(AveragedSourcePde)
00154
00155 namespace boost
00156 {
00157 namespace serialization
00158 {
00162 template<class Archive, unsigned DIM>
00163 inline void save_construct_data(
00164 Archive & ar, const AveragedSourcePde<DIM>* t, const BOOST_PFTO unsigned int file_version)
00165 {
00166
00167 const AbstractCellPopulation<DIM>* p_cell_population = &(t->rGetCellPopulation());
00168 ar & p_cell_population;
00169 }
00170
00174 template<class Archive, unsigned DIM>
00175 inline void load_construct_data(
00176 Archive & ar, AveragedSourcePde<DIM>* t, const unsigned int file_version)
00177 {
00178
00179 AbstractCellPopulation<DIM>* p_cell_population;
00180 ar >> p_cell_population;
00181
00182
00183 ::new(t)AveragedSourcePde<DIM>(*p_cell_population);
00184 }
00185 }
00186 }
00187
00188 #endif