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 <fstream>
00034 #include "UblasIncludes.hpp"
00035 #include "Exception.hpp"
00036
00040 template<unsigned SPACE_DIM>
00041 class AbstractConductivityTensors
00042 {
00043 protected:
00044 unsigned mNumElements;
00046 bool mUseNonConstantConductivities;
00047 bool mUseFibreOrientation;
00050 c_vector<double, SPACE_DIM> mConstantConductivities;
00051
00053 std::vector<c_vector<double, SPACE_DIM> >* mpNonConstantConductivities;
00054
00056 std::vector< c_matrix<double,SPACE_DIM,SPACE_DIM> > mTensors;
00057
00059 bool mInitialised;
00060
00062 std::string mFibreOrientationFilename;
00063
00065 std::ifstream mDataFile;
00066
00068 void OpenFibreOrientationFile();
00069
00071 void CloseFibreOrientationFile();
00072
00077 unsigned GetTokensAtNextLine(std::vector<double>& rTokens);
00078
00083 unsigned GetNumElementsFromFile();
00084
00085 public:
00086
00087 AbstractConductivityTensors();
00088
00089 virtual ~AbstractConductivityTensors();
00090
00096 void SetFibreOrientationFile(const std::string &rFibreOrientationFilename);
00097
00105 void SetConstantConductivities(c_vector<double, 1> constantConductivities);
00106
00114 void SetConstantConductivities(c_vector<double, 2> constantConductivities);
00115
00123 virtual void SetConstantConductivities(c_vector<double, 3> constantConductivities);
00124
00125
00130 void SetNonConstantConductivities(std::vector<c_vector<double, SPACE_DIM> >* pNonConstantConductivities);
00131
00135 virtual void Init() throw (Exception) = 0;
00136
00142 c_matrix<double,SPACE_DIM,SPACE_DIM>& operator[](const unsigned index);
00143 };
00144
00145
00146
00147 #endif