Skip to content


By default, diffusion coefficients must be specified for all contributions, i.e. for each component in each phase (looping automatically through all phases for each consecutive component).

In case of many components and many phases, the number of inputs required can be very large, even if for many (e.g. intermetallic) phases no diffusion coefficients are available or need be specified. Therefore, like in section Phase Interactions, a terse mode is available in which only the positively defined diffusion data are included. The terse mode is automatically invoked if the first input in the diffusion data block is preceded by a phase and component number. In this case, the end of the diffusion data input has to be defined by the keyword end_diffusion_data. Terse mode must be used if extra line options are needed. These options can be specified at any place after the definition of the corresponding diffusion term, beginning with the same combination of phase and component number (see below).

For each contribution (phase-component pair), several options for diffusion data input are available. Those data refer to the diffusion flux of the corresponding element in the given phase, which may be caused only by the composition gradient of the same element (diagonal term) or by the gradients of all elements (one line of the diffusion matrix).

There are three main keywords (diagonal, diagonal_dilute, multi and multi_plus) and various specifiers which consist of single characters (n, d, g, l, z, i, I, or f) with the following meaning:

  • diagonal: only the diagonal term is taken into account (Fick's equation). Correspondingly, only one character of n, d, g, l, z, i, I, or f has to be specified after diagonal.


    diagonal i
    * diagonal_dilute: The line of the diffusion matrix (otherwise specified by multi or multi_plus) is reduced to a diagonal term only by using the dilute limit for the flux component. By default, the concentration of the flux component is reduced to a small value while increasing the concentration of the matrix component. By additionally using the extra line option dilute_reference, other elements may be chosen instead of the matrix. This leads to always positive diagonal terms while all the off-diagonal terms are vanishing. The option can be used for approximately diagonalizing the diffusion matrix for sake of simplicity or numerical stability. A gradual dilute limit can be achieved using the extra line option dilute followed by a factor (0<f<1) by which the composition of the flux component shall be multiplied when calculating a line of the diffusion matrix using options multi or multi_plus with specifiers g, l or z.

  • multi: the flux of the given element is calculated using the gradients of all elements (Fick-Onsager). A string of N characters of n, d, g, l, z, or f for each dissolved element has to be specified after multi. If no characters are specified at all, g is assumed for all elements.


    multi ggnggg

  • multi_plus: same as multi with the difference that all off-diagonal terms are normalized with the composition of the flux component when calculated from the database. During simulation, the normalized coefficients are multiplied by the local composition. Thus, the intrinsic linear dependency of the off-diagonal coefficients on the flux component is taken into account automatically.

    > **Example**
    multi_plus glgggg
  • d: This specifier indicates that the corresponding term (diagonal or off-diagonal term of the diffusion matrix) will be used and specified directly by the user. If d is selected, the pre-exponential factor and the activation energy (which can be set to 0 for no temperature dependence) of the diffusion coefficient have to be specified.

  • n: No diffusion flux will be simulated for the element (and gradient) in the given phase . diagonal n is default in the terse input mode.

  • i: Infinite diffusion is assumed for the term (diagonal terms only!), so that the composition in the phase is mixed completely. Use this option instead of a high explicit value for the diffusion coefficient in order to improve performance (high values of the diffusion coefficients imply very small internal diffusion time steps of the explicit solver, leading to high computational effort). Using i with multi makes no sense and therefore is not allowed. diagonal i corresponds to the former infinite in the old notation.

    Important: In i mode, no distinction between touching and non-touching grains is made. Instead, complete mixing for the specified component between all grains of this phase is performed.

  • I: Complete mixing of the component is performed for each grain individually. Contacting grains interchange rapidly through the common interface region, so that nearly infinite diffusion is achieved between all grains of this phase which are in direct or indirect contact. How effective the interchange between contacting grains is depends on the contact geometry and the actual phase-field time-step. I is only allowed with diagonal and corresponds to the former infinite_restricted (old notation).

  • g: The diffusion coefficients will be calculated by Thermo-Calc™ (via the TQ interface) using diffusion data from database. This is only possible if a GES-file is used which contains mobility data (see How to create a GES file). g stands for global and means that only one global value for the diffusion coefficient and the effective activation energy will be calculated, based on the average temperature and composition in the given phase. This temperature dependent description will be used for the whole simulation domain. Updates are calculated at a certain time interval which is defined by the user at the end of the concentration data input for all contributions.

  • l: Same as g, but locally defined diffusion coefficients are calculated. For performance reasons, these local values cannot be directly calculated from the diffusion database. Instead, the values are interpolated from the local composition dependence with respect to all elements inside the phase. Using l, diffusion of the diagonal term is described more precisely compared to the g option, but higher calculation times are required for retrieval of the data from database as well as for interpolation.

    Important: Using the l option can easily lead to demixing diffusion matrixes and divergence of the diffusion solver if extrapolation is going too far! This is especially the case if composition is close to spinoidal like it is typically the case for γ and γ' in Ni-base alloys. Furthermore, the diffusion time step must be reduced correspondingly, leading to longer simulation times. Use maxfactor_local to control extrapolation limits (see below for more details).

  • z: Same as g, but instead of one global value for the diffusion coefficient a user-specified number of equidistant segments is created along the z-direction of the simulation domain. For each of these segments a global value for the diffusion coefficient and the effective activation energy is calculated. The number of segments has to be specified at the end of the diffusion data input. Use this option in case of strong temperature gradients where large temperature intervals exist inside the domain, or if strong concentration gradients are present in z direction (e.g. diffusion couple).

  • f: Read diffusion coefficient temperature-dependent from file. The file name which contains the diffusion data (first column: temperature, second column: diffusion coefficient) has to be given in an extra line

The described keywords are valid from MICRESS® 6.2 onward. The old less systematic keywords (diff, no_diff, database_global, database_local, infinite, infinite_restricted) should be avoided but are still recognized.

A grain boundary diffusion model is available to consider an increased diffusivity of a phase in the interface region to other phases. This increase is expressed as a reduction of the activation energy, leading to a temperature-dependent factor on the diffusion coefficients. The user has to specify this activation energy correction in J/mol as well as the physical interface thickness which is needed to scale to some real thickness. Thus, grain boundary diffusion is only possible for elements in phases which have also diffusion in the bulk and not e.g. for stoichiometric elements in intermetallics without solubility range. The input works only in the terse mode, i.e. if each diffusion term is defined with a proceeding element and phase number. First, bulk diffusion has to be defined for this contribution. Afterwards, for the same contribution, grain boundary diffusion can be added by using the keyword +b, followed by a string with length number of phases + 1 consisting of n or b. This string defines for each phase whether in grain boundaries to the actual phase enhanced diffusion is to be considered. For each b character, an activation energy difference and a physical interface thickness has to be entered in extra lines

The advanced extra line option cushion is available to get more control over the internal diffusion time stepping. Normally, an automatic criterion is used which determines the time-stepping per line in the diffusion matrix. The option cushion is only available with terse mode (see above). Adding an extra input line (in arbitrary order with respect to the other diffusion input data) consisting of two integers for the phase and component number, the keyword cushion and a cushion factor (real value) leads to a modification of the diffusion time step for this contribution by the user defined cushion factor. This option is useful only in case of numerical problems (divergence of diffusion with formation of "chess pattern") as well as for debugging purposes. The specified value should be \<1 to ensure numerical stability.

The keywords infinite_limit and maxfactor_local are also only available in terse mode as they specify further information for diffusion terms which must be specified before. infinite_limit allows to automatically switch to restricted infinite diffusion (I) if the smallest value of the diagonal term in the simulation domain exceeds the value given in the same line after the keyword. maxfactor_local allows specifying the maximal factor for extrapolation of diffusion coefficients when using the option l. For diagonal terms, this factor specifies the allowed extrapolation range as well for increasing as for decreasing the local diffusion coefficient, while for off-diagonal terms decreasing is allowed down to 0. Default value for this factor is 10. The resulting maximum ranges are given in the .diff output for those diffusion terms which use diffusion data from database (g, l, z) and where local extrapolation (l) has been specified.

The option factor finally allows for a correction of the diffusivity itself by a specified factor. If the diffusivity has been defined before as multi, this factor applies to all terms. Thus, it acts as if it were a factor on the mobility of the diffusing species. Please note that the factor also applies to diffusion data specified by d and f.

If any of the diffusion contributions specified by the user is making use of mobility data included in the .GES5 file (g, l, z), an update interval for these data from the .GES5 file (in seconds) has to be specified. Small intervals typically lead to a more exact simulation of the diffusion processes but increase simulation time, especially if local extrapolation is used. The interval can be either specified as a constant value or be read from a file as time-dependent.

Furthermore, in case of any z specifier having been used, the number of diffusion segments in z-direction has to be given.

Example 1

Diffusion data

# Diffusion
# =========
# ["Terse Mode": Each line starts with component number and phase number]
# Options:   diagonal|diagonal_dilute [x]   multi|multi_plus [y(1..k)]
#  x: one of the characters "n", "d", "g", "l", "z", "i", "I", or "f"
#  y: chain of "n", "d", "g", "l", "z", or "f" (for each component)
#  default: "g"  resp. "gggg..."
#  Rem: "n":no diffusion, "d": input, "f": T-dep. from file
#       "i":infinite, "I": infinite in each grain
#       from database: "g": global, "l": local, "z" global z-segmented
# Extra line option: [+b] for grain-boundary diffusion
# Extra line option (prefactor on time step): cushion <0-1>
# Extra line option: infinite_limit_[d|t] (in cm**2/s|K)
# Extra line option: maxfactor_local [real > 1.0] (default: 10.0)
# Extra line option: factor [real > 0.]
# Extra line option: dilute [real >= 0.] (default:1.0)
# Finish input of diffusion data with 'end_diffusion_data'.
# How shall diffusion of component CR in phase LIQUID be solved?
1 0 diagonal d
# Diff.-coefficient:
# Prefactor? (real) [cm**2/s]
# Activation energy? (real) [J/mol]
# How shall diffusion of component CO in phase LIQUID be solved?
multi g