Diffusion¶
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 (phasecomponent 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 ofn
,d
,g
,l
,z
,i
,I
, orf
has to be specified afterdiagonal
.Example
*diagonal i
diagonal_dilute
: The line of the diffusion matrix (otherwise specified bymulti
ormulti_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 optiondilute_reference
, other elements may be chosen instead of the matrix. This leads to always positive diagonal terms while all the offdiagonal 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 optiondilute
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 optionsmulti
ormulti_plus
with specifiersg
,l
orz
. 
multi
: the flux of the given element is calculated using the gradients of all elements (FickOnsager). A string of N characters ofn
,d
,g
,l
,z
, orf
for each dissolved element has to be specified aftermulti
. If no characters are specified at all,g
is assumed for all elements.Example
multi ggnggg

multi_plus
: same asmulti
with the difference that all offdiagonal 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 offdiagonal coefficients on the flux component is taken into account automatically.> **Example** ``` multi_plus glgggg ```

d
: This specifier indicates that the corresponding term (diagonal or offdiagonal term of the diffusion matrix) will be used and specified directly by the user. Ifd
is selected, the preexponential 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). Usingi
withmulti
makes no sense and therefore is not allowed. diagonal i corresponds to the formerinfinite
in the old notation.Important: In
i
mode, no distinction between touching and nontouching 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 phasefield timestep.I
is only allowed withdiagonal
and corresponds to the formerinfinite_restricted
(old notation). 
g
: The diffusion coefficients will be calculated by ThermoCalc™ (via the TQ interface) using diffusion data from database. This is only possible if a GESfile 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 asg
, 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. Usingl
, diffusion of the diagonal term is described more precisely compared to theg
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 Nibase alloys. Furthermore, the diffusion time step must be reduced correspondingly, leading to longer simulation times. Usemaxfactor_local
to control extrapolation limits (see below for more details). 
z
: Same asg
, but instead of one global value for the diffusion coefficient a userspecified number of equidistant segments is created along the zdirection 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 temperaturedependent 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 temperaturedependent 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 timestepping 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 offdiagonal 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 timedependent.
Furthermore, in case of any z
specifier having been used, the number of diffusion segments in zdirection has to be given.
Example 1¶
Diffusion data
... # Diffusion # ========= # ["Terse Mode": Each line starts with component number and phase number] # Options: diagonaldiagonal_dilute [x] multimulti_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": Tdep. from file # "i":infinite, "I": infinite in each grain # from database: "g": global, "l": local, "z" global zsegmented # Extra line option: [+b] for grainboundary diffusion # Extra line option (prefactor on time step): cushion <01> # Extra line option: infinite_limit_[dt] (in cm**2/sK) # 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] 2.00000E04 # Activation energy? (real) [J/mol] 0.0000 # How shall diffusion of component CO in phase LIQUID be solved? multi g ...