5.2. isomer with xTB

xTB is a semi-empirical quantum chemical program developed by Prof. Stefan Grimme. It is highly recommended for global optimization of chemical clusters that are unable to be described by force fields.

Tip

The source code and compilation instructions of xTB can be found here.

Tip

The stable structures obtained by xTB should be further optimized with sophisticated quantum chemical methods.

Attention

In geom, xTB has been integrated inside the program (even in Windows version) so you do not need to install or compile xTB. This is another reason for using geom.

5.2.1. Example: Au8

Tip

The sample input and output files can be found in testfiles/isomer/3-au8-xTB.

Here we want to find the global minimum of \(\mathrm{Au}_8\). We will show how to use xTB and isomer to do this.

Step 1: Prepare an input file named au8.inp.

au8.inp
1au8           # Result file name
2Au 8          # Symbols
3cube 3 3 3    # Structure types
450            # Maximal number of calculations
5>>>>
6./runxTB.sh $inp$ $out$ $xxx$
7>>>>

Since at this moment, we assume that we know nothing about the global minimum of \(\mathrm{Au}_8\), so we just randomly sample it in a cube.

Step 2: Copy misc/runxTB.sh to the current path. This is the script used to connect xTB and ABCluster. Open it you will see

runxTB.sh
 1# This is the script to connect ABCluster with xTB.
 2#
 3# What you can change: arguments of xtb like --chrg, --gfn, --uhf, etc.
 4#
 5
 6cp $1 $3.xyz
 7xtb -o --chrg 0 --gfn 1 $3.xyz > $3.out 2>/dev/null
 8
 9# Do NOT change things below!
10energy=`awk 'NR==2{print $2}' xtbopt.xyz` ; sed  "2s/^.*/${energy}/g" xtbopt.xyz > $2
11rm -rf $3.xyz $3.out charges wbo xtbopt.log xtbopt.xyz xtbrestart xtbtopo.mol .xtboptok

You can change the number after --chrg to the charge of the system. Here, --gfn 1 is used to select GFN1 Hamiltonian instead of the default GFN2 Hamiltonian, because it seems that GFN2 Hamiltonian does not work well for metallic clusters.

Step 3: Now you can run the global optimization:

$ isomer au8.inp > au8.out

The end of au8.out is

au8.out
Reordered from low to high energy:
===============================================================
    #          Energy      Match-RMSD
===============================================================
   10    -31.82883469      0.00000000
   31    -31.82879105      0.09780278
   49    -31.81744864      1.87717016
   19    -31.81703116      1.06064506
   14    -31.81614914      1.74735890
   26    -31.81613549      1.74618650
    2    -31.81468986      1.66046500
   20    -31.81414834      1.55327721
   21    -31.81373995      1.50768747
   45    -31.81256386      1.72172715
   32    -31.81242730      1.88329240
   29    -31.81053323      1.85723016
   23    -31.80945836      1.81423700
   22    -31.80737746      1.23237316
   40    -31.80544331      2.00421183
    6    -31.80494744      1.14790243
   28    -31.80483576      1.65162493
   42    -31.80296347      1.19522877
   27    -31.80092339      1.24375689
   11    -31.80090745      1.24153852
   39    -31.79799814      1.29473162
   34    -31.79521218      1.86632054
   46    -31.79422879      1.53204441
    1    -31.79411906      1.58712360
    7    -31.78526106      1.61499059
    8    -31.76968806      2.06136973
   33    -31.76852420      2.03850515
===============================================================

So the global minimum is to au8-LM/10.xyz and is shown below:

alternate text

5.2.2. Example: Li5F5 and Li5F6(-)

Tip

The sample input and output files can be found in testfiles/isomer/4-lif-xTB.

What is the most stable isomer of ionic crystal cluster, say \(\mathrm{Li}_5\mathrm{F}_5\) and \(\mathrm{Li}_5\mathrm{F}_6^{-}\)? This can be done easily with xTB and isomer.

For \(\mathrm{Li}_5\mathrm{F}_5\), prepare the following input file li5f5.inp:

li5f5.inp
1li5f5         # Result file name
2Li 5 F 5      # Symbols
3cube 4 4 4    # Structure types
450            # Maximal number of calculations
5>>>>
6./runxTB.sh $inp$ $out$ $xxx$
7>>>>

Make sure that in runxTB.sh, the charge is set to zero: --chrg 0. Run the global optimization:

$ isomer li5f5.inp > li5f5.out

In the output file li5f5.out, you can find the following output:

li5f5.out
 1Reordered from low to high energy:
 2===============================================================
 3    #          Energy      Match-RMSD
 4===============================================================
 5    34    -27.87204520      0.00000000
 6    20    -27.87203437      0.01480934
 7    37    -27.87026892      0.65137537
 8    47    -27.86927464      0.49860402
 9    30    -27.86443620      1.57936656
10     6    -27.86441245      1.67313269
11    33    -27.86442855      1.61882031
12    48    -27.85946003      1.06822035
13    16    -27.85944440      1.06103075
14===============================================================

The global minimum is li5f5-LM/34.xyz which is shown below:

alternate text

For \(\mathrm{Li}_5\mathrm{F}_6^{-}\), prepare the following input file li5f6.inp:

li5f6.inp
1li5f6         # Result file name
2Li 5 F 6      # Symbols
3cube 4 4 4    # Structure types
450            # Maximal number of calculations
5>>>>
6./runxTB.sh $inp$ $out$ $xxx$
7>>>>

Make sure that in runxTB.sh, the charge is set to -1: --chrg -1. Run the global optimization:

$ isomer li5f6.inp > li5f6.out

In the output file li5f6.out, you can find the following output:

li5f6.out
1Reordered from low to high energy:
2===============================================================
3    #          Energy      Match-RMSD
4===============================================================
5    48    -33.32394780      0.00000000
6    49    -33.32393734      0.02303966
7    28    -33.30781652      1.23466538
8    23    -33.30779733      1.25483032
9    33    -33.30777537      1.25590962

The global minimum is li5f6-LM/48.xyz which is shown below:

alternate text