TransWikia.com

Dealing with symmetry of ordered primitive cell during DFT structure relaxation

Matter Modeling Asked by DoubleKx on August 19, 2021

I have a large disordered cubic structure that I would like to do AIMD on to look at cation diffusion. I found the primitive cell and then ordered it to create several configurations. I will then relax each one and select the lowest energy configuration for AIMD. But first I have to relax the structures.

Ordering the cell will naturally decrease the symmetry of the structure to something like tetragonal or monoclinic. Typically for a calculation in VASP we switch symmetry on (ISYM=2). In this case, VASP detects tetragonal symmetry and forces the lattice parameters to fit those symmetry constraints, which is incorrect because I know the structure is cubic.

So my first question is: Is this okay? I presume it isn’t.

If not: What’s the best or correct way to deal with this? Just setting ISYM=0 or -1?
Or is it better to constrain the cell shape with ISIF=2? Or maybe both?

I was under the impression that the structure needs to be fully relaxed before doing AIMD: So then setting ISIF=2 would not be correct?

One Answer

Assuming that the structure starts from one symmetry and you distort it into another, VASP will want to find the symmetry it expects and use it. One straightforward way to fix this problem while also increasing the chance of finding the actual minima is to break the symmetry yourself.

One way to do this is to randomly displace atoms by a small amount. This can be done using ASE with the rattle command. By randomly displacing the structure a few times you can also ensure that random minor numerical noise doesn't result in relaxing into one structure versus another. If you are expecting large displacements, you might find that the structure relaxes to different configurations depending on how they are rattled. This is a very manual and very primitive global relaxation method but works quite well when you start from a good guess.

Here is a simple python script that would allow you to rattle atoms on the command line using ASE.

#! /usr/bin/env python
from ase import Atoms
from sys import argv
from ase.io import read, write
import random

file = argv[1]
rattle_amount = float(argv[2])
atoms = read(file)
atoms.rattle(rattle_amount, seed=int(random.uniform(0,2000)))
write(file, atoms)

This can be used as follows (with any file format ASE supports).

python rattle.py bulk_structure.POSCAR 0.1

Answered by Tristan Maxson on August 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP