The Continuum Mechanics Library
-
double tr(const vec &v)
Provides the trace of a second order tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double trace = tr(v);
-
vec dev(const vec &v)
Provides the deviatoric part of a second order tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); vec deviatoric = dev(v);
-
double Mises_stress(const vec &v)
Provides the Von Mises stress \(\sigma^{Mises}\) of a second order stress tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double Mises_sig = Mises_stress(v);
-
vec eta_stress(const vec &v)
Provides the stress flow \(\eta_{stress}=\frac{3/2\sigma_{dev}}{\sigma_{Mises}}\) from a second order stress tensor written as a vector v in the ‘simcoon’ formalism (i.e. the shear terms are multiplied by 2, providing shear angles).
vec v = randu(6); vec sigma_f = eta_stress(v);
-
double Mises_strain(const vec &v)
Provides the Von Mises strain \(\varepsilon^{Mises}\) of a second order stress tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double Mises_eps = Mises_strain(v);
-
vec eta_strain(const vec &v)
Provides the strain flow \(\eta_{strain}=\frac{2/3\varepsilon_{dev}}{\varepsilon_{Mises}}\) from a second order strain tensor written as a vector v in the ‘simcoon’ formalism (i.e. the shear terms are multiplied by 2, providing shear angles).
vec v = randu(6); vec eps_f = eta_strain(v);
-
double J2_stress(const vec &v)
Provides the second invariant of a second order stress tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double J2 = J2_stress(v);
-
double J2_strain(const vec &v)
Provides the second invariant of a second order strain tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double J2 = J2_strain(v);
-
double J3_stress(const vec &v)
Provides the third invariant of a second order stress tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double J3 = J3_stress(v);
-
double J3_strain(const vec &v)
Provides the third invariant of a second order strain tensor written as a vector v in the ‘simcoon’ formalism.
vec v = randu(6); double J3 = J3_strain(v);
-
double Macaulay_p(const double &d)
This function returns the value if it’s positive, zero if it’s negative (Macaulay brackets <>+)
-
double Macaulay_n(const double &d)
This function returns the value if it’s negative, zero if it’s positive (Macaulay brackets <>-)
-
double sign(const double &d)
This function returns the value if it’s negative, zero if it’s positive (Macaulay brackets <>-)
-
vec normal_ellipsoid(const double &u, const double &v, const double &a1, const double &a2, const double &a3)
Provides the normalized vector to an ellipsoid with semi-principal axes of length a1, a2, a3. The direction of the normalized vector is set by angles u and v. These 2 angles correspond to the rotations in the plan defined by the center of the ellipsoid, a1 and a2 directions for u, a1 and a3 ones for v. u = 0 corresponds to a1 direction and v = 0 correspond to a3 one. So the normal vector is set at the parametrized position :
\[\begin{split}\begin{align} x & = a_{1} cos(u) sin(v) \\ y & = a_{2} sin(u) sin(v) \\ z & = a_{3} cos(v) \end{align}\end{split}\]const double Pi = 3.14159265358979323846 double u = (double)rand()/(double)(RAND_MAX) % 2*Pi - 2*Pi; double v = (double)rand()/(double)(RAND_MAX) % Pi - Pi; double a1 = (double)rand(); double a2 = (double)rand(); double a3 = (double)rand(); vec v = normal_ellipsoid(u, v, a1, a2, a3);
-
vec sigma_int(const vec &sigma_in, const double &a1, const double &a2, const double &a3, const double &u, const double &v)
Provides the normal and tangent components of a stress vector σin in accordance with the normal direction n to an ellipsoid with axes a1, a2, a3. The normal vector is set at the parametrized position :
\[\begin{split}\begin{align} x & = a_{1} cos(u) sin(v) \\ y & = a_{2} sin(u) sin(v) \\ z & = a_{3} cos(v) \end{align}\end{split}\]vec sigma_in = randu(6); double u = (double)rand()/(double)(RAND_MAX) % Pi - Pi/2; double v = (double)rand()/(double)(RAND_MAX) % 2*Pi - Pi; double a1 = (double)rand(); double a2 = (double)rand(); double a3 = (double)rand(); vec sigma_i = sigma_int(sigma_in, a1, a2, a3, u, v));
-
mat p_ikjl(const vec &a)
Provides the Hill interfacial operator according to a normal a (see papers of Siredey and Entemeyer Ph.D. dissertation).
vec v = randu(6); mat H = p_ikjl(v);
-
mat sym_dyadic(const mat &A, const mat &B)
Provides the dyadic product (in Voigt Notation) of two 2nd order tensors converted. The function returns a 6x6 matrix that correspond to a 4th order tensor. Note that such conversion to 6x6 matrices product correspond to a conversion with the component of the 4th order tensor correspond to the component of the matrix (such as stiffness matrices)
mat A = randu(3,3);
mat B = randu(3,3);
mat C = sym_dyadic(A,B);