# Grid Solver#

## Geometry#

The grid solver operates on a regular grid specified in the `VTK ImageData`_ format.
The material ID in `material.yaml`

is referenced via the value of a PointData dataset named `material`

.
Uncompressed and zlib_ compressed datasets are supported.
Using `damask.Grid`

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

## Load Case#

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

`solver`

`loadstep`

`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`F_dot`

: rate of deformation gradient during load step`L`

: velocity gradient during load step`P`

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

: rate of first Piola–Kirchhoff stress during load step

Mixed (deformation–stress) conditions are possible but necessarily mutually exclusive (indicated by ‘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
```