{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Running a wavelet computation on a methane molecule\n", "\n", "The purpose of this lesson is to get familiar with the basic variables needed to run a wavelet computation in isolated boundary conditions. At the end of the lesson, you can run a wavelet run, check the amount of needed memory and understand the important part of the output.\n", "We propose to use python in a Jupyter notebook to simplify the use of the `bigdft` executable and to have tools to combine pre-processing, execution, post-processing and analysis.\n", "\n", "## An initial run on the methane molecule\n", "\n", "As already explained in the [N2 molecule tutorial](./N2.ipynb), BigDFT uses dictionaries (a collection of pairs of key and value) for the input and output which are serialized by means of the yaml format.\n", "This allows us to manipulate dictionaries instead of files and define simple actions on them for the basic code operations, instead of manually modifying the input keys.\n", "\n", "We here introduce the `BigDFT.Inputfiles.Inpufile` class, which is a generalisation of a python dictionary and that has as class methods the _same_ methods that are available in the `BigDFT.InputActions` module.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from BigDFT import Inputfiles as I\n", "\n", "inp = I.Inputfile()\n", "inp.set_hgrid(0.55)\n", "inp.set_rmult([3.5,9.0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Beside a default input file called **input.yaml**, BigDFT requires the atomic positions for the studied system and optionaly the pseudo-potential files. \n", "For the following tutorial, a methane molecule will be used. \n", "The position file is a simple XYZ file named [CH4_posinp.xyz](CH4_posinp.xyz):\n", "
\n",
    "5  angstroemd0  # methane molecule\n",
    "free\n",
    "C        0           0           0\n",
    "H       -0.63169789 -0.63169789 -0.63169789\n",
    "H       +0.63169789 +0.63169789 -0.63169789\n",
    "H       +0.63169789 -0.63169789 +0.63169789\n",
    "H       -0.63169789 +0.63169789 +0.63169789\n",
    "
\n", "\n", "We can copy this file into the default posinp file **posinp.xyz** as ``cp CH4_posinp.xyz posinp.xyz`` or indicate it \n", "in the `posinp` keyword of the calculator options" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Running BigDFT is done using the ``bigdft`` executable in a standard Unix way.\n", "In this notebook, we use the SystemCalculator class:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Run already performed, found final file: forces_CH4.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.004 MB\n", " Walltime since initialization: 00:00:00.002190579\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_CH4.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.100 MB\n", " Walltime since initialization: 00:00:00.002369107\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n" ] } ], "source": [ "from BigDFT import Calculators as C\n", "from BigDFT.Database.Molecules import get_molecule\n", "\n", "study = C.SystemCalculator(verbose=False,skip=True,mpi_run='mpirun -np 2') #Create a calculator\n", "ch4 = study.run(input=inp,sys=get_molecule('CH4'),name=\"CH4\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All information coming from the output file **log.yaml** can now be handled easily by *ch4*, an instance of the Logfile class.\n", "Then we can display some information as:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "- Atom types:\n", " - C\n", " - H\n", "- cell: Free BC\n", "- number_of_orbitals: 4\n", "- posinp_file: CH4.yaml\n", "- XC_parameter: 1\n", "- grid_spacing: 0.55\n", "- spin_polarization: 1\n", "- total_magn_moment: 0\n", "- system_charge: 0\n", "- rmult:\n", " - 3.5\n", " - 9.0\n", "- dipole:\n", " - -0.004520998\n", " - -0.004520998\n", " - -0.004520998\n", "- energy: -8.026155368542643\n", "- fermi_level: -0.3425340751278\n", "- forcemax: 0.01861869071424\n", "- forcemax_cv: 0.0\n", "- gnrm_cv: 0.0001\n", "- nat: 5\n", "- symmetry: disabled\n", "- No. of KS orbitals:\n", " - 4\n", "\n" ] } ], "source": [ "print(ch4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The wavelet basis set, a convergence study\n", "\n", "Daubechies Wavelets is a systematic basis set (as plane waves are), which means than one can increase arbitrarily the accuracy of the results by varying some parameters which are defined in the `dft` dictionary (`inp['dft']`).\n", "We here explain what are the meaning and the typical values for the principal parameters, `hgrid` and `rmult`.\n", "\n", "![CH4-grid](./CH4-grid.png)\n", "\n", "**`hgrids`**\n", " are used to set up the basis set. In free boundary conditions, the basis set is characterised\n", " by a spatial expansion and a grid step, as shown in the side figure.\n", " There is ''one float value'' describing the ''grid steps'' in the three space directions (''i.e.'' x, y and z)\n", " or a 3D array is also accepted.\n", " These values are in bohr unit and typically range from 0.3 to 0.65. The\n", " harder the pseudo-potential, the lower value should be set up.\n", " These values are called `hgrids` in the input dictionary, and can be set by the `set_hgrid` method of the \n", " `Inpufile` class.\n", " \n", "**`rmult`**\n", " contains an array of two float values that are two multiplying factors.\n", " They multiply quantities that are chemical species dependent.\n", " The first factor is the most important since it\n", " describes ''the spatial expansion'' of the basis set (in yellow on the figure beside).\n", " Indeed the basis set is defined as a set of real space points with non-zero values.\n", " These points are on a global regular mesh and located inside spheres centered on atoms.\n", " The first multiplying factor is called `crmult` for Coarse grid Radius MULTiplier.\n", " Increasing it means that further spatial expansion is possible for the wavefunctions. \n", " Typical values are 5 to 7.\n", " The second one called `frmult` for Fine grid Radius MULTiplier is related to the fine resolution.\n", " This parameter is less pertinent for the convergence of energy and can be ignored.\n", " It is possible to indicate only one float value, the `crmult` parameter.\n", " Such parameters can be set by the method `set_rmult` of `Inputfile` class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Objective\n", "\n", "Let us run BigDFT for the following values of *hgrid* and *crmult* and plot the total energy convergence versus `hgrids`. \n", "The final total energy can be retrieved using the method `energy` from the result of each of the runs. The unit of the energies is in Hartree. \n", "This tutorial also explains how to use the ``Dataset`` class." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [], "source": [ "hgrids = [0.55, 0.5, 0.45, 0.4, 0.35, 0.3, 0.25, 0.2] #bohr\n", "crmult = [3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This precision plot shows the systematicity of the wavelet basis set: by improving the basis set, we improve the absolute value of the total energy.\n", "\n", "\n", "Indeed, there are two kind of errors arising from the basis set. \n", "The first one is due to the fact the basis set can't account for quickly varying wavefunctions (value of `hgrids` should be decreased). \n", "The second error is the fact that the wavefunctions are constrained to stay inside the defined basis set (output values are zero). \n", "In the last case `crmult` should be raised." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Construction of the input dataset dictionaries\n", "\n", "Let us build three different dataset of inputfiles, the first two varying `hgrid` and `crmult` and the last by varying the two together.\n", "We also label each of the input dictionaries by a unique name identifying the run." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from BigDFT import Datasets as D\n", "from copy import deepcopy\n", "# study = C.SystemCalculator(verbose=False,skip=True,mpi_run='mpirun -np 2') \n", "pos = ch4.log['posinp']\n", "\n", "h_and_c_dataset = D.Dataset('h_and_c')\n", "for h,c in zip(hgrids,crmult):\n", " inp_run = deepcopy(inp)\n", " inp_run.set_hgrid(h)\n", " inp_run.set_rmult([c,9.0])\n", " h_and_c_dataset.append_run(id={'h':h,'c':c},run_dir='conv-CH4',input=inp_run,posinp=pos,runner=study)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [], "source": [ "h_only_dataset = D.Dataset('h_only')\n", "for h in hgrids:\n", " inp_run = deepcopy(inp)\n", " inp_run.set_hgrid(h)\n", " h_only_dataset.append_run(id={'h':h},run_dir='conv-CH4',input=inp_run,posinp=pos,runner=study)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [], "source": [ "c_only_dataset = D.Dataset('c_only')\n", "for c in crmult:\n", " inp_run = deepcopy(inp)\n", " inp_run.set_rmult([c,9.0])\n", " c_only_dataset.append_run(id={'c':c},run_dir='conv-CH4',input=inp_run,posinp=pos,runner=study)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then run the three datasets:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Run already performed, found final file: forces_h__0.55.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.172 MB\n", " Run already performed, found final file: forces_h__0.55.yaml\n", " Walltime since initialization: 00:00:00.001698076\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.988 MB\n", " Walltime since initialization: 00:00:00.001490718\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.992 MB\n", " Walltime since initialization: 00:00:00.001515348\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.064 MB\n", " Walltime since initialization: 00:00:00.001507999\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.45.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.996 MB\n", " Walltime since initialization: 00:00:00.001682716\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.45.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.084 MB\n", " Walltime since initialization: 00:00:00.001619002\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.4.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Run already performed, found final file: forces_h__0.4.yaml\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.248 MB\n", " Walltime since initialization: 00:00:00.001527633\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.156 MB\n", " Walltime since initialization: 00:00:00.001563816\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.35.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.240 MB\n", " Walltime since initialization: 00:00:00.001326137\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.35.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.996 MB\n", " Walltime since initialization: 00:00:00.001441626\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.3.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.184 MB\n", " Run already performed, found final file: forces_h__0.3.yaml\n", " Walltime since initialization: 00:00:00.001690333\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.248 MB\n", " Walltime since initialization: 00:00:00.001546023\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.25.yaml\n", " Run already performed, found final file: forces_h__0.25.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.176 MB\n", " Walltime since initialization: 00:00:00.002103872\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.184 MB\n", " Walltime since initialization: 00:00:00.001524949\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_h__0.2.yaml\n", " Run already performed, found final file: forces_h__0.2.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Memory Consumption Report:\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.996 MB\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.200 MB\n", " Walltime since initialization: 00:00:00.001664154\n", " Max No. of dictionaries used: 1127 Walltime since initialization: 00:00:00.001912211\n", " #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__3.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.256 MB\n", " Walltime since initialization: 00:00:00.001981150\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__3.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.016 MB\n", " Walltime since initialization: 00:00:00.002668089\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Run already performed, found final file: forces_c__4.0.yaml\n", " Run already performed, found final file: forces_c__4.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.244 MB\n", " Walltime since initialization: 00:00:00.001412816\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.188 MB\n", " Walltime since initialization: 00:00:00.001349545\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__4.5.yaml\n", " Run already performed, found final file: forces_c__4.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.120 MB\n", " Walltime since initialization: 00:00:00.001477466\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.068 MB\n", " Walltime since initialization: 00:00:00.001418465\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.0.yaml\n", " Run already performed, found final file: forces_c__5.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.068 MB\n", " Walltime since initialization: 00:00:00.001418233\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.184 MB\n", " Walltime since initialization: 00:00:00.001589820\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.172 MB\n", " Walltime since initialization: 00:00:00.001658198\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.004 MB\n", " Walltime since initialization: 00:00:00.001729590\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.020 MB\n", " Walltime since initialization: 00:00:00.001622083\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.232 MB\n", " Walltime since initialization: 00:00:00.002389479\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.092 MB\n", " Walltime since initialization: 00:00:00.001614621\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.908 MB\n", " Walltime since initialization: 00:00:00.002074298\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__7.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.932 MB\n", " Walltime since initialization: 00:00:00.001451341\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__7.0.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.260 MB\n", " Walltime since initialization: 00:00:00.001538055\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__3.5,h__0.55.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.204 MB\n", " Walltime since initialization: 00:00:00.001743304\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__3.5,h__0.55.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.124 MB\n", " Walltime since initialization: 00:00:00.001281943\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__4.0,h__0.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.156 MB\n", " Walltime since initialization: 00:00:00.001476633\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__4.0,h__0.5.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.036 MB\n", " Walltime since initialization: 00:00:00.001665277\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Run already performed, found final file: forces_c__4.5,h__0.45.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.248 MB\n", " Walltime since initialization: 00:00:00.001468183\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__4.5,h__0.45.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.028 MB\n", " Walltime since initialization: 00:00:00.001519230\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.0,h__0.4.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.204 MB\n", " Walltime since initialization: 00:00:00.002425679\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.0,h__0.4.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.112 MB\n", " Walltime since initialization: 00:00:00.002324924\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__5.5,h__0.35.yaml\n", " Run already performed, found final file: forces_c__5.5,h__0.35.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.092 MB\n", " Walltime since initialization: 00:00:00.001443078\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.032 MB\n", " Walltime since initialization: 00:00:00.001495005\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.0,h__0.3.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.984 MB\n", " Walltime since initialization: 00:00:00.001357514\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.0,h__0.3.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.012 MB\n", " Walltime since initialization: 00:00:00.001379205\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.5,h__0.25.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.000 MB\n", " Walltime since initialization: 00:00:00.001506376\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__6.5,h__0.25.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.244 MB\n", " Walltime since initialization: 00:00:00.001675729\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Run already performed, found final file: forces_c__7.0,h__0.2.yaml\n", " Run already performed, found final file: forces_c__7.0,h__0.2.yaml\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.952 MB\n", " Walltime since initialization: 00:00:00.001755290\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 13.196 MB\n", " Walltime since initialization: 00:00:00.001649410\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n" ] } ], "source": [ "h_only_dataset.run();\n", "c_only_dataset.run();\n", "h_and_c_dataset.run();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Handling the dataset dictionaries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now store the energies of each of the dataset runs, and identify the minimum as the minimum value from the `h_and_c` dataset:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from numpy import array as arr\n", "\n", "energies_h = arr(h_only_dataset.fetch_results(attribute='energy'))\n", "energies_c = arr(c_only_dataset.fetch_results(attribute='energy'))\n", "energies_hc = arr(h_and_c_dataset.fetch_results(attribute='energy'))\n", "#find the minimum\n", "emin = min(energies_hc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the energy values varying the grid spacing or the extension" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.xlabel('Grid step (Bohr)')\n", "plt.plot(hgrids,energies_h-emin,label='crmult=3.5')\n", "plt.plot(hgrids,energies_hc-emin,label='varying hgrids+crmult')\n", "plt.yscale('log')\n", "plt.legend(loc='best')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "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.xlabel('Crmult value')\n", "plt.plot(crmult,energies_c-emin,label='hgrid=0.55')\n", "plt.plot(crmult,energies_hc-emin,label='varying hgrids+crmult')\n", "plt.yscale('log')\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Considerations\n", "\n", "We see that _both_ the parameters `hgrids` and `rmult` have to be decreased and increased (respectively) in order to achieve convergence. Increasing only one of the two parameter will eventually lead to saturation of the absolute error on the energy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a more detailed description of `Dataset`, go to this [tutorial](./Datasets.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fine tuning of the basis set\n", "The multi-scale property of the wavelets is used in BigDFT and a two level grid is used for the calculation. \n", "We've seen previously the coarse grid definition using the the multiplying factor `rmult`. \n", "The second multiplying value on this line of the input file is used for the fine grid and is called `frmult`. \n", "Like `crmult`, it defines a factor for the radii used to define the fine grid region where the number of degrees of freedom\n", "is indeed eight times the one of the coarse grid. It allows to define region\n", "near the atoms where the wavefunctions are allowed to vary more\n", "quickly. Typical values for this factor are 8 to 10. It's worth to\n", "note that even if the value of the multiplier is greater than `crmult` it defines a smaller region due to the fact that\n", "the units which are associated to these radii are significantly different.\n", "\n", "The physical quantities used by `crmult` and `frmult` can be changed in the pseudo-potential by adding\n", "an additional line with two values in bohr. The two values that the\n", "code is using (either computed or read from the pseudo-potential files) are output in the following way in the screen output:\n", " \n", "
\n",
    " - Symbol                              : C #Type No.  01\n",
    "   No. of Electrons                    :  4\n",
    "   No. of Atoms                        :  1\n",
    "   Radii of active regions (AU):\n",
    "     Coarse                            :  1.58437\n",
    "     Fine                              :  0.30452\n",
    "     Coarse PSP                        :  1.30510\n",
    "     Source                            : Hard-Coded\n",
    " - Symbol                              : H #Type No.  02\n",
    "   No. of Electrons                    :  1\n",
    "   No. of Atoms                        :  4\n",
    "   Radii of active regions (AU):\n",
    "     Coarse                            :  1.46342\n",
    "     Fine                              :  0.20000\n",
    "     Coarse PSP                        :  0.00000\n",
    "     Source                            : Hard-Coded
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysing the output\n", "\n", "The output of BigDFT is divided into four parts:\n", "- Input values are printed out, including a summary of the\n", " different input files (DFT calculation parameters, atom positions,\n", " pseudo-potential values...);\n", "- Input wavefunction creation, usually called \"input guess\";\n", "- The SCF (Self-Consistent Field) loop itself;\n", "- The post SCF calculations including the forces calculation and\n", " other possible treatment like a finite size effect estimation or a\n", " virtual states determination.\n", "\n", "### The system parameters output\n", "\n", "All the read values from the different input files are printed\n", "out at the program startup. Some additional values are provided there\n", "also, like the memory consumption. Values are given for one process,\n", "which corresponds to one core in an MPI environment." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Memory {'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39}\n", "Estimated Memory Peak 39 MB\n" ] } ], "source": [ "print('Memory',ch4.memory)\n", "print('Estimated Memory Peak',ch4.memory_peak,'MB')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The overall memory requirement needed for this calculation is thus: 39 MB (Estimated Memory Peak) which is provided by the`memory_peak` attribute.\n", "\n", "In this example, the memory requirement is given for one process run and the peak of memory will be in the initialisation during the Kernel calculation, while the SCF loop will reach 36MB during the Poisson solver calculation. For bigger systems, with more orbitals, the peak of memory is usually reached during the Hamiltonian application.\n", "\n", "### Exercise\n", "\n", "Run a script to estimate the memory requirement of a run before submitting it to the queue system of a super-computer\n", "using the `dry_run` option.\n", "\n", "It reads the same input, and is thus convenient to validate inputs.\n", "\n", "Try several values from 1 to 6 and discuss the memory distribution.\n", "\n", "### Solution" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:46.800.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n", " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:47.009.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n", " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:47.206.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n", " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:47.402.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n", " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:47.586.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n", " log of the run will be written in logfile: ./log-CH4_mem.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH4_mem.23:08:47.768.yaml\n", "{'Accumulated memory requirements during principal run stages (MiB.KiB)': {'Kernel calculation': 39.271, 'Density Construction': 23.692, 'Poisson Solver': 36.173, 'Hamiltonian application': 23.891, 'Orbitals Orthonormalization': 23.891}, 'Memory requirements for principal quantities (MiB.KiB)': {'Subspace Matrix': 0.1, 'Single orbital': 0.94, 'All (distributed) orbitals': 0.745, 'Wavefunction storage size': 5.92, 'Nonlocal Pseudopotential Arrays': 0.46, 'Full Uncompressed (ISF) grid': 3.224, 'Workspaces storage size': 0.211}, 'Estimated Memory Peak (MB)': 39} \n", "\n" ] } ], "source": [ "study = C.SystemCalculator(dry_run=True,verbose=False) #Create a calculator\n", "peak = []\n", "for i in range(1,7):\n", " dry = study.run(input=inp,sys=get_molecule('CH4'),dry_mpi=i,name=\"CH4_mem\")\n", " # p = dry.memory_peak\n", " print(dry.memory,'\\n')\n", "# for i,p in enumerate(peak):\n", "# print(\"mpi=\",i+1,\"Estimated memory peak (MB)\",p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "BigDFT distributes the orbitals over the available processes.\n", "The value `All (distributed) orbitals` does not decrease anymore after 4 processes since there are only 4 bands in our example). \n", "This means that running a parallel job with more processors than orbitals will result in a bad speedup. \n", "The number of cores involved in the calculation might be however increased via OMP parallelisation.\n", "\n", "### The input guess\n", "\n", "The initial wavefunctions in BigDFT are calculated using the atomic orbitals for all the electrons of the $s$, $p$, $d$ shells, obtained from the solution of the PSP self-consistent equation for the isolated atom." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'Policy': 'Wavefunctions from PSP Atomic Orbitals',\n", " 'Total No. of Atomic Input Orbitals': 8,\n", " 'Atomic Input Orbital Generation': [{'Atom Type': 'C',\n", " 'Electronic configuration': {'s': [2.0], 'p': ['2/3', '2/3', '2/3']}},\n", " {'Atom Type': 'H', 'Electronic configuration': {'s': [1.0]}}],\n", " 'Wavelet conversion succeeded': True,\n", " 'Deviation from normalization': 0.000301,\n", " 'GPU acceleration': False,\n", " 'Total electronic charge': 7.999998896328,\n", " 'Poisson Solver': {'BC': 'Free', 'Box': [75, 75, 75], 'MPI tasks': 1},\n", " 'Expected kinetic energy': 7.2067994418,\n", " 'Energies': {'Ekin': 7.2112355851,\n", " 'Epot': -10.6242728776,\n", " 'Enl': 0.77958992358,\n", " 'EH': 15.0808904199,\n", " 'EXC': -3.15395493145,\n", " 'EvXC': -4.12420760879},\n", " 'EKS': -7.166513305115721,\n", " 'Input Guess Overlap Matrices': {'Calculated': True, 'Diagonalized': True},\n", " 'Orbitals': [{'e': -0.6524376770958, 'f': 2.0},\n", " {'e': -0.3649369847215, 'f': 2.0},\n", " {'e': -0.3649369847215, 'f': 2.0},\n", " {'e': -0.3648107610829, 'f': 2.0},\n", " {'e': 0.4030001433315, 'f': 0.0},\n", " {'e': 0.4030001433315, 'f': 0.0},\n", " {'e': 0.403297797035, 'f': 0.0},\n", " {'e': 0.6121760122025, 'f': 0.0}],\n", " 'IG wavefunctions defined': True,\n", " 'Accuracy estimation for this run': {'Energy': 0.00444,\n", " 'Convergence Criterion': 0.00111}}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ch4.log['Input Hamiltonian']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The corresponding hamiltonian is then diagonalised and the\n", "n_band (``norb`` in the code notations) lower eigenfunctions are used to start the SCF loop. \n", "BigDFT outputs the eigenvalues, in the following example, 8 electrons were used in the\n", "input guess and the resulting first fourth eigenfunctions will be used\n", "for a four band calculation.\n", "\n", "
\n",
    "Input Guess Overlap Matrices: {Calculated: true, Diagonalized: true}\n",
    "Orbitals:\n",
    "- {e: -0.6493539153869, f: 2.0}\n",
    "- {e: -0.3625626366055, f: 2.0}\n",
    "- {e: -0.3624675839372, f: 2.0}\n",
    "- {e: -0.3624675839372, f: 2.0} -- Last InputGuess eval, H-L IG gap:  20.6959 eV\n",
    "- {e: 0.3980916655348, f: 0.0}  -- First virtual eval\n",
    "- {e: 0.3983087771728, f: 0.0}\n",
    "- {e: 0.3983087771728, f: 0.0}\n",
    "- {e: 0.5993393223683, f: 0.0}\n",
    "
\n", "\n", "### The SCF loop\n", "\n", "The SCF loop follows a direct minimisation scheme and is made of the following steps:\n", "- Calculate the charge density from the previous wavefunctions.\n", "- Apply the Poisson solver to obtain the Hartree potential from the\n", " charges and calculate the exchange-correlation energy and the energy\n", " of the XC potential thanks to the chosen functional.\n", "- Apply the resulting hamiltonian on the current wavefunctions.\n", "- Precondition the result and apply a steepest descent or a DIIS\n", " history method. This depends on ``idsx``, not specified in the\n", " present input. It is therefore set to the default\n", " value, which is 6 (for an history of 6 previous set of vectors. To perform a SD \n", " minimisation one should add \"``idsx: 0``\" to the *dft* dictionary of *inp*.\n", "- Orthogonalise the new wavefunctions.\n", "\n", "Finally the total energy and the square norm of the residue\n", "(gnrm) are printed out. The *gnrm* value is the stopping criterion. \n", "It can be chosen using `gnrm_cv` in the *dft* dictionary. \n", "The default value (1e-4) is used here and a good value can reach 1e-5." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gnrm_cv by default 0.0001\n" ] } ], "source": [ "print('gnrm_cv by default',ch4.gnrm_cv)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The minimisation scheme coupled with DIIS (and thanks to the good preconditioner) \n", "is a very efficient way to obtain convergence for systems with a gap, even with a very small one. \n", "Usual run should reach the 1e-4 stop criterion within 15 to 25 iterations. \n", "Otherwise, there is an issue with the system, either there is no gap, \n", "or the input guess is too symmetric due to the LCAO diagonalization, specific spin polarization..." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAovUlEQVR4nO3deXxNd/7H8dc3i0QI2gi1NtTW2EJCLa2ltEWly1BLi6JotZRWZ1od2pmfbtNSaqaxtCUtxjJoiaVVZigVU0JK0VB7WnvVFksS398fwViiiSQ35+be9/Px8Hj0nnvvJ+9e8ck353zOOcZai4iIeD4fpwOIiEj+UMMXEfESavgiIl5CDV9ExEuo4YuIeAk/pwP8npIlS9qwsDCnY4iI5JukpCQAqlevnuMaCQkJR6y1oddud8uGb4yJBqKrVKnCunXrnI4jIpJvWrRoAcDy5ctzXMMYsyez7W65S8daG2et7Ve8eHGno4iIeAy3XOGLiHirYcOGuay2Gr6IiBtp3bq1y2qr4YsIAKmpqSQnJ3P27Fmno3i18+fPA1CoUKEsXxsYGEj58uXx9/fPVm01fBEBIDk5meDgYMLCwjDGOB3Ha2V3Ssday9GjR0lOTqZSpUrZqu2WB21FJP+dPXuWkJAQNfsCwhhDSEjITf1GpoYvIpep2RcsN/v35ZENf+X2w0yJ340u/Swi8j8e2fDnJ/7C8Hmb6RW7lkMndQBKpCCaPn06b775JrGxsQwYMCDP6n722WfUqlWLmjVrEh4ezsiRIwHo2bMns2fPvuq1RYsWverxiRMnKFeuXJ7myY6wsDCOHDmS6zpu2fCNMdHGmInHjx/P0fvf7ViH/3u4JvE7jtJmzEq+2nwgjxOKiKt9+eWXtGnTJk9rLl68mDFjxrBkyRI2b97M+vXruZkTPIcPH07z5s3zNNO1ypUrR7ly5VxS2y0bfm7PtDXG0KNxGAufv4eyJQJ5ekoCL8/eyKlzaXmcVERcwVpLYmIi9evXv2r7nj17aNWqFXXq1KFVq1bs3bsXgB07dtCoUSMaNGjAa6+9dt3K/JK3336bkSNHUrZsWSBjrLFv377ZypSQkMDBgwe5//77M33+5MmTVKpUidTUVCDjt4GwsDBSU1P56KOPaNCgAXXr1qVDhw6kpKQAGb9V9O/fn5YtW1K5cmVWrFjB888/T4MGDejZs2e2ct0Mjx7LrFKqKHP7N+WDZdsYt3wH8TuPMrpzBJG33+J0NBG39te4zWz55USe1gwvW4zXo2tm67UbNmygbt261x2UHDBgAD169ODJJ59k0qRJPP/883zxxRcMGjSIQYMG0bVrV8aPH3/Duj/88AORkZE3fP6Pf/wjb7zxxnXbL1y4wJAhQ5gyZQrLli3L9L3BwcG0aNGChQsX8sgjjzBjxgw6dOiAv78/f/jDHy7/YBk2bBiffPIJAwcOBODYsWP8+9//Zv78+URHR/P1118zZswYWrZsSWJiIhEREVl9XNnmliv8vFTIz4c/PlCDmU835oK1PDZ+Ne8vSSI1/YLT0UTkBr788kvatm173fb4+Hgef/xxALp3786qVasub3/ssccALj+fE++99x6JiYmX/1wSExNDu3btqFChwu++v0+fPkyePBmAyZMn06tXLyDjB80999xD7dq1mTZtGps3b778nujoaIwx1K5dm9KlS1OiRAn2799PzZo12b17d47/XzLj0Sv8KzUIu5XFg+7hr3FbGPvvn1ix7TCjO0dQOTTzX/1EvFl2V+KusmTJEubMmZPl67IaS/zzn//MwoULAUhMTKRmzZokJCRw77333lSe+Ph4Vq5cSUxMDKdOneL8+fMULVqUd95556rXNW3alN27d7NixQrS09OpVasWkLHr5osvvqBu3brExsZedSXMgIAAAHx8fC7/96XHaWl5uxva41f4VwoO9GfkY3UZ90R99vyaQruxK5m6Zo/GN0XcyPHjx0lLSyMkJOS655o0acKMGTMAmDZtGnfffTcAjRo1uvwD4tLzAG+++eZVq/WhQ4fypz/9iQMHMgY5zp07x9ixY7PMNG3aNPbu3cvu3bsZOXIkPXr0uK7ZX9KjRw+6du16eXUPGfv3y5QpQ2pqKtOmTcvGp+AaXtXwL2lbuwxfDW5Gw0ohDPviB576dB2HT55zOpaI12vXrh3z5s274QXExo4dy+TJk6lTpw5Tpkzhgw8+AGDMmDG8//77NGzYkP37999w8qZdu3Y899xztG7dmpo1axIZGZnrVfRrr73G/PnzLz9+4oknOHbsGF27dr28bcSIEdx1113cd9991KhRI1dfLzeMO69uo6KirCtvgGKt5bP4Pby1aCtFA/x4p0Md7gsv7bKvJ+LOtm7dyp133ul0DPr06UOfPn1o1KhRtt+T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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ch4.wfn_plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The post-SCF treatments\n", "At the end of the SCF loop, a diagonalisation of the current hamiltonian is done to obtain Kohn-Sham eigenfunctions. The\n", "corresponding eigenvalues are also given." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[BandArray([[-0.61846333, -0.34256806, -0.34256806, -0.34253408]])]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ch4.evals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The forces are then calculated." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[{'C': [7.641720525072e-06, 7.64172052622e-06, 7.641720553674e-06]},\n", " {'H': [-0.01069867591423, -0.01069867591424, -0.01069867591424]},\n", " {'H': [-0.01077871224919, 0.01073487322146, 0.01073487322145]},\n", " {'H': [0.01073487322145, -0.0107787122492, 0.01073487322145]},\n", " {'H': [0.01073487322145, 0.01073487322145, -0.01077871224921]}]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ch4.log['Atomic Forces (Ha/Bohr)']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some other post-SCF may be done depending on the parameters in the *dft* dictionary of *inp*.\n", "\n", "### Exercise\n", "Run `bigdft` when varying the DIIS history length and discuss the memory consumption.\n", "\n", "Reducing the DIIS history is a good way to reduce the memory consumption when one cannot increase the\n", "number of processes. Of course this implies more iterations in SCF loops." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding a charge\n", "BigDFT can treat charged system without the requirement to add a compensating background like in plane waves.\n", "The additional charge to add to the system is set in the *dft* dictionary with the *qcharge* key. \n", "\n", "### Exercise \n", "Remove the last hydrogen atom in the previous methane example and modify to add an electron. \n", "Then run BigDFT for an electronic convergence.\n", "\n", "### Solution" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " log of the run will be written in logfile: ./log-CH3m.yaml\n", " log of the run will be written in logfile: ./log-CH3m.yaml\n", " Logfile existing, renamed into: ./logfiles/log-CH3m.23:08:48.373.yaml\n" ] } ], "source": [ "inp3 = I.Inputfile()\n", "inp3['dft'] = {'hgrids': 0.55, 'nrepmax': 'accurate', 'qcharge': -1.0}\n", "inp3['posinp'] = 'CH3-_posinp.xyz'\n", "\n", "study = C.SystemCalculator(verbose=False,skip=True,mpi_run='mpirun -np 2')\n", "ch3m = study.run(input=inp3,name=\"CH3m\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can notice that the total charge in the system is indeed -8 thanks to the additional charge. \n", "The convergence rate is still good for this CH$_3^-$ radical since it is a closed shell system." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "- Atom types:\n", " - C\n", " - H\n", "- cell: Free BC\n", "- number_of_orbitals: 4\n", "- posinp_file: CH3-_posinp.xyz\n", "- XC_parameter: 1\n", "- grid_spacing: 0.55\n", "- spin_polarization: 1\n", "- total_magn_moment: 0\n", "- system_charge: -1.0\n", "- rmult:\n", " - 5.0\n", " - 8.0\n", "- dipole:\n", " - 0.326025\n", " - -0.3399956\n", " - -0.3399956\n", "- energy: -7.361791816825809\n", "- fermi_level: 0.1058352419843\n", "- forcemax: 0.01214557146397\n", "- forcemax_cv: 0.0\n", "- gnrm_cv: 0.0001\n", "- nat: 4\n", "- symmetry: disabled\n", "- No. of KS orbitals:\n", " - 4\n", "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAruElEQVR4nO3de3zO9f/H8cdrZ5vD2BA2puY4ZtqciaJyGB0QigwlSuicou+3b0V9k/Atp3KIyiFUtijp+xWxcpyzOVTanEfOhvH+/bHxc7bTtc/nuq7X/XbbLdfnc12v6znNa5/r/Xl/3h8xxqCUUsr1eVgdQCmlVMHQhq+UUm5CG75SSrkJbfhKKeUmtOErpZSb8LI6wM0EBwebsLAwq2MopVSBSU5OBqBKlSq5rrF69eo0Y0zJq7fbuuGHhYWxatUqq2MopVSBadasGQCLFy/OdQ0R2XW97Tqko5RSbsLWR/hKKeVuBg8e7LDa2vCVUspGWrRo4bDa2vCVcnHnzp0jNTWV9PR0q6OobDh79iwAPj4+t3yun58fISEheHt7Z6u2NnylXFxqaipFihQhLCwMEbE6jrqF7M7SMcZw6NAhUlNTqVixYrZq2/KkrYi0FZEJR48etTqKUk4vPT2doKAgbfYuRkQICgrK0Sc3WzZ8Y0y8MaZ3sWLFrI6ilEvQZu+acvr/1ZYNP69+/f0Qk5f9YXUMpZSyFZds+LNXp/Jm/Gbe+34rut6/UvYyffp03nnnHaZMmUK/fv3yre7UqVOpUaMGERERVK9eneHDhwMQFxfH7Nmzr3hu4cKFAdi1axfR0dFERUURERHBuHHj8i1Pflm8eDGxsbH5UsslT9q+1z4SHy8Pxi7eSdrxMwx7uCZeni75u00pp/P999/Tv39/NmzYkG81FyxYwMiRI1m4cCFly5YlPT2dadOm3fJ1ZcqUYfny5fj6+nLixAlq1KhBu3btKFu2bL5ly6ly5co5rLZLdkFPD+GdB2swsEUlvlqdylPTVnP67HmrYynl9owxJCUlceedd16xfdeuXTRv3pzIyEiaN2/OX3/9BcDOnTupX78+derU4Y033rh0ZH61YcOGMXz48EuN2s/PjyeffPKWeXx8fPD19QXgzJkzXLhw4dK+sLAwXnvtNRo0aEBMTAxr1qzh/vvv54477rjuJ4GJEyfy3HPPXXr8ySef8PzzzwPw4IMPEh0dTUREBBMmTLj0nMKFC/PKK68QHR1NixYtWLFiBbGxsURGRjJv3rxb5s8plzzCh8yTGQNbVCa4sC9vfLuRxz79lYnd61A84NZzW5VyVW/Gb2LznmP5WrN62aL8o21Etp67du1aatWqdc3Jxn79+vH444/TvXt3Jk2aRP/+/fnmm28YMGAAAwYMoEuXLjcdbtm4cSPR0dE33P/SSy/x9ttvX3dfSkoKbdq0YceOHbz//vtXHN2HhoaSmJjIc889R1xcHMuWLSM9PZ2IiAj69OlzRZ3OnTsTGRnJv//9b7y9vZk8eTLjx48HYNKkSZQoUYLTp09Tp04d2rdvT1BQECdPnqRZs2a89957PPTQQwwePJivv/6arVu30rdvX9q1a3fLv9OccMkj/Mt1rV+BMY/dycY9x+g4PpE9R05bHUkpt/X999/TqlWra7YnJiby6KOPAtCtWzd++eWXS9s7duwIcGl/brz//vskJSVd+rpcaGgo69evZ8eOHXz22Wfs37//0r6LDbdmzZrUq1ePIkWKULJkSfz8/Dhy5MgVdQICArjnnntISEhg69atnDt3jpo1awIwevRoatWqRf369UlJSWH79u1A5ieMli1bXnqPpk2bcuDAAQIDA/nzzz9z/f3eiMse4V+uZY0yTO3pw5OfreLhMcuZ2qsulUsXsTqWUgUuu0fijrJw4ULmzJlzy+fdarrh66+/znfffQdAUlISERERrF69mnvuuSfX2cqWLUtERARLly6lQ4cOAJeGezw8PC79+eLjjIyMa2o88cQTDB06lKpVq9KjRw8g86TrokWLSExMxN/fn2bNml2aO+/t7X3pe738PW5UP69seYTviAuv6t8exKw+DbhgDB3GLmfVn4fzrbZS6taOHj1KRkYGQUFB1+xr2LAhM2bMAOCLL76gcePGANSvX//SL4iL+wHeeeedK47WBw0axMsvv8y+ffuAzPH40aNH3zJTamoqp09nfur/+++/WbZsWZ7Woa9Xrx4pKSl8+eWXdOnSBcj8vosXL46/vz9bt27l119/zXX9vLJlw3fUhVfVyhRlTt+GBBf25bFPf+PHzftv/SKlVJ61bt2ab7/99oYLg40ePZrJkycTGRnJtGnTGDVqFAAjR45kxIgR1K1bl71793KjntC6dWueeeYZWrRoQUREBNHR0dk6Qt6yZQv16tWj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(ch3m)\n", "ch3m.wfn_plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running a geometry optimisation\n", "In the previous charged example the geometry of the radical is kept the same than for the methane molecule, while it is likely to\n", "change. One can thus optimize the geometry with BigDFT.\n", "\n", "To run geometry calculations (molecular dynamics, structure\n", "optimisations...) one should add another dictionary *geopt* in the input which contains the method to use.\n", "\n", "In the log file, all input variables are indicated with their default value.\n", "\n", "Here, we look for a local minimum so we can use the keyword `LBFGS`.\n", "We can add also the stopping criteria.\n", "There are two stopping criteria: the first `ncount_cluster_x` being the number of loops (force evaluations) and the second `forcemax` is the maximum on forces. For isolated systems, the first criterion is well adapted\n", "while the second is good for periodic boundary conditions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "Take the CH$_3^-$ radical [**CH3-_posinp.xyz**](./CH3-_posinp.xyz) file and run a geometry optimisation.\n", "\n", "### Solution" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Run already performed, found final file: final_CH3m_geopt.xyz\n", " Memory Consumption Report:\n", " Tot. No. of Allocations: 0\n", " Tot. No. of Deallocations: 0\n", " Remaining Memory (B): 0\n", " Memory occupation:\n", " Peak Value (MB): 0.000\n", " for the array: null\n", " in the routine: null\n", " Memory Peak of process: 12.948 MB\n", " Walltime since initialization: 00:00:00.001950643\n", " Max No. of dictionaries used: 1127 #( 1052 still in use)\n", " Number of dictionary folders allocated: 1\n", "Found 19 different runs\n" ] } ], "source": [ "inpg = I.Inputfile()\n", "inpg['dft'] = {'hgrids': 0.55, 'nrepmax': 'accurate'}\n", "inpg['posinp'] = 'CH4_posinp.xyz'\n", "inpg['geopt'] = {'method': 'LBFGS', 'ncount_cluster_x': 20}\n", "\n", "study = C.SystemCalculator(verbose=False,skip=True) #Use a new calculator)\n", "ch4geopt = study.run(input=inpg,name=\"CH3m_geopt\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The evolution of the forces during relaxation can be easily obtained using the `geop_plot` function to the result of the calculation.\n", "\n", "At each iteration, BigDFT outputs a file **posout_XXXX.xyz** in the directory **data** with the geometry of the iteration\n", "XXX. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "ch4geopt.geopt_plot();" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.0" } }, "nbformat": 4, "nbformat_minor": 2 }