Mesh Solver#

Geometry#

The mesh solver operates on an unstructured mesh specified in the MSH format, version 4. Neper and Gmsh are the recommended tools to generate mesh solver geometries.

The mesh must comprise first-order elements of a single type. Supported elements are tetrahedrons (element type 4) and hexahedrons (element type 5) in 3D and triangles (element type 2) and quadrilaterals (element type 3) in 2D. The material ID in the Material Configuration is referenced via a physical tag of a volume (3D) or a surface (2D). The material IDs in this dataset are one-based, i.e. a maximum ID (physical tag) of N requires to have N material definitions. Boundary conditions are defined on points (element type 15), lines (element type 1), triangles (only in 3D), or quadrilaterals (only in 3D).

Note

The element and integration order can be set in the numerics configuration.

Load Case#

The load case of the mesh solver is written in YAML style. It contains one top-level key:

  • 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.

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, integer: number of increments

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

  • f_out, bool: output frequency of results; e.g., \(f_\text{out} = 3\) writes results every third increment

  • boundary_conditions

    • mechanical

      • u or u_dot, vector of float or literal x, length 3:

        1. u: displacement at end of load step

        2. u_dot: rate of displacement during load step

      • tag or label:

        1. tag, integer: ID of the physical group in the mesh file on which the boundary condition is applied

        2. label, string: name of the physical group in the mesh file on which the boundary condition is applied

Example:

loadstep:
  - boundary_conditions:
      mechanical:
      - label: bottom
        dot_u: [0.0, 0.0, 0.0]
      - tag: 7
        dot_u: [1.5e-1, x, x]
    discretization:
      t: 1
      N: 5
    f_out: 1
  - boundary_conditions:
      mechanical:
      - label: bottom
        dot_u: [0.0, 0.0, 0.0]
      - tag: 6
        u: [1.5e-2, x, x]
    discretization:
      t: 2
      N: 10
    f_out: 3

This applies two loads in subsequent steps. In both steps, nodes labeled by physical name bottom are fixed. In the first step, displacement along the x-direction on nodes labeled by physical tag 7 is prescribed for one second in five steps and every increment is written out. In the second step, displacement along the x-direction on nodes labeled by physical tag 7 is prescribed for two seconds in ten steps and every third increment is written out. Hence, the last increment stored in the result file will be increment 9 of the second load step, not increment 10, because 10%3 != 0!