deal.II version 9.8.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
kinematics.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2016 - 2024 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_elasticity_kinematics_h
14#define dealii_elasticity_kinematics_h
15
16
17#include <deal.II/base/config.h>
18
21#include <deal.II/base/tensor.h>
22
24
26
27namespace Physics
28{
29 namespace Elasticity
30 {
42 namespace Kinematics
43 {
48
68 template <int dim, typename Number>
70 F(const Tensor<2, dim, Number> &Grad_u);
71
84 template <int dim, typename Number>
87
100 template <int dim, typename Number>
103
115 template <int dim, typename Number>
118
130 template <int dim, typename Number>
133
135
140
153 template <int dim, typename Number>
156
173 template <int dim, typename Number>
176
189 template <int dim, typename Number>
192
194
199
213 template <int dim, typename Number>
216
236 template <int dim, typename Number>
239
258 template <int dim, typename Number>
261
263 } // namespace Kinematics
264 } // namespace Elasticity
265} // namespace Physics
266
267
268
269#ifndef DOXYGEN
270
271// ------------------------- inline functions ------------------------
272
273
274
275template <int dim, typename Number>
278{
279 return StandardTensors<dim>::I + Grad_u;
280}
281
282
283
284template <int dim, typename Number>
287{
288 // Make things work with AD types
289 using std::pow;
290 return internal::NumberType<Number>::value(pow(determinant(F), -1.0 / dim)) *
291 F;
292}
293
294
295
296template <int dim, typename Number>
299{
300 // Make things work with AD types
301 using std::pow;
305}
306
307
308
309template <int dim, typename Number>
312{
313 return symmetrize(transpose(F) * F);
314}
315
316
317
318template <int dim, typename Number>
321{
322 return symmetrize(F * transpose(F));
323}
324
325
326
327template <int dim, typename Number>
330{
332 (C(F) - static_cast<SymmetricTensor<2, dim, Number>>(
333 StandardTensors<dim>::I));
334}
335
336
337
338template <int dim, typename Number>
341{
342 // This is the equivalent to 0.5*symmetrize(Grad_u + transpose(Grad_u));
343 return symmetrize(Grad_u);
344}
345
346
347
348template <int dim, typename Number>
351{
352 const Tensor<2, dim, Number> F_inv = invert(F);
355 StandardTensors<dim>::I) -
356 transpose(F_inv) * F_inv);
357}
358
359
360
361template <int dim, typename Number>
364 const Tensor<2, dim, Number> &dF_dt)
365{
366 return dF_dt * invert(F);
367}
368
369
370
371template <int dim, typename Number>
374 const Tensor<2, dim, Number> &dF_dt)
375{
376 return symmetrize(l(F, dF_dt));
377}
378
379
380
381template <int dim, typename Number>
384 const Tensor<2, dim, Number> &dF_dt)
385{
386 // This could be implemented as w = l-d, but that would mean computing "l"
387 // a second time.
388 const auto grad_v = l(F, dF_dt);
390 (grad_v - transpose(grad_v));
391}
392
393#endif // DOXYGEN
394
396
397#endif
#define DEAL_II_ALWAYS_INLINE
Definition config.h:165
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
DerivativeForm< 1, spacedim, dim, Number > transpose(const DerivativeForm< 1, dim, spacedim, Number > &DF)
SymmetricTensor< 2, dim, Number > F_vol(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > C(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > E(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
Tensor< 2, dim, Number > F_iso(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > epsilon(const Tensor< 2, dim, Number > &Grad_u)
Tensor< 2, dim, Number > F(const Tensor< 2, dim, Number > &Grad_u)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
static constexpr const T & value(const T &t)
Definition numbers.h:662
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)
constexpr SymmetricTensor< 2, dim, Number > unit_symmetric_tensor()