Since this is a ternary, the MC code to use is memc2 which needs as an input the following files:
clusters.out : describes the clusters (usually previously generated by mmaps)
- eci.out : provides the ECI (usually previously generated by mmaps). Could be replaced by
- teci.out if vibrational effects are to be included.
- gs_str.out : a list of ground states (usually previously generated by mmaps).
- lat.in : description of the lattice.
lat.in is usually the same as was given to mmaps, except that, for efficiency reasons, the simulation cell must be "simple supercell" of the cell provided in lat.in
For single-phase calculations (as for a phase diagram), you don’t need to worry about that - the code will "do the right thing". But for interfaces, you need to be careful to prevent the code from generating excessively large supercells to meet this requirement.
For instance, if your primive cell is fcc:
3.1 3.1 3.1 90 90 90
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0
0 0 0 A,B,C
and you want to study a (100) interface with a simulation cell that is a parallelipiped along the cartesian axes, you would need to use a non-primitive cell as the lat.in:
3.1 3.1 3.1 90 90 90
1 0 0
0 1 0
0 0 1
0 0 0 A,B,C
0 0.5 0.5 A,B,C
0.5 0 0.5 A,B,C
0.5 0.5 0 A,B,C
- initstr.in : the initial configuration of your interface (this needs to be indicated on the command line -is=initstr.in ). For instance:
3.1 3.1 3.1 90 90 90
1 0 0
0 1 0
0 0 8
0 0 0 A
0 0.5 0.5 B
0.5 0 0.5 B
0.5 0.5 0 B
...
0 0 4 A
0 0.5 4.5 C
0.5 0 4.5 C
0.5 0.5 4 C
...
(for conciseness I have omitted most the 118*4=32 lines of configurations). You will likely need a bigger cell than this, even along x and y!
-
conccons.in : this file is optional for phase diagram calculations, but for interfaces, you need to impose one compositional constraint to stabilize the interface position, e.g., this write could be
1.0B -1.0C = 0
-
control.in : sets the temperature and chemical potentials (the later are irrelevant under the composition constraint above), e.g.:
300 0 0 0
300 0 0 0 10
1000 0 0 0 8
this will go from 300K to 1000K in steps of 100K (with the -il option on). The second line is just a dummy grid so that you get 10 observation points per temperature.
Now, the command line:
memc2 -keV -is=initstr.in -il -er=1 -eq=1000 -n=1000 -opss=snapshot0000.out
A few comments on the options
-keV : always put this for energies in eV and T in K
-is : the initial configuration of your interface
-il : (optional but convenient - see manual)
-er : here any small nonzero number will work, the cell size is determined by your initstr.in file
-eq and -n : need to increase and check convergence.
-opss : output periodic snapshots (at each new value of the grid specified by control.in ).
The above gives you the total energy as a function of temperature in mc.out .
To get the interfacial excess energy, you need to run for various supercell sizes, fit the energy versus cell length (perpendicular to the interface) with
a linear function and then extrapolate the energy to zero cell length. Remember there are TWO interfaces in your simulation.
To get the interfacial excess free energy, you need to use thermodynamic integration (more on this when you get there!).
A useful reference to cite when performing interfacial calculations is: