hiper.c

Go to the documentation of this file.
00001 /*
00002 %M This modules contains the HIPERBOLIC material sub-class methods and 
00003    definitions
00004 %a Joao Luiz Elias Campos.
00005 %d September 2nd, 1998.
00006 %r $Id: hiper.c,v 1.1 2004/06/22 05:29:58 joaoluiz Exp $
00007 %w (C) COPYRIGHT 1995-1996, Eduardo Nobre Lages.
00008    (C) COPYRIGHT 1997-1998, Joao Luiz Elias Campos.
00009    All Rights Reserved
00010    Duplication of this program or any part thereof without the express
00011    written consent of the author is prohibited.
00012 
00013    Modificacao: 28/04/2005    Alexandre A. Del Savio
00014      Foram substituídas todas as alocações dinâmicas feitas com malloc 
00015      por calloc.
00016 
00017 */
00018 
00019 /*
00020 ** ------------------------------------------------------------------------
00021 ** Global variables and symbols:
00022 */
00023 #include <stdio.h>
00024 #include <stdlib.h>
00025 
00026 #include "load.h"
00027 #include "elm.h"
00028 #include "material.h"
00029 #include "node.h"
00030 #include "rio.h"
00031 
00032 
00033 /* Parent methods
00034  */
00035 void MaterialTimeStep( sMaterial *, double * );
00036 void MaterialDensity ( sMaterial *, double * );
00037 
00038 
00039 /*
00040 ** ------------------------------------------------------------------------
00041 ** Local variables and symbols:
00042 */
00043 
00044 /*
00045 %T HIPERBOLIC material data definition
00046 */
00047 typedef struct _isodata
00048 {
00049  double E;             /* Young modulos       */
00050  double Et;            /* Young modulos       */
00051  double Nu;            /* Poisson coefficient */
00052  double C;             /* Coesion value       */
00053  double Phi;           /* Friction angle      */
00054  double Rf;
00055  double N;
00056  double Pa;            /* Atmosferic pressure */
00057  double Kh;
00058 } sHiperData;
00059 
00060 
00061 /*
00062 ** ------------------------------------------------------------------------
00063 ** Local functions:
00064 */
00065 
00066 
00067 /*
00068 ** ------------------------------------------------------------------------
00069 ** Subclass methods:
00070 */
00071 static void HiperbolicNew        ( int, sMaterial ** );
00072 static void HiperbolicFree       ( sMaterial * );
00073 static void HiperbolicRead       ( sMaterial * );
00074 static void HiperbolicEParameter ( sMaterial *, double * );
00075 static void HiperbolicNuParameter( sMaterial *, double * );
00076 static void HiperbolicCMatrix    ( sMaterial *, double [6][6] );
00077 
00078 
00079 /*
00080 %F This method allocates memory for a HIPERBOLIC material and fills its 
00081    data with the specific values.
00082 %i Material label (number)
00083 %o Material descriptor.
00084 */
00085 static void HiperbolicNew( int label, sMaterial **mat )
00086 {
00087  sHiperData *data = 0L;
00088 
00089 /* Get memory for the material descriptor
00090  */
00091  (*mat) = (sMaterial *)calloc(1, sizeof(sMaterial));
00092 
00093 /* Get memory for the HIPERBOLIC material data
00094  */
00095  data = (sHiperData *)calloc(1, sizeof(sHiperData));
00096 
00097 /* Fill HIPERBOLIC material data
00098  */
00099  data->E   = 0.0;
00100  data->Et  = 0.0;
00101  data->Nu  = 0.0;
00102  data->C   = 0.0;
00103  data->Phi = 0.0;
00104  data->Rf  = 0.0;
00105  data->N   = 0.0;
00106  data->Pa  = 0.0;
00107  data->Kh  = 0.0;
00108 
00109 /* Fill material descriptor
00110  */
00111  (*mat)->type  = HIPERBOLIC;
00112  (*mat)->label = label;
00113  (*mat)->Gamma = 0.0;
00114  (*mat)->data  = (void *)data;
00115 
00116 /* Add to the material list
00117  */
00118  MatList[label-1] = (*mat);
00119 
00120 } /* End of HiperbolicNew */
00121 
00122 
00123 /*
00124 %F This method frees the HIPERBOLIC material data for a given material.
00125 %i Material descriptor.
00126 */
00127 static void HiperbolicFree( sMaterial *mat )
00128 {
00129  sHiperData *data = 0L;
00130 
00131 /* Get HIPERBOLIC material data
00132  */
00133  data = (sHiperData *)mat->data;
00134 
00135 /* Release allocated memory
00136  */
00137  free( data );
00138 
00139 /* Reset material data
00140  */
00141  mat->data = 0L;
00142 
00143 } /* End of HiperbolicFree */
00144 
00145 
00146 /*
00147 %F This method reads the HIPERBOLIC material information.
00148 %i Material descriptor.
00149 */
00150 static void HiperbolicRead( sMaterial *mat )
00151 {
00152  sHiperData *data = 0L;
00153  double      e, nu, c, phi;
00154  double      rf, n, pa, kh;
00155 
00156 /* Get the material data
00157  */
00158  data = (sHiperData *)mat->data;
00159 
00160 /* Read the material parameters
00161  */
00162  fscanf( nf, "%lf %lf %lf %lf", &e, &nu, &c, &phi );
00163  fscanf( nf, "%lf %lf %lf %lf", &rf, &n, &pa, &kh );
00164 
00165 /* Fill material information
00166  */
00167  data->E   = e;
00168  data->Nu  = nu;
00169  data->C   = c;
00170  data->Phi = phi;
00171  data->Rf  = rf;
00172  data->N   = n;
00173  data->Pa  = pa;
00174  data->Kh  = kh;
00175 
00176 } /* End of HiperbolicRead */
00177 
00178 
00179 /*
00180 %F
00181 */
00182 static void HiperbolicEParameter( sMaterial *mat, double *e )
00183 {
00184  sHiperData *data = 0L;
00185 
00186 /* Get material descriptor
00187  */ 
00188  data = (sHiperData *)mat->data;
00189 
00190 /* Get Young modules parameters
00191  */
00192  (*e) = data->Et;
00193 
00194 } /* End of HiperbolicEParameter */
00195 
00196 
00197 /*
00198 %F
00199 */
00200 static void HiperbolicNuParameter( sMaterial *mat, double *nu )
00201 {
00202  sHiperData *data = 0L;
00203 
00204 /* Get material descriptor
00205  */ 
00206  data = (sHiperData *)mat->data;
00207 
00208 /* Get Poisson coefficient parameters
00209  */
00210  (*nu) = data->Nu;
00211 
00212 } /* End of HiperbolicNuParameter */
00213 
00214 
00215 /*
00216 %F This function computes the material constitutive matrix
00217 */
00218 static void HiperbolicCMatrix( sMaterial *mat, double cm[6][6] )
00219 {
00220  int         i, j;
00221  sHiperData *data = 0L;
00222  double      e, nu;
00223 
00224 /* Intialize matrix
00225  */
00226  for( i = 0; i < 6; i++ )
00227   for( j = 0; j < 6; j++ )
00228    cm[i][j] = 0.0;
00229 
00230 /* Get material descriptor
00231  */
00232  data = (sHiperData *)mat->data;
00233 
00234 /* Get element parameters
00235  */
00236  e  = data->Et;
00237  nu = data->Nu;
00238 
00239 /* Compute matrix elements
00240  */
00241  if( NDof == 3 )
00242  {
00243   cm[0][0] = 
00244   cm[1][1] =
00245   cm[2][2] =  e*(nu*nu-1.0) / (nu*(nu+nu*nu)+nu*(nu*nu+nu)+nu*nu-1.0);
00246   cm[1][0] =
00247   cm[2][0] = 
00248   cm[0][1] = 
00249   cm[2][1] =
00250   cm[0][2] =
00251   cm[1][2] = -e*(nu*nu+nu) / (nu*(nu+nu*nu)+nu*(nu*nu+nu)+nu*nu-1.0);
00252   cm[3][3] =
00253   cm[4][4] =
00254   cm[5][5] = (e * e) / (e + e * (1.0 + 2.0 * nu));
00255  }
00256  else
00257  {
00258   cm[0][0] = cm[1][1] = (e * (1.0 - nu)) / ((1.0 + nu) * (1.0 - (2.0 * nu)));
00259   cm[0][1] = cm[1][0] = (e * nu) / ((1.0 + nu) * (1.0 - (2.0 * nu)));
00260   cm[2][2] = e / (2.0 * (1.0 + nu));
00261  }
00262  
00263 } /* End of HiperbolicCMatrix */
00264 
00265 
00266 /*
00267 ** ------------------------------------------------------------------------
00268 ** Public functions:
00269 */
00270 
00271 /*
00272 %F This function initializes the sub-class "HIPERBOLIC".
00273 */
00274 void HiperbolicInit( void );
00275 void HiperbolicInit( void )
00276 {
00277 /* Initialize HIPERBOLIC material sub-class
00278  */
00279  MatClass[HIPERBOLIC].new       = HiperbolicNew;
00280  MatClass[HIPERBOLIC].free      = HiperbolicFree;
00281  MatClass[HIPERBOLIC].read      = HiperbolicRead;
00282  MatClass[HIPERBOLIC].epar      = HiperbolicEParameter;
00283  MatClass[HIPERBOLIC].nupar     = HiperbolicNuParameter;
00284  MatClass[HIPERBOLIC].cmatrix   = HiperbolicCMatrix;
00285  MatClass[HIPERBOLIC].updatestr = 0L;
00286  MatClass[HIPERBOLIC].updatepar = 0L;
00287  MatClass[HIPERBOLIC].timestep  = MaterialTimeStep;
00288  MatClass[HIPERBOLIC].density   = MaterialDensity;
00289  MatClass[HIPERBOLIC].vstrain   = 0L;
00290 
00291 } /* End of HiperbolicInit */
00292 
00293 
00294 /* =======================================================  End of File  */
00295 

Generated on Tue Oct 23 11:23:29 2007 for Relax by  doxygen 1.5.3