Cosseratstresst.hGo to the documentation of this file.00001 00002 //################################################################################ 00003 //# COPYRIGHT (C): :-)) # 00004 //# PROJECT: Object Oriented Finite Element Program # 00005 //# PURPOSE: stress tensor with all necessery functions # 00006 //# CLASS: stresstensor # 00007 //# # 00008 //# VERSION: # 00009 //# LANGUAGE: C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 ) # 00010 //# TARGET OS: DOS || UNIX || . . . # 00011 //# DESIGNER(S): Alireza Tabarrei # 00012 //# PROGRAMMER(S): Alireza Tabarrei # 00013 //# # 00014 //# # 00015 //# DATE: June 2004 # 00016 //# UPDATE HISTORY: # 00017 //# # 00018 //# # 00019 //# # 00020 //################################################################################ 00021 //*/ 00022 00023 #ifndef COSSERATSTRESSTENSOR_H 00024 #define COSSERATSTRESSTENSOR_H 00025 00026 #include <OPS_Globals.h> 00027 #include "BJtensor.h" 00028 class Material_Model; 00029 00030 class Cosseratstresstensor : public BJtensor 00031 { 00032 public: 00033 friend class Material_Model; 00034 00035 public: 00036 // just send appropriate arguments to the base constructor 00037 Cosseratstresstensor(int rank_of_tensor=2, double initval=0.0); // default constructor 00038 Cosseratstresstensor( double *values ); 00039 Cosseratstresstensor( double initvalue ); 00040 00041 Cosseratstresstensor(const Cosseratstresstensor & x ); 00042 Cosseratstresstensor(const BJtensor & x); // copy-initializer 00043 Cosseratstresstensor(const nDarray & x); // copy-initializer 00044 00045 //~Cosseratstresstensor( ); 00046 00047 00048 Cosseratstresstensor operator=(const Cosseratstresstensor & rval);// Cosseratstresstensor assignment 00049 Cosseratstresstensor operator=(const BJtensor & rval);// tensor assignment to Cosseratstresstensor 00050 Cosseratstresstensor operator=(const nDarray & rval);// nDarray assignment to Cosseratstresstensor 00051 00052 Cosseratstresstensor deep_copy(void); 00053 //.. Cosseratstresstensor * p_deep_copy(void); 00054 00055 //ini // use "from" and initialize already allocated stress tensor from "from" values 00056 //ini void Initialize( const Cosseratstresstensor & from ); 00057 00058 //___// operator() overloading for 3D Gauss points! 00059 //___ Cosseratstresstensor & operator()(short ir, short is, short it, 00060 //___ short tr, short ts, short tt ); 00061 00062 00063 double Iinvariant1( ) const; 00064 double Iinvariant2( ) const; 00065 double Iinvariant3( ) const; 00066 00067 double Jinvariant1( ) const; 00068 double Jinvariant2( ) const; 00069 double Jinvariant3( ) const; 00070 00071 Cosseratstresstensor deviator( ) const; 00072 Cosseratstresstensor principal( ) const; 00073 00074 double sigma_octahedral( ) const; 00075 double tau_octahedral( ) const; 00076 00077 double ksi( ) const; 00078 double xi( ) const; 00079 double ro( ) const; 00080 double rho( ) const; 00081 double theta() const; 00082 double thetaPI( ) const; 00083 00084 double p_hydrostatic( ) const; 00085 double q_deviatoric( ) const; 00086 00087 tensor dpoverds( void ) const; 00088 tensor dqoverds( void ) const; 00089 tensor dthetaoverds( void ) const; 00090 tensor d2poverds2( void ) const; 00091 tensor d2qoverds2( void ) const; 00092 tensor d2thetaoverds2( void ) const; 00093 00094 00095 00096 //-- Cosseratstresstensor yield_surface_cross(Cosseratstresstensor & end_stress, 00097 //-- Material_Model & YC); 00098 00099 Cosseratstresstensor pqtheta2stress( double, double, double ); 00100 00101 void report(char *) const; 00102 void reportshort(char *) const; 00103 void reportshortpqtheta(char *) const; 00104 void reportSHORTpqtheta(char *) const; 00105 void reportSHORTs1s2s3(char *) const; 00106 void reportKLOTpqtheta(char *) const; 00107 void reportshortI1J2J3(char *) const; 00108 void reportAnim(void) const; 00109 void reportTensor(char *) const; 00110 00111 //================================================================================ 00112 // Overloaded Insertion Operator ZHaohui Added Aug. 13, 2000 00113 // prints an Cosseratstresstensor's contents 00114 //================================================================================ 00115 friend OPS_Stream& operator<< (OPS_Stream& os, const Cosseratstresstensor & rhs); 00116 00117 // // routine used by root finder, takes an alfa and returns the 00118 // // yield function value for that alfa 00119 // public: 00120 // double func( Cosseratstresstensor & start_stress, 00121 // Cosseratstresstensor & end_stress, 00122 // Material_Model & YC, 00123 // double alfa ); 00124 // 00125 // 00126 // //..// polinomial root solver friend functions definitions 00127 // //..public: 00128 // //..friend void laguer(complex *, int , complex *, double , int ); 00129 // //..friend void zroots(complex *, int , complex *, int ); 00130 // //.. 00131 // 00132 // zero of function 00133 friend double zbrentstress(Cosseratstresstensor & start_stress, 00134 Cosseratstresstensor & end_stress, 00135 Material_Model & YC, 00136 double x1, double x2, double tol); 00137 00138 // friend double zbrent(double x1, double x2, double tol); 00139 // 00140 // 00141 }; 00142 00143 #endif 00144 |