Skip to content

Commit

Permalink
Enhance docs
Browse files Browse the repository at this point in the history
  • Loading branch information
adtzlr committed Sep 27, 2023
1 parent e2346cf commit aa7a5d8
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 119 deletions.
4 changes: 3 additions & 1 deletion docs/api/functions/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ layout: page
nav_order: 3
parent: API Reference
has_children: true
---
---

# Functions
15 changes: 7 additions & 8 deletions docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ nav_order: 3
has_children: true
---

## Module Function Overview

# Module Function Overview
This module provides several useful assignments, operators and functions for the derived Tensor Data Types.

### A word on Voigt notation
## A word on Voigt notation
Symmetric 3x3 Tensors may be stored as 6x1 column vectors with the help of the well known [Voigt notation](https://en.wikipedia.org/wiki/Voigt_notation). In an analogous way a transformation may be obtained for at least minor symmetric fourth order tensors (3x3x3x3) which may be stored as a 6x6 matrix. If the fourth order tensor is also major symmetric the reduced 6x6 matrix is also symmetric.

There is no unique method for the storage ordering of tensor components - this toolbox uses the following approach:
Expand All @@ -19,10 +18,10 @@ To ensure consistency in calculating the virtual work shear terms are treated di

All tensors, whether they are "stress"- or "strain"-like are stored with original (**no doubled**) shear components. Instead all dot- and double-dot-products are modified to take virtual work consistency into account. To be more precise, the function `asvoigt` is not really a Voigt storage - it is more a synonym for storing symmetric tensors as vectors and matrices. The user does have to take care of that storage if the strain in a user subroutine is used as an input for a `Tensor2s` data type and divide all shear components by a factor of `2`.

### Assignments
## Assignments
- [General behaviour of data type conversion]({% link api/assignments.md %})

### Operators
## Operators
- [Dot Product]({% link api/operators.md %})
- [Double Dot Product]({% link api/operators.md %})
- [Dyadic Product]({% link api/operators.md %})
Expand All @@ -31,12 +30,12 @@ All tensors, whether they are "stress"- or "strain"-like are stored with origina
- [Addition]({% link api/operators.md %})
- [Subtraction]({% link api/operators.md %})

### Scalar-valued functions
## Scalar-valued functions
- [Trace]({% link api/functions/trace.md %})
- [Determinant]({% link api/functions/determinant.md %})
- [Norm]({% link api/functions/norm.md %})

### Tensor-valued functions
## Tensor-valued functions
- [Deviator]({% link api/functions/deviator.md %})
- [Unimodular]({% link api/functions/unimodular.md %})
- [Inverse]({% link api/functions/inverse.md %})
Expand All @@ -48,7 +47,7 @@ All tensors, whether they are "stress"- or "strain"-like are stored with origina
- [Piola Operation]({% link api/functions/piola.md %})
- [Rotation Matrix]({% link api/functions/rotation.md %})

### Helper Functions
## Helper Functions
- [As Array]({% link api/functions/asarray.md %})
- [As Abaqus Array]({% link api/functions/asabqarray.md %})
- [As Voigt]({% link api/functions/asvoigt.md %})
Expand Down
2 changes: 1 addition & 1 deletion docs/api/operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ This module uses derived data types where the default operators are overloaded w
- Dot-Product (single contraction) `A*B`
- Double-Dot-Product (double contraction) `A**B`
- Dyadic Product `A.dya.B`
- Symmetric Crossed-dyadic Product `A.cdya.B` to perform `C(i,j,k,l) = 1/4 * (A(i,k) B(j,l) + A(i,l) B(j,k) + B(i,k) A(j,l) + B(i,l) A(j,k))`
- Symmetric Crossed-dyadic Product `A.cdya.B` to perform `C(i,j,k,l) = (A(i,k)*B(j,l) + A(i,l)*B(j,k) + B(i,k)*A(j,l) + B(i,l)*A(j,k)) / 4.`

**Warning**: Be sure to use brackets around functions which should be evaluated first because the double contraction has the highest priority as it is replaced by the conventional power function. This leads to wrong results in combination with crossed-dyadic products as they must be evaluated first. Always use brackets like `A**(B.cdya.B)`. Unfortunately this is a limitation of Fortran.
1 change: 1 addition & 0 deletions docs/api/tensordatatypes.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ nav_order: 3
parent: API Reference
---

# Tensor Data Types

There are several Tensor Data Types available inside this module:
- `Tensor 1` rank 1 Tensor (Vector)
Expand Down
105 changes: 0 additions & 105 deletions docs/examples/example.md

This file was deleted.

8 changes: 4 additions & 4 deletions docs/examples/example_neohooke.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
---
title: Marc (Neo-Hooke, 2)
title: Marc (Neo-Hooke)
layout: page
nav_order: 4
parent: Examples
---

## Examples

This is a very basic example on how to implement a nearly-incompressible version of the Neo-Hookean material model in a commercial FEM package (HYPELA2 for MSC.Marc). As no special two- or three-field variational principle is used in this example, it is only suitable for elements with reduced integration schemes in cases of nearly-incompressible material behaviour. Otherwise the elements tend to show excessive volumetric locking during deformation and hence, wrong results are calculated. Conventional reduced displacement elements will give good results regarding displacement and convergence for a bulk modulus up to about 50 times the shear modulus.
This is a very basic example on how to implement a nearly-incompressible version of the Neo-Hookean material model in a commercial FEM package (HYPELA2 for Marc). As no special two- or three-field variational principle is used in this example, it is not suitable for nearly-incompressible material behaviour. Otherwise the elements tend to show excessive volumetric locking during deformation and hence, wrong results are calculated.

The helmholtz free energy per unit reference volume is additively split into an isochoric and volumetric contribution. The first one is assumed to be proportional to the first invariant of the isochoric right Cauchy-Green deformation tensor whereas the volumetric part is only a function of the volumetric ratio.
The strain energy density function per unit reference volume is additively splitted into an isochoric and volumetric contribution. The first one is assumed to be proportional to the first invariant of the isochoric part of the right Cauchy-Green deformation tensor whereas the volumetric part is only a function of the volumetric ratio (the determinant of the deformation gradient).

<a href="https://www.codecogs.com/eqnedit.php?latex=\psi(\mathbf{C})&space;=&space;\psi(\mathbf{\hat&space;C})&space;&plus;&space;U(J)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?\psi(\mathbf{C})&space;=&space;\psi(\mathbf{\hat&space;C})&space;&plus;&space;U(J)" title="\psi(\mathbf{C}) = \psi(\mathbf{\hat C}) + U(J)" /></a>
$$ \psi(\mathbf{C}) = \psi(\mathbf{\hat C}) + U(J) $$

<a href="https://www.codecogs.com/eqnedit.php?latex=\psi(\mathbf{C})&space;=&space;\text{C}_{10}&space;(\text{I}_\mathbf{\hat&space;C}-3)&space;&plus;&space;\frac{\kappa}{2}&space;(J-1)^2" target="_blank"><img src="https://latex.codecogs.com/gif.latex?\psi(\mathbf{C})&space;=&space;\text{C}_{10}&space;(\text{I}_\mathbf{\hat&space;C}-3)&space;&plus;&space;\frac{\kappa}{2}&space;(J-1)^2" title="\psi(\mathbf{C}) = \text{C}_{10} (\text{I}_\mathbf{\hat C}-3) + \frac{\kappa}{2} (J-1)^2" /></a>

Expand Down

0 comments on commit aa7a5d8

Please sign in to comment.