#include <SchmidCostaExponentialLaw2d.hpp>
Inherits AbstractIncompressibleMaterialLaw< 2 >.
Public Member Functions | |
SchmidCostaExponentialLaw2d () | |
void | ComputeStressAndStressDerivative (c_matrix< double, 2, 2 > &rC, c_matrix< double, 2, 2 > &rInvC, double pressure, c_matrix< double, 2, 2 > &rT, FourthOrderTensor< 2 > &rDTdE, bool computeDTdE) |
double | GetA () |
std::vector< std::vector < double > > | GetB () |
double | GetZeroStrainPressure () |
void | SetChangeOfBasisMatrix (c_matrix< double, 2, 2 > &rChangeOfBasisMatrix) |
Private Attributes | |
double | mA |
std::vector< std::vector < double > > | mB |
c_matrix< double, 2, 2 > | mIdentity |
c_matrix< double, 2, 2 > * | mpChangeOfBasisMatrix |
A 2d version of the material law in Costa, Holmes, McCulloch "Modelling Cardiac Mechanical Properties in Three Dimensions" Philo. Trans. R. Soc.
W = aexp(Q-1) where Q = bff*Eff^2 + bfs*Efs^2 + bsf*Esf^2 + bss*Ess^2
where the parameters are taken from the fitting in Schmid,Nash,Young,Hunter "Myocardial Material Parameter Estimation - A Comparative Study for Simple Shear" Transactions of the ASME.
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 51 of file SchmidCostaExponentialLaw2d.hpp.
SchmidCostaExponentialLaw2d::SchmidCostaExponentialLaw2d | ( | ) |
Constructor.
Definition at line 31 of file SchmidCostaExponentialLaw2d.cpp.
References mA, mB, mIdentity, and mpChangeOfBasisMatrix.
void SchmidCostaExponentialLaw2d::ComputeStressAndStressDerivative | ( | c_matrix< double, 2, 2 > & | rC, | |
c_matrix< double, 2, 2 > & | rInvC, | |||
double | pressure, | |||
c_matrix< double, 2, 2 > & | rT, | |||
FourthOrderTensor< 2 > & | rDTdE, | |||
bool | computeDTdE | |||
) |
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. |
Definition at line 60 of file SchmidCostaExponentialLaw2d.cpp.
References mA, mB, mIdentity, mpChangeOfBasisMatrix, FourthOrderTensor< DIM >::SetAsProduct(), and FourthOrderTensor< DIM >::Zero().
double SchmidCostaExponentialLaw2d::GetA | ( | ) |
std::vector< std::vector< double > > SchmidCostaExponentialLaw2d::GetB | ( | ) |
double SchmidCostaExponentialLaw2d::GetZeroStrainPressure | ( | ) | [virtual] |
Get the pressure corresponding to E=0, ie C=identity.
Implements AbstractIncompressibleMaterialLaw< 2 >.
Definition at line 156 of file SchmidCostaExponentialLaw2d.cpp.
void SchmidCostaExponentialLaw2d::SetChangeOfBasisMatrix | ( | c_matrix< double, 2, 2 > & | rChangeOfBasisMatrix | ) | [inline] |
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 schmid-costa should be of the form: [ fibre_vec sheet_vec normal_vec ]
rChangeOfBasisMatrix | Change of basis matrix. |
Definition at line 123 of file SchmidCostaExponentialLaw2d.hpp.
References mpChangeOfBasisMatrix.
double SchmidCostaExponentialLaw2d::mA [private] |
Parameter a.
Definition at line 56 of file SchmidCostaExponentialLaw2d.hpp.
Referenced by ComputeStressAndStressDerivative(), GetA(), and SchmidCostaExponentialLaw2d().
std::vector<std::vector<double> > SchmidCostaExponentialLaw2d::mB [private] |
Matrix of parameters b.
Definition at line 59 of file SchmidCostaExponentialLaw2d.hpp.
Referenced by ComputeStressAndStressDerivative(), GetB(), and SchmidCostaExponentialLaw2d().
c_matrix<double,2,2> SchmidCostaExponentialLaw2d::mIdentity [private] |
2D identity matrix.
Definition at line 62 of file SchmidCostaExponentialLaw2d.hpp.
Referenced by ComputeStressAndStressDerivative(), and SchmidCostaExponentialLaw2d().
c_matrix<double,2,2>* SchmidCostaExponentialLaw2d::mpChangeOfBasisMatrix [private] |
Change of basis matrix. See SetChangeOfBasisMatrix() documentation
Definition at line 65 of file SchmidCostaExponentialLaw2d.hpp.
Referenced by ComputeStressAndStressDerivative(), SchmidCostaExponentialLaw2d(), and SetChangeOfBasisMatrix().