v0.15.5
Loading...
Searching...
No Matches
Static Public Member Functions | Static Public Attributes | List of all members
EshelbianPlasticity::GriffithCohesiveLaw Struct Reference
Collaboration diagram for EshelbianPlasticity::GriffithCohesiveLaw:
[legend]

Static Public Member Functions

template<typename T >
static T getTau (const T &k, double gc)
 
template<typename T >
static auto getDiffTau (const T &tau, const T &kappa, double gc)
 
template<typename T >
static T getAlpha (const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static T getDiffAlpha (const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static auto invTau (const T &tau, double Gf)
 
template<typename T >
static auto calculateY (const T t_eff, const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static auto calculateDissipation (const T &delta_kappa, const T t_eff, const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static auto calculateDissipationSurplus (const T &delta_kappa, const T t_eff, const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static auto calculateDissipationSurplusDiffKappa (const T &delta_kappa, const T &t_eff, const T &kappa, double gc, double min_stiffness)
 
template<typename T >
static auto calculateDissipationSurplusDiffTraction (const FTensor::Tensor1< T, 3 > &t_traction, const T &delta_kappa, const T &kappa, FTensor::Tensor1< double, 3 > &t_n_normalize, double gc, double beta, double min_stiffness)
 
template<typename T >
static auto calculateGap (const FTensor::Tensor1< T, 3 > &t_traction, FTensor::Tensor1< double, 3 > &t_n_normalize, double alpha, double beta, bool sign_sensitive=true)
 
template<typename T >
static auto calculateDiffGapDTraction (const FTensor::Tensor1< T, 3 > &t_traction, FTensor::Tensor1< double, 3 > &t_n_normalize, double alpha, double beta, bool sign_sensitive=true)
 
template<typename T >
static auto calculateEffectiveTraction (const FTensor::Tensor1< T, 3 > &t_traction, FTensor::Tensor1< double, 3 > &t_n_normalize, double beta)
 

Static Public Attributes

static constexpr double eps = 1e-8
 
static constexpr double pi = boost::math::constants::pi<double>()
 
static constexpr double root_pi
 

Detailed Description

Definition at line 26 of file EshelbianCohesive.cpp.

Member Function Documentation

◆ calculateDiffGapDTraction()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateDiffGapDTraction ( const FTensor::Tensor1< T, 3 > &  t_traction,
FTensor::Tensor1< double, 3 > &  t_n_normalize,
double  alpha,
double  beta,
bool  sign_sensitive = true 
)
inlinestatic

Definition at line 174 of file EshelbianCohesive.cpp.

177 {
178 FTENSOR_INDEX(3, i);
180 FTensor::Tensor1<std::complex<T>, 3> t_cpx_delta;
181 FTensor::Tensor1<std::complex<T>, 3> t_cpx_traction;
182 for (auto jj = 0; jj != 3; ++jj) {
183 t_cpx_traction(i) = t_traction(i);
184 t_cpx_traction(jj) += eps * 1i;
185 auto [teff_cpx, t_cpx_gap] = calculateGap(t_cpx_traction, t_n_normalize,
186 alpha, beta, sign_sensitive);
187 for (auto ii = 0; ii != 3; ++ii) {
188 auto v = t_cpx_gap(ii).imag();
189 t_dgap(ii, jj) = v / eps;
190 }
191 }
192 return t_dgap;
193 }
#define FTENSOR_INDEX(DIM, I)
FTensor::Index< 'i', SPACE_DIM > i
const double v
phase velocity of light in medium (cm/ns)
static auto calculateGap(const FTensor::Tensor1< T, 3 > &t_traction, FTensor::Tensor1< double, 3 > &t_n_normalize, double alpha, double beta, bool sign_sensitive=true)

◆ calculateDissipation()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateDissipation ( const T &  delta_kappa,
const T  t_eff,
const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 71 of file EshelbianCohesive.cpp.

73 {
74 T Y = calculateY(t_eff, kappa + delta_kappa, gc, min_stiffness);
75 return Y * delta_kappa;
76 }
double kappa
static auto calculateY(const T t_eff, const T &kappa, double gc, double min_stiffness)

◆ calculateDissipationSurplus()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateDissipationSurplus ( const T &  delta_kappa,
const T  t_eff,
const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 79 of file EshelbianCohesive.cpp.

81 {
82 T M = calculateY(t_eff, kappa + delta_kappa, gc, min_stiffness) -
83 getTau(kappa + delta_kappa, gc);
84 return -M * delta_kappa;
85 }
FTensor::Index< 'M', 3 > M
static T getTau(const T &k, double gc)

◆ calculateDissipationSurplusDiffKappa()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateDissipationSurplusDiffKappa ( const T &  delta_kappa,
const T &  t_eff,
const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 88 of file EshelbianCohesive.cpp.

91 {
92
93 std::complex<T> cpx_delta = delta_kappa;
94 std::complex<T> cpx_t_eff = t_eff;
95 std::complex<T> cpx_kappa = kappa;
96 cpx_delta += eps * 1i;
97 std::complex<T> cpx_M =
98 calculateDissipationSurplus(cpx_delta, cpx_t_eff, cpx_kappa, gc, min_stiffness);
99 return cpx_M.imag() / eps;
100 }
static auto calculateDissipationSurplus(const T &delta_kappa, const T t_eff, const T &kappa, double gc, double min_stiffness)

◆ calculateDissipationSurplusDiffTraction()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateDissipationSurplusDiffTraction ( const FTensor::Tensor1< T, 3 > &  t_traction,
const T &  delta_kappa,
const T &  kappa,
FTensor::Tensor1< double, 3 > &  t_n_normalize,
double  gc,
double  beta,
double  min_stiffness 
)
inlinestatic

Definition at line 103 of file EshelbianCohesive.cpp.

106 {
107 FTENSOR_INDEX(3, i);
108 FTensor::Tensor1<double, 3> t_diff_traction;
109 std::complex<T> cpx_delta = delta_kappa;
110 std::complex<T> cpx_kappa = kappa;
111 FTensor::Tensor1<std::complex<T>, 3> t_cpx_traction;
112 for (auto jj = 0; jj != 3; ++jj) {
113 t_cpx_traction(i) = t_traction(i);
114 t_cpx_traction(jj) += eps * 1i;
115 std::complex<T> cpx_teff =
116 calculateEffectiveTraction(t_cpx_traction, t_n_normalize, beta);
117 std::complex<T> cpx_M = calculateDissipationSurplus(
118 cpx_delta, cpx_teff, cpx_kappa, gc, min_stiffness);
119 t_diff_traction(jj) = cpx_M.imag() / eps;
120 }
121 return t_diff_traction;
122 }
static auto calculateEffectiveTraction(const FTensor::Tensor1< T, 3 > &t_traction, FTensor::Tensor1< double, 3 > &t_n_normalize, double beta)

◆ calculateEffectiveTraction()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateEffectiveTraction ( const FTensor::Tensor1< T, 3 > &  t_traction,
FTensor::Tensor1< double, 3 > &  t_n_normalize,
double  beta 
)
inlinestatic

Definition at line 197 of file EshelbianCohesive.cpp.

199 {
200 auto [teff, t_gap] = calculateGap(t_traction, t_n_normalize, 1.0, beta);
201 return teff;
202 }

◆ calculateGap()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateGap ( const FTensor::Tensor1< T, 3 > &  t_traction,
FTensor::Tensor1< double, 3 > &  t_n_normalize,
double  alpha,
double  beta,
bool  sign_sensitive = true 
)
inlinestatic

Definition at line 125 of file EshelbianCohesive.cpp.

128 {
129 FTENSOR_INDEX(3, i);
130 FTENSOR_INDEX(3, j);
131 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
133 t_P(i, j) = t_n_normalize(i) * t_n_normalize(j);
135 t_Q(i, j) = t_kd(i, j) - t_P(i, j);
136 FTensor::Tensor1<T, 3> t_normal;
137 t_normal(i) = t_P(i, j) * t_traction(j);
138 FTensor::Tensor1<T, 3> t_tangential;
139 t_tangential(i) = t_Q(i, j) * t_traction(j);
140
141 if (sign_sensitive) {
142 T s = std::sqrt((t_normal(i) * t_normal(i)) / 4. +
143 (1. / beta) * t_tangential(i) * t_tangential(i));
144 T teff = (t_n_normalize(i) * t_normal(i) / 2.) + s;
145
146 FTensor::Tensor1<T, 3> t_gap{0., 0., 0.};
147 if (std::real(s) > std::numeric_limits<double>::epsilon()) {
148 t_gap(i) = alpha * (
149
150 t_n_normalize(i) * teff / 2. +
151
152 (1.0 / 4.0) * (teff / s) * t_normal(i) +
153
154 (1.0 / beta) * (teff / s) * t_tangential(i)
155
156 );
157 }
158 return std::make_pair(teff, t_gap);
159 } else {
160 T teff = std::sqrt((t_normal(i) * t_normal(i)) +
161 (1. / beta) * t_tangential(i) * t_tangential(i));
163 t_gap(i) = alpha * (
164
165 t_normal(i) + (1.0 / beta) * t_tangential(i)
166
167 );
168 return std::make_pair(teff, t_gap);
169 }
170 }
Kronecker Delta class.
constexpr auto t_kd
FTensor::Index< 'j', 3 > j

◆ calculateY()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::calculateY ( const T  t_eff,
const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 64 of file EshelbianCohesive.cpp.

65 {
66 T diff_alpha = getDiffAlpha(kappa, gc, min_stiffness);
67 return 0.5 * t_eff * t_eff * diff_alpha;
68 }
static T getDiffAlpha(const T &kappa, double gc, double min_stiffness)

◆ getAlpha()

template<typename T >
static T EshelbianPlasticity::GriffithCohesiveLaw::getAlpha ( const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 45 of file EshelbianCohesive.cpp.

45 {
46 auto tau = getTau(kappa, gc);
47 return kappa / (kappa * min_stiffness + tau);
48 }

◆ getDiffAlpha()

template<typename T >
static T EshelbianPlasticity::GriffithCohesiveLaw::getDiffAlpha ( const T &  kappa,
double  gc,
double  min_stiffness 
)
inlinestatic

Definition at line 51 of file EshelbianCohesive.cpp.

51 {
52 T tau = getTau(kappa, gc);
53 T diff_tau = getDiffTau(tau, kappa, gc);
54 T dnom = kappa * min_stiffness + tau;
55 return (tau - kappa * diff_tau) / (dnom * dnom);
56 }
static auto getDiffTau(const T &tau, const T &kappa, double gc)

◆ getDiffTau()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::getDiffTau ( const T &  tau,
const T &  kappa,
double  gc 
)
inlinestatic

Definition at line 40 of file EshelbianCohesive.cpp.

40 {
41 return -tau * (1.0 + (1.0 / (2.0 * kappa)));
42 }

◆ getTau()

template<typename T >
static T EshelbianPlasticity::GriffithCohesiveLaw::getTau ( const T &  k,
double  gc 
)
inlinestatic

Definition at line 34 of file EshelbianCohesive.cpp.

34 {
35 const T c = static_cast<T>(gc) / root_pi;
36 return c * std::exp(-k) / std::sqrt(k);
37 }
const double c
speed of light (cm/ns)
FTensor::Index< 'k', 3 > k

◆ invTau()

template<typename T >
static auto EshelbianPlasticity::GriffithCohesiveLaw::invTau ( const T &  tau,
double  Gf 
)
inlinestatic

Definition at line 58 of file EshelbianCohesive.cpp.

58 {
59 const T z = (2.0 * Gf * Gf) / (pi * tau * tau);
60 return T(0.5) * boost::math::lambert_w(z, 0); // k=0 == principal branch
61 }
tools::promote_args< ArgumentType, int >::type lambert_w(const ArgumentType &z)
Definition lambert_w.hpp:40

Member Data Documentation

◆ eps

constexpr double EshelbianPlasticity::GriffithCohesiveLaw::eps = 1e-8
inlinestaticconstexpr

Definition at line 28 of file EshelbianCohesive.cpp.

◆ pi

constexpr double EshelbianPlasticity::GriffithCohesiveLaw::pi = boost::math::constants::pi<double>()
inlinestaticconstexpr

Definition at line 30 of file EshelbianCohesive.cpp.

◆ root_pi

constexpr double EshelbianPlasticity::GriffithCohesiveLaw::root_pi
inlinestaticconstexpr
Initial value:
=
boost::math::constants::root_pi<double>()

Definition at line 31 of file EshelbianCohesive.cpp.


The documentation for this struct was generated from the following file: