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 ABSTRACTMATERIALLAW_HPP_
00038 #define ABSTRACTMATERIALLAW_HPP_
00039
00040 #include "UblasCustomFunctions.hpp"
00041 #include <cassert>
00042 #include <vector>
00043 #include "Exception.hpp"
00044 #include "FourthOrderTensor.hpp"
00045
00054 template<unsigned DIM>
00055 class AbstractMaterialLaw
00056 {
00057 protected:
00065 c_matrix<double,DIM,DIM>* mpChangeOfBasisMatrix;
00066
00074 void ComputeTransformedDeformationTensor(c_matrix<double,DIM,DIM>& rC, c_matrix<double,DIM,DIM>& rInvC,
00075 c_matrix<double,DIM,DIM>& rCTransformed, c_matrix<double,DIM,DIM>& rInvCTransformed);
00076
00085 void TransformStressAndStressDerivative(c_matrix<double,DIM,DIM>& rT,
00086 FourthOrderTensor<DIM,DIM,DIM,DIM>& rDTdE,
00087 bool transformDTdE);
00088
00089 public:
00090
00092 AbstractMaterialLaw();
00093
00095 virtual ~AbstractMaterialLaw()
00096 {
00097 }
00098
00117 virtual void ComputeStressAndStressDerivative(c_matrix<double,DIM,DIM>& rC,
00118 c_matrix<double,DIM,DIM>& rInvC,
00119 double pressure,
00120 c_matrix<double,DIM,DIM>& rT,
00121 FourthOrderTensor<DIM,DIM,DIM,DIM>& rDTdE,
00122 bool computeDTdE)=0;
00123
00139 void ComputeCauchyStress(c_matrix<double,DIM,DIM>& rF, double pressure, c_matrix<double,DIM,DIM>& rSigma);
00140
00159 void Compute1stPiolaKirchoffStress(c_matrix<double,DIM,DIM>& rF, double pressure, c_matrix<double,DIM,DIM>& rS);
00160
00174 void Compute2ndPiolaKirchoffStress(c_matrix<double,DIM,DIM>& rC, double pressure, c_matrix<double,DIM,DIM>& rT);
00175
00176
00187 virtual void ScaleMaterialParameters(double scaleFactor);
00188
00205 void SetChangeOfBasisMatrix(c_matrix<double,DIM,DIM>& rChangeOfBasisMatrix);
00206
00210 void ResetToNoChangeOfBasisMatrix();
00211 };
00212
00213 #endif