Reference documentation for deal.II version 9.1.0-pre
kinematics.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2016 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/numbers.h>
22 #include <deal.II/base/tensor.h>
23 
24 #include <deal.II/physics/elasticity/standard_tensors.h>
25 
26 DEAL_II_NAMESPACE_OPEN
27 
28 namespace Physics
29 {
30  namespace Elasticity
31  {
46  namespace Kinematics
47  {
52 
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 
238  template <int dim, typename Number>
240  d(const Tensor<2, dim, Number> &F, const Tensor<2, dim, Number> &dF_dt);
241 
259  template <int dim, typename Number>
261  w(const Tensor<2, dim, Number> &F, const Tensor<2, dim, Number> &dF_dt);
262 
264  } // namespace Kinematics
265  } // namespace Elasticity
266 } // namespace Physics
267 
268 
269 
270 #ifndef DOXYGEN
271 
272 // ------------------------- inline functions ------------------------
273 
274 
275 
276 template <int dim, typename Number>
279 {
280  return StandardTensors<dim>::I + Grad_u;
281 }
282 
283 
284 
285 template <int dim, typename Number>
288 {
289  return std::pow(determinant(F), -1.0 / dim) * F;
290 }
291 
292 
293 
294 template <int dim, typename Number>
297 {
299  std::pow(determinant(F), 1.0 / dim)) *
300  static_cast<SymmetricTensor<2, dim, Number>>(
301  unit_symmetric_tensor<dim>());
302 }
303 
304 
305 
306 template <int dim, typename Number>
309 {
310  return symmetrize(transpose(F) * F);
311 }
312 
313 
314 
315 template <int dim, typename Number>
318 {
319  return symmetrize(F * transpose(F));
320 }
321 
322 
323 
324 template <int dim, typename Number>
327 {
329  (C(F) - static_cast<SymmetricTensor<2, dim, Number>>(
331 }
332 
333 
334 
335 template <int dim, typename Number>
338 {
339  // This is the equivalent to 0.5*symmetrize(Grad_u + transpose(Grad_u));
340  return symmetrize(Grad_u);
341 }
342 
343 
344 
345 template <int dim, typename Number>
348 {
349  const Tensor<2, dim, Number> F_inv = invert(F);
353  transpose(F_inv) * F_inv);
354 }
355 
356 
357 
358 template <int dim, typename Number>
361  const Tensor<2, dim, Number> &dF_dt)
362 {
363  return dF_dt * invert(F);
364 }
365 
366 
367 
368 template <int dim, typename Number>
371  const Tensor<2, dim, Number> &dF_dt)
372 {
373  return symmetrize(l(F, dF_dt));
374 }
375 
376 
377 
378 template <int dim, typename Number>
381  const Tensor<2, dim, Number> &dF_dt)
382 {
383  // This could be implemented as w = l-d, but that would mean computing "l"
384  // a second time.
385  const Tensor<2, dim> grad_v = l(F, dF_dt);
387  (grad_v - transpose(grad_v));
388 }
389 
390 #endif // DOXYGEN
391 
392 DEAL_II_NAMESPACE_CLOSE
393 
394 #endif
Number determinant(const SymmetricTensor< 2, dim, Number > &)
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 > invert(const SymmetricTensor< 2, dim, Number > &)
SymmetricTensor< 2, dim, Number > F_vol(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > E(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
SymmetricTensor< rank_, dim, Number > transpose(const SymmetricTensor< rank_, dim, Number > &t)
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: mpi.h:55
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)