Chaste
Release::2017.1
|
#include <PoleZeroMaterialLaw.hpp>
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 |
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.
|
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< 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
k | the parameter k |
a | the parameter a |
b | the parameter b |
Definition at line 85 of file PoleZeroMaterialLaw.cpp.
|
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}
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 93 of file PoleZeroMaterialLaw.cpp.
References EXCEPTION.
|
virtual |
Implements AbstractIncompressibleMaterialLaw< DIM >.
Definition at line 176 of file PoleZeroMaterialLaw.cpp.
|
virtual |
Scale the dimensional material parameters (ie the K's).
scaleFactor |
Reimplemented from AbstractMaterialLaw< DIM >.
Definition at line 182 of file PoleZeroMaterialLaw.cpp.
|
protected |
Set k, a, and b. To be called by the constuctor or a child class Set comments for constructor.
k | the parameter k |
a | the parameter a |
b | the parameter b |
Definition at line 44 of file PoleZeroMaterialLaw.cpp.
References EXCEPTION.
|
private |
Matrix of parameters a.
Definition at line 73 of file PoleZeroMaterialLaw.hpp.
|
private |
Matrix of parameters b.
Definition at line 76 of file PoleZeroMaterialLaw.hpp.
|
private |
Identity matrix.
Definition at line 79 of file PoleZeroMaterialLaw.hpp.
|
private |
Matrix of parameters k.
Definition at line 70 of file PoleZeroMaterialLaw.hpp.