{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TiO2 surface slab" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## import & prepare" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Collecting git+https://github.com/nmdl-mizo/interface_master.git@develop\n", " Cloning https://github.com/nmdl-mizo/interface_master.git (to revision develop) to /tmp/pip-req-build-uugit09c\n", " Running command git clone --filter=blob:none --quiet https://github.com/nmdl-mizo/interface_master.git /tmp/pip-req-build-uugit09c\n", " Resolved https://github.com/nmdl-mizo/interface_master.git to commit 2bdf96ed4835b036557ac18de82b4fa2afdabf24\n", " Preparing metadata (setup.py) ... \u001b[?25ldone\n", "\u001b[?25hRequirement already satisfied: pymatgen in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (2023.1.30)\n", "Requirement already satisfied: matplotlib in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (3.7.0)\n", "Requirement already satisfied: gb_code in /home/vscode/.local/lib/python3.10/site-packages (from interfacemaster==1.1.1) (1.0.0)\n", "Requirement already satisfied: numpy>=1.14.0 in /home/vscode/.local/lib/python3.10/site-packages (from gb_code->interfacemaster==1.1.1) (1.24.2)\n", "Requirement already satisfied: cycler>=0.10 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (0.11.0)\n", "Requirement already satisfied: pillow>=6.2.0 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (9.4.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (1.4.4)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (23.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (3.0.9)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (2.8.2)\n", "Requirement already satisfied: contourpy>=1.0.1 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (1.0.7)\n", "Requirement already satisfied: fonttools>=4.22.0 in /home/vscode/.local/lib/python3.10/site-packages (from matplotlib->interfacemaster==1.1.1) (4.38.0)\n", "Requirement already satisfied: mp-api>=0.27.3 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.30.10)\n", "Requirement already satisfied: tabulate in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.9.0)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2.28.2)\n", "Requirement already satisfied: scipy>=1.5.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.10.1)\n", "Requirement already satisfied: ruamel.yaml>=0.17.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.17.21)\n", "Requirement already satisfied: tqdm in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (4.64.1)\n", "Requirement already satisfied: pandas in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.5.3)\n", "Requirement already satisfied: spglib>=2.0.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2.0.2)\n", "Requirement already satisfied: sympy in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (1.11.1)\n", "Requirement already satisfied: uncertainties>=3.1.4 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.1.7)\n", "Requirement already satisfied: networkx>=2.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.0)\n", "Requirement already satisfied: palettable>=3.1.1 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (3.3.0)\n", "Requirement already satisfied: plotly>=4.5.0 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (5.13.0)\n", "Requirement already satisfied: pybtex in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (0.24.0)\n", "Requirement already satisfied: monty>=3.0.2 in /home/vscode/.local/lib/python3.10/site-packages (from pymatgen->interfacemaster==1.1.1) (2022.9.9)\n", "Requirement already satisfied: typing-extensions>=3.7.4.1 in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (4.5.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (65.5.1)\n", "Requirement already satisfied: msgpack in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (1.0.4)\n", "Requirement already satisfied: emmet-core>=0.39.8 in /home/vscode/.local/lib/python3.10/site-packages (from mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (0.44.0)\n", "Requirement already satisfied: tenacity>=6.2.0 in /home/vscode/.local/lib/python3.10/site-packages (from plotly>=4.5.0->pymatgen->interfacemaster==1.1.1) (8.2.1)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib->interfacemaster==1.1.1) (1.16.0)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (1.26.14)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (3.4)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (3.0.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/site-packages (from requests->pymatgen->interfacemaster==1.1.1) (2022.12.7)\n", "Requirement already satisfied: ruamel.yaml.clib>=0.2.6 in /home/vscode/.local/lib/python3.10/site-packages (from ruamel.yaml>=0.17.0->pymatgen->interfacemaster==1.1.1) (0.2.7)\n", "Requirement already satisfied: future in /home/vscode/.local/lib/python3.10/site-packages (from uncertainties>=3.1.4->pymatgen->interfacemaster==1.1.1) (0.18.3)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/site-packages (from pandas->pymatgen->interfacemaster==1.1.1) (2022.7.1)\n", "Requirement already satisfied: PyYAML>=3.01 in /usr/local/lib/python3.10/site-packages (from pybtex->pymatgen->interfacemaster==1.1.1) (6.0)\n", "Requirement already satisfied: latexcodec>=1.0.4 in /home/vscode/.local/lib/python3.10/site-packages (from pybtex->pymatgen->interfacemaster==1.1.1) (2.0.1)\n", "Requirement already satisfied: mpmath>=0.19 in /home/vscode/.local/lib/python3.10/site-packages (from sympy->pymatgen->interfacemaster==1.1.1) (1.2.1)\n", "Requirement already satisfied: pydantic>=1.10.2 in /home/vscode/.local/lib/python3.10/site-packages (from emmet-core>=0.39.8->mp-api>=0.27.3->pymatgen->interfacemaster==1.1.1) (1.10.5)\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.0.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 955 100 955 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 2713 0 --:--:-- --:--:-- --:--:-- 2705\n" ] } ], "source": [ "!pip install git+https://github.com/nmdl-mizo/interface_master.git@develop\n", "!mkdir -p cif_files\n", "!curl https://raw.githubusercontent.com/nmdl-mizo/interface_master/develop/test_files/cif_files/TiO2_mp-2657_conventional_standard.cif -o 'cif_files/TiO2_mp-2657_conventional_standard.cif'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from interfacemaster.interface_generator import get_surface_slab, terminates_scanner_slab_structure\n", "from interfacemaster.cellcalc import get_primitive_hkl\n", "from pymatgen.core.structure import Structure\n", "from numpy import ceil" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Load structures" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "primitive_unit_structure = Structure.from_file('cif_files/TiO2_mp-2657_conventional_standard.cif', \\\n", " primitive=True, sort=False, merge_tol=0.0)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "conv_unit_structure = Structure.from_file('cif_files/TiO2_mp-2657_conventional_standard.cif', \\\n", " primitive=False, sort=False, merge_tol=0.0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cross vector: \n", "[[1]\n", " [0]\n", " [0]]\n", "length: 2.969203\n", "plane basis: \n", "[[ 0 1]\n", " [ 0 -1]\n", " [ 1 0]]\n", "length: 4.653272 5.519882857560747\n" ] } ], "source": [ "#get all the non-identical terminations\n", "hkl_in_pri = get_primitive_hkl(hkl=[1,0,1], C_lattice=conv_unit_structure.lattice.matrix.T, \\\n", " P_lattice=primitive_unit_structure.lattice.matrix.T)\n", "plane_list, element_list, dp_list = terminates_scanner_slab_structure(primitive_unit_structure, hkl_in_pri)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[0.7623739121169246, 1.7406639121169247, 2.5030439121169246]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#height\n", "dp_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The function below generates a slab with its bc-plane is a specified (hkl) lattice plane\n", "### Customerization options: \n", "**replica** --- expand from primitive slab cell, **default: [1,1,1]** \n", "**inclination_tol** --- required minimum cos value of the angle between the basic crossing vector and the surface, **default: gamma angle > 45 degrees** \n", "**termi_shift** --- shift the termination of the surface, **default: 0** \n", "**vacuum_height** --- height of vaccum, **default: 0** \n", "**plane_normal** --- whether requiring the two vectors in the surface plane to be perpendicular, **default: False** \n", "**normal_perp** --- whether requiring the crossing vector to be perpendicular to the plane, **default: False** \n", "**normal_tol** --- tolerance to judge whether normal/perpendicular, **default: 1e-3** \n", "**lim** --- control the number of generated vectors to search for the crossing vectors and perpendicular vectors, **default: 20** \n", "**filename** --- name of the generated atom files, **default: 'POSCAR'** \n", "**filetype** --- type of the generated atom files (for VASP or LAMMPS), **default: 'VASP'**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cross vector: \n", "[[2]\n", " [0]\n", " [5]]\n", "length: 17.521869837553325\n", "plane basis: \n", "[[ 0 1]\n", " [-1 0]\n", " [ 0 -1]]\n", "length: 4.653272 5.519882857560747\n" ] } ], "source": [ "#get orthogonal cell\n", "slab_structure = get_surface_slab(conv_unit_structure, hkl = [1,0,1], vacuum_height = 15, \\\n", " plane_normal = True, normal_perp = True, termi_shift = 1.75)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cross vector: \n", "[[-1]\n", " [-1]\n", " [ 0]]\n", "length: 6.580720371810977\n", "plane basis: \n", "[[ 0 -1]\n", " [ 0 1]\n", " [ 1 0]]\n", "length: 2.969203 6.580720371810977\n" ] } ], "source": [ "#expansion to reach a required slab size with length_a > 5, length_b > 10, length_c > 10\n", "da, db, dc = ceil(5/6.580720371810977), ceil(10/2.969203), ceil(10/6.580720371810977)\n", "slab_structure = get_surface_slab(unit_structure, hkl = [1,1,0], replica = [da, db, dc], vacuum_height = 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Try other customerization options :D**" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.9" }, "vscode": { "interpreter": { "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" } } }, "nbformat": 4, "nbformat_minor": 4 }