Reference documentation for deal.II version 9.2.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\}}\)
standard_tensors.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_standard_tensors_h
17 #define dealii_elasticity_standard_tensors_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 
28 namespace Physics
29 {
30  namespace Elasticity
31  {
46  template <int dim>
48  {
49  public:
54 
73 #ifdef DEAL_II_HAVE_CXX14_CONSTEXPR
74  = unit_symmetric_tensor<dim>()
75 #endif
76  ;
77 
106 #ifdef DEAL_II_HAVE_CXX14_CONSTEXPR
107  = identity_tensor<dim>()
108 #endif
109  ;
110 
122 #ifdef DEAL_II_HAVE_CXX14_CONSTEXPR
123  = outer_product(unit_symmetric_tensor<dim>(),
124  unit_symmetric_tensor<dim>())
125 #endif
126  ;
127 
129 
134 
172 #ifdef DEAL_II_HAVE_CXX14_CONSTEXPR
173  = deviator_tensor<dim>()
174 #endif
175  ;
176 
235  template <typename Number>
238 
250  template <typename Number>
253 
255 
277  template <typename Number>
280 
282 
287 
302  template <typename Number>
305 
307  };
308 
309  } // namespace Elasticity
310 } // namespace Physics
311 
312 
313 
314 #ifndef DOXYGEN
315 
316 // --------------------- inline functions and constants -------------------
317 
318 
319 template <int dim>
320 template <typename Number>
323  const Tensor<2, dim, Number> &F)
324 {
325  const Number det_F = determinant(F);
327  ExcMessage("Deformation gradient has a negative determinant."));
328  const Tensor<2, dim, Number> C_ns = transpose(F) * F;
331 
332  // See Wriggers p46 equ 3.125 (but transpose indices)
334  outer_product(C, C_inv); // Dev_P = C_x_C_inv
335  Dev_P /= -dim; // Dev_P = -[1/dim]C_x_C_inv
336  Dev_P += SymmetricTensor<4, dim, Number>(S); // Dev_P = S - [1/dim]C_x_C_inv
337  Dev_P *=
338  std::pow(det_F, -2.0 / dim); // Dev_P = J^{-2/dim} [S - [1/dim]C_x_C_inv]
339 
340  return Dev_P;
341 }
342 
343 
344 
345 template <int dim>
346 template <typename Number>
349  const Tensor<2, dim, Number> &F)
350 {
351  const Number det_F = determinant(F);
353  ExcMessage("Deformation gradient has a negative determinant."));
354  const Tensor<2, dim, Number> C_ns = transpose(F) * F;
357 
358  // See Wriggers p46 equ 3.125 (not transposed)
360  outer_product(C_inv, C); // Dev_P = C_inv_x_C
361  Dev_P_T /= -dim; // Dev_P = -[1/dim]C_inv_x_C
362  Dev_P_T += SymmetricTensor<4, dim, Number>(S); // Dev_P = S - [1/dim]C_inv_x_C
363  Dev_P_T *=
364  std::pow(det_F, -2.0 / dim); // Dev_P = J^{-2/dim} [S - [1/dim]C_inv_x_C]
365 
366  return Dev_P_T;
367 }
368 
369 
370 
371 template <int dim>
372 template <typename Number>
375  const Tensor<2, dim, Number> &F)
376 {
377  return Number(0.5) * determinant(F) * symmetrize(invert(transpose(F) * F));
378 }
379 
380 
381 
382 template <int dim>
383 template <typename Number>
386  const Tensor<2, dim, Number> &F)
387 {
388  const SymmetricTensor<2, dim, Number> C_inv =
390 
392  for (unsigned int A = 0; A < dim; ++A)
393  for (unsigned int B = A; B < dim; ++B)
394  for (unsigned int C = 0; C < dim; ++C)
395  for (unsigned int D = C; D < dim; ++D)
396  dC_inv_dC[A][B][C][D] -=
397  0.5 * (C_inv[A][C] * C_inv[B][D] + C_inv[A][D] * C_inv[B][C]);
398 
399  return dC_inv_dC;
400 }
401 
402 #endif // DOXYGEN
403 
405 
406 #endif
Physics
Definition: physics.h:28
Physics::Elasticity::StandardTensors::dC_inv_dC
static constexpr SymmetricTensor< 4, dim, Number > dC_inv_dC(const Tensor< 2, dim, Number > &F)
Physics::Elasticity::Kinematics::F
Tensor< 2, dim, Number > F(const Tensor< 2, dim, Number > &Grad_u)
Physics::Elasticity::StandardTensors::IxI
static constexpr const SymmetricTensor< 4, dim > IxI
Definition: standard_tensors.h:123
Physics::Elasticity::StandardTensors::Dev_P
static constexpr SymmetricTensor< 4, dim, Number > Dev_P(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim >
SymmetricTensor::outer_product
constexpr SymmetricTensor< 4, dim, Number > outer_product(const SymmetricTensor< 2, dim, Number > &t1, const SymmetricTensor< 2, dim, Number > &t2)
Definition: symmetric_tensor.h:3520
Physics::Elasticity::StandardTensors
Definition: standard_tensors.h:47
SymmetricTensor::invert
constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &t)
Definition: symmetric_tensor.h:3467
Physics::Elasticity::Kinematics::C
SymmetricTensor< 2, dim, Number > C(const Tensor< 2, dim, Number > &F)
Physics::Elasticity::StandardTensors::ddet_F_dC
static constexpr SymmetricTensor< 2, dim, Number > ddet_F_dC(const Tensor< 2, dim, Number > &F)
DEAL_II_CONSTEXPR
#define DEAL_II_CONSTEXPR
Definition: config.h:102
Physics::Elasticity::StandardTensors::Dev_P_T
static constexpr SymmetricTensor< 4, dim, Number > Dev_P_T(const Tensor< 2, dim, Number > &F)
tensor.h
StandardExceptions::ExcMessage
static ::ExceptionBase & ExcMessage(std::string arg1)
Tensor
Definition: tensor.h:450
outer_product
constexpr SymmetricTensor< 4, dim, Number > outer_product(const SymmetricTensor< 2, dim, Number > &t1, const SymmetricTensor< 2, dim, Number > &t2)
Definition: symmetric_tensor.h:3520
DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:358
LAPACKSupport::A
static const char A
Definition: lapack_support.h:155
Assert
#define Assert(cond, exc)
Definition: exceptions.h:1419
SymmetricTensor::symmetrize
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
Definition: symmetric_tensor.h:3547
symmetric_tensor.h
SymmetricTensor::determinant
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &t)
Definition: symmetric_tensor.h:2645
Physics::Elasticity::StandardTensors::dev_P
static constexpr const SymmetricTensor< 4, dim > dev_P
Definition: standard_tensors.h:173
Physics::Elasticity::StandardTensors::S
static constexpr const SymmetricTensor< 4, dim > S
Definition: standard_tensors.h:107
std::pow
inline ::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &x, const Number p)
Definition: vectorization.h:5428
Physics::Elasticity::StandardTensors::I
static constexpr const SymmetricTensor< 2, dim > I
Definition: standard_tensors.h:74
config.h
numbers::value_is_greater_than
bool value_is_greater_than(const Number1 &value_1, const Number2 &value_2)
Definition: numbers.h:966
DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:359
numbers.h
DerivativeForm::transpose
DerivativeForm< 1, spacedim, dim, Number > transpose(const DerivativeForm< 1, dim, spacedim, Number > &DF)
Definition: derivative_form.h:470