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 ABSTRACTMATERIALLAW_HPP_
00031 #define ABSTRACTMATERIALLAW_HPP_
00032
00033 #include "UblasCustomFunctions.hpp"
00034 #include <cassert>
00035 #include <vector>
00036 #include "Exception.hpp"
00037 #include "FourthOrderTensor.hpp"
00038
00047 template<unsigned DIM>
00048 class AbstractMaterialLaw
00049 {
00050 protected:
00058 c_matrix<double,DIM,DIM>* mpChangeOfBasisMatrix;
00059
00067 void ComputeTransformedDeformationTensor(c_matrix<double,DIM,DIM>& rC, c_matrix<double,DIM,DIM>& rInvC,
00068 c_matrix<double,DIM,DIM>& rCTransformed, c_matrix<double,DIM,DIM>& rInvCTransformed);
00069
00078 void TransformStressAndStressDerivative(c_matrix<double,DIM,DIM>& rT,
00079 FourthOrderTensor<DIM,DIM,DIM,DIM>& rDTdE,
00080 bool transformDTdE);
00081
00082 public:
00083
00085 AbstractMaterialLaw();
00086
00088 virtual ~AbstractMaterialLaw()
00089 {
00090 }
00091
00110 virtual void ComputeStressAndStressDerivative(c_matrix<double,DIM,DIM>& rC,
00111 c_matrix<double,DIM,DIM>& rInvC,
00112 double pressure,
00113 c_matrix<double,DIM,DIM>& rT,
00114 FourthOrderTensor<DIM,DIM,DIM,DIM>& rDTdE,
00115 bool computeDTdE)=0;
00116
00132 void ComputeCauchyStress(c_matrix<double,DIM,DIM>& rF, double pressure, c_matrix<double,DIM,DIM>& rSigma);
00133
00152 void Compute1stPiolaKirchoffStress(c_matrix<double,DIM,DIM>& rF, double pressure, c_matrix<double,DIM,DIM>& rS);
00153
00167 void Compute2ndPiolaKirchoffStress(c_matrix<double,DIM,DIM>& rC, double pressure, c_matrix<double,DIM,DIM>& rT);
00168
00169
00180 virtual void ScaleMaterialParameters(double scaleFactor);
00181
00198 void SetChangeOfBasisMatrix(c_matrix<double,DIM,DIM>& rChangeOfBasisMatrix);
00199
00203 void ResetToNoChangeOfBasisMatrix();
00204 };
00205
00206 #endif