2.2.1. postResults
Purpose
Extract data from a simulation result file into an
ASCII table.
Background
- MSC.Marc (*.t16)
- DAMASK_spectral (*.spectralOut)
Types of output
- nodal scalar (displacement, temperature, ...)
- elemental scalar (equivalent stress, ...)
- elemental tensor (stress, strain, ...)
- homogenization output
- crystallite output (phase, orientation, deformation gradient, ...)
- constitutive output (dislocation density, slip resistance, twin volume fraction, ...)
Output processing
The result extraction internally comprises three steps:
- filtering the data according to geometry or mesh properties. Use the
--filter
option to specify filtering conditions.
- grouping the filtered data by user-defined criteria based on geometry and mesh properties. Use the
--separation
option to indicate which discrimination criteria you want for grouping.
- mapping the values in each group to one scalar quantity by a user-defined function. Use the
--map
option to indicate how to map all values of a group to a single scalar.
File positions and increments
Typically, a result file contains more than one time step but, for instance, a number $N$ of them.
We distinguish between »positions«, which follow a strictly consecutive numbering $1,\ldots,N$, and »increments«, which follow the numbering that the respective increment had in the course of the overall simulation.
Example: suppose a simulation comprises 100 increments of which only every tenth is written to the result file.
The result file will then contain positions $0,1,\ldots,10$ and increments $0,10,\ldots,100$ (because the initial configuration is always included as position 0 and increment 0).
Usage
> postResults [options] resultfile
Switches
-
--info
/ -i
[ False ] - just list contents of resultfile
-
--legacy
/ -l
[ False ] - interpret user block according to legacy (prior to DAMASK rev 1115) format
-
--split
/ -s
[ False ] - split output into one separate file per increment
-
--increments
[ False ] - range indicator addresses true increment numbers, not plain positions in file
-
--sloppy
[ False ] - do not pre-check validity of increment range
-
--time
/ -t
[ False ] - output time of increment (as first data column)
-
--nodal
/ -n
[ False ] - data is extrapolated to nodal value
Options
-
--type
/ -p
string [ auto ] - type of resultfile
-
--prefix
string [ none ] - prefix to output file name
-
--suffix
string [ none ] - suffix to output file name
-
--dir
/ -d
string [ postProc ] - name of subdirectory to hold output
-
--range
/ -r
start end step [ all ] - range of positions (or increments) to output
-
--homogenization
string or int [ 1 ] - homogenization identifier (section in material.config part <homogenization>)
-
--crystallite
string or int [ 1 ] - crystallite identifier (section in material.config part <crystallite>)
-
--phase
string or int [ 1 ] - phase identifier (section in material.config part <phase>)
-
--ns
list - nodal scalars to extract
-
--es
list - elemental scalars to extract
-
--et
list - elemental tensors to extract
-
--ho
list - homogenization results to extract
-
--cr
list - crystallite results to extract
-
--co
list - constitutive results to extract
-
--filter
/ -f
PythonCode - condition(s) to filter results. keywords interpreted in the PythonCode are 'elem', 'node', 'ip', 'grain', and 'x', 'y', 'z'.
-
--separation
list - properties to separate (and sort) results. keywords are 'elem', 'node', 'ip', 'grain', and 'x', 'y', 'z'.
-
--sort
list - properties to sort results (overrides --separate order). keywords are 'none', 'elem', 'node', 'ip', 'grain', and 'x', 'y', 'z'.
-
--map
/ -m
string or PythonLambda - function applied to map multiple values to one scalar quantity per group. User-defined mappings (
lambda a,b,n:
) are formulated in an incremental fashion for each new data point, a(dd), and may use the current (incremental) result, b(ase), as well as the number, n(umber), of already processed data points for evaluation. Predefined options are
-
min
lambda n,b,a: min(b,a)
-
max
lambda n,b,a: max(b,a)
-
avg
lambda n,b,a: (n*b+a)/(n+1)
-
avgabs
lambda n,b,a: (n*b+abs(a))/(n+1)
-
sum
lambda n,b,a: b+a
-
sumabs
lambda n,b,a: b+abs(a)
Examples
- volume-averaged results of deformation gradient and first PiolaKirchhoff stress for all increments
--cr f,p
- spatially resolved slip resistance (of phenopowerlaw) in separate files for increments 10, 11, and 12
--range 10 12 1 --increments --split --separation x,y,z --co resistance_slip
- get averaged results in slices perpendicular to x for all negative y coordinates split per increment
--filter 'y < 0.0' --split --separation x --map 'avg'
- global sum of squared data falling into first quadrant arc between R1 and R2
--filter 'x >= 0.0 and y >= 0.0 and x*x + y*y >= R1*R1 and x*x + y*y <=R2*R2' --map 'lambda n,b,a: n*b+a*a'