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:
00086 BidomainTissue(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory);
00087
00093 BidomainTissue(std::vector<AbstractCardiacCell*> & rCellsDistributed,AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* pMesh);
00094
00098 ~BidomainTissue();
00099
00104 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetExtracellularConductivityTensor(unsigned elementIndex);
00105 };
00106
00107
00108 #include "SerializationExportWrapper.hpp"
00109 EXPORT_TEMPLATE_CLASS_SAME_DIMS(BidomainTissue)
00110
00111 namespace boost
00112 {
00113 namespace serialization
00114 {
00115
00116 template<class Archive, unsigned SPACE_DIM>
00117 inline void save_construct_data(
00118 Archive & ar, const BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00119 {
00120 const AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh = t->pGetMesh();
00121 ar & p_mesh;
00122
00123
00124
00125 t->SaveCardiacCells(ar, file_version);
00126
00127
00128
00129 HeartConfig* p_config = HeartConfig::Instance();
00130 ar & *p_config;
00131 ar & p_config;
00132 }
00133
00138 template<class Archive, unsigned SPACE_DIM>
00139 inline void load_construct_data(
00140 Archive & ar, BidomainTissue<SPACE_DIM> * t, const unsigned int file_version)
00141 {
00142 std::vector<AbstractCardiacCell*> cells_distributed;
00143 AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh;
00144
00145 ar & p_mesh;
00146
00147 AbstractCardiacTissue<SPACE_DIM,SPACE_DIM>::LoadCardiacCells(
00148 *ProcessSpecificArchive<Archive>::Get(), file_version, cells_distributed, p_mesh);
00149
00150
00151
00152
00153 HeartConfig* p_config = HeartConfig::Instance();
00154 ar & *p_config;
00155 ar & p_config;
00156
00157 ::new(t)BidomainTissue<SPACE_DIM>(cells_distributed, p_mesh);
00158 }
00159 }
00160 }
00161
00162
00163 #endif