Questions about principle of cluster expansion and fitting of CE in icet

I am currently learning to fit a cluster expansion (CE) using icet, but I am confused by some of the basic concepts, especially the meaning of multiplicity and how clusters are represented. I would really appreciate it if someone could clarify these concepts by anwser me some question for following examples. I will use simple cubic as primitive cell created by ase.build.bulk('Au', 'sc', a=4.0):

Example 1: binary system (Au–Pd)

from ase.build import bulk
from icet import ClusterSpace

primitive_structure = bulk('Au', 'sc', a=4.0)
cutoffs = [4.0]
cluster_space = ClusterSpace(
    structure=primitive_structure,
    cutoffs=cutoffs,
    chemical_symbols=['Au', 'Pd']
)

print(cluster_space)
print()
print("Orbital information:")
print(cluster_space.orbital_list[1])

Output:

====================================== Cluster Space ======================================
 space group                            : Pm-3m (221)
 chemical species                       : ['Au', 'Pd'] (sublattice A)
 cutoffs                                : 4.0000
 total number of parameters             : 3
 number of parameters by order          : 0= 1  1= 1  2= 1
 fractional_position_tolerance          : 2e-06
 position_tolerance                     : 1e-05
 symprec                                : 1e-05
-------------------------------------------------------------------------------------------
index | order |  radius  | multiplicity | orbit_index | multicomponent_vector | sublattices
-------------------------------------------------------------------------------------------
   0  |   0   |   0.0000 |        1     |      -1     |           .           |      .     
   1  |   1   |   0.0000 |        1     |       0     |          [0]          |      A     
   2  |   2   |   2.0000 |        3     |       1     |        [0, 0]         |     A-A    

Order: 2
Multiplicity: 3
Radius: 2.0000
Representative cluster:
        Site: 0,        Offset:   0  0  0,      Position:   0.00   0.00   0.00
        Site: 0,        Offset:  -1  0  0,      Position:  -4.00   0.00   0.00

We see that:

  • Only one cluster (index=1) belongs to cluster_space.orbital_list[0].
  • The multiplicity of cluster_space.orbital_list[1] is 3.

Questions (binary case):

  • For orbital_list[0]: Why is there only one point cluster? Since there are two chemical species (Au, Pd), I expected two point clusters.
  • For orbital_list[1]: Only index=2 belongs here. I thought there should be three types of pair clusters (Au–Au, Au–Pd, Pd–Pd), but the output only shows one with multicomponent_vector = [0, 0]. Why are [0, 1] and [1, 1] not included?

Example 2: ternary system (Au–Pd–Cu)

from ase.build import bulk
from icet import ClusterSpace

primitive_structure = bulk('Au', 'sc', a=4.0)
cutoffs = [4.0]
cluster_space = ClusterSpace(
    structure=primitive_structure,
    cutoffs=cutoffs,
    chemical_symbols=['Au', 'Pd', 'Cu']
)
print(cluster_space)
print()
print("Orbital information:")
print(cluster_space.orbital_list[1])

Output:

====================================== Cluster Space ======================================
 space group                            : Pm-3m (221)
 chemical species                       : ['Au', 'Cu', 'Pd'] (sublattice A)
 cutoffs                                : 4.0000
 total number of parameters             : 6
 number of parameters by order          : 0= 1  1= 2  2= 3
...
index | order |  radius  | multiplicity | orbit_index | multicomponent_vector | sublattices
-------------------------------------------------------------------------------------------
   0  |   0   |   0.0000 |        1     |      -1     |           .           |      .     
   1  |   1   |   0.0000 |        1     |       0     |          [0]          |      A     
   2  |   1   |   0.0000 |        1     |       0     |          [1]          |      A     
   3  |   2   |   2.0000 |        3     |       1     |        [0, 0]         |     A-A    
   4  |   2   |   2.0000 |        6     |       1     |        [0, 1]         |     A-A    
   5  |   2   |   2.0000 |        3     |       1     |        [1, 1]         |     A-A    

Order: 2
Multiplicity: 3
Radius: 2.0000
Representative cluster:
        Site: 0,        Offset:   0  0  0,      Position:   0.00   0.00   0.00
        Site: 0,        Offset:  -1  0  0,      Position:  -4.00   0.00   0.00

We see that:

  • Two clusters (index=1, 2) belong to cluster_space.orbital_list[0].
  • The multiplicity of cluster_space.orbital_list[1] is 3.

Questions (ternary case):

  • Why does the binary system only have one point cluster, while the ternary system has two? Shouldn’t the number of point clusters equal the number of chemical symbols?
  • Why are there three clusters (index=3, 4, 5) belonging to orbital_list[1]? In the binary case there was only one. Where do these additional clusters come from?
  • Why does the cluster with index=4 have multiplicity = 6, while the others have multiplicity = 3?

Any explanation (especially with physical intuition behind multiplicity and multicomponent_vector) would help me understand CE and use icet more effectively for fitting.

Thanks in advance!

Its because it is redundant, consider if we only have point clusters, then energy would be
E=E_0 + c_Au * E_Au + c_Pd * E_Pd
Where c is the concentrations and E_Au would be the “point cluster energy” for Au atoms.
But since c_Pd = 1-c_Au you can rewrite this to something like E=E_0 + c_Au *E_Au, so the two is equivalent its just in your expression you would have 3 parameters whereas you only need two.

Same as above you, including cluster energies for all the different pairs is redundant, it simplifies to one “effective” cluster interaction for this pair.

Same as above, you have three components but since concentrations have to sum to 1 it is enough with two effective cluster interactions to describe the point clusters.

The details why it comes out as 3 I cant answer. But I think similar to the binary case where you have three possible decorations (AA, AB, BB) which reduces to one effective cluster interaction, here in ternary case you have nine (?) possible decorations which reduces to 3 effective cluster interactions.

Multiplicities varies depending on the crystal structure. If you have a simple cubic lattice, each atom has six nearest neighbors (I think multiplicity here is defined as 6/2 → 3 in order to avoid double counting). Then you’d have 12 second nearest neighbors and 8 third nearest neighbors and so on, hence multiplicity changes.

1 Like

Thank you very much for your answer. It was very helpful and provided me with exactly the information I needed. :grinning: