BidomainTissue.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 #ifndef BIDOMAINTISSUE_HPP_
00031 #define BIDOMAINTISSUE_HPP_
00032
00033 #include "ChasteSerialization.hpp"
00034 #include <boost/serialization/base_object.hpp>
00035
00036 #include <vector>
00037 #include <boost/numeric/ublas/matrix.hpp>
00038
00039 #include "AbstractCardiacTissue.hpp"
00040 #include "AbstractConductivityTensors.hpp"
00041
00042
00043
00044
00052 template <unsigned SPACE_DIM>
00053 class BidomainTissue : public virtual AbstractCardiacTissue<SPACE_DIM>
00054 {
00055 private:
00056 friend class TestBidomainTissue;
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<AbstractCardiacTissue<SPACE_DIM> >(*this);
00070
00071 }
00072
00074 AbstractConductivityTensors<SPACE_DIM,SPACE_DIM> *mpExtracellularConductivityTensors;
00075
00079 void CreateExtracellularConductivityTensors();
00080
00081 public:
00087 BidomainTissue(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory, bool exchangeHalos=false);
00088
00094 BidomainTissue(AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* pMesh);
00095
00099 ~BidomainTissue();
00100
00105 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetExtracellularConductivityTensor(unsigned elementIndex);
00106 };
00107
00108
00109 #include "SerializationExportWrapper.hpp"
00110 EXPORT_TEMPLATE_CLASS_SAME_DIMS(BidomainTissue)
00111
00112 namespace boost
00113 {
00114 namespace serialization
00115 {
00116
00117 template<class Archive, unsigned SPACE_DIM>
00118 inline void save_construct_data(
00119 Archive & ar, const BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00120 {
00121 const AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh = t->pGetMesh();
00122 ar & p_mesh;
00123
00124
00125
00126 HeartConfig* p_config = HeartConfig::Instance();
00127 ar & *p_config;
00128 ar & p_config;
00129 }
00130
00135 template<class Archive, unsigned SPACE_DIM>
00136 inline void load_construct_data(
00137 Archive & ar, BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00138 {
00139 AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh;
00140 ar & p_mesh;
00141
00142
00143
00144
00145 HeartConfig* p_config = HeartConfig::Instance();
00146 ar & *p_config;
00147 ar & p_config;
00148
00149 ::new(t)BidomainTissue<SPACE_DIM>(p_mesh);
00150 }
00151 }
00152 }
00153
00154
00155 #endif