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 #ifndef BIDOMAINPDE_HPP_
00031 #define BIDOMAINPDE_HPP_
00032
00033 #include <boost/serialization/access.hpp>
00034 #include <boost/serialization/base_object.hpp>
00035
00036 #include <vector>
00037 #include <boost/numeric/ublas/matrix.hpp>
00038
00039 #include "AbstractCardiacPde.hpp"
00040 #include "AbstractConductivityTensors.hpp"
00041 #include "AbstractCardiacCellFactory.hpp"
00042 #include "ReplicatableVector.hpp"
00043
00068 template <unsigned SPACE_DIM>
00069 class BidomainPde : public virtual AbstractCardiacPde<SPACE_DIM>
00070 {
00071 private:
00072
00074 friend class boost::serialization::access;
00081 template<class Archive>
00082 void serialize(Archive & archive, const unsigned int version)
00083 {
00084 archive & boost::serialization::base_object<AbstractCardiacPde<SPACE_DIM> >(*this);
00085 }
00086
00088 AbstractConductivityTensors<SPACE_DIM> *mpExtracellularConductivityTensors;
00089
00094 ReplicatableVector mExtracellularStimulusCacheReplicated;
00095
00096 public:
00101 BidomainPde(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory);
00102
00107 BidomainPde(std::vector<AbstractCardiacCell*> & rCellsDistributed);
00108
00112 ~BidomainPde();
00113
00117 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetExtracellularConductivityTensor(unsigned elementIndex);
00118 };
00119
00120
00121 EXPORT_TEMPLATE_CLASS_SAME_DIMS(BidomainPde)
00122
00123 namespace boost
00124 {
00125 namespace serialization
00126 {
00127
00128 template<class Archive, unsigned SPACE_DIM>
00129 inline void save_construct_data(
00130 Archive & ar, const BidomainPde<SPACE_DIM> * t, const unsigned int file_version)
00131 {
00132
00133 const std::vector<AbstractCardiacCell*> & r_cells_distributed = t->GetCellsDistributed();
00134
00135 ar << r_cells_distributed;
00136 }
00137
00142 template<class Archive, unsigned SPACE_DIM>
00143 inline void load_construct_data(
00144 Archive & ar, BidomainPde<SPACE_DIM> * t, const unsigned int file_version)
00145 {
00146 std::vector<AbstractCardiacCell*> cells_distributed;
00147
00148 ar >> cells_distributed;
00149
00150 ::new(t)BidomainPde<SPACE_DIM>(cells_distributed);
00151 }
00152 }
00153 }
00154
00155
00156 #endif