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:
discretizationN, integer: number of incrementst, 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 incrementboundary_conditionsmechanicaluoru_dot, vector of float or literalx, length 3:u: displacement at end of load stepu_dot: rate of displacement during load step
tagorlabel:tag, integer: ID of the physical group in the mesh file on which the boundary condition is appliedlabel, 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!