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 consist of either tetrahedra (3D) or triangles (2D) that define first-order elements. 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., if the largest material ID that is referenced by a tag is N, there need to be (at least) N material definitions in the configuration file.

Note

The element definition must be for first-order elements, i.e., 3-node triangles or 4-node tetrahedra. 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: number of increments

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

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

  • boundary_conditions

    • mechanical

      • dot_u, list of three floating point numbers or literal x: rate of displacement or undefined

      • tag, integer: ID of the physical group in the mesh file affected by the displacement rate

Example:

loadstep:
  - boundary_conditions:
      mechanical:
      - tag: 4
        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:
      - tag: 4
        dot_u: [0.0, 0.0, 0.0]
      - tag: 6
        dot_u: [x, 1.5,  x]
    discretization:
      t: 2
      N: 10
    f_out: 3

This applies two loads in subsequent steps. In both steps, nodes labeled by physical tag “4” 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 y-direction on nodes labeled by physical tag “6” 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!