Virtual crystal approximation (VCA)

VCA for alloys

Posted by Ritwik Das on Wednesday, February 15, 2023

Virtual crystal approximation (VCA)

A. Pseudo-Potential Mixinxg

Suppose we want to calculate an alloy, for example, $InSb_{x}As_{1-x}$.

We can generate a mixed pseudopotential of $Sb$ and $As$ in the following way:

$Sb_x + As_{1-x}$ norm-conserving pseudo-potential (ONCV case), follow the below instruction.

  1. Keep ready the original pseudopotentials of $Sb$ and $As$.

    mkdir mixed-pseudo
    cd mixed-pseudo
    git clone https://github.com/pipidog/ONCVPSP.git
    cd ONCVPSP/sg15
    
  2. [Optional] For the first time, go to the Quantum Espresso parent (installation) directory and execute

    cd ./bin/
    ln -s ../upflib/*.x ./
    
  3. Run virtual_v2.x.

    virtual_v2.x
    
     Input PP file #  1 in UPF format > Sb_ONCV_PBE_fr.upf
     Input PP file #  1 in UPF format > As_ONCV_PBE_fr.upf
    

    (for example,)

     New Pseudo = x Sb_ONCV_PBE_fr.upf + (1-x) As_ONCV_PBE_fr.upf
     mixing parameter x [0<x<1] = 0.25
    
  4. Rename the newly created mixed pseudopotential.

    mv ./NewPseudo.UPF ./Sb25As75_ONCV_PBE_fr.upf
    

B. Example DFT Calculation

  1. Generate mixed pseudopotential in Section A.

  2. To relax the structure using vc-relax. Create the input file for vc-relax calculation as follow:

    cat> OPT_VCRELAX.in <<EOF
    
    &CONTROL 
        calculation  = 'vc-relax'
        restart_mode = 'from_scratch'
        pseudo_dir   = './pseudo_dir/'
        outdir       = './OUT_DIR/'
    /
    &SYSTEM 
        ibrav        = 2
        A            = 6.479
        ntyp         = 2
        nat          = 2
        ecutwfc      = 60.0
        occupations  = 'smearing'
        smearing     = 'gaussian'
        degauss      = 0.01
    /
    &ELECTRONS 
        conv_thr     = 1.0d-8
    /
    &IONS
    /
    &CELL
    /
    ATOMIC_SPECIES
        In  114.8180  In_ONCV_PBE_fr.upf
        Xx  100.0000  Sb25As75_ONCV_PBE_fr.upf
    ATOMIC_POSITIONS (alat)
        In  0.00  0.00  0.00
        Xx  0.25  0.25  0.25
    K_POINTS (automatic) 
        2 2 2   0 0 0
    
    EOF
    
  3. Run the variable cell relaxation calculation.

    mpirun -np 4 pw.x < OPT_VCRELAX.in> OPT_VCRELAX.out
    
  4. Re-run the vc-relax relaxation a couple of times more using the latest lattice parameters until lattice parameter stops to change below 1 decimal point.

    Formula to use for optimized lattice parameter read from grep 'final coordinates' OPT_VCRELAX.out:

     alat_value[=celldm(1)] * 0.433080256 / 0.5 (unit is in $Bohr$)