22#ifndef B2MATERIAL_STRESS_2D_MIXED_H_ 
   23#define B2MATERIAL_STRESS_2D_MIXED_H_ 
   25#include "elements/properties/b2solid_mechanics.H" 
   30class MaterialStress2DMixed : 
virtual public SolidMechanics {
 
   33    virtual int number_of_layer()
 const { 
return 1; }
 
   37    virtual void laminate(
 
   38          const b2linalg::Vector<double, b2linalg::Vdense_constref> nodes_interpolation,
 
   39          double& laminate_begin, 
double& laminate_end)
 const {
 
   47          const b2linalg::Vector<double, b2linalg::Vdense_constref> nodes_interpolation,
 
   48          const int layer_id, 
double& layer_begin, 
double& layer_end)
 const {
 
   53    virtual double get_density(
const int layer_id)
 const {
 
   58    virtual void get_stress(
 
   59          Model* model, 
const bool linear, 
const EquilibriumSolution equilibrium_solution,
 
   60          const double time, 
const double delta_time, GradientContainer* gradient_container,
 
   61          SolverHints* solver_hints, 
const Element* element, 
const double el_coordinates[3],
 
   63          const b2linalg::Vector<double, b2linalg::Vdense_constref> nodes_interpolation,
 
   64          const double bg_coordinates[3], 
const double covariant_base[2][2], 
const double volume,
 
   65          const double deformation_gradient[2][2], 
const double velocity[2],
 
   66          const double acceleration[2], 
const double interpolated_pressure, 
double stress[3],
 
   67          double& pressure, 
double CUU[6], 
double CUP[3], 
double& CPP, 
double inertia_force[2],
 
   71    inline void eval_linear_strain(
const double F[2][2], 
double E[3])
 const {
 
   72        const double f00 = F[0][0];
 
   73        const double f01 = F[1][0];
 
   74        const double f10 = F[0][1];
 
   75        const double f11 = F[1][1];
 
   82    inline void eval_green_lagrange_strain(
const double F[2][2], 
double E[3])
 const {
 
   83        const double f00 = F[0][0];
 
   84        const double f01 = F[1][0];
 
   85        const double f10 = F[0][1];
 
   86        const double f11 = F[1][1];
 
   88        E[0] = 0.5 * (f00 * f00 + f10 * f10 - 1.0);
 
   89        E[1] = 0.5 * (f01 * f01 + f11 * f11 - 1.0);
 
   90        E[2] = f00 * f01 + f10 * f11;
 
   93    inline double delta(
const int a, 
const int b) { 
return (a == b ? 1.0 : 0.0); }
 
   95    inline void s_eq_c_mul_e(
double s[3], 
const double c[6], 
const double e[3]) {
 
   96        const int ind[3][3] = {{0, 1, 2}, {1, 3, 4}, {2, 4, 5}};
 
   97        for (
int i = 0; i < 3; ++i) {
 
  100            const int* iind = ind[i];
 
  101            for (
int j = 0; j < 3; ++j) { value += c[iind[j]] * e[j]; }
 
  109    static inline void piola_2_stress_to_cauchy_stress(
 
  110          const double F[2][2],  
 
  114        const double f00 = F[0][0];
 
  115        const double f01 = F[1][0];
 
  116        const double f10 = F[0][1];
 
  117        const double f11 = F[1][1];
 
  121        const double det_inv = 1.0 / det;
 
  123        T[0] = f00 * f00 * S[0] + f01 * f01 * S[1] + 2 * f00 * f01 * S[2];
 
  125        T[1] = f10 * f10 * S[0] + f11 * f11 * S[1] + 2 * f10 * f11 * S[2];
 
  127        T[2] = f00 * f10 * S[0] + f01 * f11 * S[1] + (f00 * f11 + f01 * f10) * S[2];
 
  129        for (
int i = 0; i < 3; ++i) { T[i] *= det_inv; }
 
  132    static inline void expand_strain_or_stress_2d_to_3d(
const double t2d[3], 
double t3d[6]) {
 
#define THROW
Definition b2exception.H:198
 
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
 
GenericException< UnimplementedError_name > UnimplementedError
Definition b2exception.H:314