PoleZeroMaterialLaw< DIM > Class Template Reference

#include <PoleZeroMaterialLaw.hpp>

Inherits AbstractIncompressibleMaterialLaw< DIM >.

Inherited by NashHunterPoleZeroLaw< DIM >.

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)

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, as stated in: "Computational mechanics of the heart: from tissue structure to ventricular function" Nash, Hunter, J. Elasticity, 2000; or in Chapter 41 of "Cardiac Mechano-Electric Feedback and Arrhythmias: from Pipette to Patient" (eds Franz, Kohl, Sachs), Remme, Nash and Hunter, 2005.

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

This class doesn't set parameter values, see NashHunterPoleZeroLaw for a derived class which sets cardiac parameter values.

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 59 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 >::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 AbstractMaterialLaw< DIM >.

Definition at line 87 of file PoleZeroMaterialLaw.cpp.

References AbstractMaterialLaw< DIM >::ComputeTransformedDeformationTensor(), EXCEPTION, PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, PoleZeroMaterialLaw< DIM >::mK, and AbstractMaterialLaw< DIM >::TransformStressAndStressDerivative().

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 170 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 AbstractMaterialLaw< DIM >.

Definition at line 176 of file PoleZeroMaterialLaw.cpp.

References PoleZeroMaterialLaw< DIM >::mK.

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 EXCEPTION, PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, and PoleZeroMaterialLaw< DIM >::mK.

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


Member Data Documentation

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>
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mK [private]

The documentation for this class was generated from the following files:
Generated on Thu Dec 22 13:07:15 2011 for Chaste by  doxygen 1.6.3