# Grid Solver#

## Geometry#

The grid solver operates on a regular grid specified in the serial VTK XML ImageData format (.vti extension).
The material ID in the Material Configuration is referenced via the value of a PointData dataset named `material`

.
The material IDs in this dataset are zero-based, i.e. a maximum ID of N requires to have N+1 material definitions.
Uncompressed and zlib compressed binary datasets are supported.
Using `damask.GeomGrid`

is the recommended way for the generation and modification of grid solver geometries.

Note

“Appended” data is not supported.

## Load Case#

The load case of the grid solver is written in YAML style. It contains two top-level keys:

`solver`

`loadstep`

Note

The YAML parser used in DAMASK does not support advanced features, such as references and line continuation statements, unless DAMASK was compiled with libfyaml.

`solver`

#

… is a dictionary that specifies for each considered physical phenomenon what solver to use. The following grid-based solvers are implemented

```
mechanical: spectral_basic | spectral_polarization | FEM
thermal: spectral
damage: spectral
```

`loadstep`

#

… is a list of dictionaries that specifies the details of each individual load step in the simulation. Every load step has a number of parameters that need to be declared:

`discretization`

`N`

: number of increments`t`

: time of load step in seconds, i.e. \(t = \sum_{i=1}^N \Delta t_i\)`r`

: scaling factor (default 1) in geometric time step series, i.e. \(\Delta t_{i+1} = r\,\Delta t_i\)

`f_out`

: output frequency of results; e.g. \(f_\text{out} = 3\) writes results every third increment`f_restart`

: output frequency of restart information; e.g. \(f_\text{restart} = 10\) writes restart information every tenth increment`estimate_rate`

: estimate field of deformation gradient fluctuations based on former load step (default) or assume to be homogeneous, i.e. no fluctuations`boundary_conditions`

`mechanical`

`R`

: rotation axis and angle (in degrees) from grid to load frame coordinate system (defaults to no rotation, i.e. load frame coincides with grid coordinates)`F`

: deformation gradient at end of load step`dot_F`

: rate of deformation gradient during load step`L`

: velocity gradient during load step`P`

: first Piola–Kirchhoff stress at end of load step`dot_P`

: rate of first Piola–Kirchhoff stress during load step

Note

Tensors are specified as $T_{ij}$, i.e. rows are indexed by $i$ and columns by $j$.

Note

Deformation conditions must be prescribed on at least one of $ij$ or $ji$ for \(i \neq j\), i.e. off-diagonally, to prevent free body rotation.

Note

Mixed (deformation–stress) conditions are possible.
However, for each tensor component $ij$, only one of the two (deformation/stress) can be prescribed; the complementary (stress/deformation) component then requires a literal `x`

.

Example:

```
loadstep:
- discretization:
t: 100
N: 10
f_out: 10
boundary_conditions:
mechanical:
dot_F: [[1.0e-3, 0, 0],
[0, x, 0],
[0, 0, x]]
P: [[x, x, x],
[x, 0, x],
[x, x, 0]]
- discretization:
t: 1000
N: 50
boundary_conditions:
mechanical:
dot_F: [[1.0e-3, 0, 0],
[0, x, 0],
[0, 0, x]]
P: [[x, x, x],
[x, 0, x],
[x, x, 0]]
f_out: 10
f_restart: 25
```