#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 > &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 |
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
Definition at line 57 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.
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 78 of file PoleZeroMaterialLaw.cpp.
References 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 37 of file PoleZeroMaterialLaw.cpp.
References 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 > & | 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 AbstractIncompressibleMaterialLaw< DIM >.
Definition at line 86 of file PoleZeroMaterialLaw.cpp.
References PoleZeroMaterialLaw< DIM >::mA, PoleZeroMaterialLaw< DIM >::mB, PoleZeroMaterialLaw< DIM >::mIdentity, and PoleZeroMaterialLaw< DIM >::mK.
double PoleZeroMaterialLaw< DIM >::GetZeroStrainPressure | ( | ) | [inline, virtual] |
Get the pressure corresponding to E=0, ie C=identity.
Implements AbstractIncompressibleMaterialLaw< DIM >.
Definition at line 159 of file PoleZeroMaterialLaw.cpp.
void PoleZeroMaterialLaw< DIM >::ScaleMaterialParameters | ( | double | scaleFactor | ) | [inline, virtual] |
Scale the dimensional material parameters (ie the K's).
scaleFactor |
Reimplemented from AbstractIncompressibleMaterialLaw< DIM >.
Definition at line 165 of file PoleZeroMaterialLaw.cpp.
References PoleZeroMaterialLaw< DIM >::mK.
std::vector<std::vector<double> > PoleZeroMaterialLaw< DIM >::mK [private] |
Matrix of parameters k.
Definition at line 64 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 67 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 70 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 73 of file PoleZeroMaterialLaw.hpp.
Referenced by PoleZeroMaterialLaw< DIM >::ComputeStressAndStressDerivative(), and PoleZeroMaterialLaw< DIM >::SetParameters().