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 #ifndef Template3Dep_H
00033 #define Template3Dep_H
00034
00035 #include <NDMaterial.h>
00036
00037 #include <Matrix.h>
00038 #include <Vector.h>
00039 #include <ID.h>
00040
00041 #include <stresst.h>
00042 #include <straint.h>
00043 #include <BJtensor.h>
00044
00045
00046
00047 #include <YS.h>
00048 #include <PS.h>
00049 #include <EL_S.h>
00050 #include <EL_T.h>
00051 #include <EPState.h>
00052
00053 #include <Channel.h>
00054 #include <G3Globals.h>
00055
00056
00057
00058
00059
00060
00061 #include <ElasticIsotropic3D.h>
00062 #include <ElasticCrossAnisotropic.h>
00063 #include <PressureDependentElastic3D.h>
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 class Template3Dep : public NDMaterial
00074 {
00075 public:
00076
00077 public:
00078
00079 Template3Dep( int tag ,
00080 NDMaterial &theElMat,
00081 YieldSurface *YS_ ,
00082 PotentialSurface *PS_ ,
00083 EPState *EPS_,
00084 EvolutionLaw_S *ELS1_ ,
00085 EvolutionLaw_S *ELS2_ ,
00086 EvolutionLaw_S *ELS3_ ,
00087 EvolutionLaw_S *ELS4_ ,
00088 EvolutionLaw_T *ELT1_ ,
00089 EvolutionLaw_T *ELT2_ ,
00090 EvolutionLaw_T *ELT3_ ,
00091 EvolutionLaw_T *ELT4_ );
00092
00093
00094
00095 Template3Dep( int tag ,
00096 NDMaterial &theElMat,
00097 YieldSurface *YS_ ,
00098 PotentialSurface *PS_ ,
00099 EPState *EPS_);
00100
00101
00102
00103 Template3Dep( int tag ,
00104 NDMaterial &theElMat,
00105 YieldSurface *YS_ ,
00106 PotentialSurface *PS_ ,
00107 EPState *EPS_,
00108 EvolutionLaw_S *ELS1_ );
00109
00110
00111
00112 Template3Dep( int tag ,
00113 NDMaterial &theElMat,
00114 YieldSurface *YS_ ,
00115 PotentialSurface *PS_ ,
00116 EPState *EPS_,
00117 EvolutionLaw_T *ELT1_ );
00118
00119
00120
00121 Template3Dep( int tag ,
00122 NDMaterial &theElMat,
00123 YieldSurface *YS_ ,
00124 PotentialSurface *PS_ ,
00125 EPState *EPS_,
00126 EvolutionLaw_S *ELS1_,
00127 EvolutionLaw_T *ELT1_ );
00128
00129
00130
00131 Template3Dep( int tag ,
00132 NDMaterial &theElMat,
00133 YieldSurface *YS_ ,
00134 PotentialSurface *PS_ ,
00135 EPState *EPS_,
00136 EvolutionLaw_S *ELS1_,
00137 EvolutionLaw_S *ELS2_,
00138 EvolutionLaw_T *ELT1_ );
00139
00140
00141
00142 Template3Dep( int tag ,
00143 NDMaterial &theElMat,
00144 YieldSurface *YS_ ,
00145 PotentialSurface *PS_ ,
00146 EPState *EPS_,
00147 EvolutionLaw_S *ELS1_,
00148 EvolutionLaw_S *ELS2_,
00149 EvolutionLaw_T *ELT1_,
00150 EvolutionLaw_T *ELT2_ );
00151
00152
00153 Template3Dep(void);
00154 virtual ~Template3Dep(void);
00155
00156 const char *getClassType(void) const {return "Template3Dep";};
00157
00158
00159 int setTrialStrain(const Vector &v);
00160 int setTrialStrain(const Vector &v, const Vector &r);
00161 int setTrialStrainIncr(const Vector &v) ;
00162 int setTrialStrainIncr(const Vector &v, const Vector &r) ;
00163 const Matrix &getTangent(void) ;
00164 const Matrix &getInitialTangent(void) ;
00165
00166 const Vector &getStress(void) ;
00167 const Vector &getStrain(void) ;
00168
00169
00170 int setTrialStrain(const Tensor &v) ;
00171 int setTrialStrain(const Tensor &v, const Tensor &r) ;
00172 int setTrialStrainIncr(const Tensor &v) ;
00173 int setTrialStrainIncr(const Tensor &v, const Tensor &r) ;
00174 const Tensor &getTangentTensor(void) ;
00175 const stresstensor& getStressTensor(void) ;
00176 const straintensor& getStrainTensor(void) ;
00177 const straintensor& getPlasticStrainTensor(void);
00178
00179
00180 EPState * getEPS() const;
00181 void setEPS( EPState &eps);
00182
00183 int commitState(void);
00184 int revertToLastCommit(void);
00185 int revertToStart(void);
00186
00187 NDMaterial *getCopy(void);
00188 NDMaterial *getCopy(const char *code) ;
00189
00190
00191
00192
00193 const char *getType(void) const ;
00194
00195
00196 int sendSelf(int commitTag, Channel &theChannel);
00197 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00198
00199 void Print(OPS_Stream &s, int flag =0);
00200
00201
00202
00203
00204
00205 EPState ForwardEulerEPState( const straintensor &strain_increment);
00206
00207 EPState SemiBackwardEulerEPState( const straintensor &strain_increment);
00208
00209 EPState FESubIncrementation( const straintensor &strain_increment,
00210 int number_of_subincrements);
00211
00212 EPState BackwardEulerEPState( const straintensor &strain_increment);
00213
00214 EPState BESubIncrementation( const straintensor & strain_increment,
00215 int number_of_subincrements);
00216 private:
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237 EPState PredictorEPState(straintensor & strain_increment);
00238
00239 stresstensor yield_surface_cross(const stresstensor & start_stress,
00240 const stresstensor & end_stress);
00241
00242 double zbrentstress(const stresstensor & start_stress,
00243 const stresstensor & end_stress,
00244 double x1, double x2, double tol);
00245
00246 double func( const stresstensor &start_stress,
00247 const stresstensor &end_stress,
00248 double alfa );
00249
00250 public:
00251 tensor ElasticComplianceTensor(void) const;
00252 tensor ElasticStiffnessTensor(void) const;
00253
00254 private:
00255 NDMaterial * getElMat() const;
00256 YieldSurface * getYS() const;
00257 PotentialSurface * getPS() const;
00258
00259
00260
00261
00262 EvolutionLaw_S * getELS1() const;
00263 EvolutionLaw_S * getELS2() const;
00264 EvolutionLaw_S * getELS3() const;
00265 EvolutionLaw_S * getELS4() const;
00266
00267
00268 EvolutionLaw_T * getELT1() const;
00269 EvolutionLaw_T * getELT2() const;
00270 EvolutionLaw_T * getELT3() const;
00271 EvolutionLaw_T * getELT4() const;
00272
00273
00274
00275
00276
00277
00278
00279
00280 friend OPS_Stream& operator<< (OPS_Stream& os, const Template3Dep & MP);
00281
00282 private:
00283
00284 NDMaterial *theElasticMat;
00285
00286 YieldSurface *YS;
00287
00288 PotentialSurface *PS;
00289
00290 EPState *EPS;
00291
00292
00293 EvolutionLaw_S *ELS1;
00294 EvolutionLaw_S *ELS2;
00295 EvolutionLaw_S *ELS3;
00296 EvolutionLaw_S *ELS4;
00297
00298
00299 EvolutionLaw_T *ELT1;
00300 EvolutionLaw_T *ELT2;
00301 EvolutionLaw_T *ELT3;
00302 EvolutionLaw_T *ELT4;
00303
00304 static stresstensor Stress;
00305 static straintensor Strain;
00306
00307 };
00308
00309
00310 #endif
00311