Precipitation & growth of intermetallic precipitates

solid-solid phase transformations, influence of stresses and strains
Post Reply
Carsten Drouven
Posts: 2
Joined: Mon Nov 06, 2017 5:10 pm
anti_bot: 333

Precipitation & growth of intermetallic precipitates

Post by Carsten Drouven » Tue Feb 06, 2018 10:55 am

Dear Bernd,

I would like to simulate the precipitation of the kappa phase (Fe3AlC) in austenite and B2-phase (NiAl/FeAl) in ferrite in a Fe-Al-Mn-Ni-C duplex steel. I tried to simplify the simulation as far as possible and also varied the cell dimension (0.1um - 0.001um) under consideration of interface width. I've also tried to define the intermetallics as stoichiometric phases keeping different elements as stoichiometric or considering a solublility with no success.
Other modifications I tried so far:
- variation of phase interaction (IF energy/mobility)
- diff-behavior diagonal vs. multi
- redistribution behavior of elements (currently the most senseful is set - in my opinion)
- global vs. local database

I've noted that TC apparently has no diff-coefficient for carbon in kappa, consequently I had to neglect this.

From the error messages I can deduce that apparently the interface FCC/Kappa is causing trouble, but I found no way to troubleshoot this issue.

To start with, I would like to simulate the precipitation of kappa in austenite at 700°C in a Fe-10Al-7Mn-6Ni-1.2C alloy. I defined two grains, a second phase as kappa, which I incorporated from the TCFe8 database. I had to add Mn and Ni to the chemical composition in order to stabilize the FCC phase. Attatched you'll find one of many scripts as an example. I would be grateful for any advice on how to get the simulation running smoothly.

Kind regards,
Carsten

# Flags and settings
# ==================
#
# Geometry
# --------
# Grid size?
# (for 2D calculations: CellsY=1, for 1D calculations: CellsX=1, CellsY=1)
# Cells in X-direction (CellsX):
100
# Cells in Y-direction (CellsY):
1
# Cells in Z-direction (CellsZ):
100
# Cell dimension (grid spacing in micrometers):
# (optionally followed by rescaling factor for the output in the form of '3/4')
0.005
#
# Flags
# -----
# Type of coupling?
# Options: phase concentration temperature temp_cyl_coord
# [stress] [stress_coupled] [flow] [flow_coarse] [dislocation]
concentration
# Type of potential?
# Options: double_obstacle multi_obstacle [fd_correction]
multi_obstacle fd_correction
# Enable one dimensional far field approximation for diffusion?
# Options: 1d_far_field 1d_far_field_EW no_1d_far_field
no_1d_far_field
# Shall an additional 1D field be defined in z direction
# for temperature coupling?
# Options: no_1d_temp 1d_temp 1d_temp_cylinder 1d_temp_polar [kin. Coeff]
# kin. Coeff: Kinetics of latent heat release (default is 0.01)
no_1d_temp
#
# Phase field data structure
# --------------------------
# Coefficient for initial dimension of field iFace
# [minimum usage] [target usage]
0.1
# Coefficient for initial dimension of field nTupel
# [minimum usage] [target usage]
0.1
#
#
# Restart options
# ===============
# Restart using old results?
# Options: new restart [reset_time | structure_only]
new
#
#
# Name of output files
# ====================
# Name of result files?
Results_Kappa/Vxx
# Overwrite files with the same name?
# Options: overwrite write_protected append
# [zipped|not_zipped|vtk]
# [unix|windows|non_native]
overwrite
#
#
# Selection of the outputs
# ========================
# [legacy|verbose|terse]
# Finish selection of outputs with 'end_of_outputs'.
terse
out_restart
out_grains
out_phases
out_fraction 1 2
tab_fractions
out_interface
out_driv_force
tab_grains
out_conc
out_conc_phase 1 | 2
out_mobility
tab_lin
tab_log 1.
# out_relin
# out_curvature
# out_velocity
# tab_vnm
# tab_grain_data
# out_temp
# tab_conc
# out_recrystall
# tab_recrystall
# out_disloc
# out_miller
# out_orientation
# tab_orientation [rotmat]
end_of_outputs
#
#
# Time input data
# ===============
# Finish input of output times (in seconds) with 'end_of_simulation'
# 'regularly-spaced' outputs can be set with 'linear_step'
# or 'logarithmic_step' and then specifying the increment
# and end value
# ('automatic_outputs' optionally followed by the number
# of outputs can be used in conjuction with 'linear_from_file')
# 'first' : additional output for first time-step
# 'end_at_temperature' : additional output and end of simulation
# at given temperature
linear_step 1.0 300
end_of_simulation
# Time-step?
# Options: fix ...[s] automatic automatic_limited
automatic_limited
# Options: constant from_file
constant
# Limits: (real) min./s, [max./s], [phase-field factor], [segregation factor]
1.E-2 1.0
# Coefficient for phase-field criterion 1.00
# Coefficient for segregation criterion 0.900
# Number of steps to adjust profiles of initially sharp interfaces [exclude_inactive]?
20
#
#
# Phase data
# ==========
# Number of distinct solid phases?
2
#
# Data for phase 1:
# -----------------
# Simulation of recrystallisation in phase 1?
# Options: recrystall no_recrystall [verbose|no_verbose]
no_recrystall
# Is phase 1 anisotrop?
# Options: isotropic anisotropic faceted antifaceted
isotropic
# Should grains of phase 1 be reduced to categories?
# Options: categorize no_categorize
no_categorize
#
# Data for phase 2:
# -----------------
# [identical phase number]
# Simulation of recrystallisation in phase 2?
# Options: recrystall no_recrystall [verbose|no_verbose]
no_recrystall
# Is phase 2 anisotrop?
# Options: isotropic anisotropic faceted antifaceted
isotropic
# Should grains of phase 2 be reduced to categories?
# Options: categorize no_categorize
no_categorize
#
# Grain input
# ===========
# Type of grain positioning?
# Options: deterministic random [deterministic_infile] from_file
deterministic
# NB: the origin of coordinate system is the bottom left-hand corner,
# all points within the simulation domain having positive coordinates.
# Number of grains at the beginning?
2
# Input data for grain number 1:
# Geometry?
# Options: round rectangular elliptic round_inverse
round
# Center x,z coordinates [micrometers], grain number 1?
0
0
# Grain radius? [micrometers]
0.35
# Shall grain 1 be stabilized or shall
# an analytical curvature description be applied?
# Options: stabilisation analytical_curvature
stabilisation
# Should the Voronoi criterion be applied?
# Options: voronoi no_voronoi
voronoi
# Phase number? (integer)
1
# Input data for grain number 2:
# Geometry?
# Options: round rectangular elliptic round_inverse
round
# Center x,z coordinates [micrometers], grain number 2?
0.5
0.5
# Grain radius? [micrometers]
0.55
# Shall grain 1 be stabilized or shall
# an analytical curvature description be applied?
# Options: stabilisation analytical_curvature
stabilisation
# Should the Voronoi criterion be applied?
# Options: voronoi no_voronoi
voronoi
# Phase number? (integer)
1
#
# Data for further nucleation
# ===========================
# Enable further nucleation?
# Options: nucleation nucleation_symm no_nucleation [verbose|no_verbose]
nucleation
# Additional output for nucleation?
# Options: out_nucleation no_out_nucleation
no_out_nucleation
#
# Number of types of seeds?
1
#
# Input for seed type 1:
# ----------------------
# Type of 'position' of the seeds?
# Options: bulk region interface triple quadruple [restrictive]
interface
# Phase of new grains (integer) [unresolved|add_to_grain]?
2
# Reference phase (integer) [min. and max. fraction (real)]?
1
# Substrate phase [2nd phase in interface]?
# (set to 1 to disable the effect of substrate curvature)
1
# maximum number of new nuclei 1?
5
# Grain radius [micrometers]?
0
# Choice of growth mode:
# Options: stabilisation analytical_curvature
stabilisation
# min. undercooling [K] (>0)?
50
# Shield effect:
# Shield time [s] [shield phase or group number] ?
1
# Shield distance [micrometers] [ nucleation distance [micrometers] ]?
0.1
# Nucleation range
# min. nucleation temperature for seed type 1 [K]
700
# max. nucleation temperature for seed type 1 [K]
1200.000
# Time between checks for nucleation? [s]
1.000
# Shall random noise be applied?
# Options: nucleation_noise no_nucleation_noise
no_nucleation_noise
#
# Max. number of simultaneous nucleations?
# ----------------------------------------
# (set to 0 for automatic)
0
#
# Shall metastable small seeds be killed?
# ---------------------------------------
# Options: kill_metastable no_kill_metastable
no_kill_metastable
#
#
# Phase interaction data
# ======================
#
# Data for phase interaction 0 / 1:
# ---------------------------------
# Simulation of interaction between phase 0 and 1?
# Options: phase_interaction no_phase_interaction
# [standard|particle_pinning[_temperature]|solute_drag]
# | [redistribution_control] or [no_junction_force|junction_force]
no_phase_interaction
#
# Data for phase interaction 0 / 2:
# ---------------------------------
# Simulation of interaction between phase 0 and 2?
# Options: phase_interaction no_phase_interaction identical phases nb
# [standard|particle_pinning[_temperature]|solute_drag]
# | [redistribution_control] or [no_junction_force|junction_force]
no_phase_interaction
#
# Data for phase interaction 1 / 1:
# ---------------------------------
# Simulation of interaction between phase 1 and 1?
# Options: phase_interaction no_phase_interaction identical phases nb
# [standard|particle_pinning[_temperature]|solute_drag]
# | [redistribution_control] or [no_junction_force|junction_force]
no_phase_interaction
#
# Data for phase interaction 1 / 2:
# ---------------------------------
# Simulation of interaction between phase 1 and 2?
# Options: phase_interaction no_phase_interaction identical phases nb
# [standard|particle_pinning[_temperature]|solute_drag]
# | [redistribution_control] or [no_junction_force|junction_force]
phase_interaction redistribution_control
# 'DeltaG' options: default
# avg ... [] max ... [J/cm**3] smooth ... [degrees] noise ... [J/cm**3]
avg 0. smooth 45
# I.e.: avg +0.00
# Type of interfacial energy definition between phases 1 and 2?
# Options: constant temp_dependent
constant
# Interfacial energy between phases 1 and 2? [J/cm**2]
# [max. value for num. interface stabilisation [J/cm**2]]
2.0000E-04
# Type of mobility definition between phases 1 and 2?
# Options: constant temp_dependent dg_dependent [fixed_minimum]
constant
# Kinetic coefficient mu between phases 1 and 2 [ min. value ] [cm**4/(Js)] ?
1.0000E-07
#
# Data for phase interaction 2 / 2:
# ---------------------------------
# Simulation of interaction between phase 2 and 2?
# Options: phase_interaction no_phase_interaction identical phases nb
# [standard|particle_pinning[_temperature]|solute_drag]
# | [redistribution_control] or [no_junction_force|junction_force]
no_phase_interaction
#
###########################################################################################
# Concentration data
# ==================
# Number of dissolved constituents? (int)
4
# Type of concentration?
# Options: atom_percent (at%)
# weight_percent (wt%)
weight_percent
#
#
# Diffusion Data
# --------------
# ["Terse Mode": Each line starts with component number and phase number]
# Options: diagonal [x] multi [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 option [+b] for grain-boundary diffusion
# Extra line option (prefactor on time step): cushion <0-1>
# Extra line option: infinite_limit [cm**2/s]
# Extra line option: maxfactor_local [real > 1.0] (default: 10.0)
# Finish input of diffusion data with 'end_diffusion_data'.
#
# How shall diffusion of component 1 in phase 0 be solved?
diagonal n
# How shall diffusion of component 1 in phase 1 be solved?
diagonal l
# How shall diffusion of component 1 in phase 2 be solved?
diagonal l
# How shall diffusion of component 2 in phase 0 be solved?
diagonal n
# How shall diffusion of component 2 in phase 1 be solved?
diagonal l
# How shall diffusion of component 2 in phase 2 be solved?
diagonal l
# How shall diffusion of component 3 in phase 0 be solved?
diagonal n
# How shall diffusion of component 3 in phase 1 be solved?
diagonal l
# How shall diffusion of component 3 in phase 2 be solved?
diagonal l
# How shall diffusion of component 4 in phase 0 be solved?
diagonal n
# How shall diffusion of component 4 in phase 1 be solved?
diagonal l
# How shall diffusion of component 4 in phase 2 be solved?
diagonal n
# How shall the interval for updating diffusion coefficients
# data be set?
# Options: constant from_file
constant
# Interval for updating diffusion coefficients data? [s]
1
###########################################################################################
# Phase diagram - input data
# ==========================
#
# List of phases and components which are stoichiometric:
# phase and component(s) numbers
# List of concentration limits (at%):
# <Limits>, phase number and component number
# List for ternary extrapolation (2 elements + main comp.):
# <interaction>, component 1, component 2
# Switches: <stoich_enhanced_{on|off}> <solubility_{on|off}>
# End with 'no_more_stoichio' or 'no_stoichio'
2 1 4
no_more_stoichio
# In phase 3 components 1 and 4 are defined stoichiometric.
#
# Is a thermodynamic database to be used?
# Options: database database_verbose no_database
database
#
# Name of Thermo-Calc *.GES5 file without extension?
GES_Files/FeCMnAlNi
# Which global relinearisation mode shall be used?
# Options: manual from_file none
manual 1
# Input of the phase diagram of phase 1 and phase 2:
# --------------------------------------------------
# Which phase diagram is to be used?
# Options: database [local|global|globalF][start_value_{1|2}] linear linearTQ
database local linear TQ
# Relinearisation mode for interface 1 / 2
# Options: automatic manual from_file none
manual 1
# Please specify the redistribution behaviour of each component:
# Format: forward [backward]
# Options: nple para paratq normal [mob_corr] atc [mob_corr] [verbose]
# Component 1
# Please specify the redistribution behaviour of each component:
# Format: forward [backward]
# Options: nple para paratq normal [mob_corr] atc [mob_corr] [verbose]
# Component 1
nple
# Component 2
nple
# Component 3
nple
# Component 4
normal mob_corr
#
# Index relations between TC and MICRESS
# --------------------------------------
# The database contains the following components:
# 1: AL
# 2: C
# 3: FE
# 4: MN
# 5: NI
# Specify relation between component indices Micress -> TC!
# The main component has in MICRESS the index 0
# Thermo-Calc index of (MICRESS) component 0?
3
# Thermo-Calc index of (MICRESS) component 1?
1
# Thermo-Calc index of (MICRESS) component 2?
4
# Thermo-Calc index of (MICRESS) component 3?
5
# Thermo-Calc index of (MICRESS) component 4?
2
# 0 -> FE
# 1 -> AL
# 2 -> MN
# 3 -> NI
# 4 -> C
# The database contains 5 phases:
# 1: LIQUID
# 2: B2_VACANCY
# 3: BCC_A2
# 4: FCC_A1
# 5: KAPPA
# Specify relation between phase indices Micress -> TC!
# The matrix phase has in MICRESS the index 0
# Thermo-Calc index of the (MICRESS) phase 1?
4
# Thermo-Calc index of the (MICRESS) phase 2?
5
# 1 -> FCC_A1
# 2 -> KAPPA
#
# Molar volume of (MICRESS) phase 1 (FCC_A1)? [cm**3/mol]
7.70 #results from TC at 700°C
# Molar volume of (MICRESS) phase 2 (KAPPA)? [cm**3/mol]
7.46 #results from TC at 700°C
# Temperature at which the initial equilibrium
# will be calculated? [K]
1473
###########################################################################################
# Initial concentrations
# ======================
# How shall initial concentrations be set?
# Options: input equilibrium from_file [phase number]
equilibrium 1
# Initial concentration of component 1 in phase 1 ? [wt%]
10
# Initial concentration of component 2 in phase 1 ? [wt%]
7
# Initial concentration of component 3 in phase 1 ? [wt%]
6
# Initial concentration of component 4 in phase 1 ? [wt%]
1.2
#
#
# Parameters for latent heat and 1D temperature field
# ===================================================
# Simulate release of latent heat?
# Options: lat_heat lat_heat_3d[matrix phase] no_lat_heat no_lat_heat_dsc
no_lat_heat
#
#
# Boundary conditions
# ===================
# Type of temperature trend?
# Options: linear linear_from_file profiles_from_file
linear
# Number of connecting points? (integer)
0
# Initial temperature at the bottom? (real) [K]
973
# Temperature gradient in z-direction? [K/cm]
0.0000
# Cooling rate? [K/s]
0.0000
# Moving-frame system in z-direction?
# Options: moving_frame no_moving_frame
no_moving_frame
#
# Boundary conditions for phase field in each direction
# Options: i (insulation) s (symmetric) p (periodic/wrap-around)
# g (gradient) f (fixed) w (wetting)
# Sequence: W E (S N, if 3D) B T borders
iiii
#
# Boundary conditions for concentration field in each direction
# Options: i (insulation) s (symmetric) p (periodic/wrap-around) g (gradient) f (fixed)
# Sequence: W E (S N, if 3D) B T borders
iiii
# Unit-cell model symmetric with respect to the x/y diagonal plane?
# Options: unit_cell_symm no_unit_cell_symm
no_unit_cell_symm
#
#
# Other numerical parameters
# ==========================
# Phase minimum?
1.00E-04
# Interface thickness (in cells)?
3
#
#
#
# Number of parallel threads?
# ===========================
4

Bernd
Posts: 1504
Joined: Mon Jun 23, 2008 9:29 pm

Re: Precipitation & growth of intermetallic precipitates

Post by Bernd » Tue Feb 06, 2018 10:24 pm

Dear Carsten,

Welcome to the MICRESS Forum!

There are some parameter combinations which make it very difficult for the Kappa phase to grow, at least with the current parameter set:

1.) With the given grid resolution of 0.005 µm (which essentially is close to atomic distances!), MICRESS as a mean-field model may calculate an enormous curvature undercooling. This is especially critical when you furthermore use a quite high surface energy of 2E-4 J/cm2 for the 1/2 interface. When the "small" seed starts growing, at some point it has to exceed the size of one grid cell (in the "stabilisation" mode curvature is reduced while it is smaller, but there is a transition to normal "phase-field" curvature once the phase fraction in this first cell approaches to 1). The thermodynamic undercooling must exceed this curvature undercooling, otherwise the seed cannot grow. The exact value of this "critical" curvature undercooling, which corresponds to the size of one grid cell, is printed on screen and in the .log output (see e.g. here) when nucleation is checked for the first time (after 1 s in your case). You will probably find an amazingly high value...
Of course, you can avoid the problem by using a coarser grid and/or a smaller interfacial energy. However, if you want or need to stick to these values, you should use the "analytical_curvature" model for nucleation: Then, curvature is calculated analytically, and you can specify an extra "critical" radius which allows you to define curvature and which can be much bigger than the grid size.

2.) As a redistribution model, you use "nple" for all elements but carbon. This is what we typically do for gamma-alpha transformations in steels. However, this model assumes that all these elements diffuse slowly and are effectively overrun at the cost of a certain driving force offset. However, this means that the growing phase assumes the same composition for these elements as the overgrown phase. This is easily possible for gamma-alpha transformations because both phases have high solubility for all elements. However the Kappa phase does not have at all any solubility for Mn or Ni, and for Fe an Al the solubility range also may be restricted. Therefore, to avoid a numerical disaster, you should select "normal mob_corr" for all of them (diffusion of all elements is limiting for the transformation).
This fact may lead you to the conclusion that C (as it is much faster) is not limiting at all, so you could perhaps use a infinite diffusion approximation (diagonal i) for performance reasons (diffusion of C otherwise will take extremely long because the solver needs a very small diffusion time step). You should try that once the simulation is running without problems (apart from being slow)...
When using mobility correction ("mob_corr") the specified value for the interface mobility only has to be high enough - it will be automatically reduced to a smaller value which corresponds to diffusion limited growth. "mob_corr" is recommended if you use at least version 6.3 of MICRESS.

3.) As Kappa has strongly limited solubility ranges, the safest way is to define it as stoichiometric for all elements. For Mn and Ni MICRESS will do that automatically, but there is no problem if you do it also manually. I have no own experiences with kappa in such steels. But once the simulation runs properly, you may check whether you can remove the stoichiometric condition for Al or C. The advantage would be a somewhat better extrapolation behavior (i.e. you need less frequent relinearisation).

4.) In the time input data you set the time-step to "automatic_limited" and the lower limit to 0.01 s. In a first step, you should set the limit to very small values to be sure that you do not cut the automatic time step (cutting would reduce the interface mobility in order to keep numerical stability). Cutting small time steps is a tool for improving performance which you should not do before you know the reasonable time step range (see also here).

5.) Using multicomponent diffusion ("multi gggg) for fcc should be safe and without much more cost. Because of the absence of strong concentration and temperature gradients along the 1/2 interface, global relinearisation ("global") should be fine.

Bernd

Carsten Drouven
Posts: 2
Joined: Mon Nov 06, 2017 5:10 pm
anti_bot: 333

Re: Precipitation & growth of intermetallic precipitates

Post by Carsten Drouven » Fri Feb 09, 2018 8:12 am

Dear Bernd,

thank you very much for your helpful input. I've adjusted my scripts accordingly and they seem to run well.

I do have one follow-up questions. The topic of intermetallic precipitates is commonly related to size ranging from 5 nm to 300 nm. In your opinion, what is the smallest possible grid size that can be implemented in MICRESS? Currently, I'm running simulations with 10 nm and I'm considering to reduce it further, but I'm not sure what a senseful lower limit would be.

I'm looking forward to your reply.

Kind regards,
Carsten

Bernd
Posts: 1504
Joined: Mon Jun 23, 2008 9:29 pm

Re: Precipitation & growth of intermetallic precipitates

Post by Bernd » Fri Feb 09, 2018 12:17 pm

Dear Carsten,

This is a difficult question for which I have no clear answer which would be based on empirical evidence. MICRESS does not "know" that Materials are breaking down to discrete atoms when resolution is increased. In so far, it will consistently scale down without limits. However, the question is from which size on a particle made up of atoms will behave like a homogeneous body assumed to consist of a given phase with a given concentration, and especially having a classical interfacial energy.

I remember estimations that for being close enough to bulk thermodynamics, you need to have at least 1000 atoms, which would be 10 in each direction. Atomic distances are between 1 and 2 A, so one could estimate a limit at a particle size of approximately 1-2 nm. To resolve such a particle in MICRESS, you would need some grid cells, so it could make sense to go even below 1 nm resolution.

However, I think the error of curvature undercooling starts much earlier. If you don't assume some correction for interfacial energy, you could end up with huge curvature undercoolings which are certainly not correct. But if you decrease interfacial energy below the physically correct value (at meso-scale) to correct for the discrete nature of matter, you could go down to 1 nm resolution in MICRESS without fundamental problems.

Bernd

Post Reply