deal.II version GIT relicensing-2171-g98af52917d 2024-11-23 14:40:00+00:00
\(\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: 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// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15#ifndef dealii_elasticity_kinematics_h
16#define dealii_elasticity_kinematics_h
17
18
19#include <deal.II/base/config.h>
20
23#include <deal.II/base/tensor.h>
24
26
28
29namespace Physics
30{
31 namespace Elasticity
32 {
44 namespace Kinematics
45 {
70 template <int dim, typename Number>
72 F(const Tensor<2, dim, Number> &Grad_u);
73
86 template <int dim, typename Number>
89
102 template <int dim, typename Number>
105
117 template <int dim, typename Number>
120
132 template <int dim, typename Number>
135
155 template <int dim, typename Number>
158
175 template <int dim, typename Number>
178
191 template <int dim, typename Number>
194
215 template <int dim, typename Number>
218
238 template <int dim, typename Number>
241
260 template <int dim, typename Number>
263
265 } // namespace Kinematics
266 } // namespace Elasticity
267} // namespace Physics
268
269
270
271#ifndef DOXYGEN
272
273// ------------------------- inline functions ------------------------
274
275
276
277template <int dim, typename Number>
280{
281 return StandardTensors<dim>::I + Grad_u;
282}
283
284
285
286template <int dim, typename Number>
289{
290 // Make things work with AD types
291 using std::pow;
292 return internal::NumberType<Number>::value(pow(determinant(F), -1.0 / dim)) *
293 F;
294}
295
296
297
298template <int dim, typename Number>
301{
302 // Make things work with AD types
303 using std::pow;
306 unit_symmetric_tensor<dim>());
307}
308
309
310
311template <int dim, typename Number>
314{
315 return symmetrize(transpose(F) * F);
316}
317
318
319
320template <int dim, typename Number>
323{
324 return symmetrize(F * transpose(F));
325}
326
327
328
329template <int dim, typename Number>
332{
334 (C(F) - static_cast<SymmetricTensor<2, dim, Number>>(
335 StandardTensors<dim>::I));
336}
337
338
339
340template <int dim, typename Number>
343{
344 // This is the equivalent to 0.5*symmetrize(Grad_u + transpose(Grad_u));
345 return symmetrize(Grad_u);
346}
347
348
349
350template <int dim, typename Number>
353{
354 const Tensor<2, dim, Number> F_inv = invert(F);
357 StandardTensors<dim>::I) -
358 transpose(F_inv) * F_inv);
359}
360
361
362
363template <int dim, typename Number>
366 const Tensor<2, dim, Number> &dF_dt)
367{
368 return dF_dt * invert(F);
369}
370
371
372
373template <int dim, typename Number>
376 const Tensor<2, dim, Number> &dF_dt)
377{
378 return symmetrize(l(F, dF_dt));
379}
380
381
382
383template <int dim, typename Number>
386 const Tensor<2, dim, Number> &dF_dt)
387{
388 // This could be implemented as w = l-d, but that would mean computing "l"
389 // a second time.
390 const auto grad_v = l(F, dF_dt);
392 (grad_v - transpose(grad_v));
393}
394
395#endif // DOXYGEN
396
398
399#endif
#define DEAL_II_ALWAYS_INLINE
Definition config.h:109
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:498
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:499
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 DEAL_II_HOST_DEVICE_ALWAYS_INLINE const T & value(const T &t)
Definition numbers.h:697
DEAL_II_HOST constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
DEAL_II_HOST constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
DEAL_II_HOST constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)