#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) |
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 |
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.
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.
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
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().
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.
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().
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}
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 89 of file PoleZeroMaterialLaw.cpp.
References EXCEPTION, PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, PoleZeroMaterialLaw< DIM >::mK, and PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix.
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.
void PoleZeroMaterialLaw< DIM >::ScaleMaterialParameters | ( | double | scaleFactor | ) | [inline, virtual] |
Scale the dimensional material parameters (ie the K's).
scaleFactor |
Reimplemented from AbstractMaterialLaw< DIM >.
Definition at line 214 of file PoleZeroMaterialLaw.cpp.
References PoleZeroMaterialLaw< DIM >::mK.
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 ]
rChangeOfBasisMatrix | Change of basis matrix. |
Implements AbstractMaterialLaw< DIM >.
Definition at line 169 of file PoleZeroMaterialLaw.hpp.
References PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix.
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mK [private] |
Matrix of parameters k.
Definition at line 70 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), PoleZeroMaterialLaw< DIM >::ScaleMaterialParameters(), and PoleZeroMaterialLaw< DIM >::SetParameters().
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mA [private] |
Matrix of parameters a.
Definition at line 73 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), and PoleZeroMaterialLaw< DIM >::SetParameters().
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mB [private] |
Matrix of parameters b.
Definition at line 76 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), and PoleZeroMaterialLaw< DIM >::SetParameters().
c_matrix<double,DIM,DIM> PoleZeroMaterialLaw< DIM >::mIdentity [private] |
Identity matrix.
Definition at line 79 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), and PoleZeroMaterialLaw< DIM >::SetParameters().
c_matrix<double,DIM,DIM>* PoleZeroMaterialLaw< DIM >::mpChangeOfBasisMatrix [private] |
Change of basis matrix. See SetChangeOfBasisMatrix() documentation
Definition at line 82 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), PoleZeroMaterialLaw< DIM >::PoleZeroMaterialLaw(), and PoleZeroMaterialLaw< DIM >::SetChangeOfBasisMatrix().