Chaste Commit::f2ff7ee04e70ac9d06c57344df8d017dbb12b97b
PoleZeroMaterialLaw< DIM > Class Template Reference

#include <PoleZeroMaterialLaw.hpp>

+ Inheritance diagram for PoleZeroMaterialLaw< DIM >:
+ Collaboration diagram for PoleZeroMaterialLaw< DIM >:

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)
 
- Public Member Functions inherited from AbstractIncompressibleMaterialLaw< DIM >
 AbstractIncompressibleMaterialLaw ()
 
virtual ~AbstractIncompressibleMaterialLaw ()
 
- Public Member Functions inherited from AbstractMaterialLaw< DIM >
 AbstractMaterialLaw ()
 
virtual ~AbstractMaterialLaw ()
 
void ComputeCauchyStress (c_matrix< double, DIM, DIM > &rF, double pressure, c_matrix< double, DIM, DIM > &rSigma)
 
void Compute1stPiolaKirchoffStress (c_matrix< double, DIM, DIM > &rF, double pressure, c_matrix< double, DIM, DIM > &rS)
 
void Compute2ndPiolaKirchoffStress (c_matrix< double, DIM, DIM > &rC, double pressure, c_matrix< double, DIM, DIM > &rT)
 
void SetChangeOfBasisMatrix (c_matrix< double, DIM, DIM > &rChangeOfBasisMatrix)
 
void ResetToNoChangeOfBasisMatrix ()
 

Protected Member Functions

 PoleZeroMaterialLaw ()
 
void SetParameters (std::vector< std::vector< double > > k, std::vector< std::vector< double > > a, std::vector< std::vector< double > > b)
 
- Protected Member Functions inherited from AbstractMaterialLaw< DIM >
void ComputeTransformedDeformationTensor (c_matrix< double, DIM, DIM > &rC, c_matrix< double, DIM, DIM > &rInvC, c_matrix< double, DIM, DIM > &rCTransformed, c_matrix< double, DIM, DIM > &rInvCTransformed)
 
void TransformStressAndStressDerivative (c_matrix< double, DIM, DIM > &rT, FourthOrderTensor< DIM, DIM, DIM, DIM > &rDTdE, bool transformDTdE)
 

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
 

Additional Inherited Members

- Protected Attributes inherited from AbstractMaterialLaw< DIM >
c_matrix< double, DIM, DIM > * mpChangeOfBasisMatrix
 

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 63 of file PoleZeroMaterialLaw.hpp.

Constructor & Destructor Documentation

◆ PoleZeroMaterialLaw() [1/2]

template<unsigned DIM>
PoleZeroMaterialLaw< DIM >::PoleZeroMaterialLaw ( )
protected

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

Definition at line 39 of file PoleZeroMaterialLaw.cpp.

◆ PoleZeroMaterialLaw() [2/2]

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

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
kthe parameter k
athe parameter a
bthe parameter b

Definition at line 85 of file PoleZeroMaterialLaw.cpp.

Member Function Documentation

◆ ComputeStressAndStressDerivative()

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 
)
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
rCThe Lagrangian deformation tensor (F^T F)
rInvCThe inverse of C. Should be computed by the user. (Change this?)
pressurethe current pressure
rTthe stress will be returned in this parameter
rDTdEthe stress derivative will be returned in this parameter, assuming the final parameter is true
computeDTdEa boolean flag saying whether the stress derivative is required or not.

Implements AbstractMaterialLaw< DIM >.

Definition at line 93 of file PoleZeroMaterialLaw.cpp.

References EXCEPTION.

◆ GetZeroStrainPressure()

template<unsigned DIM>
double PoleZeroMaterialLaw< DIM >::GetZeroStrainPressure ( )
virtual
Returns
the pressure corresponding to E=0, ie C=identity.

Implements AbstractIncompressibleMaterialLaw< DIM >.

Definition at line 176 of file PoleZeroMaterialLaw.cpp.

◆ ScaleMaterialParameters()

template<unsigned DIM>
void PoleZeroMaterialLaw< DIM >::ScaleMaterialParameters ( double  scaleFactor)
virtual

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

Parameters
scaleFactor

Reimplemented from AbstractMaterialLaw< DIM >.

Definition at line 182 of file PoleZeroMaterialLaw.cpp.

◆ SetParameters()

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 
)
protected

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

Parameters
kthe parameter k
athe parameter a
bthe parameter b

Definition at line 44 of file PoleZeroMaterialLaw.cpp.

References EXCEPTION.

Friends And Related Symbol Documentation

◆ TestMaterialLaws

template<unsigned DIM>
friend class TestMaterialLaws
friend

Definition at line 65 of file PoleZeroMaterialLaw.hpp.

Member Data Documentation

◆ mA

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

Matrix of parameters a.

Definition at line 73 of file PoleZeroMaterialLaw.hpp.

◆ mB

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

Matrix of parameters b.

Definition at line 76 of file PoleZeroMaterialLaw.hpp.

◆ mIdentity

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

Identity matrix.

Definition at line 79 of file PoleZeroMaterialLaw.hpp.

◆ mK

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

Matrix of parameters k.

Definition at line 70 of file PoleZeroMaterialLaw.hpp.


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