{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Back to the main [Index](../index.ipynb) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

First (basic) lesson with Abinit and AbiPy

\n", "

The H2 molecule

\n", "
\n", "

This lesson aims at showing how to get the following physical properties:

\n", " \n", " \n", "
\n", "\n", "This tutorial is a complement to the standard [ABINIT tutorial on H$_2$](https://docs.abinit.org/tutorial/base1). Here, powerful flow and visualisation procedures\n", "will be demonstrated. Still, some basic understanding of the stand-alone working of ABINIT is a prerequisite.\n", "Also, in order to fully benefit from this Abipy tutorial, other more basic Abipy tutorials should have been followed,\n", "as suggested in the [abitutorials index page](https://nbviewer.jupyter.org/github/abinit/abitutorials/blob/master/abitutorials/index.ipynb).\n", "\n", "There are three methodologies to compute the optimal distance between the two Hydrogen atoms. One could:\n", "\n", " * compute the **total energy** for different values of the interatomic distance, make a fit through \n", " the different points, and determine the minimum of the fitting function;\n", " * compute the **forces** for different values of the interatomic distance, make a fit through \n", " the different values, and determine the zero of the fitting function;\n", " * use an automatic algorithm for minimizing the energy (or finding the zero of forces).\n", "\n", "In this AbiPy notebook, we will be focusing on the first approach.\n", "More specifically we will build an AbiPy `Flow` to compute the energy and the forces in the $H_2$ molecule \n", "for different values of the interatomic distance. \n", "This exercise will allow us to learn how to generate multiple input files using AbiPy and \n", "how to analyze multiple ground-state calculations with the AbiPy robots.\n", "\n", "\n", "## Table of Contents\n", "[[back to top](#top)]\n", "\n", "* [Our first AbiPy function](#Our-first-AbiPy-function)\n", "* [Computation of the interatomic distance](#Computation-of-the-interatomic-distance)\n", "* [Analyzing the main output file](#Analyzing-the-main-output-file)\n", "* [Extracting results from the GSR files](#Extracting-results-from-the-GSR-files)\n", "* [Analysis of the charge density](#Analysis-of-the-charge-density)\n", "* [Conclusions](#Conclusions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Our first AbiPy function\n", "[[back to top](#top)]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "code_folding": [] }, "outputs": [], "source": [ "# Use this at the beginning of your script so that your code will be compatible with python3\n", "from __future__ import print_function, division, unicode_literals\n", "\n", "import numpy as np \n", "\n", "import warnings \n", "warnings.filterwarnings(\"ignore\") # Ignore warnings\n", "\n", "from abipy import abilab\n", "abilab.enable_notebook() # This line tells AbiPy we are running inside a notebook\n", "\n", "# This line configures matplotlib to show figures embedded in the notebook.\n", "# Replace `inline` with `notebook` in classic notebook\n", "%matplotlib inline \n", "\n", "# Option available in jupyterlab. See https://github.com/matplotlib/jupyter-matplotlib\n", "#%matplotlib widget " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need a function that generates an input file for a GS calculations for the $H_2$ molecule in a big box.\n", "Ideally a function that receives the distance `x`, the cutoff energy `ecut` and the size of the big box \n", "in input so that we can customize the output and generate multiple input objects easily.\n", "\n", "Fortunately we already have such a function in the `lesson_base1.py` module.\n", "Let's import it and look at the code:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "

\n", "\n", "
def gs_input(x=0.7, ecut=10, acell=(10, 10, 10)):\n",
       "    """\n",
       "    This function builds an AbinitInput object to compute the total energy\n",
       "    of the H2 molecule in a big box.\n",
       "\n",
       "    Args:\n",
       "        x: Position of the first Hydrogen along the x-axis in Cartesian coordinates.\n",
       "           The second Hydrogen is located at [-x, 0, 0]\n",
       "        ecut: Cutoff energy in Ha.\n",
       "        acell: Lengths of the primitive vectors (in Bohr)\n",
       "\n",
       "    Returns:\n",
       "        AbinitInput object.\n",
       "    """\n",
       "    # Build structure from dictionary with input variables.\n",
       "    structure = abilab.Structure.from_abivars(\n",
       "        ntypat=1,                           # There is only one type of atom.\n",
       "        znucl=1,                            # Atomic numbers of the type(s) of atom.\n",
       "        natom=2,                            # There are two atoms.\n",
       "        typat=(1, 1),                       # They both are of type 1, that is, Hydrogen.\n",
       "        xcart=[-x, 0.0, 0.0,                # Cartesian coordinates of atom 1, in Bohr.\n",
       "               +x, 0.0, 0.0],               # second atom.\n",
       "        acell=acell,                        # Lengths of the primitive vectors (in Bohr).\n",
       "        rprim=[1, 0, 0, 0, 1, 0, 0, 0, 1]   # Orthogonal primitive vectors (default).\n",
       "    )\n",
       "\n",
       "    # Build AbinitInput from structure and pseudo(s) taken from AbiPy package.\n",
       "    inp = abilab.AbinitInput(structure=structure, pseudos=abidata.pseudos("01h.pspgth"))\n",
       "\n",
       "    # Set value of other variables.\n",
       "    inp.set_vars(\n",
       "        ecut=ecut,\n",
       "        nband=1,\n",
       "        diemac=2.0,\n",
       "        toldfe=1e-6,\n",
       "        prtwf=-1,\n",
       "        iomode=3\n",
       "    )\n",
       "\n",
       "    # Define k-point sampling.\n",
       "    inp.set_kmesh(ngkpt=(1, 1, 1), shiftk=(0, 0, 0))\n",
       "\n",
       "    return inp\n",
       "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lesson_base1 import gs_input\n", "abilab.print_source(gs_input)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the function is called without arguments, the default values (specified in the prototype) are used. \n", "Let's try:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The value of ecut is: 10\n" ] } ], "source": [ "gsinp = gs_input()\n", "print(\"The value of ecut is:\", gsinp[\"ecut\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `AbinitInput` is a dict-like object whose usage is documented in this [notebook](../abinit_input.ipynb).\n", "Inside jupyter, we can get the HTML representation of the input with:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "############################################################################################
# SECTION: basic
############################################################################################
ecut 10
nband 1
toldfe 1e-06
ngkpt 1 1 1
kptopt 1
nshiftk 1
shiftk 0 0 0
############################################################################################
# SECTION: dev
############################################################################################
iomode 3
############################################################################################
# SECTION: files
############################################################################################
prtwf -1
############################################################################################
# SECTION: gstate
############################################################################################
diemac 2.0
############################################################################################
# STRUCTURE
############################################################################################
natom 2
ntypat 1
typat 1 1
znucl 1
xred
-0.0700000000 0.0000000000 0.0000000000
0.0700000000 0.0000000000 0.0000000000
acell 1.0 1.0 1.0
rprim
10.0000000000 0.0000000000 0.0000000000
0.0000000000 10.0000000000 0.0000000000
0.0000000000 0.0000000000 10.0000000000" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gsinp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The input object can be converted into a string. \n", "More importantly, an `AbinitInput` *has* an AbiPy structure\n", "(see [Structure notebook](../structure.ipynb)), \n", "a list of pseudopotential objects and provides several methods \n", "to facilitate the specification of input variables." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Full Formula (H2)\n", "Reduced Formula: H2\n", "abc : 5.291772 5.291772 5.291772\n", "angles: 90.000000 90.000000 90.000000\n", "Sites (2)\n", " # SP a b c\n", "--- ---- ----- --- ---\n", " 0 H -0.07 0 0\n", " 1 H 0.07 0 0\n", "The big box volume is: 148.18471127642286\n" ] } ], "source": [ "print(gsinp.structure)\n", "print(\"The big box volume is:\", gsinp.structure.volume)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gsinp.structure.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's print some info about our pseudopotentials:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " summary: Goedecker-Teter-Hutter Wed May 8 14:27:44 EDT 1996\n", " number of valence electrons: 1.0\n", " maximum angular momentum: s\n", " angular momentum for local part: s\n", " XC correlation: LDA_XC_TETER93\n", " supports spin-orbit: False\n", " radius for non-linear core correction: 0.0\n", " hint for low accuracy: ecut: 0.0, pawecutdg: 0.0\n", " hint for normal accuracy: ecut: 0.0, pawecutdg: 0.0\n", " hint for high accuracy: ecut: 0.0, pawecutdg: 0.0\n" ] } ], "source": [ "print(gsinp.pseudos[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computation of the interatomic distance\n", "[[back to top](#top)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, we can use `gs_input` to generate an [Abinit Flow](../flows.ipynb)\n", "to compute the total energy and the forces of H-H with different interatomic distances. \n", "We have already prepared such a function in `build_flow`, let's have a look at the code:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "

\n", "\n", "
def build_flow(options):\n",
       "    """\n",
       "    Generate a flow to compute the total energy and forces for the H2 molecule in a big box\n",
       "    as a function of the interatomic distance.\n",
       "\n",
       "    Args:\n",
       "        options: Command line options.\n",
       "\n",
       "    Return:\n",
       "        Flow object.\n",
       "    """\n",
       "    inputs = [gs_input(x=x) for x in np.linspace(0.5, 1.025, 21)]\n",
       "\n",
       "    workdir = options.workdir if (options and options.workdir) else "flow_h2"\n",
       "\n",
       "    return flowtk.Flow.from_inputs(workdir, inputs)\n",
       "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lesson_base1 import build_flow\n", "abilab.print_source(build_flow)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we are working at fixed `ecut` and `acell`, only the H-H distance is modified.\n", "Let's call the function to build our flow:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "flow\n", "\n", "Flow, node_id=345716, workdir=flow_h2\n", "clusterw0\n", "\n", "Work (w0)\n", "\n", "\n", "w0_t0\n", "\n", "w0_t0\n", "ScfTask\n", "\n", "\n", "w0_t1\n", "\n", "w0_t1\n", "ScfTask\n", "\n", "\n", "w0_t2\n", "\n", "w0_t2\n", "ScfTask\n", "\n", "\n", "w0_t3\n", "\n", "w0_t3\n", "ScfTask\n", "\n", "\n", "w0_t4\n", "\n", "w0_t4\n", "ScfTask\n", "\n", "\n", "w0_t5\n", "\n", "w0_t5\n", "ScfTask\n", "\n", "\n", "w0_t6\n", "\n", "w0_t6\n", "ScfTask\n", "\n", "\n", "w0_t7\n", "\n", "w0_t7\n", "ScfTask\n", "\n", "\n", "w0_t8\n", "\n", "w0_t8\n", "ScfTask\n", "\n", "\n", "w0_t9\n", "\n", "w0_t9\n", "ScfTask\n", "\n", "\n", "w0_t10\n", "\n", "w0_t10\n", "ScfTask\n", "\n", "\n", "w0_t11\n", "\n", "w0_t11\n", "ScfTask\n", "\n", "\n", "w0_t12\n", "\n", "w0_t12\n", "ScfTask\n", "\n", "\n", "w0_t13\n", "\n", "w0_t13\n", "ScfTask\n", "\n", "\n", "w0_t14\n", "\n", "w0_t14\n", "ScfTask\n", "\n", "\n", "w0_t15\n", "\n", "w0_t15\n", "ScfTask\n", "\n", "\n", "w0_t16\n", "\n", "w0_t16\n", "ScfTask\n", "\n", "\n", "w0_t17\n", "\n", "w0_t17\n", "ScfTask\n", "\n", "\n", "w0_t18\n", "\n", "w0_t18\n", "ScfTask\n", "\n", "\n", "w0_t19\n", "\n", "w0_t19\n", "ScfTask\n", "\n", "\n", "w0_t20\n", "\n", "w0_t20\n", "ScfTask\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flow = build_flow(options=None)\n", "flow.get_graphviz()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, so far so sood. \n", "With just three lines of codes and our `gs_input` function, we managed \n", "to construct an AbiPy flow for the $H_2$ molecule.\n", "Let's write some python code to check that we really obtained what we had in mind:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ecuts:\n", " [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]\n", "vols:\n", " ['148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2', '148.2']\n", "h-h [Ang]:\n", " ['0.529', '0.557', '0.585', '0.613', '0.640', '0.668', '0.696', '0.724', '0.751', '0.779', '0.807', '0.835', '0.863', '0.890', '0.918', '0.946', '0.974', '1.001', '1.029', '1.057', '1.085']\n" ] } ], "source": [ "inputs = [task.input for task in flow.iflat_tasks()]\n", "\n", "print(\"ecuts:\\n\", [inp[\"ecut\"] for inp in inputs])\n", "\n", "print(\"vols:\\n\", [\"%.1f\" % inp.structure.volume for inp in inputs])\n", "\n", "def hh_dist(structure):\n", " return np.linalg.norm(structure.cart_coords[1] - structure.cart_coords[0])\n", "\n", "from pprint import pprint\n", "print(\"h-h [Ang]:\\n\", [\"%.3f\" % hh_dist(inp.structure) for inp in inputs])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, we could run the flow in the notebook by just calling:\n", "\n", " flow.make_scheduler().start()\n", "\n", "or, alternatively, execute the `lesson_base1.py` script to build \n", "the directory with the flow and then use:\n", "\n", " abirun.py flow_h2 scheduler\n", "\n", "inside the terminal.\n", "\n", "\n", "\n", "Let's assume the flow has been already executed and let's focus on the analysis of the final results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyzing the main output file\n", "[[back to top](#top)]\n", "\n", "First of all, it is always a good idea to check whether the SCF cycle is converged.\n", "Obviously one could open the main output file, find the SCF iterations and look for warnings but\n", "there is a much faster (and better) way to do that with AbiPy:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ndtset: 1, completed: True\n", "Full Formula (H2)\n", "Reduced Formula: H2\n", "abc : 5.291772 5.291772 5.291772\n", "angles: 90.000000 90.000000 90.000000\n", "Sites (2)\n", " # SP a b c\n", "--- ---- ----- --- ---\n", " 0 H -0.05 0 0\n", " 1 H 0.05 0 0\n", "\n", "Abinit Spacegroup: spgid: 123, num_spatial_symmetries: 16, has_timerev: True, symmorphic: False\n", "\n", "========================= Dimensions of calculation =========================\n", " intxc ionmov iscf lmnmax lnmax mgfft mpssoang mqgrid natom \\\n", "dataset \n", "1 0 0 7 1 1 30 1 3001 2 \n", "\n", " nloc_mem nspden nspinor nsppol nsym n1xccc ntypat occopt \\\n", "dataset \n", "1 1 1 1 1 16 0 1 1 \n", "\n", " xclevel mband mffmem mkmem mpw nfft nkpt mem_per_proc_mb \\\n", "dataset \n", "1 1 1 1 1 752 27000 1 7.796 \n", "\n", " wfk_size_mb denpot_size_mb spg_symbol spg_number \\\n", "dataset \n", "1 0.013 0.208 P4/mmm 123 \n", "\n", " bravais \n", "dataset \n", "1 Bravais tP (primitive tetrag.) \n", " \n", "\n" ] } ], "source": [ "abo = abilab.abiopen(\"flow_h2/w0/t0/run.abo\")\n", "print(abo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get the list of Warnings/Comments/Errors:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Events found in /Users/gmatteo/git_repos/abitutorials/abitutorials/base1/flow_h2/w0/t0/run.abo\n", "\n", "num_errors: 0, num_warnings: 0, num_comments: 0, completed: False\n", "\n" ] } ], "source": [ "print(abo.events)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To plot the SCF cycle, use:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Loading all matplotlib figures before showing them. It may take some time...\n", "All figures in memory, elapsed time: 0.872 s\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "abo.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this is not a structural relaxation, the initial and final structures must be equal:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abo.initial_structure == abo.final_structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The basic dimensions and parameters of the run can be extracted from the output file with:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(OrderedDict([(1,\n", " OrderedDict([('intxc', 0),\n", " ('ionmov', 0),\n", " ('iscf', 7),\n", " ('lmnmax', 1),\n", " ('lnmax', 1),\n", " ('mgfft', 30),\n", " ('mpssoang', 1),\n", " ('mqgrid', 3001),\n", " ('natom', 2),\n", " ('nloc_mem', 1),\n", " ('nspden', 1),\n", " ('nspinor', 1),\n", " ('nsppol', 1),\n", " ('nsym', 16),\n", " ('n1xccc', 0),\n", " ('ntypat', 1),\n", " ('occopt', 1),\n", " ('xclevel', 1),\n", " ('mband', 1),\n", " ('mffmem', 1),\n", " ('mkmem', 1),\n", " ('mpw', 752),\n", " ('nfft', 27000),\n", " ('nkpt', 1),\n", " ('mem_per_proc_mb', 7.796),\n", " ('wfk_size_mb', 0.013),\n", " ('denpot_size_mb', 0.208)]))]),\n", " OrderedDict([(1,\n", " {'bravais': 'Bravais tP (primitive tetrag.)',\n", " 'spg_number': 123,\n", " 'spg_symbol': 'P4/mmm'})]))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abo.get_dims_spginfo_dataset()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Within the shell, one can use:\n", "\n", " abiview.py abo flow_h2/w0/t0/run.abo\n", " \n", "to plot the SCF cycle or\n", "\n", " abiopen.py flow_h2/w0/t0/run.abo\n", "\n", "to open the file and start the ipython terminal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extracting results from the GSR files\n", "[[back to top](#top)]\n", "\n", "The ground-state results are saved in the `GSR.nc` files whose API is extensively\n", "discussed in the [GSR notebook](../gsr.ipynb).\n", "\n", "Let's have a look at the results produced by the first task:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================================= File Info =================================\n", "Name: out_GSR.nc\n", "Directory: /Users/gmatteo/git_repos/abitutorials/abitutorials/base1/flow_h2/w0/t0/outdata\n", "Size: 8.20 kb\n", "Access Time: Sun Aug 12 00:14:53 2018\n", "Modification Time: Tue Oct 10 21:27:35 2017\n", "Change Time: Tue Oct 10 21:27:35 2017\n", "\n", "================================= Structure =================================\n", "Full Formula (H2)\n", "Reduced Formula: H2\n", "abc : 5.291772 5.291772 5.291772\n", "angles: 90.000000 90.000000 90.000000\n", "Sites (2)\n", " # SP a b c cartesian_forces\n", "--- ---- ----- --- --- --------------------------------------------------\n", " 0 H -0.05 0 0 [-19.54779666 -0. -0. ] eV ang^-1\n", " 1 H 0.05 0 0 [19.54779666 -0. -0. ] eV ang^-1\n", "\n", "Abinit Spacegroup: spgid: 123, num_spatial_symmetries: 16, has_timerev: True, symmorphic: False\n", "\n", "Stress tensor (Cartesian coordinates in GPa):\n", "[[-10.75762969 0. 0. ]\n", " [ 0. 1.60903288 0. ]\n", " [ 0. 0. 1.60903288]]\n", "Pressure: 2.513 (GPa)\n", "Energy: -28.21337426 (eV)\n", "\n", "============================== Electronic Bands ==============================\n", "Number of electrons: 2.0, Fermi level: -11.082 (eV)\n", "nsppol: 1, nkpt: 1, mband: 1, nspinor: 1, nspden: 1\n", "smearing scheme: none, tsmear_eV: 0.272, occopt: 1\n", "Bandwidth: 0.000 (eV)\n", "Valence maximum located at:\n", " spin=0, kpt=[+0.000, +0.000, +0.000], weight: 1.000, band=0, eig=-11.082, occ=2.000\n" ] } ], "source": [ "with abilab.abiopen(\"flow_h2/w0/t0/outdata/out_GSR.nc\") as gsr:\n", " print(gsr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see from the previous output, the `GSR` file contains information about \n", "the crystalline structure, forces, stresses as well as the KS band structure.\n", "In the jargon of object-oriented programming, one says that a `GSRFile` *has* a `Structure` object:\n", " \n", " gsr.structure\n", " \n", "and *has* an `ElectronBands` object:\n", " \n", " gsr.ebands\n", " \n", "This means that if you learn how to use the methods provided by `structure` and `ebands`, then you can \n", "easily get these objects from the `GSR` file and use this API to post-process the results.\n", "This is a general philosophy of AbiPy: every netcdf file object returned by `abiopen` contains\n", "other objects (the structure is always available, while the presence of other objects depend of the particular file). \n", "Remember this point because we will use it in the other lessons." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, now we know how to open and extract information from one `GSR` file.\n", "In this tutorial, however, we need to analyze multiple `GSR` files!\n", "If you are familiar with python, it should not be difficult to write a `for loop` that \n", "iterates over a list of GSR files, extracts the total energy with the corresponding volume and creates two\n", "lists that can be used to plot $E(d_{H-H})$.\n", "This kind of operations are, however, very common and AbiPy provides a high-level interface (`robots`) to\n", "operate on multiple files and post-process the data.\n", "\n", "In the simplest case, the `Robot` finds all files of a particular type located within a directory tree,\n", "stores all the data in memory and exposes methods to extract/post-process the results." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
    \n", "
  1. w0/t0/outdata/out_GSR.nc
  2. \n", "
  3. w0/t1/outdata/out_GSR.nc
  4. \n", "
  5. w0/t10/outdata/out_GSR.nc
  6. \n", "
  7. w0/t11/outdata/out_GSR.nc
  8. \n", "
  9. w0/t12/outdata/out_GSR.nc
  10. \n", "
  11. w0/t13/outdata/out_GSR.nc
  12. \n", "
  13. w0/t14/outdata/out_GSR.nc
  14. \n", "
  15. w0/t15/outdata/out_GSR.nc
  16. \n", "
  17. w0/t16/outdata/out_GSR.nc
  18. \n", "
  19. w0/t17/outdata/out_GSR.nc
  20. \n", "
  21. w0/t18/outdata/out_GSR.nc
  22. \n", "
  23. w0/t19/outdata/out_GSR.nc
  24. \n", "
  25. w0/t2/outdata/out_GSR.nc
  26. \n", "
  27. w0/t20/outdata/out_GSR.nc
  28. \n", "
  29. w0/t3/outdata/out_GSR.nc
  30. \n", "
  31. w0/t4/outdata/out_GSR.nc
  32. \n", "
  33. w0/t5/outdata/out_GSR.nc
  34. \n", "
  35. w0/t6/outdata/out_GSR.nc
  36. \n", "
  37. w0/t7/outdata/out_GSR.nc
  38. \n", "
  39. w0/t8/outdata/out_GSR.nc
  40. \n", "
  41. w0/t9/outdata/out_GSR.nc
  42. \n", "
" ], "text/plain": [ "Label Relpath\n", "------------------------- ---------------------------------\n", "w0/t0/outdata/out_GSR.nc flow_h2/w0/t0/outdata/out_GSR.nc\n", "w0/t1/outdata/out_GSR.nc flow_h2/w0/t1/outdata/out_GSR.nc\n", "w0/t10/outdata/out_GSR.nc flow_h2/w0/t10/outdata/out_GSR.nc\n", "w0/t11/outdata/out_GSR.nc flow_h2/w0/t11/outdata/out_GSR.nc\n", "w0/t12/outdata/out_GSR.nc flow_h2/w0/t12/outdata/out_GSR.nc\n", "w0/t13/outdata/out_GSR.nc flow_h2/w0/t13/outdata/out_GSR.nc\n", "w0/t14/outdata/out_GSR.nc flow_h2/w0/t14/outdata/out_GSR.nc\n", "w0/t15/outdata/out_GSR.nc flow_h2/w0/t15/outdata/out_GSR.nc\n", "w0/t16/outdata/out_GSR.nc flow_h2/w0/t16/outdata/out_GSR.nc\n", "w0/t17/outdata/out_GSR.nc flow_h2/w0/t17/outdata/out_GSR.nc\n", "w0/t18/outdata/out_GSR.nc flow_h2/w0/t18/outdata/out_GSR.nc\n", "w0/t19/outdata/out_GSR.nc flow_h2/w0/t19/outdata/out_GSR.nc\n", "w0/t2/outdata/out_GSR.nc flow_h2/w0/t2/outdata/out_GSR.nc\n", "w0/t20/outdata/out_GSR.nc flow_h2/w0/t20/outdata/out_GSR.nc\n", "w0/t3/outdata/out_GSR.nc flow_h2/w0/t3/outdata/out_GSR.nc\n", "w0/t4/outdata/out_GSR.nc flow_h2/w0/t4/outdata/out_GSR.nc\n", "w0/t5/outdata/out_GSR.nc flow_h2/w0/t5/outdata/out_GSR.nc\n", "w0/t6/outdata/out_GSR.nc flow_h2/w0/t6/outdata/out_GSR.nc\n", "w0/t7/outdata/out_GSR.nc flow_h2/w0/t7/outdata/out_GSR.nc\n", "w0/t8/outdata/out_GSR.nc flow_h2/w0/t8/outdata/out_GSR.nc\n", "w0/t9/outdata/out_GSR.nc flow_h2/w0/t9/outdata/out_GSR.nc" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "robot = abilab.GsrRobot.from_dir(\"flow_h2\")\n", "robot" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "table = robot.get_dataframe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The table contains several columns:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['formula', 'natom', 'alpha', 'beta', 'gamma', 'a', 'b', 'c', 'volume',\n", " 'abispg_num', 'spglib_symb', 'spglib_num', 'spglib_lattice_type',\n", " 'energy', 'pressure', 'max_force', 'ecut', 'pawecutdg', 'tsmear',\n", " 'nkpt', 'nsppol', 'nspinor', 'nspden'],\n", " dtype='object')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inside the notebook, we can visualize the table with:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
formulanatomalphabetagammaabcvolumeabispg_num...energypressuremax_forceecutpawecutdgtsmearnkptnsppolnspinornspden
w0/t0/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-28.2133742.51318819.54779710.0-1.00.011111
w0/t1/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-28.6976811.96023915.45758510.0-1.00.011111
w0/t10/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.091282-1.1068920.05019810.0-1.00.011111
w0/t11/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.081045-1.3060640.66985710.0-1.00.011111
w0/t12/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.054897-1.4866431.19865710.0-1.00.011111
w0/t13/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.015128-1.6505211.65294210.0-1.00.011111
w0/t14/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.963621-1.7994292.04548910.0-1.00.011111
w0/t15/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.901949-1.9347732.38623210.0-1.00.011111
w0/t16/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.831440-2.0581692.68274210.0-1.00.011111
w0/t17/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.753241-2.1707342.94071410.0-1.00.011111
w0/t18/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.668361-2.2736183.16434610.0-1.00.011111
w0/t19/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.577707-2.3677143.35683710.0-1.00.011111
w0/t2/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.0792721.46327812.12593210.0-1.00.011111
w0/t20/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.482112-2.4539283.52044910.0-1.00.011111
w0/t3/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.3770871.0161149.40475110.0-1.00.011111
w0/t4/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.6063920.6129937.17641510.0-1.00.011111
w0/t5/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.7795140.2492955.34604110.0-1.00.011111
w0/t6/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.906409-0.0791343.83729010.0-1.00.011111
w0/t7/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-29.995127-0.3759082.58848010.0-1.00.011111
w0/t8/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.052173-0.6442701.54981810.0-1.00.011111
w0/t9/outdata/out_GSR.ncH2290.090.090.05.2917725.2917725.291772148.184711123...-30.082807-0.8870780.68105410.0-1.00.011111
\n", "

21 rows × 23 columns

\n", "
" ], "text/plain": [ " formula natom alpha beta gamma a \\\n", "w0/t0/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t1/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t10/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t11/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t12/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t13/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t14/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t15/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t16/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t17/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t18/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t19/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t2/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t20/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t3/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t4/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t5/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t6/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t7/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t8/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "w0/t9/outdata/out_GSR.nc H2 2 90.0 90.0 90.0 5.291772 \n", "\n", " b c volume abispg_num ... \\\n", "w0/t0/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t1/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t10/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t11/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t12/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t13/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t14/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t15/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t16/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t17/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t18/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t19/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t2/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t20/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t3/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t4/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t5/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t6/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t7/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t8/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "w0/t9/outdata/out_GSR.nc 5.291772 5.291772 148.184711 123 ... \n", "\n", " energy pressure max_force ecut pawecutdg \\\n", "w0/t0/outdata/out_GSR.nc -28.213374 2.513188 19.547797 10.0 -1.0 \n", "w0/t1/outdata/out_GSR.nc -28.697681 1.960239 15.457585 10.0 -1.0 \n", "w0/t10/outdata/out_GSR.nc -30.091282 -1.106892 0.050198 10.0 -1.0 \n", "w0/t11/outdata/out_GSR.nc -30.081045 -1.306064 0.669857 10.0 -1.0 \n", "w0/t12/outdata/out_GSR.nc -30.054897 -1.486643 1.198657 10.0 -1.0 \n", "w0/t13/outdata/out_GSR.nc -30.015128 -1.650521 1.652942 10.0 -1.0 \n", "w0/t14/outdata/out_GSR.nc -29.963621 -1.799429 2.045489 10.0 -1.0 \n", "w0/t15/outdata/out_GSR.nc -29.901949 -1.934773 2.386232 10.0 -1.0 \n", "w0/t16/outdata/out_GSR.nc -29.831440 -2.058169 2.682742 10.0 -1.0 \n", "w0/t17/outdata/out_GSR.nc -29.753241 -2.170734 2.940714 10.0 -1.0 \n", "w0/t18/outdata/out_GSR.nc -29.668361 -2.273618 3.164346 10.0 -1.0 \n", "w0/t19/outdata/out_GSR.nc -29.577707 -2.367714 3.356837 10.0 -1.0 \n", "w0/t2/outdata/out_GSR.nc -29.079272 1.463278 12.125932 10.0 -1.0 \n", "w0/t20/outdata/out_GSR.nc -29.482112 -2.453928 3.520449 10.0 -1.0 \n", "w0/t3/outdata/out_GSR.nc -29.377087 1.016114 9.404751 10.0 -1.0 \n", "w0/t4/outdata/out_GSR.nc -29.606392 0.612993 7.176415 10.0 -1.0 \n", "w0/t5/outdata/out_GSR.nc -29.779514 0.249295 5.346041 10.0 -1.0 \n", "w0/t6/outdata/out_GSR.nc -29.906409 -0.079134 3.837290 10.0 -1.0 \n", "w0/t7/outdata/out_GSR.nc -29.995127 -0.375908 2.588480 10.0 -1.0 \n", "w0/t8/outdata/out_GSR.nc -30.052173 -0.644270 1.549818 10.0 -1.0 \n", "w0/t9/outdata/out_GSR.nc -30.082807 -0.887078 0.681054 10.0 -1.0 \n", "\n", " tsmear nkpt nsppol nspinor nspden \n", "w0/t0/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t1/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t10/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t11/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t12/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t13/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t14/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t15/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t16/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t17/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t18/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t19/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t2/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t20/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t3/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t4/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t5/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t6/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t7/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t8/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "w0/t9/outdata/out_GSR.nc 0.01 1 1 1 1 \n", "\n", "[21 rows x 23 columns]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Great! We managed to get a nice table with lot of useful results with just 3 lines of code and the robot!\n", "There are however two problems:\n", " \n", " - The rows of the table are not ordered by increasing H-H distance (files are sorted alphabetically)\n", " \n", " - Our dataframe contains the energy of the different configurations but we would like to plot the energy \n", " as a function of the H-H distance\n", " \n", "Well, robots can do a lot of hard work but they are a little bit stupid so \n", "we have to tell them what to do with the data. \n", "More specifically we need a way to tell the robot that, for each `GSR` file, it should get the crystalline \n", "structure, compute the distance between the first and the second atom and insert the result \n", "in our table in a given column.\n", "This kind of tasks are usually executed with `callbacks` i.e. functions that are passed in input\n", "and **automatically executed** by the framework at runtime. \n", "\n", "\"\"\n", "\n", "Let's look at the documentation of `robot.get_dataframe`:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "

\n", "\n", "
    def get_dataframe(self, with_geo=True, abspath=False, funcs=None, **kwargs):\n",
       "        """\n",
       "        Return a |pandas-DataFrame| with the most important GS results.\n",
       "        and the filenames as index.\n",
       "\n",
       "        Args:\n",
       "            with_geo: True if structure info should be added to the dataframe\n",
       "            abspath: True if paths in index should be absolute. Default: Relative to getcwd().\n",
       "\n",
       "        kwargs:\n",
       "            attrs:\n",
       "                List of additional attributes of the |GsrFile| to add to the DataFrame.\n",
       "            funcs: Function or list of functions to execute to add more data to the DataFrame.\n",
       "                Each function receives a |GsrFile| object and returns a tuple (key, value)\n",
       "                where key is a string with the name of column and value is the value to be inserted.\n",
       "        """\n",
       "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abilab.print_doc(robot.get_dataframe)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems complicated but the actual implementation of the callback is just three lines of code:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "code_folding": [], "run_control": { "marked": true }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "def hh_dist(gsr):\n", " \"\"\"\n", " This callback receives a GSR file and computes the H-H distance.\n", " The robot will call this function to compute the H-H distance, \n", " and return a (key, value) tuple that will be inserted in the pandas DataFrame.\n", " \"\"\"\n", " cart_coords = gsr.structure.cart_coords\n", " d = np.linalg.norm(cart_coords[1] - cart_coords[0])\n", " return \"hh_dist\", d\n", "\n", "with abilab.GsrRobot.from_dir(\"flow_h2\") as robot:\n", " table = robot.get_dataframe(funcs=hh_dist)\n", " table = table.sort_values(by=\"hh_dist\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As expected, now the table contains a new column with `hh_dist` in Angstrom:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"hh_dist\" in table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's print the two columns with the H-H distance and the total energy:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
hh_distenergy
w0/t0/outdata/out_GSR.nc0.529177-28.213374
w0/t1/outdata/out_GSR.nc0.556959-28.697681
w0/t2/outdata/out_GSR.nc0.584741-29.079272
w0/t3/outdata/out_GSR.nc0.612523-29.377087
w0/t4/outdata/out_GSR.nc0.640304-29.606392
w0/t5/outdata/out_GSR.nc0.668086-29.779514
w0/t6/outdata/out_GSR.nc0.695868-29.906409
w0/t7/outdata/out_GSR.nc0.723650-29.995127
w0/t8/outdata/out_GSR.nc0.751432-30.052173
w0/t9/outdata/out_GSR.nc0.779213-30.082807
w0/t10/outdata/out_GSR.nc0.806995-30.091282
w0/t11/outdata/out_GSR.nc0.834777-30.081045
w0/t12/outdata/out_GSR.nc0.862559-30.054897
w0/t13/outdata/out_GSR.nc0.890341-30.015128
w0/t14/outdata/out_GSR.nc0.918122-29.963621
w0/t15/outdata/out_GSR.nc0.945904-29.901949
w0/t16/outdata/out_GSR.nc0.973686-29.831440
w0/t17/outdata/out_GSR.nc1.001468-29.753241
w0/t18/outdata/out_GSR.nc1.029250-29.668361
w0/t19/outdata/out_GSR.nc1.057031-29.577707
w0/t20/outdata/out_GSR.nc1.084813-29.482112
\n", "
" ], "text/plain": [ " hh_dist energy\n", "w0/t0/outdata/out_GSR.nc 0.529177 -28.213374\n", "w0/t1/outdata/out_GSR.nc 0.556959 -28.697681\n", "w0/t2/outdata/out_GSR.nc 0.584741 -29.079272\n", "w0/t3/outdata/out_GSR.nc 0.612523 -29.377087\n", "w0/t4/outdata/out_GSR.nc 0.640304 -29.606392\n", "w0/t5/outdata/out_GSR.nc 0.668086 -29.779514\n", "w0/t6/outdata/out_GSR.nc 0.695868 -29.906409\n", "w0/t7/outdata/out_GSR.nc 0.723650 -29.995127\n", "w0/t8/outdata/out_GSR.nc 0.751432 -30.052173\n", "w0/t9/outdata/out_GSR.nc 0.779213 -30.082807\n", "w0/t10/outdata/out_GSR.nc 0.806995 -30.091282\n", "w0/t11/outdata/out_GSR.nc 0.834777 -30.081045\n", "w0/t12/outdata/out_GSR.nc 0.862559 -30.054897\n", "w0/t13/outdata/out_GSR.nc 0.890341 -30.015128\n", "w0/t14/outdata/out_GSR.nc 0.918122 -29.963621\n", "w0/t15/outdata/out_GSR.nc 0.945904 -29.901949\n", "w0/t16/outdata/out_GSR.nc 0.973686 -29.831440\n", "w0/t17/outdata/out_GSR.nc 1.001468 -29.753241\n", "w0/t18/outdata/out_GSR.nc 1.029250 -29.668361\n", "w0/t19/outdata/out_GSR.nc 1.057031 -29.577707\n", "w0/t20/outdata/out_GSR.nc 1.084813 -29.482112" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table[[\"hh_dist\", \"energy\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the energy in our `DataFrame` is given in eV to facilitate the integration \n", "with `pymatgen` that uses eV for energies and Angstrom for lengths.\n", "Let's add another column to our table with energies in Hartree:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "table[\"energy_Ha\"] = table[\"energy\"] * abilab.units.eV_to_Ha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and use the `plot` method of pandas `DataFrames` to plot `energy_Ha` vs `hh_dist` " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "table.plot(x=\"hh_dist\", y=\"energy_Ha\", style=\"-o\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, it should be clear that to plot the maximum of the forces as a function of the H-H distance\n", "we just need:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "table.plot(x=\"hh_dist\", y=\"max_force\", style=\"-o\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Want to plot the two quantities on the same figure?" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "table.plot(x=\"hh_dist\", y=[\"energy_Ha\", \"max_force\"], subplots=True);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your boss understands the data only if it is formatted inside a $\\LaTeX$ tabular environment? " ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\begin{tabular}{lrr}\n", "\\toprule\n", "{} & hh\\_dist & energy \\\\\n", "\\midrule\n", "w0/t0/outdata/out\\_GSR.nc & 0.529177 & -28.213374 \\\\\n", "w0/t1/outdata/out\\_GSR.nc & 0.556959 & -28.697681 \\\\\n", "w0/t2/outdata/out\\_GSR.nc & 0.584741 & -29.079272 \\\\\n", "w0/t3/outdata/out\\_GSR.nc & 0.612523 & -29.377087 \\\\\n", "w0/t4/outdata/out\\_GSR.nc & 0.640304 & -29.606392 \\\\\n", "w0/t5/outdata/out\\_GSR.nc & 0.668086 & -29.779514 \\\\\n", "w0/t6/outdata/out\\_GSR.nc & 0.695868 & -29.906409 \\\\\n", "w0/t7/outdata/out\\_GSR.nc & 0.723650 & -29.995127 \\\\\n", "w0/t8/outdata/out\\_GSR.nc & 0.751432 & -30.052173 \\\\\n", "w0/t9/outdata/out\\_GSR.nc & 0.779213 & -30.082807 \\\\\n", "w0/t10/outdata/out\\_GSR.nc & 0.806995 & -30.091282 \\\\\n", "w0/t11/outdata/out\\_GSR.nc & 0.834777 & -30.081045 \\\\\n", "w0/t12/outdata/out\\_GSR.nc & 0.862559 & -30.054897 \\\\\n", "w0/t13/outdata/out\\_GSR.nc & 0.890341 & -30.015128 \\\\\n", "w0/t14/outdata/out\\_GSR.nc & 0.918122 & -29.963621 \\\\\n", "w0/t15/outdata/out\\_GSR.nc & 0.945904 & -29.901949 \\\\\n", "w0/t16/outdata/out\\_GSR.nc & 0.973686 & -29.831440 \\\\\n", "w0/t17/outdata/out\\_GSR.nc & 1.001468 & -29.753241 \\\\\n", "w0/t18/outdata/out\\_GSR.nc & 1.029250 & -29.668361 \\\\\n", "w0/t19/outdata/out\\_GSR.nc & 1.057031 & -29.577707 \\\\\n", "w0/t20/outdata/out\\_GSR.nc & 1.084813 & -29.482112 \\\\\n", "\\bottomrule\n", "\\end{tabular}\n", "\n" ] } ], "source": [ "print(table[[\"hh_dist\", \"energy\"]].to_latex())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to send data to Windows users?" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "#table.to_excel(\"'output.xlsx\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Want to copy the dataframe to the system clipboard so that one can easily past the data into an other applications e.g. Excel?" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "#table.to_clipboard()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis of the charge density \n", "[[back to top](#top)]\n", "\n", "The `DEN.nc` file stores the density in real space on the FFT mesh.\n", "A `DEN.nc` file *has* a `structure`, and an `ebands` object with the electronic eigenvalues/occupations \n", "and a `Density` object with $n(r)$ (numpy array `.datar`) and $n(G)$ (`.datag`). \n", "\n", "Let's open the file with `abiopen` and print it:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "================================= File Info =================================\n", "Name: out_DEN.nc\n", "Directory: /Users/gmatteo/git_repos/abitutorials/abitutorials/base1/flow_h2/w0/t10/outdata\n", "Size: 217.43 kb\n", "Access Time: Sun Aug 12 00:14:57 2018\n", "Modification Time: Tue Oct 10 21:27:37 2017\n", "Change Time: Tue Oct 10 21:27:37 2017\n", "\n", "================================= Structure =================================\n", "Full Formula (H2)\n", "Reduced Formula: H2\n", "abc : 5.291772 5.291772 5.291772\n", "angles: 90.000000 90.000000 90.000000\n", "Sites (2)\n", " # SP a b c\n", "--- ---- -------- --- ---\n", " 0 H -0.07625 0 0\n", " 1 H 0.07625 0 0\n", "\n", "Abinit Spacegroup: spgid: 123, num_spatial_symmetries: 16, has_timerev: True, symmorphic: False\n", "\n", "============================== Electronic Bands ==============================\n", "Number of electrons: 2.0, Fermi level: -9.658 (eV)\n", "nsppol: 1, nkpt: 1, mband: 1, nspinor: 1, nspden: 1\n", "smearing scheme: none, tsmear_eV: 0.272, occopt: 1\n", "Bandwidth: 0.000 (eV)\n", "Valence maximum located at:\n", " spin=0, kpt=[+0.000, +0.000, +0.000], weight: 1.000, band=0, eig=-9.658, occ=2.000\n", "XC functional: LDA_XC_TETER93\n", "================================== Density ==================================\n", "Density: nspinor: 1, nsppol: 1, nspden: 1\n", "Mesh3D: nx=30, ny=30, nz=30 \n", "Integrated electronic and magnetization densities in atomic spheres:\n", " symbol ntot rsph_ang frac_coords\n", "iatom \n", "0 H 0.134448 0.31 [-0.07625, 0.0, 0.0]\n", "1 H 0.134448 0.31 [0.07625, 0.0, 0.0]\n", "Total magnetization from unit cell integration: 0.0\n" ] } ], "source": [ "with abilab.abiopen(\"flow_h2/w0/t10/outdata/out_DEN.nc\") as denfile:\n", " print(denfile)\n", " density = denfile.density" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simplest thing we can do now is to print $n(r)$ along a line passing through two points specified \n", "either in terms of two vectors or two integers defining the site index in our `structure`.\n", "Let's plot the density along the H-H bond by passing the index of the two atoms:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "density.plot_line(0, 1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Great! If we have a netcdf file and AbiPy, we don't need to use cut3d to extract the data from the file\n", "and we can do simple plots with matplotlib.\n", "Unfortunately, $n(r)$ is a 3D object and the notebook is not the most suitable tool to visualize this kind of dataset.\n", "Fortunately there are several graphical applications to visualize 3D fields in crystalline environments\n", "and AbiPy provides tools to export the data from netcdf to the text format supported by the external graphical tool.\n", "\n", "For example, one can use:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "#density.visualize(\"vesta\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "to visualize density isosurfaces of our system:\n", "\n", "![](https://github.com/abinit/abipy_assets/blob/master/h2_density.png?raw=true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions\n", "[[back to top](#top)]\n", "\n", "To summarize, we learned how to define python functions that can be used to generate many input files easily.\n", "We briefly discussed how to use these inputs to build a basic AbiPy flow without dependencies.\n", "More importantly, we showed that AbiPy provides several tools that can be used to inspect and analyze \n", "the results without having to pass necessarly through the creation and execution of the `Flow`.\n", "Last but not least, we discussed how to use `robots` to collect results from the output files and store \n", "them in pandas DataFrames\n", "\n", "AbiPy users are **strongly recommended** to familiarize themself with this kind of interface before\n", "moving to more advanced features such as the flow execution that requires a good understanding of the python language.\n", "As a matter of fact, we decided to write AbiPy in python not for efficiency reasons (actually python \n", "is usually slower that Fortran/C) but because there are tons of libraries for scientific applications \n", "(numpy, scipy, pandas, matplotlib, jupyter, etc).\n", "If you learn to use these great libraries for your work you can really boost your productivity and save a lot of time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A logical next lesson would be the the tutorial about the \n", "[ground-state properties of silicon](https://nbviewer.jupyter.org/github/abinit/abitutorials/blob/master/abitutorials/base3/lesson_base3.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to the main [Index](../index.ipynb)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.0" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 } }, "nbformat": 4, "nbformat_minor": 2 }