{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# useful to autoreload the module without restarting the kernel\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from mppi import InputFiles as I, Calculators as C, Utilities as U, Parsers as P\n", "import matplotlib.pyplot as plt\n", "import os" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "omp = 1\n", "mpi = 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial of the YamboParser class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tutorial describes the usage of the YamboParser class. The parser contains instances \n", "of several classes, namely : \n", "* the YamboOutputParser that deals with the o- file(s) produced by a yambo computation\n", "* the YamboDipolesParser that parse the dipoles database created by Yambo\n", "* the YamboDftParser that extract lattice and electronic information (ad the dft level) from the\n", " ns.db1 database written by Yambo in the SAVE folder\n", "\n", "The class is designed to deal with the output of the run method of YamboCalculator.\n", "\n", "Here we present a first example by performing a gw calculation:" ] }, { "cell_type": "code", "execution_count": 264, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initialize a Yambo calculator with scheduler direct\n" ] } ], "source": [ "code = C.YamboCalculator(omp=omp,mpi=mpi)" ] }, { "cell_type": "code", "execution_count": 265, "metadata": {}, "outputs": [], "source": [ "source_dir = 'QeCalculator_test/bands_8.save'\n", "run_dir = 'YamboCalculator_test'" ] }, { "cell_type": "code", "execution_count": 266, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SAVE folder already present in YamboCalculator_test. No operations performed.\n" ] } ], "source": [ "U.build_SAVE(source_dir,run_dir)" ] }, { "cell_type": "code", "execution_count": 267, "metadata": {}, "outputs": [], "source": [ "inp = I.YamboInput(args='yambo -d -k hartee -g n -p p -V qp',folder=run_dir)\n", "inp.set_kRange(1,2)\n", "#inp" ] }, { "cell_type": "code", "execution_count": 268, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Skip the run of qp_test1\n" ] }, { "data": { "text/plain": [ "{'output': ['YamboCalculator_test/qp_test1/o-qp_test1.qp'],\n", " 'dft': 'YamboCalculator_test/SAVE/ns.db1',\n", " 'pp': 'YamboCalculator_test/qp_test1/ndb.pp',\n", " 'QP': 'YamboCalculator_test/qp_test1/ndb.QP',\n", " 'HF_and_locXC': 'YamboCalculator_test/qp_test1/ndb.HF_and_locXC',\n", " 'dipoles': 'YamboCalculator_test/qp_test1/ndb.dipoles'}" ] }, "execution_count": 268, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = code.run(input = inp, run_dir = run_dir, name='qp_test1')\n", "results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The calculator contain the references to the o- files and database with the output data.\n", "The parser extract the data from the files, as follows" ] }, { "cell_type": "code", "execution_count": 269, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mInit signature:\u001b[0m \u001b[0mP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mYamboParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mextendOut\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", "Class that perform the parsing starting from the results :py:class:`dict` built\n", "by the :class:`YamboCalculator` class. In the actual implementation of the class the\n", "parser is able to deal with the o- files, the dipoles database and the ``ns.db1``\n", "database written in the SAVE folder.\n", "\n", "Attributes:\n", " data : contains the instance of YamboOutputParser that manage the parsing\n", " of the ``o-* files``\n", " dipoles : contains the instance of YamboDipolesParser that manages the parsing\n", " of the ``dipoles`` database\n", " dft : contains the instance of YamboDftParser that manages the parsing\n", " of the ``ns.db1`` database\n", "\u001b[0;31mInit docstring:\u001b[0m\n", "Initialize the data member of the class.\n", "\n", "Args:\n", " results (:py:class:`dict`): The dictionary of the results built by the\n", " :class:`YamboCalculator` class\n", " verbose (:py:class:`boolean`) : Determine the amount of information provided on terminal\n", " extendOut (:py:class:`boolean`) : Determine which dictionary is used as reference for the\n", " names of the variables in the :class:`YamboOutputParser`\n", "\u001b[0;31mFile:\u001b[0m ~/Applications/MPPI/mppi/Parsers/YamboParser.py\n", "\u001b[0;31mType:\u001b[0m type\n", "\u001b[0;31mSubclasses:\u001b[0m \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "P.YamboParser?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the extendOut option has to chosen in agreement with the one the input, otherwise\n", "the parser atribute the name of the variables of the o- files in an erroneous way" ] }, { "cell_type": "code", "execution_count": 270, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse file YamboCalculator_test/qp_test1/o-qp_test1.qp\n", "Parse file : YamboCalculator_test/SAVE/ns.db1\n", "Parse file : YamboCalculator_test/qp_test1/ndb.dipoles\n", "Spin dipoles not found in the ndb.dipoles\n" ] } ], "source": [ "data = P.YamboParser(results,extendOut=False,verbose=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some information on the parsed data can be obtained using the get_info method of the class" ] }, { "cell_type": "code", "execution_count": 276, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "YamboOutputParser variables structure\n", "suffix qp with dict_keys(['kpoint', 'band', 'e0', 'eme0', 'sce0'])\n", " \n", "YamboDipolesParser variables structure\n", "dip_r shape (32, 4, 4, 3, 2)\n", "dip_v shape (32, 4, 4, 3, 2)\n", "dip_spin shape (1,)\n", " \n", "YamboDipolesParser variables structure\n", "number of k points 32\n", "number of bands 8\n", "spin degeneration 1\n", "None\n" ] } ], "source": [ "data.get_info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data are encapsulated in the attributes of the class, for instance" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'qp': {'kpoint': array([1., 1., 1., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 2., 2., 2.]),\n", " 'band': array([1., 2., 3., 4., 5., 6., 7., 8., 1., 2., 3., 4., 5., 6., 7., 8.]),\n", " 'e0': array([-1.18968461e+01, -3.77496794e-06, -2.75945330e-10, 0.00000000e+00,\n", " 2.56515954e+00, 2.56515954e+00, 2.56516155e+00, 3.14665103e+00,\n", " -1.15385411e+01, -2.37583410e+00, -4.45342502e-01, -4.45339614e-01,\n", " 2.29450210e+00, 3.20550457e+00, 3.20550649e+00, 5.28482534e+00]),\n", " 'eme0': array([-1.56454691, 0.73540742, 0.73540876, 0.73540916, 1.85481677,\n", " 1.8548168 , 1.85481806, 2.39576254, -1.42713715, 0.36903103,\n", " 0.65919225, 0.65919348, 1.85364039, 1.96833673, 1.96833782,\n", " 2.67297817]),\n", " 'sce0': array([ 4.57619158, 2.0238057 , 2.0238057 , 2.0238057 , -2.01807766,\n", " -2.01807766, -2.01807766, -1.92695452, 4.60058489, 2.45789744,\n", " 2.04175227, 2.04175227, -1.99977404, -2.08206625, -2.08206625,\n", " -1.93298601])}}" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.data" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.dft" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.dipoles" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In what follows we describe the features of the various classes using dedicated examples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis of the YamboOutputParser class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The class is designed to deal with the list of o- files produced by Yambo\n", "We present some example:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "qp_output = ['YamboParser_test/qp_results/o-qp_test1.qp']" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "qp_output_extendOut = ['YamboCalculator_test/qp_test_ExtendOut/o-qp_test_ExtendOut.qp']" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "rt_output = ['YamboParser_test/rt_results/o-NETime_1000-dephase_0.01-freq_1.55-pol_circular.carriers',\n", " 'YamboParser_test/rt_results/o-NETime_1000-dephase_0.01-freq_1.55-pol_circular.spin_magnetization',\n", " 'YamboParser_test/rt_results/o-NETime_1000-dephase_0.01-freq_1.55-pol_circular.external_field',\n", " 'YamboParser_test/rt_results/o-NETime_1000-dephase_0.01-freq_1.55-pol_circular.polarization']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When the list of files is passed to the parser the extendOut option used to run the computation has to be provided,\n", "otherwise the parser could perform a wrong assignement of the names of the variables. " ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mInit signature:\u001b[0m \u001b[0mP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mYamboOutputParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiles\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mextendOut\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", "Class that performs the parsing of a Yambo o- file(s). The class ineriths from :py:class:`dict`\n", "and the instance of the class is a dictionary with the data. The keys correspond to the extension\n", "of the parsed files\n", "\n", "Args:\n", " files (:py:class:`list`): The list of strings with the names of the file to be parsed\n", " verbose (:py:class:`boolean`) : Determine the amount of information provided on terminal\n", " extendOut (:py:class:`boolean`) : Determine which dictionary is used as reference for the\n", " names of the variables\n", "\u001b[0;31mInit docstring:\u001b[0m Initialize the data member of the class.\n", "\u001b[0;31mFile:\u001b[0m ~/Applications/MPPI/mppi/Parsers/YamboOutputParser.py\n", "\u001b[0;31mType:\u001b[0m type\n", "\u001b[0;31mSubclasses:\u001b[0m \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "P.YamboOutputParser?" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "results = P.YamboOutputParser(files=qp_output,extendOut=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "results is a dictionary with the structure" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'qp': {'kpoint': array([1., 1., 1., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 2., 2., 2.]),\n", " 'band': array([1., 2., 3., 4., 5., 6., 7., 8., 1., 2., 3., 4., 5., 6., 7., 8.]),\n", " 'e0': array([-1.190291e+01, -1.176000e-05, -1.176000e-05, 0.000000e+00,\n", " 2.551225e+00, 2.551230e+00, 2.551230e+00, 3.152071e+00,\n", " -1.110872e+01, -3.914389e+00, -7.552550e-01, -7.552460e-01,\n", " 1.962407e+00, 3.490390e+00, 3.490396e+00, 6.757975e+00]),\n", " 'eme0': array([-1.50691 , 0.7861 , 0.7914 , 0.7771 , 1.884047, 1.907533,\n", " 1.906476, 2.349819, -1.21027 , 0.216875, 0.676644, 0.653277,\n", " 1.799721, 2.065016, 2.084261, 2.726886]),\n", " 'sce0': array([ 4.48108 , 2.194 , 2.201 , 2.184061, -2.137494, -2.110904,\n", " -2.112035, -2.203245, 4.52994 , 2.934759, 2.263484, 2.236098,\n", " -2.186759, -2.20382 , -2.182057, -2.267519])}}" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For several usages it can be useful to access to the results with the object.attribute sintax. \n", "In this case it is possible to use the AttributeDict class the perform this conversion" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "obj = U.AttributeDict(**results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and we can access as" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.190291e+01, -1.176000e-05, -1.176000e-05, 0.000000e+00,\n", " 2.551225e+00, 2.551230e+00, 2.551230e+00, 3.152071e+00,\n", " -1.110872e+01, -3.914389e+00, -7.552550e-01, -7.552460e-01,\n", " 1.962407e+00, 3.490390e+00, 3.490396e+00, 6.757975e+00])" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "obj.qp.e0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test of a parsing with extendOut = True" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "results = P.YamboOutputParser(files=qp_output_extendOut,extendOut=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "now all the variables are available, for instance" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.72450226, 0.84719464, 0.84719464, 0.84719464, 0.83957434,\n", " 0.83957434, 0.83957434, 0.85367947, 0.71923623, 0.8230557 ,\n", " 0.84222272, 0.84222272, 0.84416141, 0.83932913, 0.83932913,\n", " 0.85012568])" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['qp']['z_Re']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see a further example by parsing the typical files of a real-time computation" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "results = P.YamboOutputParser(rt_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case we have several files, so the dictionary has more than one key" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['carriers', 'spin_magnetization', 'external_field', 'polarization'])" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can easily perform some plots" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAD4CAYAAAD2FnFTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmD0lEQVR4nO3deXhV5bn38e+dmYQxhDlAQIKKgKgRpIiVQaXDkTrUqn0LKmpbta3VnhYvrSitrW21nlqtLVUqnmqtx9kqIjI4AhKcmCEMSpgJ8xDI8Lx/7BXYhJ1x72Tt4fe5rlzu9ayBe7Ew937GZc45REREqkvyOwAREYlOShAiIhKSEoSIiISkBCEiIiEpQYiISEgpfgcQSTk5OS4vL8/vMEREYsqiRYt2OOc6VC+PqwSRl5dHYWGh32GIiMQUM/siVLmamEREJCQlCBERCUkJQkREQoqrPggRkfoqKyujuLiY0tJSv0NpNhkZGeTm5pKamlqv45UgRCQhFRcX06pVK/Ly8jAzv8Npcs45SkpKKC4uplevXvU6R01MIpKQSktLad++fUIkBwAzo3379g2qMSlBiEjCSpTkUKWh96sEIc3m4y93sWzTXsoqKln0xU6/wxGROihBSJMq2raPvImvs2TjHi79y4d8/eH3+MOMlVz22DyWbNzD9MWbKdq2z+8wRSQEdVJLk/jHB+tYv+MAndu0AOC1zzcd3bd8814ASg4c4YdPfwzA2t98nbLKStJTkps/WBGfJCcnM2DAAMrLyzn11FOZNm0amZmZIY998sknKSws5JFHHmm2+FSDkCZx72vLmDYvaPZ+HS8uvPe1pZx815tUVOoNh5I4WrRowaeffsqSJUtIS0vjr3/9q98hHUc1CImY3QePMGjyTO6/dECDz316wZcAVDpHkpcjEq0DUfxz72tLWbZpb0Sv2a9rayb912n1Pn748OF8/vnn7Ny5k+uuu461a9eSmZnJlClTGDhwYJ3njx07lssuu4xx48bxt7/9jXfffZenn346nFtQgpDI2bDzEAD/XBBy3a8ThHof+sEjFZx+71vcfkFffjQqP6LxiUSr8vJypk+fzpgxY5g0aRJnnHEGL7/8MrNnz2bcuHF8+umndV5jypQpDBs2jF69evHggw8yf/78sONSgpCwLS7ew7y1OxjaOyfsa+05WAbAMx99qQQhzaYh3/Qj6dChQwwaNAgI1CAmTJjAkCFDeOGFFwAYOXIkJSUl7N1bd+2mU6dOTJ48mREjRvDSSy+RnZ0ddnxKEBK2/3rkfQBeu+XcsK/lgjor1u04wNa9pZzTu33Y1xWJRlV9EJGyePFi2rdvz6ZNm+o+uB7USS0RF6LlqFFGPDCXK6eEX00WiSXDhw8/2ncwd+5ccnJyaN26dZ3nffTRR0yfPp1PPvmEBx54gHXr1oUdixKENNrdryzhg6IdEb2mEeiYjlSSEYk199xzD4sWLWLgwIFMnDiRadOm1XnO4cOHueGGG5g6dSpdu3blwQcf5LrrrgvZz9cQamKSRntq3hc8Na/2DumGDkRyNYyHXbC2hIK8bJKTNLJJ4sf+/ftPKMvOzubll18+ofyaa67hmmuuCXmd9PR0Pvvss6PbF198MRdffHHY8akGIVHvg6IdfGfKfP76zhq/QxFJKEoQ0iClZRUsXB/eOkpV8xueeP9YG2m5N0FuycYTR2ts3hNYfXLN9hO/bYkkmvvuu49BgwYd93Pfffc1yZ+lJiZpkDtfWsILHxfz7n+PaPQ13l21HYD3Vp/Yf3HzM4GlN7bsTZyXuIh/nHMxNyHzzjvv5M4772zUuQ3tk1ANQhqkah2lvaVlDTqvrr6KenGBNZ6mvh/+6AyRjIwMSkpKwu7IjRVVLwzKyMio9zmqQUizOFRW0ehz//v5Y51v9762DIDrzq3fG7FEapKbm0txcTHbt2/3O5RmU/XK0fpSgpB6mbtyGzkt0xt83vQlW8L+sxPkC540s9TU1Hq/ejNRKUFIvVzzj4UA9OtS84SdUE25n23YHbEYXvxkY8SuJSJ1Ux+ERNzSCK+KGcqGnQe5asp89jWwL0RE6k8JQmLSL19Zwry1JcxcttXvUETilhKE1Mg5x4dFO6JylMfclYnTsSjiFyUIqdE/F3zJ1Y8v4I3F9etonr+2pIkjOlEU5i6RuKFOaqnRFzsOALBp96F6Hf/r15c3ZTghLdm0hy5tM+jcOoPeHVo2+58vEs8iUoMwszFmttLMisxsYoj96Wb2b2//AjPLC9p3h1e+0swu8sq6m9kcM1tmZkvN7CeRiFPizz8+WM/Vf1/AyAff8TsUkbgTdoIws2TgUeBrQD/gKjPrV+2wCcAu51wf4CHgd965/YArgdOAMcBfvOuVA7c75/oB5wA3h7imiIg0oUg0MQ0GipxzawHM7FlgLLAs6JixwD3e5+eBRyywAMpY4Fnn3GFgnZkVAYOdc/OAzQDOuX1mthzoVu2a0kTufmUJJfuP0KVN/afki0j8iUQTUzdgQ9B2sVcW8hjnXDmwB2hfn3O95qgzgAWh/nAzu9HMCs2sMJGmzDelp+Z9weuLN/sdRoP9edZqv0MQiStRPYrJzFoCLwC3OudCzr5yzk1xzhU45wo6dOjQvAEmiOCX+FTNlo7G0UMPzlzFKb+czuHyxq/7JCLHRCJBbAS6B23nemUhjzGzFKANUFLbuWaWSiA5PO2cezECcUoE/Xl2dH5bLy2rZNcBza4WiYRIJIiFQL6Z9TKzNAKdzq9WO+ZVYLz3+XJgtgvMvnoVuNIb5dQLyAc+8vonngCWO+f+GIEYpR427j5U70lxb0XxDOa1erGQSESEnSC8PoVbgBnAcuA559xSM5tsZlUvRX0CaO91Qt8GTPTOXQo8R6Dz+U3gZudcBTAM+B4w0sw+9X6+Hm6sUrPVW/cx7P7ZTHl3rd+hhO3qx0N2V4lIA0Vkopxz7g3gjWpldwd9LgW+XcO59wH3VSt7H4it1zzFuA27DgIwz4fZ0E1h14EjtMxIITU5qrvZRKKa/u+RGoVavrs5VmqNhDN+NZNfvPC532GIxDQlCDlOcE6IxpFKDfHixxs5dEQjmkQaSwkiwW3dW8qnQS/1ifGccII7X1rsdwgiMUsJIsGNfvAdvvXoB36H0WRWbdvndwgiMUsJIsHtO1x+3HaokQG/eWNF8wTTBHYfLGP1ViUJkcZQgpDjBDcxheqkjjXFuw5xwUPvsnVvqd+hiMQcJQhJCEN+M8vvEERijhJEgnrts01s2XPit+o4qDSISITojXIJ6Eh5JT/61yf0yM48YV9wE1OszHkQkaahGkQCqlqdNVQNItiHa+JjVnWVNxZvprRM8yJE6ksJQhLGTU9/zCm/fJOF63f6HYpITFCCEAAsgXofZkbxSrQi0UQJIoF8UXKAR+cUhdxX1ey088CR5gzJF4mTCkXCo07qBDJu6kd8UXKQi0/vWuMxnxfvacaIRCSaqQaRQA56C9eFWoQvkZqY5q8t4fppC3nl0+ovPhSRYKpBCHD8e6fj3WdeLent5dsYO6ibz9GIRC/VIBJQIiUDEWk81SASwO3PfcaZPdse3Q7VxHTXS0uaLyARiQmqQSSAFz4u5s6gBBCq/rCpjklz8aq0rELDXkVqoBpEAlNTE5zyyzcBeOmmr3BGj3Y+RyMSXVSDSEAu1t8l2gT2lpbXfZBIglGCiGM1vY+5Kj2UVShRiEjNlCDi1GufbeLUu99kxZYTV2RVBSK0vaVlHCmv9DsMkaihBBGnZq/YBsAyLdldLwcOlzPwnrf43hML/A5FJGooQSQkVSGqu+npjwFYsE4rvYpUUYJIQF+UHPQ7BBGJARrmGmfeW729znWVJkwrbKZoRCSWqQYRZ773xEf8P7Wjh+XPs1aTN/F1KivVFCeJLSIJwszGmNlKMysys4kh9qeb2b+9/QvMLC9o3x1e+UozuyiofKqZbTMzrQEhzerBmasAqNBwL0lwYScIM0sGHgW+BvQDrjKzftUOmwDscs71AR4Cfued2w+4EjgNGAP8xbsewJNemURIeYWGcIpI/UWiBjEYKHLOrXXOHQGeBcZWO2YsMM37/DwwyszMK3/WOXfYObcOKPKuh3PuXUBDSuqpaNv+OmdI7zpY1kzRxAdVICTRRSJBdAM2BG0Xe2Uhj3HOlQN7gPb1PLdWZnajmRWaWeH27dsbGHp8WLh+J6P/+A7/nP+F36HElUNlFeRNfJ0nP1jndygivoj5Tmrn3BTnXIFzrqBDhw5+h+OLdTsOAMdehCOR8dzCwHeXv7271udIRPwRiQSxEegetJ3rlYU8xsxSgDZAST3PlTD8e+GGug+SkO57Y7nfIYj4KhIJYiGQb2a9zCyNQKfzq9WOeRUY732+HJjtAg3mrwJXeqOcegH5wEcRiCkhlJZVsLe09n4FzQwOnxH4u95zSH04kljCThBen8ItwAxgOfCcc26pmU02s4u9w54A2ptZEXAbMNE7dynwHLAMeBO42TlXAWBm/wLmASebWbGZTQg31ngz9pEPGHjPW36HkRC+9egHnH6v/q4lsURkJrVz7g3gjWpldwd9LgW+XcO59wH3hSi/KhKxxbOVW/cFPoQYbfPSJ2qpi5RNe0oT9o17kthivpNaRESahhJEDPr4y10cPBL0BrTal16SCKqodDw2dw0HDusNdBL/tFhfjCnZf5hL//IhF/brdMK+5xcV+xBRYpm+ZDO/e3MFW/Yc4t6x/f0OR6RJqQYRYw56rxFdGvwiIM34bTa3PPMJAPtUg5AEoAQRYyxEc9Ka7fubP5AEZxgHDperqUnimhJEjHh31XZufKow5PpAmunrj9MmzeC0STP8DkOkyShBxIjx//iIt5Zt1QJyUWLT7kN+hyDS5JQgYkyllyE26heUr+atLfE7BJEmpwQR5V7/fDNF2/YdHclaqSpE1JmzYht5E19XX5DEHQ1zjXI3P/MxAElehtiyVzN6o83/vB14A90nX+7mpA4tfY5GJHJUg4gRVfWGq/+u901Hm+Bl1vcfLudweYWP0YhEjhJEFNqx/zAPvrWSyko1J8USA/pPmsHlj83zOxSRiFATUxSa+MJi3l6+laG92x8tU9dD9FuxJTB5cfFGvbhJ4oNqEFGotCzQRFGhrBBT/v7esVeTbttbynOFelmTxDbVIKLIJX/5gC5tMnBej8OzH+kXTKyaMK2QxRv3cP7JHejYKsPvcEQaRTWIKPLJl7t5Y/GWo9uvL97sYzQSjqpmpspK2HOojPKKSp8jEmk4JQiflVdU8tS89RwpP/YL5IMiTcKKF5XOcfq9b3HHi4v9DkWkwZQgfPbvwg3c/cpSHn9f6ynFo/8rDCzBrjf8SSxSgvDJlyUHWbZpL3sOlQHw+zdX+hyRNIWHvEl0ALc/9xl5E1/3MRqRhlEntU/O+8McAH54/kk+RyLNobzS8cLHx17otPPAEdplpmKh1m8XiRKqQTSjykrHAzNWHrcS6GNz1/gYkfhh3Y4DnPmrmTz54Xq/QxGplWoQzWjppr08MqdI/Q0JbsQDcwGYu3I7Z/Zox6GyCs4JmhQpEi1Ug2gGk19bRt7E11mwLjA6qbRMQx4Fdh8qY+yjH3DllPl+hyISkhJEE3pn1XY27DzI1A8CM2x//fpynyOSaPLZht1HP3+4Zgd5E18/rkzEb2piirDyiko27S6lR/tMxk/9yO9wJEZUrdI7f20JL32ykZ7tM7l2WC+fo5JEpwQRIR+u2UF2VhovLCo+bk0ekYb47fQVRz+f17cDf527ht9eOoCUZFX2pfkpQYRhb2kZf3xrFcPzc5gwrdDvcCTOjHrwHQCuHNyDR2av5vKzuvONgV18jkoSibk4WjG0oKDAFRY2/S/qJRv3sGrrPm577rMm/7NEguW2a0HxrkOsv/8bzFm5jcF52WSl63uehMfMFjnnCqqXR+RflpmNAf4EJAOPO+fur7Y/HXgKOAsoAb7jnFvv7bsDmABUAD92zs2ozzWb0kMzV/HUvPXcOrovk15dCsAz1w/h7++txcyYvWJbc4UicpziXYE5NMEzsofn55CdlcZDVwxi+pItjOnfmeQkTcCT8IVdgzCzZGAVcAFQDCwErnLOLQs65iZgoHPuB2Z2JXCJc+47ZtYP+BcwGOgKvA309U6r9ZqhhFODcM5RtG0/NzxVyPqSg426hki0KejZjvTUJEac3JG0lCS6t8uke3YL9h+uoE/Hlhw8Uk77rHSSDCodSiwJqilrEIOBIufcWu8PehYYCwT/Mh8L3ON9fh54xAJrDIwFnnXOHQbWmVmRdz3qcc2I+ddHX3LXy0uo0Cs+Jc4UfrELCH+F4M6tMygtr6Bb2xakeh3mbVqkcri8gqy0FDJSkymrqKS80pGabFRUOpKTjv03OckwjPLKSqpWPjcLvKa1SvVVRwwlq4a4ZWQf+ndrE9FrRiJBdAOC32xTDAyp6RjnXLmZ7QHae+Xzq53bzftc1zUBMLMbgRsBevTo0agbKNl/WMlBpBZb9pYCsK+0nMzUZDLSkinedZCs9BTKKxxpKUmBRGBGWUUlKcmBhJCcZFQ6R3mlwzlHSlISSV4tpbbWi+BdDqdkUQ+HvDdRRlLM924556YAUyDQxNSYa9wyMp8ffPUkrptWyLurtkc0PhG/ndypFWbQr0trTurYkozUZHp3yOJwWQW9O7SkRWoyaSlJZGelsedQGdmZaVQ6d3RorXNOiwomqEgkiI1A96DtXK8s1DHFZpYCtCHQWV3buXVdM6JSkpN46rrBFG3bx5Fyx+9nrGDuykCy6NupJau27ufHo/J5eNbqpgxDpFG+f15vtu4t5YFvn84nG3bTt2Mr2mSmNvg6OS3TAUgK+sau5JC4ItFJnUKgQ3kUgV/iC4GrnXNLg465GRgQ1El9qXPuCjM7DXiGY53Us4B8Ak2TtV4zlEgPc92+7zCpyUbbzLSjZfsPl7N1b+nRMeoize33lw/k4VmrefnmYRwur6RlWkqjkoFIlSbrpPb6FG4BZhAYkjrVObfUzCYDhc65V4EngP/1OqF3Ald65y41s+cIdD6XAzc75yq8gE+4ZrixNlSHVuknlLVMT6Flh5as/PUYduw/wgerd/DzFz5v7tAkQZzapTXLN+/lxyP7cHavbACG53fgioLudZwpEj5NlIuAom376J6dyb2vLeOdldsxOzZeXSQc6377dWYs3cqoUzseHT0kEmlNOlEu0fXp2AqA31wyAIDNew4x9LezGT+0J9PmfeFnaBJDfjq6Lw+9vYpTOrfiiWvOZvu+w5gZY/p39js0SVBKEE2gS5sWrL//GwBKEFJvPzi/N9lZqYzu14kubVrQrW0Lv0OSBKc6axOb87Pzmfuz87n49K5+hyJR6veXDySnZTqpSUl8b2geXdooMUh0UIJoYr1yssjLyeLKswOdinN+dr6/AUlU+PNVZwCQkmRcUdCdwrtGH51AJhIt1MTUTL7SJ+dos5NIq4wUnr5+CD2yM/0ORaRGqkH44HeXDeD5Hww9OilJEscvxpwCQLe2LRjWJ4fuShASxZQgfPCds3tQkJdNTsvABLw3bx3uc0TSlHLbHetT+P55vXnv5yPI79TKx4hE6kcJwkdPXjuY31wygJ7ZWX6HIk3oGwMCb4FLTjKSkky1BokZ6oPwUec2GVw9pAel3iqM6SlJHC6v9DkqiTQHfHr3BeqElpijGkQUSEtOon+31vzpykF+hyIR9PvLBwLQPiuNtplptM7QekkSW1SDiAJJScZ/fnR8P8QT4wuYMK35lw2RyLn8zFySzPjWIM2BkdikGkSUyUxL9jsECUPvDsf6k5KSjMvPyj36XgWRWKMaRJSZdftX2bT7EHsOlQEw4uQOzFmplxjFisy0ZC47M5clG/f4HYpI2JQgokyXNi3o0qYFs1ds9TsUaaQHrzjd7xBEIkJ13yhVNcN2WJ+co2Vqy45er94yzO8QRCJOCSJK9enYivl3jGLCub2OlrXXzOuodVrXNowb2pNHrjrT71BEIkYJIop1bpNx3PuAqz4Nz88JfYL4JjnJmDy2P3k5mvQo8UMJIoZUvfvvvPwOvsYhIolBndQxYNFdoymvdEx5d63foUg1L/xwKHNWaJSZxCcliBhQ1fcQaqGGXjlZrNtxoHkDkqPO6pnNWT2z/Q5DpEmoiSmGJHtr+QR1S5CeokfY3P45YYjfIYg0C/12iSE3j+zDd4f04LtDep6wb/SpnXyIKDG1ywqsqXTLiD4+RyLStNTEFENaZ6Ry3yUDQu778ag+vL1ck+uag3Po7YCSEFSDiBNJpqWkRSSylCBE6mnUKR0ByEjV/zaSGNTEFKOm/2Q4rTJSuF5LgjebP14xiNkrt9Kno14XKolBCSJGndql9XHbamFqem0yU7nkjFy/wxBpNqorxwkLMUvi4avO8CGS+HJOb81xkMQVVoIws2wzm2lmq73/tqvhuPHeMavNbHxQ+VlmttjMiszsYfMWHjKzb5vZUjOrNLOCcGKMdwNz2wDQKuPEymBPb0VYabyRXr9Du0y9LlQST7g1iInALOdcPjDL2z6OmWUDk4AhwGBgUlAieQy4Acj3fsZ45UuAS4F3w4wv7k0e25+Xbx5GdyWDJvPxLy/gvV+M9DsMkWYXboIYC0zzPk8DvhXimIuAmc65nc65XcBMYIyZdQFaO+fmO+cc8FTV+c655c65lWHGlhAyUpMZ1L2t32HELecgOyuNlunqrpPEE26C6OSc2+x93gKEms7bDdgQtF3slXXzPlcvbxAzu9HMCs2scPt2LZoWSlUzlIhIQ9SZIMzsbTNbEuJnbPBxXi3A1XCZJuOcm+KcK3DOFXTooGWws9KS/Q4hLky9JtD1pdqZJLI6683OudE17TOzrWbWxTm32Wsy2hbisI3A+UHbucBcrzy3WvnGesQsNXjk6jMY2K0t5/1hjt+hxLyRp3Ti83supHWGOqclcYXbxPQqUDUqaTzwSohjZgAXmlk7r3P6QmCG1zS118zO8UYvjavhfKmnbw7sSo/2tXdWXz2kRzNFE/uUHCTRhZsg7gcuMLPVwGhvGzMrMLPHAZxzO4FfAQu9n8leGcBNwONAEbAGmO6df4mZFQNDgdfNbEaYcYqnezuNdhKR+glraIZzrgQYFaK8ELg+aHsqMLWG4/qHKH8JeCmc2EQa6qt9O/DOKg10EKmisXtx6NbR+Tw8a7XfYcQcM/j8ngupqGj2sRYiUUlLbcShW0f3Ze1va39fgVYkPZFzgX6HdllpfociEhX0WyJBjR+a53cIIhLllCASlVZ/PeqCfoH5nbntWvgciUh0UR9EHEtOCmSBrDQ95tr8fVwBby7Zwvkna6KlSDDVIOLYaV1b84sxp/Cnqwb5HUrUG9O/MxmpmoUuEkwJIo6ZGT88/yQ6tso4cWfQQJ3h+TnNF5SIxAwlCBERCUmN04lKndTc9Y1TKS2r8DsMkailBCEJKS0lieuH9/Y7DJGopiamBPHhxJG8fdt5tR7z6NVnNlM0IhILlCASRNe2LejTsdWxghCrSWSlJ9AoHq2mIVInJQg5KrDqemK4acRJfocgEvXUB5GoQuSCwEsB49vbt32VHtmZpKXou5FIXfR/SYLp17U1AKfntvU3EJ+0TE9RchCpJ9UgEsxX+3bg/V+MIDfEi4OCm5iSDCrjv0IhIrXQV6kEFCo5JIoWWk5DpN6UICSkeOywfvLas2mTqfdMi9SXmpikVsPzc3hv9Q6/wwjb+vtrf4GSiJxINYgE1z279ncg3HPxac0UiYhEGyWIBLb6vq8x5/bzQ+6rGvIafw1NIlJfamJKYKnJifH94O3bvup3CCIxKTF+Q0ijxXpn9RUFufTp2NLvMERikmoQUquq9NC5dQZb9pb6GktD/fGK07n0zFy/wxCJWapBCNcOywOgX5fWJ+yL5QpEpt7FLRIW/R8kjDylU9wNA81MS+ai0zr5HYZITFMNQuLSd4f0iPn+ExG/KUFIrSzEQNc/XD7Qh0jq79tn5XLLiHy/wxCJeWElCDPLNrOZZrba+2+7Go4b7x2z2szGB5WfZWaLzazIzB427yufmf3BzFaY2edm9pKZtQ0nTmm8WPwS/odvn64lNUQiINwaxERglnMuH5jlbR/HzLKBScAQYDAwKSiRPAbcAOR7P2O88plAf+fcQGAVcEeYcUo93X5BX565YYjfYTTahxNH+h2CSNwIN0GMBaZ5n6cB3wpxzEXATOfcTufcLgK//MeYWRegtXNuvgtM232q6nzn3FvOuXLv/PmAxio2kx+NyucrJ+XUekw0rwLetW3tS4eISP2FmyA6Oec2e5+3AKGGjXQDNgRtF3tl3bzP1curuw6YXlMAZnajmRWaWeH27dsbEruE6TLNMRCJa3UOczWzt4HOIXbdGbzhnHNmFtEvl2Z2J1AOPF3TMc65KcAUgIKCgmj+chvTor0v4qnrBtO5TYbfYYjElToThHNudE37zGyrmXVxzm32moy2hThsI3B+0HYuMNcrz61WvjHo2tcA3wRGuUR4WXKU+cpJObxfFBvLfJ/WtTXn9e3gdxgicSfcJqZXgapRSeOBV0IcMwO40MzaeZ3TFwIzvKapvWZ2jjd6aVzV+WY2Bvg5cLFz7mCYMUojTBl3FjN/eh7JSfWrOlx6RqjWweYR7bUbkVgVboK4H7jAzFYDo71tzKzAzB4HcM7tBH4FLPR+JntlADcBjwNFwBqO9TU8ArQCZprZp2b21zDjlAbKTEshv1Mrv8MQER+FtdSGc64EGBWivBC4Pmh7KjC1huP6hyjvE05ckhhW/noMV02Zz13f7Od3KCJxSTOppVZJXvtNi9TkWo+r6iT6fTPOsk5PSebFm4ZxZo+Q8zNFJExKEFKrTq3T+e+LTubJawfX6/hkdQiIxA2t5iq1MjNuHqEWP5FEpBqENJnOrZtmXsJtF/SlnoOrRCQMShDSaPVtTTqlc/ijof7zo3OPfv7xqHzW/ja+3l8hEo2UIKTenvv+UH532YAGn/fY/zurCaIRkaamBCH1NrhXNt85u0ez/pmhXoMqIs1DCUKaXFVLVGrysTapn47ue8JxVf0KP7vwxH0A3zunJ/+cELtLkYvEGiUIabBeOVkADOjWptHXOL174NzgNZQmnNsLgLSU0P8sf/Wt/pybX/tS5CISOUoQ0mBn52Uz86fnMW5oT79DEZEmpAQhjZLfqRVWz2FMoQ6r7/K8Fw/qCqClvEV8oIlyElHhTKQOtaj798/rzTVfySOjjqU+RCTylCAkLDNuPQ8zeGzumhP2Oa+eYDQsawQfb2ZKDiI+UYKQsJzcgElwgV/89Wtcym3XgtNz2zYuKBGJCCUIiYiv9e/MS59sZGCEfqm//4uREbmOiDSeEoRExIWndWb9/Q1f/iK48alPx5YAdM/OjFBUIhIOJQhpEoO6t2XznkMNOuc7Z3enb+dWer+DSJTQMFeJuGWTL+L/fjCUrPTA94+6Rjad1rU12VlpmJmSg0gUUQ1CIi4zLfDPatq1g3lj8eajcxh65WSxcus+APLaB2Zjn39yB64d1sufQEWkVuZCDT6PUQUFBa6wsNDvMCSEOSu3MaBbG4p3HWLppj18d0hPdh44QrvM1HpPuBORpmFmi5xzBdXLVYOQZjHi5I4A5LRMZ1D3tgBkZ6X5GJGI1EV9ECIiEpIShIiIhKQEISIiISlBiIhISEoQIiISkhKEiIiEpAQhIiIhKUGIiEhIcTWT2sy2A1808vQcYEcEw4kFuufEoHtODOHcc0/nXIfqhXGVIMJhZoWhpprHM91zYtA9J4amuGc1MYmISEhKECIiEpISxDFT/A7AB7rnxKB7TgwRv2f1QYiISEiqQYiISEhKECIiEpISBGBmY8xspZkVmdlEv+OJBDPrbmZzzGyZmS01s5945dlmNtPMVnv/beeVm5k97P0dfG5mZ/p7B41nZslm9omZ/cfb7mVmC7x7+7eZpXnl6d52kbc/z9fAG8nM2prZ82a2wsyWm9nQeH/OZvZT79/1EjP7l5llxNtzNrOpZrbNzJYElTX4uZrZeO/41WY2viExJHyCMLNk4FHga0A/4Coz6+dvVBFRDtzunOsHnAPc7N3XRGCWcy4fmOVtQ+D+872fG4HHmj/kiPkJsDxo+3fAQ865PsAuYIJXPgHY5ZU/5B0Xi/4EvOmcOwU4ncC9x+1zNrNuwI+BAudcfyAZuJL4e85PAmOqlTXouZpZNjAJGAIMBiZVJZV6cc4l9A8wFJgRtH0HcIffcTXBfb4CXACsBLp4ZV2Ald7nvwFXBR1/9LhY+gFyvf9xRgL/AYzA7NKU6s8bmAEM9T6neMeZ3/fQwPttA6yrHnc8P2egG7AByPae23+Ai+LxOQN5wJLGPlfgKuBvQeXHHVfXT8LXIDj2j61KsVcWN7wq9RnAAqCTc26zt2sL0Mn7HC9/D/8D/Byo9LbbA7udc+XedvB9Hb1nb/8e7/hY0gvYDvzDa1Z73MyyiOPn7JzbCDwAfAlsJvDcFhHfz7lKQ59rWM9bCSLOmVlL4AXgVufc3uB9LvCVIm7GOZvZN4FtzrlFfsfSjFKAM4HHnHNnAAc41uwAxOVzbgeMJZAcuwJZnNgUE/ea47kqQcBGoHvQdq5XFvPMLJVAcnjaOfeiV7zVzLp4+7sA27zyePh7GAZcbGbrgWcJNDP9CWhrZineMcH3dfSevf1tgJLmDDgCioFi59wCb/t5Agkjnp/zaGCdc267c64MeJHAs4/n51yloc81rOetBAELgXxvBEQagc6uV32OKWxmZsATwHLn3B+Ddr0KVI1kGE+gb6KqfJw3GuIcYE9QVTYmOOfucM7lOufyCDzH2c657wJzgMu9w6rfc9XfxeXe8TH1Tds5twXYYGYne0WjgGXE8XMm0LR0jpllev/Oq+45bp9zkIY+1xnAhWbWzqt5XeiV1Y/fnTDR8AN8HVgFrAHu9DueCN3TuQSqn58Dn3o/XyfQ9joLWA28DWR7xxuB0VxrgMUERoj4fh9h3P/5wH+8z72Bj4Ai4P+AdK88w9su8vb39jvuRt7rIKDQe9YvA+3i/TkD9wIrgCXA/wLp8facgX8R6GMpI1BTnNCY5wpc5917EXBtQ2LQUhsiIhKSmphERCQkJQgREQlJCUJEREJSghARkZCUIEREJCQlCBERCUkJQkREQvr/wyEJj26A+7IAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "time = results['carriers']['time']\n", "elec = results['carriers']['dne']\n", "field_int = results['external_field']['Intensity']\n", "pol = results['polarization']['Pol_x']\n", "\n", "ratio = max(field_int)/max(elec)\n", "\n", "plt.plot(time,ratio*elec,label='dne')\n", "plt.plot(time,field_int,label='field_int')\n", "plt.legend()\n", "plt.show()\n", "\n", "plt.plot(time,pol,label='Pol_x')\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again we can access to the results using the attribute syntax. For instance if we are intersted to the spin_magnetization\n", "part of the resutls we can set" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "spin_results = U.AttributeDict(**results['spin_magnetization'])" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(spin_results.time,spin_results.Mc_z)\n", "plt.plot(spin_results.time,spin_results.Mv_z)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### YamboOutputParser for a ypp computation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We test the functionality of the Parser to deal with the output of a ypp -s b computation for plotting the bands structure along a path" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "bands_output = ['YamboCalculator_test/bands_test1/o-bands_test1.bands_interpolated']" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "results = P.YamboOutputParser(bands_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For instance" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.02296918, 0.04593835, 0.06890753, 0.09187671,\n", " 0.11484589, 0.13781506, 0.16078424, 0.18375342, 0.2067226 ,\n", " 0.22969177, 0.25266095, 0.27563013, 0.2985993 , 0.32156848,\n", " 0.34453766, 0.36750684, 0.39047601, 0.41344519, 0.43641437,\n", " 0.45938355, 0.48235272, 0.5053219 , 0.52829108, 0.55088434,\n", " 0.57347759, 0.59607085, 0.61866411, 0.64125737, 0.66385063,\n", " 0.68644389, 0.70903715, 0.73163041, 0.75422367, 0.77681692,\n", " 0.79941018, 0.82200344, 0.8445967 , 0.86718996, 0.88978322,\n", " 0.91237648, 0.93496974, 0.957563 , 0.98015626, 1.00274951,\n", " 1.02534277, 1.04793603, 1.07052929, 1.09312255, 1.11571581,\n", " 1.13830907, 1.1617713 , 1.18523353, 1.20869576, 1.23215799,\n", " 1.25562022, 1.27908245, 1.30254468, 1.32600691, 1.34946914,\n", " 1.37293137, 1.3963936 , 1.41985583, 1.44331806, 1.46605209,\n", " 1.48878612, 1.51152015, 1.53425418, 1.5569882 , 1.57972223,\n", " 1.60245626, 1.62519029, 1.64792432, 1.67065835, 1.69339237,\n", " 1.7161264 , 1.73886043, 1.76159446, 1.78432849, 1.80706252,\n", " 1.82979654, 1.85253057, 1.8752646 , 1.89799863, 1.92073266,\n", " 1.94346669, 1.96620071, 1.98893474, 2.01166877, 2.0344028 ,\n", " 2.05713683, 2.07987085, 2.10260488, 2.1253389 ])" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['bands_interpolated']['col0'] # kpath" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-6.92244006e+00, -6.89456750e+00, -6.80905005e+00, -6.66256275e+00,\n", " -6.45506597e+00, -6.19239804e+00, -5.88499915e+00, -5.54470821e+00,\n", " -5.18230107e+00, -4.80669380e+00, -4.42520939e+00, -4.04376626e+00,\n", " -3.66578563e+00, -3.28979422e+00, -2.90838764e+00, -2.51212605e+00,\n", " -2.09766393e+00, -1.67347735e+00, -1.25737543e+00, -8.68891659e-01,\n", " -5.25931945e-01, -2.49064080e-01, -6.50615745e-02, -3.77496810e-06,\n", " -6.29556139e-02, -2.36496842e-01, -4.82668963e-01, -7.58747799e-01,\n", " -1.03304555e+00, -1.29174174e+00, -1.53792606e+00, -1.78627954e+00,\n", " -2.05464117e+00, -2.35405922e+00, -2.68236701e+00, -3.02622904e+00,\n", " -3.37018860e+00, -3.70516988e+00, -4.03055233e+00, -4.35110015e+00,\n", " -4.67381504e+00, -5.00667217e+00, -5.35699357e+00, -5.72799830e+00,\n", " -6.11577549e+00, -6.50923119e+00, -6.89170878e+00, -7.24099965e+00,\n", " -7.52809606e+00, -7.71962799e+00, -7.78724231e+00, -7.76161105e+00,\n", " -7.69613277e+00, -7.61880787e+00, -7.55998135e+00, -7.53906476e+00,\n", " -7.55803649e+00, -7.60253717e+00, -7.64928779e+00, -7.67738206e+00,\n", " -7.67840229e+00, -7.65942859e+00, -7.63719377e+00, -7.62764820e+00,\n", " -7.59586621e+00, -7.51148300e+00, -7.37564445e+00, -7.19397685e+00,\n", " -6.97479010e+00, -6.72677168e+00, -6.45876717e+00, -6.18066409e+00,\n", " -5.90248556e+00, -5.63143506e+00, -5.36953797e+00, -5.11366020e+00,\n", " -4.85720254e+00, -4.59237979e+00, -4.31289121e+00, -4.01633676e+00,\n", " -3.70482164e+00, -3.38329315e+00, -3.05720367e+00, -2.73104398e+00,\n", " -2.40754681e+00, -2.08700139e+00, -1.76735859e+00, -1.44593649e+00,\n", " -1.12228105e+00, -8.01574663e-01, -4.98609168e-01, -2.40535400e-01,\n", " -6.34647104e-02, -3.77496810e-06])" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['bands_interpolated']['col1'] # energies of the first band included in the computation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The parser cannot determine the names of the columns because the number of colums depend on the\n", "number of bands considered. The meaning of the columns can be identified by knowing the input used to \n", "perform the post processing. " ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "r = results['bands_interpolated']\n", "kpath = r['col0']\n", "band3 = r['col1']\n", "band4 = r['col2']\n", "band5 = r['col3']\n", "band6 = r['col4']" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(kpath,band3,label='band3')\n", "plt.plot(kpath,band4,label='band4')\n", "plt.plot(kpath,band5,label='band5')\n", "plt.plot(kpath,band6,label='band6')\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis of the YamboDipolesParser class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To analyze the YamboDipolesParser we build the dipoles using Yambo. We start from a nscf\n", "computation on GaAs on a regular grid with 12 bands (8 full and 4 empties, since the bands\n", "are spin splitted)" ] }, { "cell_type": "code", "execution_count": 218, "metadata": {}, "outputs": [], "source": [ "source_dir = 'Pw_bands/gaas_nscf_so.save'\n", "run_dir = 'YamboParser_test/DipolesParser'" ] }, { "cell_type": "code", "execution_count": 219, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Create folder YamboParser_test/DipolesParser\n", "Executing command: cd Pw_bands/gaas_nscf_so.save; p2y -a 2\n", "Create a symlink of /home/marco/Applications/MPPI/sphinx_source/tutorials/Pw_bands/gaas_nscf_so.save/SAVE in YamboParser_test/DipolesParser\n", "Executing command: cd YamboParser_test/DipolesParser;OMP_NUM_THREADS=1 yambo\n" ] } ], "source": [ "U.build_SAVE(source_dir,run_dir)" ] }, { "cell_type": "code", "execution_count": 220, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'args': 'yambo -dipoles -V all',\n", " 'folder': 'YamboParser_test/DipolesParser',\n", " 'filename': 'yambo.in',\n", " 'arguments': ['DipBandsALL'],\n", " 'variables': {'StdoHash': [40.0, ''],\n", " 'Nelectro': [8.0, ''],\n", " 'ElecTemp': [0.0, 'eV'],\n", " 'BoseTemp': [-1.0, 'eV'],\n", " 'OccTresh': [1e-05, ''],\n", " 'NLogCPUs': [0.0, ''],\n", " 'DIP_Threads': [0.0, ''],\n", " 'DBsIOoff': 'none',\n", " 'DBsFRAGpm': 'none',\n", " 'PAR_def_mode': 'balanced',\n", " 'DipComputed': 'R P V Spin',\n", " 'DipBands': [[1, 12], '']}}" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inp = I.YamboInput(args='yambo -dipoles -V all',folder=run_dir)\n", "inp['variables']['DipComputed'] = 'R P V Spin'\n", "inp['arguments'].append(\"DipBandsALL\")\n", "inp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the options ``DipBandsALL`` enables the computation of the dipoles elements among all the bands, and not\n", "only in for the full-empty couples" ] }, { "cell_type": "code", "execution_count": 221, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "run command: cd YamboParser_test/DipolesParser; mpirun -np 1 yambo -F dipoles.in -J dipoles -C dipoles\n", "computation dipoles is running...\n", "computation dipoles ended\n", "\n", " There are no o-* files.\n", " Maybe you have performed a ypp computation or wait_end_run and/or\n", " the dry_run option are active?\n", " Otherwise a possible error has occured during the computation\n", " \n" ] }, { "data": { "text/plain": [ "{'output': [],\n", " 'dft': 'YamboParser_test/DipolesParser/SAVE/ns.db1',\n", " 'dipoles': 'YamboParser_test/DipolesParser/dipoles/ndb.dipoles'}" ] }, "execution_count": 221, "metadata": {}, "output_type": "execute_result" } ], "source": [ "code.run(input=inp,run_dir=run_dir,name='dipoles',mpi=1,skip=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once that the computation is over, and the database is built by Yambo we parse it" ] }, { "cell_type": "code", "execution_count": 222, "metadata": {}, "outputs": [], "source": [ "dipole_file = os.path.join(run_dir,'dipoles/ndb.dipoles')" ] }, { "cell_type": "code", "execution_count": 223, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse file : YamboParser_test/DipolesParser/dipoles/ndb.dipoles\n", "Spin dipoles not found in the ndb.dipoles\n" ] } ], "source": [ "dipoles = P.YamboDipolesParser(dipole_file)" ] }, { "cell_type": "code", "execution_count": 224, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "YamboDipolesParser variables structure\n", "dip_r shape (16, 12, 12, 3, 2)\n", "dip_v shape (16, 12, 12, 3, 2)\n", "dip_spin shape (1,)\n" ] } ], "source": [ "dipoles.get_info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CHECK WHY THERE ARE NO DIP_spin VARIABLES!!!!!!!!!!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We consider the r dipole (x component) and look for the values of the valence->conduction\n", "elements" ] }, { "cell_type": "code", "execution_count": 225, "metadata": {}, "outputs": [], "source": [ "dip_r = dipoles.dip_r" ] }, { "cell_type": "code", "execution_count": 226, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dipole for optical transtion at 0 [19.13476049 10.65663503]\n", "dipole for optical transtion at 0 [-19.13476049 10.65663503]\n", "dipole for optical transtion at 1 [-2.09054215 -2.24485556]\n", "dipole for optical transtion at 1 [ 2.09054215 -2.24485556]\n", "dipole for optical transtion at 2 [0.80568719 0.68118405]\n", "dipole for optical transtion at 2 [-0.80568719 0.68118405]\n", "dipole for optical transtion at 3 [3.04190316 2.05448711]\n", "dipole for optical transtion at 3 [-3.04190316 2.05448711]\n", "dipole for optical transtion at 4 [-1.81764062 0.16555573]\n", "dipole for optical transtion at 4 [1.81764062 0.16555573]\n", "dipole for optical transtion at 5 [ 1.97735684 -2.25344249]\n", "dipole for optical transtion at 5 [-1.97735684 -2.25344249]\n", "dipole for optical transtion at 6 [ 3.17351199 -0.92622537]\n", "dipole for optical transtion at 6 [-3.17351199 -0.92622537]\n", "dipole for optical transtion at 7 [ 1.12316434 -3.38338401]\n", "dipole for optical transtion at 7 [-1.12316434 -3.38338401]\n", "dipole for optical transtion at 8 [-0.38228667 4.01380015]\n", "dipole for optical transtion at 8 [0.38228667 4.01380015]\n", "dipole for optical transtion at 9 [1.1474797 0.31281172]\n", "dipole for optical transtion at 9 [-1.1474797 0.31281172]\n", "dipole for optical transtion at 10 [-1.62590125 2.98105547]\n", "dipole for optical transtion at 10 [1.62590125 2.98105547]\n", "dipole for optical transtion at 11 [3.22384723 1.2742764 ]\n", "dipole for optical transtion at 11 [-3.22384723 1.2742764 ]\n", "dipole for optical transtion at 12 [-1.72163113 -1.20446658]\n", "dipole for optical transtion at 12 [ 1.72163113 -1.20446658]\n", "dipole for optical transtion at 13 [0.30243476 0.72902209]\n", "dipole for optical transtion at 13 [-0.30243476 0.72902209]\n", "dipole for optical transtion at 14 [ 1.26920453 -0.89900526]\n", "dipole for optical transtion at 14 [-1.26920453 -0.89900526]\n", "dipole for optical transtion at 15 [ 1.19322441 -0.0466975 ]\n", "dipole for optical transtion at 15 [-1.19322441 -0.0466975 ]\n" ] } ], "source": [ "for k in range(len(dip_r)):\n", " print('dipole for optical transtion at',k,dip_r[k][7][8][0])\n", " print('dipole for optical transtion at',k,dip_r[k][8][7][0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CHECK : WHICH IS THE REAL AND WHICH THE IMAGINARY PART?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also compute the transition dipoles in the first spin-splitted conduction bands" ] }, { "cell_type": "code", "execution_count": 227, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dipole for optical transtion at 0 [0. 0.]\n", "dipole for optical transtion at 1 [0. 0.]\n", "dipole for optical transtion at 2 [0. 0.]\n", "dipole for optical transtion at 3 [0. 0.]\n", "dipole for optical transtion at 4 [0. 0.]\n", "dipole for optical transtion at 5 [ 3.19848985 -5.73704325]\n", "dipole for optical transtion at 6 [-2.12489731 6.41916483]\n", "dipole for optical transtion at 7 [ 5.58888916 -1.38856218]\n", "dipole for optical transtion at 8 [-1.35303055 5.16321935]\n", "dipole for optical transtion at 9 [0. 0.]\n", "dipole for optical transtion at 10 [ 11.32338459 -66.28915676]\n", "dipole for optical transtion at 11 [ 6.09155083 -11.36427652]\n", "dipole for optical transtion at 12 [0. 0.]\n", "dipole for optical transtion at 13 [-1.58889318 -0.65063289]\n", "dipole for optical transtion at 14 [2.79217099 0.63322764]\n", "dipole for optical transtion at 15 [6.74899276e-05 2.49874911e-04]\n" ] } ], "source": [ "for k in range(len(dip_r)):\n", " print('dipole for optical transtion at',k,dip_r[k][8][9][0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis of the YamboDftParser class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This database collects information about the lattice and electronic properties\n", "of the system.\n", "\n", "As a first test we consider a Pw nscf computation for GaAs and build the SAVE folder with Yambo" ] }, { "cell_type": "code", "execution_count": 232, "metadata": {}, "outputs": [], "source": [ "source_dir = 'Pw_bands/gaas_nscf_so.save'\n", "run_dir = 'YamboParser_test/DipolesParser'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create the Yambo SAVE using the function of the Utilities module" ] }, { "cell_type": "code", "execution_count": 233, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SAVE folder already present in YamboParser_test/DipolesParser. No operations performed.\n" ] } ], "source": [ "U.build_SAVE(source_dir=source,run_dir=run_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also make a fixsymm to study the content of the ns.db1 database after the fixsym procedure" ] }, { "cell_type": "code", "execution_count": 235, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Perform the fixSymm in the folder YamboParser_test/DipolesParser\n", "Initialize a Yambo calculator with scheduler direct\n", "run command: cd YamboParser_test/DipolesParser; mpirun -np 1 ypp -F FixSymm.in -J FixSymm -C FixSymm\n", "computation FixSymm is running...\n", "computation FixSymm ended\n", "\n", " There are no o-* files.\n", " Maybe you have performed a ypp computation or wait_end_run and/or\n", " the dry_run option are active?\n", " Otherwise a possible error has occured during the computation\n", " \n" ] } ], "source": [ "U.make_FixSymm(run_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We parse the ns.db1 databases in the SAVE folders, with and without fixsym procedure. \n", "\n", "We also parse the Pw data-file-schema.xml to compare the output of the two" ] }, { "cell_type": "code", "execution_count": 236, "metadata": {}, "outputs": [], "source": [ "xml = os.path.join(source_dir,'data-file-schema.xml')\n", "nsdb = os.path.join(run_dir,'SAVE','ns.db1')\n", "nsdb_fixsymm = os.path.join(run_dir,'FixSymm','SAVE','ns.db1')" ] }, { "cell_type": "code", "execution_count": 237, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse file : Pw_bands/gaas_nscf_so.save/data-file-schema.xml\n", "Parse file : YamboParser_test/DipolesParser/SAVE/ns.db1\n", "Parse file : YamboParser_test/DipolesParser/FixSymm/SAVE/ns.db1\n" ] } ], "source": [ "pw_data = P.PwParser(xml)\n", "yambo_data = P.YamboDftParser(nsdb)\n", "yambo_data_fixsym = P.YamboDftParser(nsdb_fixsymm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We comment on the meaning of some of the attributes of the classes " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of kpoints (actually in the IBZ since they are reduced by the symmetries of the lattice). If the fixsymm is performed\n", "only the simmetries preserved by the external field are mantained" ] }, { "cell_type": "code", "execution_count": 238, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "16\n", "16\n", "75\n" ] } ], "source": [ "print(pw_data.nkpoints)\n", "print(yambo_data.nkpoints)\n", "print(yambo_data_fixsym.nkpoints)" ] }, { "cell_type": "code", "execution_count": 240, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "48\n", "4\n" ] } ], "source": [ "print(len(yambo_data.sym))\n", "print(len(yambo_data_fixsym.sym))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We compare the values of members and methods in the various cases" ] }, { "cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", " [-1.66666667e-01, 1.66666667e-01, -1.66666667e-01],\n", " [-3.33333333e-01, 3.33333333e-01, -3.33333333e-01],\n", " [ 5.00000000e-01, -5.00000000e-01, 5.00000000e-01],\n", " [ 0.00000000e+00, 3.33333333e-01, 0.00000000e+00],\n", " [-1.66666667e-01, 5.00000000e-01, -1.66666667e-01],\n", " [ 6.66666667e-01, -3.33333333e-01, 6.66666667e-01],\n", " [ 5.00000000e-01, -1.66666667e-01, 5.00000000e-01],\n", " [ 3.33333333e-01, 2.77555756e-17, 3.33333333e-01],\n", " [ 0.00000000e+00, 6.66666667e-01, 0.00000000e+00],\n", " [ 8.33333333e-01, -1.66666667e-01, 8.33333333e-01],\n", " [ 6.66666667e-01, -5.55111512e-17, 6.66666667e-01],\n", " [ 0.00000000e+00, -1.00000000e+00, 0.00000000e+00],\n", " [ 6.66666667e-01, -3.33333333e-01, 1.00000000e+00],\n", " [ 5.00000000e-01, -1.66666667e-01, 8.33333333e-01],\n", " [-3.33333333e-01, -1.00000000e+00, 0.00000000e+00]])" ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.kpoints" ] }, { "cell_type": "code", "execution_count": 243, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", " [-1.66666667e-01, 1.66666667e-01, -1.66666667e-01],\n", " [-3.33333333e-01, 3.33333333e-01, -3.33333333e-01],\n", " [ 5.00000000e-01, -5.00000000e-01, 5.00000000e-01],\n", " [ 0.00000000e+00, 3.33333333e-01, 0.00000000e+00],\n", " [-1.66666667e-01, 5.00000000e-01, -1.66666667e-01],\n", " [ 6.66666667e-01, -3.33333333e-01, 6.66666667e-01],\n", " [ 5.00000000e-01, -1.66666667e-01, 5.00000000e-01],\n", " [ 3.33333333e-01, 2.77555756e-17, 3.33333333e-01],\n", " [ 0.00000000e+00, 6.66666667e-01, 0.00000000e+00],\n", " [ 8.33333333e-01, -1.66666667e-01, 8.33333333e-01],\n", " [ 6.66666667e-01, -5.55111512e-17, 6.66666667e-01],\n", " [ 0.00000000e+00, -1.00000000e+00, 0.00000000e+00],\n", " [ 6.66666667e-01, -3.33333333e-01, 1.00000000e+00],\n", " [ 5.00000000e-01, -1.66666667e-01, 8.33333333e-01],\n", " [-3.33333333e-01, -1.00000000e+00, 0.00000000e+00]])" ] }, "execution_count": 243, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data.kpoints" ] }, { "cell_type": "code", "execution_count": 245, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", " [-1.66666667e-01, 1.66666667e-01, -1.66666667e-01],\n", " [-3.33333333e-01, 3.33333333e-01, -3.33333333e-01],\n", " [ 5.00000000e-01, -5.00000000e-01, 5.00000000e-01],\n", " [ 0.00000000e+00, 3.33333333e-01, 0.00000000e+00],\n", " [-1.66666667e-01, 5.00000000e-01, -1.66666667e-01],\n", " [ 6.66666667e-01, -3.33333333e-01, 6.66666667e-01],\n", " [ 5.00000000e-01, -1.66666667e-01, 5.00000000e-01],\n", " [ 3.33333333e-01, 2.77555756e-17, 3.33333333e-01],\n", " [ 0.00000000e+00, 6.66666667e-01, 0.00000000e+00],\n", " [ 8.33333333e-01, -1.66666667e-01, 8.33333333e-01],\n", " [ 6.66666667e-01, -5.55111512e-17, 6.66666667e-01],\n", " [ 0.00000000e+00, -1.00000000e+00, 0.00000000e+00],\n", " [ 6.66666667e-01, -3.33333333e-01, 1.00000000e+00],\n", " [ 5.00000000e-01, -1.66666667e-01, 8.33333333e-01],\n", " [-3.33333333e-01, -1.00000000e+00, 0.00000000e+00],\n", " [ 5.00000000e-01, -1.66666667e-01, -1.66666667e-01],\n", " [-5.00000000e-01, -1.66666667e-01, 1.66666667e-01],\n", " [ 1.66666667e-01, -5.00000000e-01, 1.66666667e-01],\n", " [-1.66666667e-01, 5.00000000e-01, 1.66666667e-01],\n", " [-5.00000000e-01, 1.66666667e-01, 1.66666667e-01],\n", " [ 5.00000000e-01, 1.66666667e-01, -1.66666667e-01],\n", " [ 3.33333333e-01, -3.33333333e-01, -3.33333333e-01],\n", " [-6.66666667e-01, 3.33333333e-01, 6.66666667e-01],\n", " [-3.33333333e-01, 6.66666667e-01, 6.66666667e-01]])" ] }, "execution_count": 245, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data_fixsym.kpoints[0:25]" ] }, { "cell_type": "code", "execution_count": 246, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Apply a scissor of 1.0019927808361082 eV\n" ] }, { "data": { "text/plain": [ "array([-1.28100839e+01, -1.28100839e+01, -3.56650776e-01, -3.56650776e-01,\n", " -3.20579119e-11, -3.20579119e-11, -2.99191782e-11, 0.00000000e+00,\n", " 1.42000000e+00, 1.42000000e+00, 4.56612389e+00, 4.56612390e+00])" ] }, "execution_count": 246, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.get_evals(set_gap=1.42)[0]" ] }, { "cell_type": "code", "execution_count": 247, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Apply a scissor of 1.0019927808361082 eV\n" ] }, { "data": { "text/plain": [ "array([-1.28100839e+01, -1.28100839e+01, -3.56650776e-01, -3.56650776e-01,\n", " -3.20579119e-11, -3.20579119e-11, -2.99191782e-11, 0.00000000e+00,\n", " 1.42000000e+00, 1.42000000e+00, 4.56612389e+00, 4.56612390e+00])" ] }, "execution_count": 247, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data.get_evals(set_gap=1.42)[0]" ] }, { "cell_type": "code", "execution_count": 248, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Apply a scissor of 1.19446036 eV\n" ] }, { "data": { "text/plain": [ "array([-12.04885542, -12.04788568, -4.27347246, -4.24121973,\n", " -2.21835426, -2.15893974, -0.61692605, -0.61296675,\n", " 3.62174379, 3.68750566, 5.54786061, 5.60369709])" ] }, "execution_count": 248, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data_fixsym.get_evals(set_scissor=1.19446036)[40]" ] }, { "cell_type": "code", "execution_count": 249, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Direct gap system\n", "=================\n", "Gap : 0.4180072191638917 eV\n" ] }, { "data": { "text/plain": [ "{'gap': 0.4180072191638917,\n", " 'direct_gap': 0.4180072191638917,\n", " 'position_cbm': 0,\n", " 'positon_vbm': 0}" ] }, "execution_count": 249, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.get_gap()" ] }, { "cell_type": "code", "execution_count": 250, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Direct gap system\n", "=================\n", "Gap : 0.4180072191638917 eV\n" ] }, { "data": { "text/plain": [ "{'gap': 0.4180072191638917,\n", " 'direct_gap': 0.4180072191638917,\n", " 'position_cbm': 0,\n", " 'positon_vbm': 0}" ] }, "execution_count": 250, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data.get_gap()" ] }, { "cell_type": "code", "execution_count": 262, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.41800722, 0.41800722, 0.41800722, 0.41800722])" ] }, "execution_count": 262, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.get_transitions(initial=[6,7],final=[8,9])[0]" ] }, { "cell_type": "code", "execution_count": 263, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.41800722, 0.41800722, 0.41800722, 0.41800722])" ] }, "execution_count": 263, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.get_transitions(initial=[6,7],final=[8,9])[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We perform the comparison also for a ``bands`` computation in which the kpoints are\n", "defined in QuantumESPRESSO using the `tpiba_b` option that correspond to cartesian\n", "coordinates in units of $2\\pi/a_{lat}$." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "source_dir = 'Pw_bands/gaas_bands.save'\n", "run_dir = 'YamboParser_test/DftParser_bands'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create the Yambo SAVE using the function of the Utilities module" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Create folder YamboParser_test/DftParser_bands\n", "Executing command: cd Pw_bands/gaas_bands.save; p2y -a 2\n", "Create a symlink of /home/marco/Applications/MPPI/sphinx_source/tutorials/Pw_bands/gaas_bands.save/SAVE in YamboParser_test/DftParser_bands\n", "Executing command: cd YamboParser_test/DftParser_bands;OMP_NUM_THREADS=1 yambo\n" ] } ], "source": [ "U.build_SAVE(source_dir=source_dir,run_dir=run_dir)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "xml = os.path.join(source_dir,'data-file-schema.xml')\n", "nsdb = os.path.join(run_dir,'SAVE','ns.db1')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse file : Pw_bands/gaas_bands.save/data-file-schema.xml\n", "Parse file : YamboParser_test/DftParser_bands/SAVE/ns.db1\n" ] } ], "source": [ "pw_data = P.PwParser(xml)\n", "yambo_data = P.YamboDftParser(nsdb)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.5 , 0.5 , 0.5 ],\n", " [0.48333333, 0.48333333, 0.48333333],\n", " [0.46666667, 0.46666667, 0.46666667],\n", " [0.45 , 0.45 , 0.45 ],\n", " [0.43333333, 0.43333333, 0.43333333],\n", " [0.41666667, 0.41666667, 0.41666667],\n", " [0.4 , 0.4 , 0.4 ],\n", " [0.38333333, 0.38333333, 0.38333333],\n", " [0.36666667, 0.36666667, 0.36666667],\n", " [0.35 , 0.35 , 0.35 ]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.kpoints[0:10]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.5 , 0.5 , 0.5 ],\n", " [0.48333333, 0.48333333, 0.48333333],\n", " [0.46666667, 0.46666667, 0.46666667],\n", " [0.45 , 0.45 , 0.45 ],\n", " [0.43333333, 0.43333333, 0.43333333],\n", " [0.41666667, 0.41666667, 0.41666667],\n", " [0.4 , 0.4 , 0.4 ],\n", " [0.38333333, 0.38333333, 0.38333333],\n", " [0.36666667, 0.36666667, 0.36666667],\n", " [0.35 , 0.35 , 0.35 ]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data.kpoints[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that the kpoints stored in the two parser are identical" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We perform a further test with random $k$ points, specified in QuantumESPRESSO\n", "with the `tpiba` option. We compare the xml and ns.db1 database generated with the\n", "usual procedure" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parse file : YamboParser_test/random_grids/data-file-schema.xml\n", "Parse file : YamboParser_test/random_grids/ns.db1\n" ] } ], "source": [ "pw_data = P.PwParser('YamboParser_test/random_grids/data-file-schema.xml')\n", "yambo_data = P.YamboDftParser('YamboParser_test/random_grids/ns.db1')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.000000e+00, 0.000000e+00, 0.000000e+00],\n", " [-8.464520e-03, 1.853640e-03, -7.024630e-03],\n", " [ 9.818610e-03, 1.500391e-02, 1.478666e-02],\n", " [-5.753930e-03, 3.050000e-06, -1.735204e-02],\n", " [ 1.502407e-02, 8.102160e-03, 5.387760e-03],\n", " [ 9.094310e-03, 3.194920e-03, -6.427010e-03],\n", " [-8.042640e-03, 9.642650e-03, -1.917115e-02],\n", " [ 7.458350e-03, -1.704125e-02, -1.992032e-02],\n", " [ 1.077130e-02, -1.945781e-02, -1.781570e-03],\n", " [ 1.246368e-02, 1.388959e-02, 1.070112e-02]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pw_data.kpoints[0:10]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.000000e+00, 0.000000e+00, 0.000000e+00],\n", " [-8.464520e-03, 1.853640e-03, -7.024630e-03],\n", " [ 9.818610e-03, 1.500391e-02, 1.478666e-02],\n", " [-5.753930e-03, 3.050000e-06, -1.735204e-02],\n", " [ 1.502407e-02, 8.102160e-03, 5.387760e-03],\n", " [ 9.094310e-03, 3.194920e-03, -6.427010e-03],\n", " [-8.042640e-03, 9.642650e-03, -1.917115e-02],\n", " [ 7.458350e-03, -1.704125e-02, -1.992032e-02],\n", " [ 1.077130e-02, -1.945781e-02, -1.781570e-03],\n", " [ 1.246368e-02, 1.388959e-02, 1.070112e-02]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yambo_data.kpoints[0:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again the $k$ points are the same." ] }, { "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }