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 #ifndef ABSTRACTCONDUCTIVITYTENSORS_HPP_
00029 #define ABSTRACTCONDUCTIVITYTENSORS_HPP_
00030
00031 #include <vector>
00032 #include <string>
00033 #include <memory>
00034 #include "UblasIncludes.hpp"
00035 #include "AbstractTetrahedralMesh.hpp"
00036 #include "FibreReader.hpp"
00037 #include "Exception.hpp"
00038 #include "FileFinder.hpp"
00039
00043 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00044 class AbstractConductivityTensors
00045 {
00046 protected:
00047 AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM>* mpMesh;
00048 bool mUseNonConstantConductivities;
00049 bool mUseFibreOrientation;
00052 c_vector<double, SPACE_DIM> mConstantConductivities;
00053
00058 std::vector<c_vector<double, SPACE_DIM> >* mpNonConstantConductivities;
00059
00062 std::vector< c_matrix<double,SPACE_DIM,SPACE_DIM> > mTensors;
00063
00065 bool mInitialised;
00066
00068 FileFinder mFibreOrientationFile;
00069
00071 std::auto_ptr<FibreReader<SPACE_DIM> > mFileReader;
00072
00073 public:
00074
00075 AbstractConductivityTensors();
00076
00077 virtual ~AbstractConductivityTensors();
00078
00084 void SetFibreOrientationFile(const FileFinder &rFibreOrientationFile);
00085
00093 void SetConstantConductivities(c_vector<double, 1> constantConductivities);
00094
00102 void SetConstantConductivities(c_vector<double, 2> constantConductivities);
00103
00111 virtual void SetConstantConductivities(c_vector<double, 3> constantConductivities);
00112
00113
00118 void SetNonConstantConductivities(std::vector<c_vector<double, SPACE_DIM> >* pNonConstantConductivities);
00119
00124 virtual void Init(AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM> *pMesh) throw (Exception) = 0;
00125
00131 c_matrix<double,SPACE_DIM,SPACE_DIM>& operator[](const unsigned global_index);
00132 };
00133
00134
00135
00136 #endif