OgdenWEnergy.cpp

Go to the documentation of this file.
00001 //===============================================================================
00002 //# COPYRIGHT (C): Woody's license (by BJ):
00003 //                 ``This    source  code is Copyrighted in
00004 //                 U.S.,  for  an  indefinite  period,  and anybody
00005 //                 caught  using it without our permission, will be
00006 //                 mighty good friends of ourn, cause we don't give
00007 //                 a  darn.  Hack it. Compile it. Debug it. Run it.
00008 //                 Yodel  it.  Enjoy it. We wrote it, that's all we
00009 //                 wanted to do.''
00010 //
00011 //# PROJECT:           Object Oriented Finite Element Program
00012 //# PURPOSE:           Finite Deformation Hyper-Elastic classes
00013 //# CLASS:
00014 //#
00015 //# VERSION:           0.6_(1803398874989) (golden section)
00016 //# LANGUAGE:          C++
00017 //# TARGET OS:         all...
00018 //# DESIGN:            Zhao Cheng, Boris Jeremic (jeremic@ucdavis.edu)
00019 //# PROGRAMMER(S):     Zhao Cheng, Boris Jeremic
00020 //#
00021 //#
00022 //# DATE:              19AUg2003
00023 //# UPDATE HISTORY:    28May2004
00024 //#
00025 //#
00026 //===============================================================================
00027 
00028 
00029 #ifndef OgdenWEnergy_CPP
00030 #define OgdenWEnergy_CPP
00031 
00032 #include <OgdenWEnergy.h>
00033 
00034 //================================================================================
00035 // Normal constructor
00036 //================================================================================
00037 OgdenWEnergy::OgdenWEnergy(int N_in, double  *cr_in, double *mur_in )
00038 {
00039     N_Ogden = N_in;
00040     cr_Ogden = cr_in;
00041     mur_Ogden = mur_in; 
00042 }
00043 
00044 OgdenWEnergy::OgdenWEnergy( )
00045 {
00046     N_Ogden = 0;
00047     cr_Ogden = 0;
00048     mur_Ogden = 0;
00049 }
00050 
00051 //================================================================================
00052 // Normal destructor
00053 //================================================================================
00054 OgdenWEnergy::~OgdenWEnergy( )
00055 {
00056 
00057 }
00058 
00059 //================================================================================
00060 //create a clone of itself
00061 //================================================================================
00062 WEnergy * OgdenWEnergy::newObj( )
00063   {
00064     WEnergy  *new_WEnergy = new OgdenWEnergy( N_Ogden,  cr_Ogden,  mur_Ogden);
00065     return new_WEnergy;
00066   }
00067 
00068 
00069 //================================================================================
00070 // w
00071 //================================================================================
00072 const double  OgdenWEnergy::wE(const double &J_in, const Vector &lambda_wave_in )
00073   {
00074     double wEnergy = 0.0;
00075     for (int i=0; i<N_Ogden; i++)
00076      {
00077         wEnergy += *(cr_Ogden+i) / *(mur_Ogden+i) *
00078                    (pow ( lambda_wave_in(0),  *(mur_Ogden+i) ) +
00079                     pow ( lambda_wave_in(1),  *(mur_Ogden+i) ) +
00080                     pow ( lambda_wave_in(2),  *(mur_Ogden+i) ) - 3.0 ) ;
00081      }
00082     return wEnergy;
00083   }
00084 
00085 //================================================================================
00086 // d(iso)w / d(lambda)
00087 //================================================================================
00088 const Vector  OgdenWEnergy::disowOdlambda( const Vector &lambda_wave_in)
00089   {
00090     Vector disowOverdlambda(3);
00091     for (int i=0; i<N_Ogden; i++)
00092      {
00093         disowOverdlambda(0) += *(cr_Ogden+i) * pow( lambda_wave_in(0),  (*(mur_Ogden+i) -1.0) );
00094         disowOverdlambda(1) += *(cr_Ogden+i) * pow( lambda_wave_in(1),  (*(mur_Ogden+i) -1.0) );
00095         disowOverdlambda(2) += *(cr_Ogden+i) * pow( lambda_wave_in(2),  (*(mur_Ogden+i) -1.0) );
00096      }
00097     return disowOverdlambda;
00098   }
00099 
00100 //================================================================================
00101 // d2(iso)w / d(lambda)2
00102 //================================================================================
00103 const Vector  OgdenWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in )
00104   {
00105     Vector d2isowOverdlambda2(3);
00106     for (int i=0; i<N_Ogden; i++)
00107      {
00108         d2isowOverdlambda2(0) +=
00109             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(0),  (*(mur_Ogden+i) -2.0) );
00110         d2isowOverdlambda2(1) +=
00111             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(1),  (*(mur_Ogden+i) -2.0) );
00112         d2isowOverdlambda2(2) +=                         
00113             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(2),  (*(mur_Ogden+i) -2.0) );
00114      }
00115     return d2isowOverdlambda2;
00116   }
00117 
00118 
00119 
00120 #endif
00121 

Generated on Mon Oct 23 15:05:14 2006 for OpenSees by doxygen 1.5.0