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