Reference documentation for deal.II version Git e67cfc96e3 2021-10-16 16:07:33 +0200
\(\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\}}\)
kinematics.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2016 - 2020 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_elasticity_kinematics_h
17 #define dealii_elasticity_kinematics_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #include <deal.II/base/numbers.h>
24 #include <deal.II/base/tensor.h>
25 
27 
29 
30 namespace Physics
31 {
32  namespace Elasticity
33  {
45  namespace Kinematics
46  {
51 
71  template <int dim, typename Number>
73  F(const Tensor<2, dim, Number> &Grad_u);
74 
87  template <int dim, typename Number>
89  F_iso(const Tensor<2, dim, Number> &F);
90 
103  template <int dim, typename Number>
105  F_vol(const Tensor<2, dim, Number> &F);
106 
118  template <int dim, typename Number>
120  C(const Tensor<2, dim, Number> &F);
121 
133  template <int dim, typename Number>
135  b(const Tensor<2, dim, Number> &F);
136 
138 
143 
156  template <int dim, typename Number>
158  E(const Tensor<2, dim, Number> &F);
159 
176  template <int dim, typename Number>
178  epsilon(const Tensor<2, dim, Number> &Grad_u);
179 
192  template <int dim, typename Number>
194  e(const Tensor<2, dim, Number> &F);
195 
197 
202 
216  template <int dim, typename Number>
218  l(const Tensor<2, dim, Number> &F, const Tensor<2, dim, Number> &dF_dt);
219 
239  template <int dim, typename Number>
241  d(const Tensor<2, dim, Number> &F, const Tensor<2, dim, Number> &dF_dt);
242 
261  template <int dim, typename Number>
263  w(const Tensor<2, dim, Number> &F, const Tensor<2, dim, Number> &dF_dt);
264 
266  } // namespace Kinematics
267  } // namespace Elasticity
268 } // namespace Physics
269 
270 
271 
272 #ifndef DOXYGEN
273 
274 // ------------------------- inline functions ------------------------
275 
276 
277 
278 template <int dim, typename Number>
281 {
282  return StandardTensors<dim>::I + Grad_u;
283 }
284 
285 
286 
287 template <int dim, typename Number>
290 {
292  std::pow(determinant(F), -1.0 / dim)) *
293  F;
294 }
295 
296 
297 
298 template <int dim, typename Number>
301 {
303  std::pow(determinant(F), 1.0 / dim)) *
304  static_cast<SymmetricTensor<2, dim, Number>>(
305  unit_symmetric_tensor<dim>());
306 }
307 
308 
309 
310 template <int dim, typename Number>
313 {
314  return symmetrize(transpose(F) * F);
315 }
316 
317 
318 
319 template <int dim, typename Number>
322 {
323  return symmetrize(F * transpose(F));
324 }
325 
326 
327 
328 template <int dim, typename Number>
331 {
333  (C(F) - static_cast<SymmetricTensor<2, dim, Number>>(
335 }
336 
337 
338 
339 template <int dim, typename Number>
342 {
343  // This is the equivalent to 0.5*symmetrize(Grad_u + transpose(Grad_u));
344  return symmetrize(Grad_u);
345 }
346 
347 
348 
349 template <int dim, typename Number>
352 {
353  const Tensor<2, dim, Number> F_inv = invert(F);
357  transpose(F_inv) * F_inv);
358 }
359 
360 
361 
362 template <int dim, typename Number>
365  const Tensor<2, dim, Number> &dF_dt)
366 {
367  return dF_dt * invert(F);
368 }
369 
370 
371 
372 template <int dim, typename Number>
375  const Tensor<2, dim, Number> &dF_dt)
376 {
377  return symmetrize(l(F, dF_dt));
378 }
379 
380 
381 
382 template <int dim, typename Number>
385  const Tensor<2, dim, Number> &dF_dt)
386 {
387  // This could be implemented as w = l-d, but that would mean computing "l"
388  // a second time.
389  const Tensor<2, dim> grad_v = l(F, dF_dt);
391  (grad_v - transpose(grad_v));
392 }
393 
394 #endif // DOXYGEN
395 
397 
398 #endif
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
static constexpr const T & value(const T &t)
Definition: numbers.h:703
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > F(const Tensor< 2, dim, Number > &Grad_u)
SymmetricTensor< 2, dim, Number > C(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > epsilon(const Tensor< 2, dim, Number > &Grad_u)
SymmetricTensor< 2, dim, Number > F_vol(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > E(const Tensor< 2, dim, Number > &F)
DerivativeForm< 1, spacedim, dim, Number > transpose(const DerivativeForm< 1, dim, spacedim, Number > &DF)
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:401
#define DEAL_II_ALWAYS_INLINE
Definition: config.h:98
SymmetricTensor< 2, dim, Number > d(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)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
Definition: tensor.h:506
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:400
constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)