00001 // ------------------------------------------------------------------------- 00002 // CModel.h - This header file contains the public data structure 00003 // definitions for the Constitutive Model class within FEMOOP. 00004 // ------------------------------------------------------------------------- 00005 // 00006 // Description: There are several conceptual operations which are common 00007 // to all constitutive models (e.g. the stress evaluation 00008 // for a given state of strain), these operations are defined 00009 // below. 00010 // 00011 // Currently are implemented the models: 00012 // Elastic Linear 00013 // Elastic-Plastic 00014 // von Mises 00015 // Tresca 00016 // Drucker-Prager 00017 // Mohr-Coulomb 00018 // Polar von Mises 00019 // Damage 00020 // Bilinear 00021 // Nonlinear 00022 // 00023 // It's important to note that each integration (Gauss) point of the 00024 // Finite Element mesh must have its constitutive model. This is necessary 00025 // because in nonlinear analysis the stress is a function not only of 00026 // the current strain but of the whole strain history. 00027 // Each constitutive model object has a pointer to its integr. point and 00028 // a pointer to its material. The object material knows only the data 00029 // read in the neutral file. 00030 // ------------------------------------------------------------------------- 00031 // References: 00032 // 00033 // [1] "Plasticity: Computational Aspects", J. C. Simo & T. J. R. Hughes, 00034 // 1988. 00035 // [2] "The Finite Element Method", O. C. Zienkiewicz & R. L. Taylor, 00036 // Vol. 2, Fourth Edition, McGraw-Hill, 1991. 00037 // [3] "Plasticity in Reinforced Concrete", W. F. Chen, McGraw-Hill, New 00038 // York, 1984. 00039 // 00040 // ------------------------------------------------------------------------- 00041 // Main public methods: 00042 // ------------------------------------------------------------------------- 00043 // 00044 // static cConstModel *CreateModel( cIntPt *ipt ) 00045 // 00046 // ipt - integration point ( in ) 00047 // 00048 // Creates a new constitutive model for a given integr. point and returns 00049 // a pointer to this model. 00050 // 00051 // ------------------------------------------------------------------------- 00052 // 00053 // static cConstModel GetTotNumPrintScls( void ) 00054 // 00055 // Returns the number of different constitutive model labels. 00056 // 00057 // ------------------------------------------------------------------------- 00058 // 00059 // static cConstModel GetTotPrintSclLabs( char **label ) 00060 // 00061 // Returns the constitutive model labels. 00062 // 00063 // ------------------------------------------------------------------------- 00064 // 00065 // virtual void Init( void ) 00066 // 00067 // Initializes the constitutive model. 00068 // 00069 // ------------------------------------------------------------------------- 00070 // 00071 // virtual void Update( void ) 00072 // 00073 // Updates the history of the constitutive model. The iterative variables 00074 // are assigned to the incremental variables. This operation must be done 00075 // only after the structure had been reached a equilibrium state. If the 00076 // history isn't important to the model, then this method does nothing. 00077 // 00078 // ------------------------------------------------------------------------- 00079 // 00080 // virtual int Stress( double *strain_vec, double *stress_vec ) 00081 // 00082 // strain_vec - integration point strain vector ( in ) 00083 // stress_vec - integration point stress vector ( out ) 00084 // 00085 // Evaluates the state of stress in a integration point for a given state of 00086 // strain. It returns (1) if the operation had success an (0) otherwise. 00087 // 00088 // ------------------------------------------------------------------------- 00089 // 00090 // virtual void ModifyCMatrix( double **c_matrix ) 00091 // 00092 // c_matrix - constitutive matrix ( in/out ) 00093 // 00094 // Modifies the elastic constitutive matrix according to the current 00095 // state of stress and strain and its respectives histories. 00096 // 00097 // ------------------------------------------------------------------------- 00098 // 00099 // virtual int GetNumPrintScls( void ) 00100 // 00101 // Returns the number of scalar values of the constitutive model that 00102 // should be printed in the output file. 00103 // 00104 // ------------------------------------------------------------------------- 00105 // 00106 // virtual void GetPrintSclLabs( char **label ) 00107 // 00108 // label - array with print labels ( out ) 00109 // 00110 // Returns the labels of scalar values of the constitutive model that 00111 // should be printed in the output file. 00112 // 00113 // ------------------------------------------------------------------------- 00114 // 00115 // virtual void GetPrintSclVals( double *stress, double *val ) 00116 // 00117 // stress - current stress vector ( in ) 00118 // val - vector with print values ( out ) 00119 // 00120 // Returns the scalar values of the constitutive model that 00121 // should be printed in the output file. 00122 // 00123 // ------------------------------------------------------------------------- 00124 // 00125 // $Author: evandro $ 00126 // $Revision: 1.3 $ 00127 // $Date: 2000/04/04 22:30:08 $ 00128 // $State: Exp $ 00129 // 00130 // ------------------------------------------------------------------------- 00131 00132 #ifndef _CMODEL_H 00133 #define _CMODEL_H 00134 00135 #include "gbldefs.h" 00136 00137 // ------------------------------------------------------------------------- 00138 // Forward declarations: 00139 // 00140 class cMaterial; 00141 class cIntPt; 00142 00143 // ------------------------------------------------------------------------- 00144 // Constituive models types: 00145 // 00146 typedef enum _constmodeltype 00147 { 00148 ELASTICLIN, // Elastic Linear Model 00149 VONMISES, // Elastic-Plastic von Mises Model 00150 PVONMISES, // Elastic-Plastic Polar von Mises Model 00151 DRUCKERPRAGER, // Elastic-Plastic Drucker-Prager Model 00152 TRESCA, // Elastic-Plastic Tresca Model 00153 MOHRCOULOMB, // Elastic-Plastic Mohr-Coulomb Model 00154 DAMAGEBL, // Bilinear Damage Model 00155 DAMAGENL, // Nonlinear Damage Model 00156 WINKLERPT, // Nonlinear Winkler Model 00157 WINKLER2DPT // Nonlinear Winkler Model for 2D problems 00158 } eConstModelType; 00159 00160 // ------------------------------------------------------------------------- 00161 // Max sizes: 00162 // 00163 #define NUM_MAX_LABELS 100 00164 00165 // ------------------------------------------------------------------------- 00166 // Base Constitutive Model class: 00167 // 00168 class cConstModel 00169 { 00170 private: 00171 static int _iNumScalarLabels; 00172 static char *_chScalarLabels[NUM_MAX_LABELS]; 00173 00174 protected: 00175 eConstModelType _eType; // Constitutive model type 00176 cMaterial *_pcMat; // Global material 00177 cIntPt *_pcIpt; // Integration point 00178 00179 public: 00180 cConstModel ( cIntPt *, cMaterial * ); 00181 virtual ~cConstModel ( void ) { } 00182 static cConstModel *CreateModel ( cIntPt * ); 00183 static int GetTotNumPrintScls ( void ); 00184 static void GetTotPrintSclLabs ( char ** ); 00185 cMaterial *GetMaterialAddr ( void ) { return _pcMat; } 00186 eConstModelType GetType ( void ) { return _eType; } 00187 virtual void Init ( void ) { } 00188 virtual void Update ( void ) { } 00189 virtual int Stress ( double *, double * ) = 0; 00190 virtual void ModifyCMatrix ( double ** ) = 0; 00191 virtual int GetNumPrintScls ( void ) { return 0; } 00192 virtual void GetPrintSclLabs ( char ** ) { } 00193 virtual void GetPrintSclVals ( double *, double * ) { } 00194 00195 private: 00196 static void AddLabelList ( cConstModel * ); 00197 }; 00198 00199 #endif