Is it possible to create solid solution like Cd0.5Zn0.5S with pymatgen?

I am trying to create a solid solution supercell(Cd0.5Zn0.5S), but it is gonna be too much work if I pick the atoms and do replacement randomly by hand, is it possible to do this job with pymatgen?

You should be able to do it with the SubstitutionTransformation from pymatgen.transformations.standard_transformations. The docs report that it can be “Overloaded to accept sp_and_occu dictionary E.g. {“Si: {“Ge”:0.75, “C”:0.25}}, which substitutes a single species with multiple species to generate a disordered structure.”

In the ATAT software, it provides the mcsqs code to generate quasi-random structures (SQS), for a system that includes 100 atoms or so, it would take weeks to get the good random structure, does pymatgen use the same method? Or pymatgen just generate ONE random structure?

Hi @Alma. If you directly substitute a structure as @Steven_Hartman recommended, this will create a partially occupied “disordered” structure, but you then have to apply an additional transformation to create a set of ordered supercell structures. There are several methods to create ordered supercells via pymatgen. From my own experience I would recommend using enumlib to enumerate all possible structures via the EnumerateStructureTransformation class (pymatgen.transformations.advanced_transformations module — pymatgen 2022.7.25 documentation). This method ensures you do not have duplicate structures – I used to check for this manually, and this transformation makes things so much simpler! There is an option to sort output structures via Ewald energy (see sort_criteria), but you really won’t know which is the lowest energy structure until you run relaxations. You can also run mcsqs using pymatgen (see SQSTransformation class), but this uses ATAT so the same challenges you mention will hold.

Is there a faster software than mcsqs to generate sqs?