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
00031
00032
00033
00034
00035
00036
00037 #ifndef BIDOMAINTISSUE_HPP_
00038 #define BIDOMAINTISSUE_HPP_
00039
00040 #include "ChasteSerialization.hpp"
00041 #include <boost/serialization/base_object.hpp>
00042
00043 #include <vector>
00044 #include "UblasMatrixInclude.hpp"
00045
00046 #include "AbstractCardiacTissue.hpp"
00047 #include "AbstractConductivityTensors.hpp"
00048
00049
00050
00051
00059 template <unsigned SPACE_DIM>
00060 class BidomainTissue : public virtual AbstractCardiacTissue<SPACE_DIM>
00061 {
00062 private:
00063 friend class TestBidomainTissue;
00064
00066 friend class boost::serialization::access;
00073 template<class Archive>
00074 void serialize(Archive & archive, const unsigned int version)
00075 {
00076 archive & boost::serialization::base_object<AbstractCardiacTissue<SPACE_DIM> >(*this);
00077
00078 }
00079
00081 AbstractConductivityTensors<SPACE_DIM,SPACE_DIM> *mpExtracellularConductivityTensors;
00082
00086 void CreateExtracellularConductivityTensors();
00087
00088 public:
00094 BidomainTissue(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory, bool exchangeHalos=false);
00095
00101 BidomainTissue(AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* pMesh);
00102
00106 ~BidomainTissue();
00107
00112 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetExtracellularConductivityTensor(unsigned elementIndex);
00113 };
00114
00115
00116 #include "SerializationExportWrapper.hpp"
00117 EXPORT_TEMPLATE_CLASS_SAME_DIMS(BidomainTissue)
00118
00119 namespace boost
00120 {
00121 namespace serialization
00122 {
00123
00124 template<class Archive, unsigned SPACE_DIM>
00125 inline void save_construct_data(
00126 Archive & ar, const BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00127 {
00128 const AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh = t->pGetMesh();
00129 ar & p_mesh;
00130
00131
00132
00133 HeartConfig* p_config = HeartConfig::Instance();
00134 ar & *p_config;
00135 ar & p_config;
00136 }
00137
00142 template<class Archive, unsigned SPACE_DIM>
00143 inline void load_construct_data(
00144 Archive & ar, BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00145 {
00146 AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh;
00147 ar & p_mesh;
00148
00149
00150
00151
00152 HeartConfig* p_config = HeartConfig::Instance();
00153 ar & *p_config;
00154 ar & p_config;
00155
00156 ::new(t)BidomainTissue<SPACE_DIM>(p_mesh);
00157 }
00158 }
00159 }
00160
00161
00162 #endif