Multiphase Precipitation

Kawin supports the usage of multiple phases. Nucleation and growth rate are handled for each precipitate phase independently. Coupling comes from the mass balance where all precipitates contribute to the overall mass changes in the system.

In the Al-Mg-Si system, several phases can form including: $ \beta' $, $ \beta" $, B', U1 and U2. To model precipitation of these phases, they must be defined in the .tdb file, the Thermodynamics module and the PrecipitateModel module.

When defining the thermodynamics module, the first phase in the list of phases will be the parent phase.

1  from kawin.thermo import MulticomponentThermodynamics
2  
3  phases = ['FCC_A1', 'MGSI_B_P', 'MG5SI6_B_DP', 'B_PRIME_L', 'U1_PHASE', 'U2_PHASE']
4  therm = MulticomponentThermodynamics('AlMgSi.tdb', ['AL', 'MG', 'SI'], phases)

Model inputs

Setting up parameters for the parent phase and overall system is the same as for single phase systems. Here, it is just the composition (Al-0.72Mg-0.57Si in mol. %), molar volume ($1e$-$5\text{ }m^3/mol$).

The temperature will be divided into two stages: a 16 hour temper at $175\text{ }^oC$, followed by a 1 hour ramp up to $250 ^oC$. To do this, there needs to be three time designations: $175\text{ }^oC$ at 0 hours, $175\text{ }^oC$ at 16 hours and $250\text{ }^oC$ at 17 hours. The temperature can be plotted to show the profile over time.

 5  import numpy as np
 6  import matplotlib.pyplot as plt
 7  
 8  from kawin.precipitation.PrecipitationParameters import TemperatureParameters
 9  
10  lowTemp = 175+273.15
11  highTemp = 250+273.15
12  temperature = TemperatureParameters([0, 16, 17], [lowTemp, lowTemp, highTemp])
13  
14  time = np.linspace(0, 25*3600, 1000)
15  plt.plot(time/3600, temperature(time))
16  plt.xlim([0, 25])
17  plt.ylim([400, 550])
18  plt.xlabel('Time (hr)')
19  plt.ylabel('Temperature (K)')
20  plt.show()

Setting parameters for each precipitate phase is similar to single phase systems except that the phase has to be defined when inputting parameters.

21  from kawin.precipitation import MatrixParameters, PrecipitateParameters
22  
23  matrix = MatrixParameters(['MG', 'SI'])
24  matrix.initComposition = [0.0072, 0.0057]
25  matrix.volume.setVolume(1e-5, 'VM', 4)
26  
27  gamma = {
28      'MGSI_B_P': 0.18,
29      'MG5SI6_B_DP': 0.084,
30      'B_PRIME_L': 0.18,
31      'U1_PHASE': 0.18,
32      'U2_PHASE': 0.18
33          }
34  
35  precipitates = []
36  for p in phases[1:]:
37      params = PrecipitateParameters(p)
38      params.gamma = gamma[p]
39      params.volume.setVolume(1e-5, 'VM', 4)
40      params.nucleation.setNucleationType('bulk')
41      precipitates.append(params)

Solving the model

As with single precipitate phase systems, running the model is exactly the same.

kawin currently implements two iterative methods for solving a model: Explicit euler and 4th order Runga Kutta. The Runga Kutta method is used by default, but we can input a different iterative method when solving. Here, we’ll use explicit euler to have the model solve a bit faster.

42  from kawin.precipitation import PrecipitateModel
43  from kawin.solver import explicitEulerIterator
44  
45  model = PrecipitateModel(matrix, precipitates, therm, temperature)
46  model.solve(25*3600, iterator=explicitEulerIterator, verbose=True, vIt=10000)
N	Time (s)	Sim Time (s)	Temperature (K)	MG	SI	
0	0.0e+00		0.0		448		0.7200	0.5700	

	Phase	Prec Density (#/m3)	Volume Frac	Avg Radius (m)	Driving Force (J/mol)
	MGSI_B_P	0.000e+00		0.0000		0.0000e+00	1.2936e+04
	MG5SI6_B_DP	0.000e+00		0.0000		0.0000e+00	6.4822e+03
	B_PRIME_L	0.000e+00		0.0000		0.0000e+00	8.0257e+03
	U1_PHASE	0.000e+00		0.0000		0.0000e+00	7.5301e+03
	U2_PHASE	0.000e+00		0.0000		0.0000e+00	7.1719e+03

N	Time (s)	Sim Time (s)	Temperature (K)	MG	SI	
10000	6.1e+04		191.8		523		0.0619	0.2062	

	Phase	Prec Density (#/m3)	Volume Frac	Avg Radius (m)	Driving Force (J/mol)
	MGSI_B_P	2.057e+22		1.0247		4.8778e-09	7.3752e+02
	MG5SI6_B_DP	0.000e+00		0.0000		0.0000e+00	-4.5912e+03
	B_PRIME_L	1.455e+10		0.0000		1.1925e-09	-1.8925e+03
	U1_PHASE	0.000e+00		0.0000		0.0000e+00	1.2771e+03
	U2_PHASE	0.000e+00		0.0000		0.0000e+00	-3.9105e+02

N	Time (s)	Sim Time (s)	Temperature (K)	MG	SI	
16265	9.0e+04		286.3		523		0.0566	0.2032	

	Phase	Prec Density (#/m3)	Volume Frac	Avg Radius (m)	Driving Force (J/mol)
	MGSI_B_P	4.577e+21		1.0328		7.6641e-09	4.6486e+02
	MG5SI6_B_DP	0.000e+00		0.0000		0.0000e+00	-4.8022e+03
	B_PRIME_L	0.000e+00		0.0000		0.0000e+00	-2.0999e+03
	U1_PHASE	0.000e+00		0.0000		0.0000e+00	1.1744e+03
	U2_PHASE	0.000e+00		0.0000		0.0000e+00	-5.4154e+02


Plotting

Plotting is also the same as with single phase systems. The major difference is each phase will be plotted for the radius, volume fraction, precipitate density, nucleation rate and particle size distribution. In addition, the total amount of some variables, such as the precipitate density and volume fraction, can be plotted.

47  %matplotlib inline
48  import matplotlib.pyplot as plt
49  from kawin.precipitation.Plot import plotPrecipitateDensity, plotVolumeFraction, plotAverageRadius, plotComposition
50  
51  fig, axes = plt.subplots(2, 2, figsize=(10, 8))
52  
53  phasesPlusTotal = list(model.phases) + ['Total']
54  
55  plotPrecipitateDensity(model, ax=axes[0,0], timeUnits='h', phases=phasesPlusTotal, label={'Total': 'Total'}, color={'Total': 'k'}, linestyle={'Total': (0,(5,5))})
56  axes[0,0].set_ylim([1e5, 1e25])
57  axes[0,0].set_xscale('linear')
58  axes[0,0].set_yscale('log')
59  
60  plotVolumeFraction(model, ax=axes[0,1], timeUnits='h', phases=phasesPlusTotal, label={'Total': 'Total'}, color={'Total': 'k'}, linestyle={'Total': (0,(5,5))})
61  axes[0,1].set_xscale('linear')
62  
63  plotAverageRadius(model, ax=axes[1,0], timeUnits='h')
64  axes[1,0].set_xscale('linear')
65  
66  plotVolumeFraction(model, ax=axes[1,1], timeUnits='h')
67  axes[1,1].set_xscale('linear')
68  
69  fig.tight_layout()

References

  1. E. Povoden-Karadeniz et al, “Calphad modeling of metastable phases in the Al-Mg-Si system” Calphad 43 (2013) p. 94
  2. Q. Du et al, “Modeling over-ageing in Al-Mg-Si alloys by a multi-phase Calphad-coupled Kampmann-Wagner Numerical model” Acta Materialia 122 (2017) p. 178