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, DIM, DIM, DIM > &rDTdE, bool computeDTdE)
double GetZeroStrainPressure ()
void ScaleMaterialParameters (double scaleFactor)
void SetChangeOfBasisMatrix (c_matrix< double, DIM, DIM > &rChangeOfBasisMatrix)

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
c_matrix< double, DIM, DIM > * mpChangeOfBasisMatrix

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

Note, by default, the fibre direction is assumed to be THE X-DIRECTION, and the sheet direction the Y-DIRECTION (ie sheets in the XY plane). Call SetChangeOfBasisMatrix() before ComputeStressAndStressDerivative(), with the matrix P = [fibre_vec, sheet_vec, normal_vec] if this is not the case.

Definition at line 63 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.

References PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix.

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 79 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix, and 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 38 of file PoleZeroMaterialLaw.cpp.

References EXCEPTION, 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, DIM, DIM, 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 89 of file PoleZeroMaterialLaw.cpp.

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

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 208 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 214 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mK.

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::SetChangeOfBasisMatrix ( c_matrix< double, DIM, DIM > &  rChangeOfBasisMatrix  )  [inline, virtual]

Some material laws (eg pole-zero) may have prefered directions (eg fibre direction), but be implemented to assume the prefered directions are parallel to the X-axis etc. Call this with the change of basis matrix and C will be transformed from the Euclidean coordinate system to the appropriate coordinate system before used to calculate T, which will then be transformed from the appropriate coordinate system back to the Euclidean coordinate system before being returned, as will dTdE.

The change of basis matrix for pole-zero should be of the form: [ fibre_vec sheet_vec normal_vec ]

Parameters:
rChangeOfBasisMatrix Change of basis matrix.

Implements AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 169 of file PoleZeroMaterialLaw.hpp.

References PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix.


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]

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


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

Generated on Mon Nov 1 12:37:14 2010 for Chaste by  doxygen 1.5.5