PoleZeroMaterialLaw< DIM > Class Template Reference

#include <PoleZeroMaterialLaw.hpp>

Inheritance diagram for PoleZeroMaterialLaw< DIM >:

Inheritance graph
[legend]
Collaboration diagram for PoleZeroMaterialLaw< DIM >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 PoleZeroMaterialLaw (std::vector< std::vector< double > > k, std::vector< std::vector< double > > a, std::vector< std::vector< double > > b)
void ComputeStressAndStressDerivative (c_matrix< double, DIM, DIM > &rC, c_matrix< double, DIM, DIM > &rInvC, double pressure, c_matrix< double, DIM, DIM > &rT, FourthOrderTensor< DIM > &rDTdE, bool computeDTdE)
double GetZeroStrainPressure ()
void ScaleMaterialParameters (double scaleFactor)

Protected Member Functions

 PoleZeroMaterialLaw ()
void SetParameters (std::vector< std::vector< double > > k, std::vector< std::vector< double > > a, std::vector< std::vector< double > > b)

Private Attributes

std::vector< std::vector
< double > > 
mK
std::vector< std::vector
< double > > 
mA
std::vector< std::vector
< double > > 
mB
c_matrix< double, DIM, DIM > mIdentity

Friends

class TestMaterialLaws


Detailed Description

template<unsigned DIM>
class PoleZeroMaterialLaw< DIM >

Pole-zero material law

NOTE: CHANGED THE CODE AT THE MOMENT TO NOT USE THE POSITIVE PART BIT BELOW AS THEN IT IS NOT TWICE DIFFERENTIABLE

W = Sum_{M,N=1..3} k_{MN} ([ E_{MN} ]_+)^2 / (a_{MN} - E_{MN})^b_{MN}

Note the positive part operator in the numerator, so that the term in W corresponding to M,N is zero if E_MN < 0. (This differs from the original pole-zero paper but seems to be what they meant..)

Note that is the parameters k4,k5,k6,a4,a5,a6 etc are known, then k01=k10=0.5*k4 and similarly with k5,k6, but a01=a10=a4 etc.

Not isotropic, so inherits directly from AbstractIncompressibleMaterialLaw

Definition at line 57 of file PoleZeroMaterialLaw.hpp.


Constructor & Destructor Documentation

template<unsigned DIM>
PoleZeroMaterialLaw< DIM >::PoleZeroMaterialLaw (  )  [inline, protected]

Protected default constructor doing nothing. Just saw inherited classes can be instantiated and THEN set up the parameters

Definition at line 32 of file PoleZeroMaterialLaw.cpp.

template<unsigned DIM>
PoleZeroMaterialLaw< DIM >::PoleZeroMaterialLaw ( std::vector< std::vector< double > >  k,
std::vector< std::vector< double > >  a,
std::vector< std::vector< double > >  b 
) [inline]

Constructor, taking in parameters k_i, a_i, b_i as matrices. These matrices must be of size DIM-by-DIM and must be symmetric

Note: using the k_1..k_6 convention, k_4 = 2*k[0][1] = 2*k[1][0], etc

Parameters:
k the parameter k
a the parameter a
b the parameter b

Definition at line 78 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::SetParameters().


Member Function Documentation

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::SetParameters ( std::vector< std::vector< double > >  k,
std::vector< std::vector< double > >  a,
std::vector< std::vector< double > >  b 
) [inline, protected]

Set k, a, and b. To be called by the constuctor or a child class Set comments for constructor.

Parameters:
k the parameter k
a the parameter a
b the parameter b

Definition at line 37 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, and PoleZeroMaterialLaw< DIM >::mK.

Referenced by PoleZeroMaterialLaw< DIM >::PoleZeroMaterialLaw().

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative ( c_matrix< double, DIM, DIM > &  rC,
c_matrix< double, DIM, DIM > &  rInvC,
double  pressure,
c_matrix< double, DIM, DIM > &  rT,
FourthOrderTensor< DIM > &  rDTdE,
bool  computeDTdE 
) [inline, virtual]

Compute the (2nd Piola Kirchoff) stress T and the stress derivative dT/dE for a given strain.

NOTE: the strain E is not expected to be passed in, instead the Lagrangian deformation tensor C is required (recall, E = 0.5(C-I))

dT/dE is a fourth-order tensor, where dT/dE[M][N][P][Q] = dT^{MN}/dE_{PQ}

Parameters:
rC The Lagrangian deformation tensor (F^T F)
rInvC The inverse of C. Should be computed by the user. (Change this?)
pressure the current pressure
rT the stress will be returned in this parameter
rDTdE the stress derivative will be returned in this parameter, assuming the final parameter is true
computeDTdE a boolean flag saying whether the stress derivative is required or not.

Implements AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 86 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, and PoleZeroMaterialLaw< DIM >::mK.

template<unsigned DIM>
double PoleZeroMaterialLaw< DIM >::GetZeroStrainPressure (  )  [inline, virtual]

Get the pressure corresponding to E=0, ie C=identity.

Implements AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 159 of file PoleZeroMaterialLaw.cpp.

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::ScaleMaterialParameters ( double  scaleFactor  )  [inline, virtual]

Scale the dimensional material parameters (ie the K's).

Parameters:
scaleFactor 

Reimplemented from AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 165 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mK.


Member Data Documentation

template<unsigned DIM>
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mK [private]

template<unsigned DIM>
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mA [private]

template<unsigned DIM>
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mB [private]

template<unsigned DIM>
c_matrix<double,DIM,DIM> PoleZeroMaterialLaw< DIM >::mIdentity [private]


The documentation for this class was generated from the following files:

Generated on Tue Aug 4 16:11:38 2009 for Chaste by  doxygen 1.5.5