29 #ifndef OOMPH_CONSTITUTIVE_LAWS_HEADER
30 #define OOMPH_CONSTITUTIVE_LAWS_HEADER
34 #include <oomph-lib-config.h>
38 #include "../generic/oomph_utilities.h"
39 #include "../generic/matrices.h"
61 "The strain-energy function as a function of the strain-tensor,\n";
63 "gamma, is not implemented for this strain energy function.\n";
75 "The strain-energy function as a function of the strain\n ";
77 "invariants, I1, I2, I3, is not implemented for this strain\n ";
78 error_message +=
"energy function\n";
93 "Sorry, the FD setup of dW/dgamma hasn't been implemented yet",
106 double FD_Jstep = 1.0e-8;
107 double energy =
W(
I);
110 for (
unsigned i = 0;
i < 3;
i++)
113 double I_prev =
I[
i];
117 double energy_new =
W(
I);
119 dWdI[
i] = (energy_new - energy) / FD_Jstep;
165 return (*
C1_pt) * (
I[0] - 3.0) + (*
C2_pt) * (
I[1] - 3.0);
257 double G = (*E_pt) / (2.0 * (1.0 + (*Nu_pt)));
258 return 0.5 * ((*C1_pt) * (
I[0] - 3.0) + (
G - (*
C1_pt)) * (
I[1] - 3.0) +
259 ((*C1_pt) - 2.0 *
G) * (
I[2] - 1.0) +
260 (1.0 - (*Nu_pt)) *
G * (
I[2] - 1.0) * (
I[2] - 1.0) /
261 (2.0 * (1.0 - 2.0 * (*
Nu_pt))));
269 double G = (*E_pt) / (2.0 * (1.0 + (*Nu_pt)));
270 dWdI[0] = 0.5 * (*C1_pt);
271 dWdI[1] = 0.5 * (
G - (*C1_pt));
272 dWdI[2] = 0.5 * ((*C1_pt) - 2.0 *
G +
273 2.0 * (1.0 - (*Nu_pt)) *
G * (
I[2] - 1.0) /
274 (2.0 * (1.0 - 2.0 * (*Nu_pt))));
534 const bool& symmetrize_tensor =
true);
555 "Incompressible formulation not implemented for this constitutive law",
578 const double& interpolated_solid_p,
581 const bool& symmetrize_tensor =
true);
601 "Near-incompressible formulation not implemented for constitutive law",
620 const double& gen_dil,
621 const double& inv_kappa,
622 const double& interpolated_solid_p,
625 const bool& symmetrize_tensor =
true);
int i
Definition: BiCGSTAB_step_by_step.cpp:9
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;Map< MatrixXf > M2(M1.data(), 6, 2)
MatrixXf M1
Definition: Tutorial_SlicingCol.cpp:1
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Definition: constitutive_laws.h:471
void error_checking_in_input(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)
Definition: constitutive_laws.cc:71
virtual void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma_dev, DenseMatrix< double > &Gcontra, double &gen_dil, double &inv_kappa)
Definition: constitutive_laws.h:592
virtual bool requires_incompressibility_constraint()=0
double calculate_contravariant(const DenseMatrix< double > &Gcov, DenseMatrix< double > &Gcontra)
The function to calculate the contravariant tensor from a covariant one.
Definition: constitutive_laws.cc:113
virtual void calculate_d_second_piola_kirchhoff_stress_dG(const DenseMatrix< double > &g, const DenseMatrix< double > &G, const DenseMatrix< double > &sigma, RankFourTensor< double > &d_sigma_dG, const bool &symmetrize_tensor=true)
Definition: constitutive_laws.cc:352
void calculate_d_contravariant_dG(const DenseMatrix< double > &Gcov, RankFourTensor< double > &dGcontra_dG, DenseMatrix< double > &d_detG_dG)
Definition: constitutive_laws.cc:225
bool is_matrix_square(const DenseMatrix< double > &M)
Test whether a matrix is square.
Definition: constitutive_laws.cc:36
ConstitutiveLaw()
Empty constructor.
Definition: constitutive_laws.h:501
bool are_matrices_of_equal_dimensions(const DenseMatrix< double > &M1, const DenseMatrix< double > &M2)
Test whether two matrices are of equal dimensions.
Definition: constitutive_laws.cc:52
virtual void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)=0
virtual ~ConstitutiveLaw()
Empty virtual destructor.
Definition: constitutive_laws.h:505
virtual void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma_dev, DenseMatrix< double > &G_contra, double &Gdet)
Definition: constitutive_laws.h:547
Definition: constitutive_laws.h:699
virtual ~GeneralisedHookean()
Virtual destructor.
Definition: constitutive_laws.h:722
bool Must_delete_e
Definition: constitutive_laws.h:787
GeneralisedHookean(double *nu_pt)
Definition: constitutive_laws.h:712
void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)
Definition: constitutive_laws.cc:682
double * E_pt
Young's modulus.
Definition: constitutive_laws.h:783
bool requires_incompressibility_constraint()
Definition: constitutive_laws.h:773
double * Nu_pt
Poisson ratio.
Definition: constitutive_laws.h:780
GeneralisedHookean(double *nu_pt, double *e_pt)
Definition: constitutive_laws.h:703
Definition: constitutive_laws.h:215
GeneralisedMooneyRivlin(double *nu_pt, double *c1_pt)
Definition: constitutive_laws.h:220
bool requires_incompressibility_constraint()
Definition: constitutive_laws.h:282
double W(const Vector< double > &I)
Return the strain energy in terms of the strain invariants.
Definition: constitutive_laws.h:255
bool Must_delete_e
Definition: constitutive_laws.h:299
double * E_pt
Young's modulus.
Definition: constitutive_laws.h:295
GeneralisedMooneyRivlin(double *nu_pt, double *c1_pt, double *e_pt)
Definition: constitutive_laws.h:231
virtual ~GeneralisedMooneyRivlin()
Virtual destructor.
Definition: constitutive_laws.h:242
double W(const DenseMatrix< double > &gamma)
Return the strain energy in terms of strain tensor.
Definition: constitutive_laws.h:248
void derivatives(Vector< double > &I, Vector< double > &dWdI)
Definition: constitutive_laws.h:267
double * Nu_pt
Poisson's ratio.
Definition: constitutive_laws.h:289
double * C1_pt
Mooney-Rivlin parameter.
Definition: constitutive_laws.h:292
Definition: constitutive_laws.h:801
StrainEnergyFunction * Strain_energy_function_pt
Pointer to the strain energy function.
Definition: constitutive_laws.h:804
bool requires_incompressibility_constraint()
Definition: constitutive_laws.h:861
IsotropicStrainEnergyFunctionConstitutiveLaw(StrainEnergyFunction *const &strain_energy_function_pt)
Constructor takes a pointer to the strain energy function.
Definition: constitutive_laws.h:808
void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)
Definition: constitutive_laws.cc:896
Definition: constitutive_laws.h:145
void derivatives(Vector< double > &I, Vector< double > &dWdI)
Definition: constitutive_laws.h:171
double * C2_pt
Pointer to second Mooney Rivlin constant.
Definition: constitutive_laws.h:193
virtual ~MooneyRivlin()
Empty Virtual destructor.
Definition: constitutive_laws.h:154
double W(const DenseMatrix< double > &gamma)
Return the strain energy in terms of strain tensor.
Definition: constitutive_laws.h:157
double W(const Vector< double > &I)
Return the strain energy in terms of the strain invariants.
Definition: constitutive_laws.h:163
double * C1_pt
Pointer to first Mooney Rivlin constant.
Definition: constitutive_laws.h:190
MooneyRivlin(double *c1_pt, double *c2_pt)
Constructor takes the pointer to the value of the constants.
Definition: constitutive_laws.h:148
bool requires_incompressibility_constraint()
Definition: constitutive_laws.h:182
Definition: oomph_definitions.h:222
A Rank 4 Tensor class.
Definition: matrices.h:1701
Definition: constitutive_laws.h:48
StrainEnergyFunction()
Constructor takes no arguments.
Definition: constitutive_laws.h:51
virtual bool requires_incompressibility_constraint()=0
virtual void derivative(const DenseMatrix< double > &gamma, DenseMatrix< double > &dWdgamma)
Definition: constitutive_laws.h:89
virtual ~StrainEnergyFunction()
Empty virtual destructor.
Definition: constitutive_laws.h:54
virtual double W(const DenseMatrix< double > &gamma)
Return the strain energy in terms of the strain tensor.
Definition: constitutive_laws.h:58
virtual void derivatives(Vector< double > &I, Vector< double > &dWdI)
Definition: constitutive_laws.h:102
virtual double W(const Vector< double > &I)
Return the strain energy in terms of the strain invariants.
Definition: constitutive_laws.h:72
#define I
Definition: main.h:127
int sigma
Definition: calibrate.py:179
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86