Numerics Configuration#

The algorithms used in DAMASK can be configured via a YAML file. This optional file needs to be specified with the --numerics option when using the DAMASK grid or mesh solvers, or located in the current working directory and named numerics.yaml to be included in a simulation with MSC Marc.

Using damask.YAML is the recommended way for the generation and modification of numerics.yaml. Hand-written files should be checked for correctness, e.g. with yamllint or on www.yamllint.com.

Reference Examples#

All available parameters are usually listed in the file examples/config/numerics.yaml. The content of this file is shown below.

numerics#

# Default values of all available numerical parameters
# Please note that keys are case sensitive

solver:
  grid:
    N_staggered_iter_max: 10            # max number of field-level staggered iterations
    N_cutback_max:        3             # maximum cutback level (0: 1, 1: 0.5, 2: 0.25, etc)

    damage:
      N_iter_max: 100                   # maximum iteration number
      eps_abs_phi: 1.0e-2               # absolute tolerance for damage evolution
      eps_rel_phi: 1.0e-6               # relative tolerance for damage evolution
      phi_min: 1.0e-6                   # residual integrity

    thermal:
      N_iter_max: 100                   # maximum iteration number
      eps_abs_T: 1.0e-2                 # absolute tolerance for thermal equilibrium
      eps_rel_T: 1.0e-6                 # relative tolerance for thermal equilibrium

    mechanical:
      N_iter_min: 1                     # minimum iteration number
      N_iter_max: 100                   # maximum iteration number
      eps_abs_div(P): 1.0e-4            # absolute tolerance for fulfillment of stress equilibrium
      eps_rel_div(P): 5.0e-4            # relative tolerance for fulfillment of stress equilibrium
      eps_abs_P: 1.0e3                  # absolute tolerance for fulfillment of stress BC
      eps_rel_P: 1.0e-3                 # relative tolerance for fulfillment of stress BC
      eps_abs_curl(F): 1.0e-10          # absolute tolerance for fulfillment of strain compatibility
      eps_rel_curl(F): 5.0e-4           # relative tolerance for fulfillment of strain compatibility
      alpha: 1.0                        # polarization scheme parameter 0.0 < alpha < 2.0 (1.0: AL scheme, 2.0: accelerated scheme)
      beta: 1.0                         # polarization scheme parameter 0.0 <  beta < 2.0 (1.0: AL scheme, 2.0: accelerated scheme)
      update_gamma: false               # update Gamma-operator with current dPdF (not possible if FFT: memory_efficient == true)
      PETSc_options: -snes_type ngmres -snes_ngmres_anderson   # PETSc solver options

    FFT:
      memory_efficient: true            # precalculate Gamma-operator (81 doubles per point)
      divergence_correction: size+grid  # use size-independent divergence criterion {none, size, size+grid}
      derivative: continuous            # approximation used for derivatives in Fourier space {continuous, central_difference, FWBW_difference}
      FFTW_plan_mode: FFTW_MEASURE      # planning-rigor flags, see manual at https://www.fftw.org/fftw3_doc/Planner-Flags.html
      FFTW_timelimit: -1.0              # time limit of plan creation for FFTW, see manual on www.fftw.org. (-1.0: disable time limit)

  mesh:
    N_cutback_max:        3             # maximum cut back level (0: 1, 1: 0.5, 2: 0.25, etc)
    N_staggered_iter_max: 10            # max number of field level staggered iterations
    p_s:                  2             # order of displacement shape functions
    p_i:                  2             # order of quadrature rule required
    bbarstabilization:    false

    mechanical:
      N_iter_max:         250           # Maximum iteration number
      eps_abs_div(P):     1.0e-10       # absolute tolerance for mechanical equilibrium
      eps_rel_div(P):     1.0e-4        # relative tolerance for mechanical equilibrium

  Marc:
    unit_length:          1.0           # physical length of one computational length unit


homogenization:
  mechanical:
    RGC:
      eps_abs_P:           1.0e+4       # absolute tolerance of RGC residuum (in Pa)
      eps_rel_P:           1.0e-3       # relative ...
      eps_abs_max:         1.0e+10      # absolute upper-limit of RGC residuum (in Pa)
      eps_rel_max:         1.0e+2       # relative ...
      Delta_a:             1.0e-7       # perturbation for computing penalty tangent
      relevant_mismatch:   1.0e-5       # minimum threshold of mismatch
      viscosity_exponent:  1.0e+0       # power (sensitivity rate) of numerical viscosity in RGC scheme
      viscosity_modulus:   0.0e+0       # stress modulus of RGC numerical viscosity (0: without numerical viscosity)
                                        # suggestion: larger than the aTol_RGC but still far below the expected flow stress of material
      dot_a_ref:           1.0e-3       # reference rate of relaxation (about the same magnitude as straining rate, possibly a bit higher)
      dot_a_max:           1.0e+0       # threshold of maximum relaxation vector increment (if exceed this then cutback)
      Delta_V_max:         1.0e-5       # maximum allowable relative volume discrepancy
      Delta_V_modulus:     1.0e+12
      Delta_V_exponent:    5.0


phase:
  mechanical:
    r_cutback_min:             1.0e-3   # minimum (relative) size of step allowed during cutback in phase state calculation
    r_cutback:                 0.25     # factor to decrease size of step when cutback introduced in phase state calculation (value between 0 and 1)
    r_increase:                1.5      # factor to increase size of next step when previous step converged in phase state calculation
    eps_rel_state:             1.0e-6   # relative tolerance in phase state loop (abs tol provided by constitutive law)
    N_iter_state_max:          10       # state loop limit

    plastic:
      r_linesearch_Lp:         0.5      # factor to decrease the step if Lp calculation fails to converge
      eps_rel_Lp:              1.0e-6   # relative tolerance in Lp residuum
      eps_abs_Lp:              1.0e-8   # absolute tolerance in Lp residuum
      N_iter_Lp_max:           40       # stress loop limit for Lp
      f_update_jacobi_Lp:      1        # frequency of Jacobian update of residuum in Lp
      integrator_state:        FPI      # integration method (FPI = Fixed Point Iteration, Euler = Euler, Euler_adaptive = Adaptive Euler, RK4 = classical 4th order Runge-Kutta, RKCK45 = 5th order Runge-Kutta Cash-Karp)

    eigen:
      r_linesearch_Li:         0.5      # factor to decrease the step if Li calculation fails to converge
      eps_rel_Li:              1.0e-6   # relative tolerance in Li residuum
      eps_abs_Li:              1.0e-8   # absolute tolerance in Li residuum
      N_iter_Li_max:           40       # stress loop limit for Li
      f_update_jacobi_Li:      1        # frequency of updating the Jacobian of residuum in Li

generic:
  random_seed:                 0        # fixed seeding for pseudo-random number generator (0: use random seed)

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.