21#ifndef B2MATERIAL_STRESS_2D_MESH_DEFORM_H_
22#define B2MATERIAL_STRESS_2D_MESH_DEFORM_H_
24#include "elements/properties/b2solid_mechanics.H"
29class MaterialStress2DMeshDeform :
public SolidMechanics2D<double> {
32 Model* model,
const bool linear,
const EquilibriumSolution equilibrium_solution,
33 const double time,
const double delta_time, GradientContainer* gradient_container,
34 SolverHints* solver_hints,
const Element* element,
const double el_coordinates[2],
35 const b2linalg::Vector<double, b2linalg::Vdense_constref> nodes_interpolation,
36 const int layer_id,
const double bg_coordinates[3],
const double covariant_base[2][2],
37 const bool use_covariant_base,
const double volume,
38 const double displacement_gradient[2][2],
const double strain[3],
39 const double strain_dot[3],
const double velocity[2],
const double acceleration[2],
40 double stress[3],
double d_stress_d_strain[6],
double d_stress_d_strain_dot[6],
41 double d_stress_d_time[3],
double inertia_force[2],
double& density);
43 inline void s_eq_c_mul_e(
double s[3],
const double c[6],
const double e[3]) {
44 const int ind[3][3] = {{0, 1, 2}, {1, 3, 4}, {2, 4, 5}};
45 for (
int i = 0; i < 3; ++i) {
48 const int* iind = ind[i];
49 for (
int j = 0; j < 3; ++j) { value += c[iind[j]] * e[j]; }
57 static inline void piola_2_stress_to_cauchy_stress(
62 const double f00 = F[0][0];
63 const double f01 = F[0][1];
64 const double f10 = F[1][0];
65 const double f11 = F[1][1];
69 const double det_inv = 1.0 / det;
71 T[0] = f00 * f00 * S[0] + f10 * f10 * S[1] + 2 * f00 * f10 * S[2];
73 T[1] = f01 * f01 * S[0] + f11 * f11 * S[1] + 2 * f01 * f11 * S[2];
75 T[2] = f00 * f01 * S[0] + f10 * f11 * S[1] + (f00 * f11 + f10 * f01) * S[2];
77 for (
int i = 0; i < 3; ++i) { T[i] *= det_inv; }
virtual LinearType linear(const int layer_id=-1) const
Definition b2solid_mechanics.H:573
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
T determinant_2_2(const T a[2][2])
Definition b2tensor_calculus.H:683