BidomainPde.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 BIDOMAINPDE_HPP_
00031 #define BIDOMAINPDE_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 "AbstractCardiacPde.hpp"
00040 #include "AbstractConductivityTensors.hpp"
00041
00066 template <unsigned SPACE_DIM>
00067 class BidomainPde : public virtual AbstractCardiacPde<SPACE_DIM>
00068 {
00069 private:
00070 friend class TestBidomainPde;
00071
00073 friend class boost::serialization::access;
00080 template<class Archive>
00081 void serialize(Archive & archive, const unsigned int version)
00082 {
00083 archive & boost::serialization::base_object<AbstractCardiacPde<SPACE_DIM> >(*this);
00084
00085 }
00086
00088 AbstractConductivityTensors<SPACE_DIM> *mpExtracellularConductivityTensors;
00089
00094 ReplicatableVector mExtracellularStimulusCacheReplicated;
00095
00099 void CreateExtracellularConductivityTensors();
00100
00101 public:
00106 BidomainPde(AbstractCardiacCellFactory<SPACE_DIM>* pCellFactory);
00107
00113 BidomainPde(std::vector<AbstractCardiacCell*> & rCellsDistributed,AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* pMesh);
00114
00118 ~BidomainPde();
00119
00124 const c_matrix<double, SPACE_DIM, SPACE_DIM>& rGetExtracellularConductivityTensor(unsigned elementIndex);
00125 };
00126
00127
00128 #include "SerializationExportWrapper.hpp"
00129 EXPORT_TEMPLATE_CLASS_SAME_DIMS(BidomainPde)
00130
00131 namespace boost
00132 {
00133 namespace serialization
00134 {
00135
00136 template<class Archive, unsigned SPACE_DIM>
00137 inline void save_construct_data(
00138 Archive & ar, const BidomainPde<SPACE_DIM> * t, const unsigned int file_version)
00139 {
00140 const AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh = t->pGetMesh();
00141 ar & p_mesh;
00142
00143
00144
00145 t->SaveCardiacCells(ar, file_version);
00146
00147
00148
00149 HeartConfig* p_config = HeartConfig::Instance();
00150 ar & *p_config;
00151 ar & p_config;
00152 }
00153
00158 template<class Archive, unsigned SPACE_DIM>
00159 inline void load_construct_data(
00160 Archive & ar, BidomainPde<SPACE_DIM> * t, const unsigned int file_version)
00161 {
00162 std::vector<AbstractCardiacCell*> cells_distributed;
00163 AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* p_mesh;
00164
00165 ar & p_mesh;
00166
00167 AbstractCardiacPde<SPACE_DIM,SPACE_DIM>::LoadCardiacCells(
00168 *ProcessSpecificArchive<Archive>::Get(), file_version, cells_distributed, p_mesh);
00169
00170
00171
00172
00173 HeartConfig* p_config = HeartConfig::Instance();
00174 ar & *p_config;
00175 ar & p_config;
00176
00177 ::new(t)BidomainPde<SPACE_DIM>(cells_distributed, p_mesh);
00178 }
00179 }
00180 }
00181
00182
00183 #endif