OgdenSimoWEnergy.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 OgdenSimoWEnergy_CPP
00030 #define OgdenSimoWEnergy_CPP
00031 
00032 #include <OgdenSimoWEnergy.h>
00033 
00034 //================================================================================
00035 // Normal constructor
00036 //================================================================================
00037 OgdenSimoWEnergy::OgdenSimoWEnergy(int N_in, double  *cr_in, double *mur_in, double K_in)
00038 {
00039     N_Ogden = N_in;
00040     cr_Ogden = cr_in;
00041     mur_Ogden = mur_in;
00042     K = K_in; 
00043 }
00044 
00045 OgdenSimoWEnergy::OgdenSimoWEnergy( )
00046 {
00047     N_Ogden = 0;
00048     cr_Ogden = 0;
00049     mur_Ogden = 0;
00050     K = 0.0;
00051 }
00052 
00053 //================================================================================
00054 // Normal destructor
00055 //================================================================================
00056 OgdenSimoWEnergy::~OgdenSimoWEnergy( )
00057 {
00058 
00059 }
00060 
00061 //================================================================================
00062 //create a clone of itself
00063 //================================================================================
00064 WEnergy * OgdenSimoWEnergy::newObj( )
00065   {
00066     WEnergy  *new_WEnergy = new OgdenSimoWEnergy(N_Ogden,  cr_Ogden,  mur_Ogden, K);
00067     return new_WEnergy;
00068   }
00069 
00070 
00071 //================================================================================
00072 // w
00073 //================================================================================
00074 const double  OgdenSimoWEnergy::wE(const double &J_in, const Vector &lambda_wave_in )
00075   {
00076     double wEnergy = 0.0;
00077     for (int i=0; i<N_Ogden; i++)
00078      {
00079         wEnergy += *(cr_Ogden+i) / *(mur_Ogden+i) *
00080                    (pow ( lambda_wave_in(0),  *(mur_Ogden+i) ) +
00081                     pow ( lambda_wave_in(1),  *(mur_Ogden+i) ) +
00082                     pow ( lambda_wave_in(2),  *(mur_Ogden+i) ) - 3.0 ) ;
00083      }
00084     return wEnergy;
00085   }
00086 
00087 //================================================================================
00088 // d(iso)w / d(lambda)
00089 //================================================================================
00090 const Vector  OgdenSimoWEnergy::disowOdlambda( const Vector &lambda_wave_in)
00091   {
00092     Vector disowOverdlambda(3);
00093     for (int i=0; i<N_Ogden; i++)
00094      {
00095         disowOverdlambda(0) += *(cr_Ogden+i) * pow( lambda_wave_in(0),  (*(mur_Ogden+i) -1.0) );
00096         disowOverdlambda(1) += *(cr_Ogden+i) * pow( lambda_wave_in(1),  (*(mur_Ogden+i) -1.0) );
00097         disowOverdlambda(2) += *(cr_Ogden+i) * pow( lambda_wave_in(2),  (*(mur_Ogden+i) -1.0) );
00098      }
00099     return disowOverdlambda;
00100   }
00101 
00102 //================================================================================
00103 // d2(iso)w / d(lambda)2
00104 //================================================================================
00105 const Vector  OgdenSimoWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in )
00106   {
00107     Vector d2isowOverdlambda2(3);
00108     for (int i=0; i<N_Ogden; i++)
00109      {
00110         d2isowOverdlambda2(0) +=
00111             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(0),  (*(mur_Ogden+i) -2.0) );
00112         d2isowOverdlambda2(1) +=
00113             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(1),  (*(mur_Ogden+i) -2.0) );
00114         d2isowOverdlambda2(2) +=                         
00115             *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(2),  (*(mur_Ogden+i) -2.0) );
00116      }
00117     return d2isowOverdlambda2;
00118   }
00119 
00120 //================================================================================
00121 // d(vol)w / dJ
00122 //================================================================================
00123 const double  OgdenSimoWEnergy::dvolwOdJ(const double &J_in )
00124 {
00125    double dcolwOverdJ = K * (-2.0 / J_in + 2.0 * J_in) * 0.25;
00126    return dcolwOverdJ;
00127 }
00128 
00129 //================================================================================
00130 // d2(vol)w / dJ2
00131 //================================================================================
00132 const double  OgdenSimoWEnergy::d2volwOdJ2(const double &J_in )
00133 {
00134    double d2colwOverdJ2 = K * (2.0 / J_in / J_in + 2.0) * 0.25;
00135    return d2colwOverdJ2;
00136 }
00137 
00138 
00139 
00140 #endif

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