Creating supercells with pymatgen
The Pymatgen python library allows to setup solid-state calculations using a flexible set of classes as well as an API to an online data base of structures. Its Structure and Lattice objects are directly supported by the DFTK load_atoms and load_lattice functions, such that DFTK may be readily used to run calculation on systems defined in pymatgen. Using the pymatgen_structure function a conversion from DFTK to pymatgen structures is also possible. In the following we use this to create a silicon supercell and find its LDA ground state using direct minimisation. To run this example Julia's PyCall package needs to be able to find an installation of pymatgen.
First we setup the silicon lattice in DFTK.
using DFTK
a = 10.263141334305942 # Lattice constant in Bohr
lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
Si = ElementPsp(:Si, psp=load_psp("hgh/lda/Si-q4"))
atoms = [Si => [ones(3)/8, -ones(3)/8]];Next we make a [2, 2, 2] supercell using pymatgen
pystruct = pymatgen_structure(lattice, atoms)
pystruct.make_supercell([2, 2, 2])
lattice = load_lattice(pystruct)
atoms = [Si => [s.frac_coords for s in pystruct.sites]];Setup an LDA model and discretize using a single k-point and a small Ecut of 5 Hartree.
model = model_LDA(lattice, atoms)
basis = PlaneWaveBasis(model; Ecut=5, kgrid=(1, 1, 1))PlaneWaveBasis discretization:
Ecut : 5.0 Ha
fft_size : (32, 32, 32)
kgrid type : Monkhorst-Pack
kgrid : [1, 1, 1]
num. irred. kpoints : 1
Discretized Model(lda_xc_teter93, 3D):
lattice (in Bohr) : [0 , 10.2631 , 10.2631 ]
[10.2631 , 0 , 10.2631 ]
[10.2631 , 10.2631 , 0 ]
unit cell volume : 2162.1 Bohr³
atoms : Si₁₆
atom potentials : ElementPsp(Si, psp=hgh/lda/si-q4)
num. electrons : 64
spin polarization : none
temperature : 0 Ha
terms : Kinetic(1)
AtomicLocal()
AtomicNonlocal()
Ewald()
PspCorrection()
Hartree(1)
Xc([:lda_xc_teter93], 1, nothing)Find the ground state using direct minimisation (always using SCF is boring ...)
scfres = direct_minimization(basis, tol=1e-5);Iter Function value Gradient norm
0 1.120997e+02 1.701574e+00
* time: 0.3222939968109131
1 1.041809e+01 8.919994e-01
* time: 0.9375569820404053
2 -1.178581e+01 1.059051e+00
* time: 1.5300250053405762
3 -3.436218e+01 8.664973e-01
* time: 2.458552837371826
4 -4.780392e+01 5.840204e-01
* time: 3.3472259044647217
5 -5.706941e+01 2.038790e-01
* time: 4.299713850021362
6 -5.987467e+01 1.145197e-01
* time: 4.924545049667358
7 -6.094922e+01 4.659238e-02
* time: 5.52249002456665
8 -6.136858e+01 5.064949e-02
* time: 6.134449005126953
9 -6.161500e+01 4.927532e-02
* time: 6.7368669509887695
10 -6.180845e+01 3.497864e-02
* time: 7.338902950286865
11 -6.195203e+01 2.215824e-02
* time: 7.953557014465332
12 -6.202228e+01 2.101805e-02
* time: 8.590741872787476
13 -6.208787e+01 1.669574e-02
* time: 9.182231903076172
14 -6.212710e+01 1.355172e-02
* time: 9.781430959701538
15 -6.216127e+01 9.531618e-03
* time: 10.39702296257019
16 -6.217941e+01 7.704468e-03
* time: 10.996285915374756
17 -6.219223e+01 5.886627e-03
* time: 11.5917649269104
18 -6.219932e+01 4.791675e-03
* time: 12.221456050872803
19 -6.220397e+01 4.289211e-03
* time: 12.856597900390625
20 -6.220715e+01 4.709372e-03
* time: 13.472640037536621
21 -6.221015e+01 5.663168e-03
* time: 14.12586784362793
22 -6.221325e+01 6.266679e-03
* time: 14.750722885131836
23 -6.221680e+01 6.582215e-03
* time: 15.361937046051025
24 -6.222138e+01 7.291693e-03
* time: 15.963773965835571
25 -6.222724e+01 6.527327e-03
* time: 16.589167833328247
26 -6.223331e+01 5.280873e-03
* time: 17.2026789188385
27 -6.223976e+01 5.073274e-03
* time: 17.808965921401978
28 -6.224558e+01 4.671182e-03
* time: 18.438772916793823
29 -6.225041e+01 4.909914e-03
* time: 19.082226991653442
30 -6.225430e+01 3.788855e-03
* time: 19.721207857131958
31 -6.225710e+01 3.490183e-03
* time: 20.349267959594727
32 -6.225911e+01 2.196638e-03
* time: 20.98568296432495
33 -6.226038e+01 1.796697e-03
* time: 21.61421489715576
34 -6.226100e+01 1.271338e-03
* time: 22.223652839660645
35 -6.226132e+01 8.206273e-04
* time: 22.869176864624023
36 -6.226147e+01 6.764738e-04
* time: 23.50068688392639
37 -6.226154e+01 5.343607e-04
* time: 24.16590404510498
38 -6.226158e+01 4.471249e-04
* time: 24.80649995803833
39 -6.226161e+01 3.447733e-04
* time: 25.443830966949463
40 -6.226163e+01 2.720724e-04
* time: 26.127794981002808
41 -6.226164e+01 2.399820e-04
* time: 26.769001007080078
42 -6.226165e+01 1.727254e-04
* time: 27.406342029571533
43 -6.226166e+01 1.262878e-04
* time: 28.027997970581055
44 -6.226166e+01 1.384180e-04
* time: 28.679029941558838
45 -6.226166e+01 7.615751e-05
* time: 29.33350896835327
46 -6.226167e+01 5.368730e-05
* time: 29.979135990142822
47 -6.226167e+01 3.510774e-05
* time: 30.603543043136597
48 -6.226167e+01 2.593872e-05
* time: 31.268868923187256
49 -6.226167e+01 2.261178e-05
* time: 31.91911482810974
50 -6.226167e+01 1.601390e-05
* time: 32.5457398891449
51 -6.226167e+01 1.616628e-05
* time: 33.158793926239014
52 -6.226167e+01 1.451432e-05
* time: 33.784358978271484
53 -6.226167e+01 1.197609e-05
* time: 34.40802788734436
54 -6.226167e+01 9.022585e-06
* time: 35.046030044555664
55 -6.226167e+01 6.051419e-06
* time: 35.64064693450928
56 -6.226167e+01 4.195334e-06
* time: 36.25825095176697
57 -6.226167e+01 3.218417e-06
* time: 36.876972913742065
58 -6.226167e+01 2.254832e-06
* time: 37.50343084335327scfres.energiesEnergy breakdown (in Ha):
Kinetic 25.7671070
AtomicLocal -18.8557713
AtomicNonlocal 14.8522675
Ewald -67.1831486
PspCorrection -2.3569765
Hartree 4.8485377
Xc -19.3336821
total -62.261666461971