LogWEnergy.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:    Sept 2003
00024 //#                    28May2004
00025 //#
00026 //===============================================================================
00027 
00028 #ifndef LogWEnergy_CPP
00029 #define LogWEnergy_CPP
00030 
00031 #include <LogWEnergy.h>
00032 
00033 //================================================================================
00034 // Normal constructor
00035 //================================================================================
00036 LogWEnergy::LogWEnergy(double K_in, double G_in ) :K(K_in), G(G_in)
00037 {
00038 
00039 }
00040 
00041 LogWEnergy::LogWEnergy( ) :K(0.0), G(0.0)
00042 {
00043 
00044 }
00045 
00046 //================================================================================
00047 // Normal destructor
00048 //================================================================================
00049 LogWEnergy::~LogWEnergy( )
00050 {
00051 
00052 }
00053 
00054 //================================================================================
00055 //create a clone of itself
00056 //================================================================================
00057 WEnergy * LogWEnergy::newObj( )
00058   {
00059     LogWEnergy  *new_WEnergy = new LogWEnergy(K, G);
00060     return new_WEnergy;
00061   }
00062 
00063 //================================================================================
00064 // w
00065 //================================================================================
00066 const double LogWEnergy::wE(const double &J_in, const Vector &lambda_wave_in)
00067   {
00068     double w_iso = G * ( log(lambda_wave_in(0)) * log(lambda_wave_in(0))
00069                                   + log(lambda_wave_in(1)) * log(lambda_wave_in(1))
00070                                   + log(lambda_wave_in(2)) * log(lambda_wave_in(2)) );
00071     double w_vol = 0.5 * K * (log(J_in) * log(J_in));
00072     double w_total = w_iso + w_vol;
00073     return w_total;
00074   }
00075 
00076 //================================================================================
00077 // d(iso)w / d(lambda)
00078 //================================================================================
00079 const Vector LogWEnergy::disowOdlambda(const Vector &lambda_wave_in)
00080   {
00081     Vector disowOverdlambda(3);
00082     disowOverdlambda(0) = 2.0 * G * log(lambda_wave_in(0)) / lambda_wave_in(0);
00083     disowOverdlambda(1) = 2.0 * G * log(lambda_wave_in(1)) / lambda_wave_in(1);
00084     disowOverdlambda(2) = 2.0 * G * log(lambda_wave_in(2)) / lambda_wave_in(2);
00085     return disowOverdlambda;
00086   }
00087 
00088 //================================================================================
00089 // d2(iso)w / d(lambda)2
00090 //================================================================================
00091 const Vector LogWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in)
00092   {
00093     Vector d2isowOverdlambda2(3);
00094     d2isowOverdlambda2(0) = 2.0 * G * (1.0-log(lambda_wave_in(0))) / lambda_wave_in(0) / lambda_wave_in(0);
00095     d2isowOverdlambda2(1) = 2.0 * G * (1.0-log(lambda_wave_in(1))) / lambda_wave_in(1) / lambda_wave_in(1);
00096     d2isowOverdlambda2(2) = 2.0 * G * (1.0-log(lambda_wave_in(2))) / lambda_wave_in(2) / lambda_wave_in(2);
00097     return d2isowOverdlambda2;
00098   }
00099 
00100 //================================================================================
00101 // d(vol)w / dJ
00102 //================================================================================
00103 const double LogWEnergy::dvolwOdJ(const double &J_in)
00104 {
00105 //   printf("J=%lf\n",J_in);
00106    double dcolwOverdJ = K * log(J_in) / J_in;
00107 //   printf("dW/dJ=%lf\n",dcolwOverdJ);
00108    return  dcolwOverdJ;
00109 }
00110 
00111 //================================================================================
00112 // d2(vol)w / dJ2
00113 //================================================================================
00114 const double LogWEnergy::d2volwOdJ2(const double &J_in)
00115 {
00116 //   printf("J=%lf\n",J_in);
00117    double d2colwOverdJ2 = K * (1.0 - log(J_in) ) / J_in / J_in ;
00118 //   printf("d2W/dJ2=%lf\n",d2colwOverdJ2);
00119    return  d2colwOverdJ2;
00120 }
00121 
00122 
00123 #endif
00124 

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