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 > &C, c_matrix< double, DIM, DIM > &invC, double pressure, c_matrix< double, DIM, DIM > &T, FourthOrderTensor2< DIM > &dTdE, 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 = {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

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.

Definition at line 37 of file PoleZeroMaterialLaw.cpp.

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

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative ( c_matrix< double, DIM, DIM > &  C,
c_matrix< double, DIM, DIM > &  invC,
double  pressure,
c_matrix< double, DIM, DIM > &  T,
FourthOrderTensor2< DIM > &  dTdE,
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:
C The Lagrangian deformation tensor (F^T F)
invC The inverse of C. Should be computed by the user. (Change this?)
pressure the current pressure
T the stress will be returned in this parameter
dTdE 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.

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)

Reimplemented from AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 165 of file PoleZeroMaterialLaw.cpp.


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

Generated on Wed Mar 18 12:52:47 2009 for Chaste by  doxygen 1.5.5