{ "cells": [ { "cell_type": "markdown", "source": [ "# Creating supercells with pymatgen\n", "\n", "The [Pymatgen](https://pymatgen.org/) python library allows to setup\n", "solid-state calculations using a flexible set of classes as well as an API\n", "to an online data base of structures. Its `Structure` and `Lattice`\n", "objects are directly supported by the DFTK `load_atoms` and `load_lattice`\n", "functions, such that DFTK may be readily used to run calculation on systems\n", "defined in pymatgen. Using the `pymatgen_structure` function a conversion\n", "from DFTK to pymatgen structures is also possible. In the following we\n", "use this to create a silicon supercell and find its LDA ground state\n", "using direct minimisation." ], "metadata": {} }, { "cell_type": "markdown", "source": [ "First we setup the silicon lattice in DFTK." ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "using DFTK\n", "\n", "a = 10.263141334305942 # Lattice constant in Bohr\n", "lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\n", "Si = ElementPsp(:Si, psp=load_psp(\"hgh/lda/Si-q4\"))\n", "atoms = [Si => [ones(3)/8, -ones(3)/8]];" ], "metadata": {}, "execution_count": 1 }, { "cell_type": "markdown", "source": [ "Next we make a `[2, 2, 2]` supercell using pymatgen" ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "pystruct = pymatgen_structure(lattice, atoms)\n", "pystruct.make_supercell([2, 2, 2])\n", "lattice = load_lattice(pystruct)\n", "atoms = [Si => [s.frac_coords for s in pystruct.sites]];" ], "metadata": {}, "execution_count": 2 }, { "cell_type": "markdown", "source": [ "Setup an LDA model and discretize using\n", "a single kpoint and a small `Ecut` of 5 Hartree." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "PlaneWaveBasis (Ecut=5.0, 1 kpoints)" }, "metadata": {}, "execution_count": 3 } ], "cell_type": "code", "source": [ "model = model_LDA(lattice, atoms)\n", "basis = PlaneWaveBasis(model, 5, kgrid=(1, 1, 1))" ], "metadata": {}, "execution_count": 3 }, { "cell_type": "markdown", "source": [ "Find the ground state using direct minimisation (always using SCF is boring ...)" ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter Function value Gradient norm \n", " 0 1.111196e+02 1.484812e+00\n", " * time: 0.07368183135986328\n", " 1 1.136166e+01 9.065097e-01\n", " * time: 1.4496738910675049\n", " 2 -1.137165e+01 1.025719e+00\n", " * time: 1.5349669456481934\n", " 3 -3.387718e+01 7.177525e-01\n", " * time: 1.6498589515686035\n", " 4 -4.739144e+01 5.533646e-01\n", " * time: 1.7811799049377441\n", " 5 -5.689811e+01 2.142668e-01\n", " * time: 1.8838248252868652\n", " 6 -5.982392e+01 1.276920e-01\n", " * time: 1.9609968662261963\n", " 7 -6.091988e+01 6.044469e-02\n", " * time: 2.0345218181610107\n", " 8 -6.130942e+01 7.088004e-02\n", " * time: 2.1386940479278564\n", " 9 -6.159165e+01 4.432823e-02\n", " * time: 2.215906858444214\n", " 10 -6.178953e+01 3.363145e-02\n", " * time: 2.2921929359436035\n", " 11 -6.195361e+01 2.054222e-02\n", " * time: 2.3701369762420654\n", " 12 -6.202657e+01 2.093181e-02\n", " * time: 2.4503068923950195\n", " 13 -6.210541e+01 1.703304e-02\n", " * time: 2.5299389362335205\n", " 14 -6.214450e+01 1.435507e-02\n", " * time: 2.607374906539917\n", " 15 -6.218015e+01 1.251250e-02\n", " * time: 2.6828818321228027\n", " 16 -6.219914e+01 9.087920e-03\n", " * time: 2.75805401802063\n", " 17 -6.221289e+01 7.784274e-03\n", " * time: 2.8424508571624756\n", " 18 -6.222249e+01 6.244302e-03\n", " * time: 2.9251890182495117\n", " 19 -6.222974e+01 6.200834e-03\n", " * time: 3.005741834640503\n", " 20 -6.223600e+01 5.844353e-03\n", " * time: 3.0851519107818604\n", " 21 -6.224189e+01 5.530477e-03\n", " * time: 3.168797016143799\n", " 22 -6.224768e+01 5.648878e-03\n", " * time: 3.25154185295105\n", " 23 -6.225285e+01 4.847949e-03\n", " * time: 3.3295350074768066\n", " 24 -6.225665e+01 3.834625e-03\n", " * time: 3.4085748195648193\n", " 25 -6.225890e+01 2.977767e-03\n", " * time: 3.5058019161224365\n", " 26 -6.226015e+01 2.105438e-03\n", " * time: 3.578939914703369\n", " 27 -6.226077e+01 1.345757e-03\n", " * time: 3.6580729484558105\n", " 28 -6.226110e+01 1.020734e-03\n", " * time: 3.7417349815368652\n", " 29 -6.226129e+01 9.759721e-04\n", " * time: 3.8296430110931396\n", " 30 -6.226141e+01 8.171239e-04\n", " * time: 3.9238739013671875\n", " 31 -6.226149e+01 7.647032e-04\n", " * time: 4.010051965713501\n", " 32 -6.226155e+01 6.069915e-04\n", " * time: 4.085798978805542\n", " 33 -6.226160e+01 3.981924e-04\n", " * time: 4.161531925201416\n", " 34 -6.226163e+01 3.449342e-04\n", " * time: 4.245488882064819\n", " 35 -6.226165e+01 2.292712e-04\n", " * time: 4.321305990219116\n", " 36 -6.226166e+01 2.495890e-04\n", " * time: 4.401867866516113\n", " 37 -6.226166e+01 1.117296e-04\n", " * time: 4.479991912841797\n", " 38 -6.226166e+01 8.732202e-05\n", " * time: 4.564880847930908\n", " 39 -6.226166e+01 6.555517e-05\n", " * time: 4.655396938323975\n", " 40 -6.226167e+01 6.608910e-05\n", " * time: 4.731441020965576\n", " 41 -6.226167e+01 4.922998e-05\n", " * time: 4.810605049133301\n", " 42 -6.226167e+01 4.180363e-05\n", " * time: 4.898624897003174\n", " 43 -6.226167e+01 3.304705e-05\n", " * time: 4.976557970046997\n", " 44 -6.226167e+01 2.649407e-05\n", " * time: 5.052386045455933\n", " 45 -6.226167e+01 2.157395e-05\n", " * time: 5.132324934005737\n", " 46 -6.226167e+01 1.642571e-05\n", " * time: 5.216400861740112\n", " 47 -6.226167e+01 1.051455e-05\n", " * time: 5.304497957229614\n", " 48 -6.226167e+01 6.376436e-06\n", " * time: 5.3940348625183105\n", " 49 -6.226167e+01 5.436638e-06\n", " * time: 5.469815015792847\n", " 50 -6.226167e+01 4.178595e-06\n", " * time: 5.546497821807861\n" ] } ], "cell_type": "code", "source": [ "scfres = direct_minimization(basis, tol=1e-5);" ], "metadata": {}, "execution_count": 4 }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Energy breakdown:\n Kinetic 25.7671065\n AtomicLocal -18.8557655\n AtomicNonlocal 14.8522630\n Ewald -67.1831486\n PspCorrection -2.3569765\n Hartree 4.8485365 \n Xc -19.3336818\n\n total -62.261666459150\n" }, "metadata": {}, "execution_count": 5 } ], "cell_type": "code", "source": [ "scfres.energies" ], "metadata": {}, "execution_count": 5 } ], "nbformat_minor": 3, "metadata": { "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.5.3" }, "kernelspec": { "name": "julia-1.5", "display_name": "Julia 1.5.3", "language": "julia" } }, "nbformat": 4 }