Reference documentation for deal.II version 9.0.0
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 at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_elasticity_kinematics_h
17 #define dealii_elasticity_kinematics_h
18 
19 
21 #include <deal.II/base/tensor.h>
22 #include <deal.II/base/numbers.h>
23 #include <deal.II/physics/elasticity/standard_tensors.h>
24 
25 DEAL_II_NAMESPACE_OPEN
26 
27 namespace Physics
28 {
29 
30  namespace Elasticity
31  {
32 
46  namespace Kinematics
47  {
48 
53 
72  template <int dim, typename Number>
74  F (const Tensor<2, dim, Number> &Grad_u);
75 
88  template <int dim, typename Number>
91 
104  template <int dim, typename Number>
106  F_vol (const Tensor<2, dim, Number> &F);
107 
119  template <int dim, typename Number>
121  C (const Tensor<2, dim, Number> &F);
122 
134  template <int dim, typename Number>
136  b (const Tensor<2, dim, Number> &F);
137 
139 
144 
156  template <int dim, typename Number>
158  E (const Tensor<2, dim, Number> &F);
159 
175  template <int dim, typename Number>
177  epsilon (const Tensor<2, dim, Number> &Grad_u);
178 
191  template <int dim, typename Number>
193  e (const Tensor<2, dim, Number> &F);
194 
196 
201 
215  template <int dim, typename Number>
217  l (const Tensor<2, dim, Number> &F,
218  const Tensor<2, dim, Number> &dF_dt);
219 
238  template <int dim, typename Number>
240  d (const Tensor<2, dim, Number> &F,
241  const Tensor<2, dim, Number> &dF_dt);
242 
260  template <int dim, typename Number>
262  w (const Tensor<2, dim, Number> &F,
263  const Tensor<2, dim, Number> &dF_dt);
264 
266  }
267  }
268 }
269 
270 
271 
272 #ifndef DOXYGEN
273 
274 // ------------------------- inline functions ------------------------
275 
276 
277 
278 template <int dim, typename Number>
279 inline
282 {
283  return StandardTensors<dim>::I + Grad_u;
284 }
285 
286 
287 
288 template <int dim, typename Number>
289 inline
292 {
293  return std::pow(determinant(F),-1.0/dim)*F;
294 }
295 
296 
297 
298 template <int dim, typename Number>
299 inline
302 {
303  return internal::NumberType<Number>::value(std::pow(determinant(F),1.0/dim))*static_cast< SymmetricTensor<2,dim,Number> >(unit_symmetric_tensor<dim>());
304 }
305 
306 
307 
308 template <int dim, typename Number>
309 inline
312 {
313  return symmetrize(transpose(F)*F);
314 }
315 
316 
317 
318 template <int dim, typename Number>
319 inline
322 {
323  return symmetrize(F*transpose(F));
324 }
325 
326 
327 
328 template <int dim, typename Number>
329 inline
332 {
333  return internal::NumberType<Number>::value(0.5)*(C(F) - static_cast<SymmetricTensor<2,dim,Number> >(StandardTensors<dim>::I));
334 }
335 
336 
337 
338 template <int dim, typename Number>
339 inline
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>
350 inline
353 {
354  const Tensor<2, dim, Number> F_inv = invert(F);
355  return internal::NumberType<Number>::value(0.5)*symmetrize(static_cast<SymmetricTensor<2,dim,Number> >(StandardTensors<dim>::I) - transpose(F_inv)*F_inv);
356 }
357 
358 
359 
360 template <int dim, typename Number>
361 inline
364  const Tensor<2, dim, Number> &F,
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>
373 inline
376  const Tensor<2, dim, Number> &F,
377  const Tensor<2, dim, Number> &dF_dt)
378 {
379  return symmetrize(l(F,dF_dt));
380 }
381 
382 
383 
384 template <int dim, typename Number>
385 inline
388  const Tensor<2, dim, Number> &F,
389  const Tensor<2, dim, Number> &dF_dt)
390 {
391  // This could be implemented as w = l-d, but that would mean computing "l"
392  // a second time.
393  const Tensor<2,dim> grad_v = l(F,dF_dt);
394  return internal::NumberType<Number>::value(0.5)*(grad_v - transpose(grad_v));
395 }
396 
397 #endif // DOXYGEN
398 
399 DEAL_II_NAMESPACE_CLOSE
400 
401 #endif
SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &t)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
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)
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)
Number determinant(const SymmetricTensor< 2, dim, Number > &t)
Definition: mpi.h:53
DerivativeForm< 1, spacedim, dim, Number > transpose(const DerivativeForm< 1, dim, spacedim, Number > &DF)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)