I have a perfect supercell structure Ni fcc. And I would like to dope another element O or N with a ratio of O:Ni=8:100 to the supercell of 3x3x3 and find the most stable ordering structure. The number of possible configurations is extremely large. I would like to ask if you know any code to generate all possible cases and remove of similar cases?


I will give a secondary answer that does not involve USPEX. Realistically, picking about 8 atoms out of 108 requires you to test 352,025,629,371 combinations. This is obviously too much to handle. You can try one of two approaches.

  1. Randomly sample the entire space, probably not that difficult to do but no promises you get a good result. ASE can help you do this fairly easily and this can be run in a highly parallel manner. With so many combinations to pick from, you will be unlikely to generate two of the same combination (although with translations and rotations etc you will probably generate some). If we assume no symmetry is possible, picking 10,000 random cells you will only have a 0.014201% chance of generating two of the same cells.

  2. Go from 1:107 ratio to 2:106 to 3:105, etc. You can actually brute force this type of solution relatively quickly with modern hardware and reasonable calculation parameters, just by only keeping the top 5% of structures to add an additional dopant. This type of solution is heavily helped by symmetry finding. Here are two methods of this.

    • Niggli reduce each cell, compare if they align the same by element and position (assuming unrelaxed cell)
    • Look at the coordination shell of the dopants. See if all dopants see a similar coordination shell. For example, if the oxygen is surrounded by Ni on all sides. I have actually developed a code which can do this for multiple coordination shells. The documentation is not so good at the moment but this will be fixed eventually hopefully. Currently its designed to handle surfaces, not bulk, but this can be changed easily. For now you may want to look at our paper to understand exactly whats going on.
    • Look into full python packages capable of doing this, pymatgen and ase both have some functionality for this.

You have too large of a search space for this to be exhaustive though no matter what you do. Consider using a different approach for making supercells that allows you to have less atoms but still keep them separated in space. You may be able to do a 4:50 cell for example instead.

I also won't explore it in this answer, but there are lots of genetic algorithms for this sort of thing as well, but I have never used them. I will link an example from ASE.

  • $\begingroup$ Your code could be helpful in many other situations as well. Interesting developmentđź‘Ť $\endgroup$ Oct 19 '20 at 14:53
  • 1
    $\begingroup$ In a world where you go down that approach, feel free to contact us directly and maybe we can give you some assistance (although my time tends to be limited). We would love to see people actually using it. Edit: Just noticed its not you asking the question, but feel free to explore it someday anyways if you want. :) $\endgroup$ Oct 19 '20 at 14:54
  • $\begingroup$ Sure, will do so. In the past, I worked on what is now an abandoned idea which required me to find triangular nearest neighbour clusters of a specific atom type in a FCC multiple atom alloy. Finding them itself was tricky, let alone realise which final configuration would turn out to be the most stable. $\endgroup$ Oct 19 '20 at 15:00
  • $\begingroup$ That sounds interesting. I take a look at a scripts in an example of "Symmetric duplicate identification" from wiki.fysik.dtu.dk/ase/tutorials/ga/ga_convex_hull.html. But I'm still unclear. For example, I have files POSCAR_1 and POSCAR_2, then how can I determine POSCAR_2 is duplicate of POSCAR_1? Where can I import file POSCAR_1 and POSCAR_2? $\endgroup$
    – Binh Thien
    Oct 19 '20 at 16:20
  • $\begingroup$ Determining if two cells are identical is a whole extra task, you have to consider if its worth trying to define if two are identical. In this case, it may not be since its unlikely to generate duplicates very easily. $\endgroup$ Oct 19 '20 at 19:09

What you intend to do is crystal structure prediction (CSP). Just yesterday, I got to know about a crystal structure prediction blind-test that the Cambridge Crystallographic Data Centre organises through this answer by one of my favourite people here on this stack exchange.

Personally, I have some experience using USPEX. CSP is simply a global optimization problem in terms of the potential energy surface of the material. USPEX uses fingerprinting to make the search faster by eliminating similar structures. Many other interesting features in the code help make the search more robust and efficient.

About your question, did you mean a ratio of N,O:Ni = $8:100$? And why is there a necessity for a 3x3x3 supercell?

  • $\begingroup$ Yes, I means N or O:Ni=8:100. I need supercell because I need to to create doped structure of that ratio. If I use unit cell (4 atoms), I can not make any with ratio. Also, I knew USPEX, but I don't know how to replace dopants to host structures. I think USPEX do not have this feature. $\endgroup$
    – Binh Thien
    Oct 19 '20 at 13:20
  • 1
    $\begingroup$ Procedure: Make one configuration of the 3x3x3 supercell with the required ratio. Turn on only one variation operator - atom permutation. $\endgroup$ Oct 19 '20 at 13:26

ATAT (Alloy Theoretic Automated Toolkit)

ATAT is a software is specialized in solving such issues.

It has a module to generate Special Quasirandom Structures (SQS), used to simulate disordered solid solutions as your case.

The ATAT site is here. The user guide is here. Tutorials are here and here.


SOD (Site-Occupation Disorder code)

I found that SOD code can help to do it well.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.