diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 000000000..2a3696f14 --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,11 @@ +[bumpversion] +current_version = 0.1.0 +commit = True +tag = True +sign_tags = True + +[bumpversion:file:mala/version.py] + +[bumpversion:file:CITATION.cff] + +[bumpversion:file:Copyright.txt] diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..603c09027 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.cff linguist-language=YAML diff --git a/.github/workflows/cpu-tests.yml b/.github/workflows/cpu-tests.yml index 2ab752062..5078d748c 100644 --- a/.github/workflows/cpu-tests.yml +++ b/.github/workflows/cpu-tests.yml @@ -1,6 +1,8 @@ name: CPU on: + pull_request_review: + types: [submitted,edited] pull_request: branches: - master @@ -43,6 +45,7 @@ jobs: run: docker build . --file Dockerfile --tag $IMAGE_NAME --cache-from=$IMAGE_ID --build-arg DEVICE=cpu --label "runnumber=${GITHUB_RUN_ID}" - name: Push image + if: ${{ github.event.review.state == 'approved' || github.event_name == 'push' }} run: | # Strip git ref prefix from version VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') @@ -72,15 +75,15 @@ jobs: uses: actions/checkout@v2 - name: Install mala package - run: pip --no-cache-dir install -e . - + run: | + pip --no-cache-dir install -e . + pip install pytest - name: Check out repository (data) uses: actions/checkout@v2 with: repository: mala-project/test-data - token: ${{ secrets.ACCESS_TOKEN }} path: mala_data - ref: v0.1.0 + ref: v1.1.0 lfs: false - name: Data setup @@ -90,8 +93,5 @@ jobs: chmod +x ../install/data_repo_link/link_data_repo.sh ../install/data_repo_link/link_data_repo.sh `pwd` - - name: Test basic functions - run: python test/mala_tests.py - - - name: Test workflow - run: python examples/ex99_verify_all_examples.py + - name: Test MALA + run: pytest --disable-warnings diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 863d0ccae..fcae1ed30 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -1,6 +1,8 @@ name: docs on: + pull_request_review: + types: [submitted,edited] pull_request: branches: - master @@ -30,7 +32,7 @@ jobs: - name: Check docstrings run: pydocstyle --convention=numpy mala - deploy-pages: + build-and-deploy-pages: needs: test-docstrings runs-on: ubuntu-18.04 steps: @@ -58,7 +60,8 @@ jobs: mv -v docs/_build/html public - name: Deploy + if: ${{ github.event.review.state == 'approved' || github.event_name == 'push' }} uses: peaceiris/actions-gh-pages@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} + deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_dir: ./public diff --git a/.github/workflows/mirror-to-casus.yml b/.github/workflows/mirror-to-casus.yml new file mode 100644 index 000000000..765f6d286 --- /dev/null +++ b/.github/workflows/mirror-to-casus.yml @@ -0,0 +1,16 @@ +name: mirror + +on: [push, delete] + +jobs: + mirror-to-CASUS: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - name: mirror-repository + uses: spyoungtech/mirror-action@v0.4.0 + with: + REMOTE: git@github.com:casus/mala.git + GIT_SSH_PRIVATE_KEY: ${{ secrets.GIT_SSH_KEY }} + GIT_SSH_NO_VERIFY_HOST: "true" + DEBUG: "true" diff --git a/.gitignore b/.gitignore index 2441d3284..a8c7d0c80 100644 --- a/.gitignore +++ b/.gitignore @@ -161,3 +161,9 @@ cython_debug/ # JupyterNotebooks .ipynb_checkpoints */.ipynb_checkpoints/* + +# SQLite +*.db + +# LAMMPS +*.tmp diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 000000000..f74a91ccc --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,50 @@ +# YAML 1.2 +cff-version: 1.1.0 +message: "If you use this software, please cite it using these metadata." +authors: + - affiliation: "Center for Advanced Systems Understanding (CASUS), Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR)" + family-names: Cangi + given-names: Attila + - affiliation: "Oak Ridge National Laboratory (ORNL)" + family-names: Ellis + given-names: J. Austin + - affiliation: "Center for Advanced Systems Understanding (CASUS), Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR)" + family-names: Fiedler + given-names: Lenz + orcid: https://orcid.org/0000-0002-8311-0613 + - affiliation: "Center for Advanced Systems Understanding (CASUS), Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR)" + family-names: Kotik + given-names: Daniel + orcid: https://orcid.org/0000-0001-8735-3199 + - affiliation: "Sandia National Laboratories (SNL)" + family-names: Modine + given-names: Normand A. + - affiliation: "Oak Ridge National Laboratory (ORNL)" + family-names: Oles + given-names: Vladyslav + - affiliation: "Sandia National Laboratories (SNL)" + family-names: Popoola + given-names: Gabriel A. + - affiliation: "Sandia National Laboratories (SNL)" + family-names: Rajamanickam + given-names: Siva + - affiliation: "Helmholtz-Zentrum Dresden-Rossendorf e.V. (HZDR)" + family-names: Schmerler + given-names: Steve + - affiliation: "Sandia National Laboratories (SNL)" + family-names: Stephens + given-names: J. Adam + - affiliation: "Sandia National Laboratories (SNL)" + family-names: Thompson + given-names: Aidan P. + + +date-released: 2021-07-07 +keywords: + - "machine-learning" + - "dft" +license: "BSD-3-Clause" +repository-code: "https://github.com/mala-project/mala" +title: mala +# doi: +version: 0.1.0 diff --git a/Dockerfile b/Dockerfile index fc9838902..885867bf8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM continuumio/miniconda3:4.9.2 ARG DEVICE=cpu # Update the image to the latest packages -RUN apt-get update && apt-get upgrade -y +RUN apt-get --allow-releaseinfo-change update && apt-get upgrade -y RUN apt-get install --no-install-recommends -y build-essential libz-dev swig git-lfs RUN apt-get clean && rm -rf /var/lib/apt/lists/* diff --git a/README.md b/README.md index 31ec59862..f58652964 100644 --- a/README.md +++ b/README.md @@ -35,29 +35,42 @@ the examples in the `example/` folder. - [Sandia National Laboratories](https://www.sandia.gov/) (SNL), USA. - [Center for Advanced Systems Understanding](https://www.casus.science/) (CASUS), Germany. +### Contributing Institutions + +- [Oak Ridge National Laboratory](https://www.ornl.gov/) (ORNL), USA + ## Developers ### Scientific Supervision - Attila Cangi (CASUS) - Siva Rajamanickam (SNL) ### Core Developers + +- Austin Ellis (ORNL) - Lenz Fiedler (CASUS) -- Austin Ellis (ORNL*) -- Normand Modine (SNL) -- Steve Schmerler (HZDR) - Daniel Kotik (CASUS) +- Normand Modine (SNL) +- Vladyslav Oles (ORNL) - Gabriel Popoola (SNL) - Aidan Thompson (SNL) +- Steve Schmerler (HZDR) - Adam Stephens (SNL) -\* Work done as part of postdoctoral research at Sandia National Laboratories +### Contributors +- Sneha Verma (CASUS) +- Parvez Mohammed (CASUS) +- Nils Hoffmann (CASUS) +- Omar Faruk (CASUS) +- Somashekhar Kulkarni (CASUS) ## Citing MALA If you publish work which uses or mentions MALA, please cite the following paper: J. A. Ellis, L. Fiedler, G. A. Popoola, N. A. Modine, J. A. Stephens, A. P. Thompson, -A. Cangi, S. Rajamanickam (2020). Accelerating Finite-temperature +A. Cangi, S. Rajamanickam (2021). Accelerating Finite-temperature Kohn-Sham Density Functional Theory with Deep Neural Networks. -[arXiv:2010.04905](https://arxiv.org/abs/2010.04905). +[Phys. Rev. B 104, 035120 (2021)](https://doi.org/10.1103/PhysRevB.104.035120) + +alongside this repository. diff --git a/docs/source/CONTRIBUTE.md b/docs/source/CONTRIBUTE.md index 0693f5556..7ea242198 100644 --- a/docs/source/CONTRIBUTE.md +++ b/docs/source/CONTRIBUTE.md @@ -19,6 +19,9 @@ the form `MAJOR.MINOR.FIX`: * `MINOR`: new features have beend added to the code. * `FIX`: A bug in a feature has been fixed. +Every new version should be accompanied by a changelog. Please include the +version of the test data repository with which this version is supposed to be +used in this changelog. ## Branching strategy diff --git a/docs/source/conf.py b/docs/source/conf.py index 048287a83..950ed4161 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -93,6 +93,13 @@ # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] +html_context = { + 'display_github': True, + 'github_repo': 'mala-project/mala', + 'github_version': 'develop', + 'conf_py_path': '/docs/source/', +} + # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = "./img/logos/mala_vertical.png" @@ -100,7 +107,6 @@ # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = "../resources/theme/favicon.ico" html_favicon = "./img/logos/mala_favicon.png" # The suffix of source file names. diff --git a/docs/source/features/background.rst b/docs/source/features/background.rst index 40dd4bf58..95ae1eb65 100644 --- a/docs/source/features/background.rst +++ b/docs/source/features/background.rst @@ -1,22 +1,5 @@ -Background -=========== - -Workflow -********* - -The goal of MALA is to build surrogate models for electronic structure theory. -These surrogate models are based on neural networks. After training such -a model, it allows the fast evaluation of the total energy and atomic forces. -MALA is build around Density Functional Theory, but can in -principle be used with all electronic structure methods that calculate the -total energy and atomic forces given atomic positions as input. -Building these surrogate models requires preprocessing -:doc:`preprocessing ` of the data, training of a -:doc:`neural network ` and -:doc:`postprocessing ` of the results. -MALA is designed for the investigation of systems at non-zero temperatures and -operates in a "per-grid-point" manner, meaning that every grid point of a -simulation cell is passed through the network individually. +Theoretical Background +====================== Density Functional Theory ************************* diff --git a/docs/source/features/neuralnetworks.rst b/docs/source/features/neuralnetworks.rst index 9a1a15ac9..a9ab96939 100644 --- a/docs/source/features/neuralnetworks.rst +++ b/docs/source/features/neuralnetworks.rst @@ -3,4 +3,37 @@ Neural Networks Neural networks are powerful machine learning tools in principle capable of approximating any function. In MALA, neural networks are built using PyTorch. -Hyperparameter optimization can be done using optuna and custom routines. \ No newline at end of file +Hyperparameter optimization can be done using optuna and custom routines. + +Data Handling +############# + +MALA provides a ``DataHandler`` class that takes care of all the necessary data +operations. It loads, scales and performs inference on data, as well as +unit conversion. Raw simulation data has to be processed into data that can +be used with a ``DataHandler`` using the ``DataConverter`` class. In MALA, +data handling works on a per-snapshot basis; i.e. paths to individual snapshots are +added to the data handler via ``add_snapshot``. +After all snapshots of interests are given to +the data handler the necessary routines outlined above can be started with +``prepare_data``. +Large datasets can be lazily-loaded into the RAM, i.e. only a subset of the +entire data will be present in the RAM simultaneously. + +Training and inference +###################### + +Neural networks are built using ``pytorch`` and the ``Network`` class. They +can be trained using the ``Trainer`` class and can be tested using the +``Tester`` class. Currently, only feed-forward neural-networks are implemented. + +Hyperparameter optimization +########################### + +Hyperparameter optimization can be done using optuna. Two experimental methods +are supported as well, orthogonal array tuning and neural architecture search +without training. In order to perform a hyperparameter optimization, a +``HyperOptOptuna`` object (for optuna) is created. Hyperparameters can be +added to the study with the ``add_hyperparameter`` function. Afterwards a +hyperparameter study can be executed. +Optuna can be used in a distributed fashion, using e.g. PostgreSQL. diff --git a/docs/source/features/overview.rst b/docs/source/features/overview.rst new file mode 100644 index 000000000..17aefbdf4 --- /dev/null +++ b/docs/source/features/overview.rst @@ -0,0 +1,60 @@ +Overview +======== + +List of features +**************** + +* General features + + * Central parameters class that holds all necessary parameters and allows for saving and loading for later use + +* Preprocesing of simulation data + + * Calculation of atomic descriptors from simulation data + + * Parsing of LDOS data files + + * Scaling and Conversion of data + + +* Training of Surrogate models + + * Creation, training and evaluation of feed-forward neural networks + + * Training progress can be checkpointed, neural networks can be saved for later use + + * Distributed training with horovod (experimental) + + * (Distributed) hyperparameter optimization with optuna + + * Hyperparameter optimization with orthogonal array tuning and neural architecure search without training (both experimental) + +* Postprocessing of surogate model output + + * LDOS can be used to calculate DOS and/or density + + * Different quantities of interest can be calculated + + * Number of electrons (from LDOS, DOS or density) + + * Band energy (from LDOS or DOS) + + * Total energy (requires QE; from LDOS or DOS + density) + + +Workflow +******** + +The goal of MALA is to build surrogate models for electronic structure theory. +These surrogate models are based on neural networks. After training such +a model, it allows the fast evaluation of the total energy and atomic forces. +MALA is build around Density Functional Theory, but can in +principle be used with all electronic structure methods that calculate the +total energy and atomic forces given atomic positions as input. +Building these surrogate models requires preprocessing +:doc:`preprocessing ` of the data, training of a +:doc:`neural network ` and +:doc:`postprocessing ` of the results. +MALA is designed for the investigation of systems at non-zero temperatures and +operates in a "per-grid-point" manner, meaning that every grid point of a +simulation cell is passed through the network individually. diff --git a/docs/source/features/preprocessing.rst b/docs/source/features/preprocessing.rst index 72a649e45..77f1c76c4 100644 --- a/docs/source/features/preprocessing.rst +++ b/docs/source/features/preprocessing.rst @@ -1,5 +1,14 @@ Preprocessing -============== +============= + +Data Conversion +############### + +Data generation for MALA is done by electronic structure calculations using +appropriate simulation software. The raw outputs of such calculations +are atomic positions and the LDOS, although often as separate cube files. +MALA can be used to process this raw data into ready-to-use data fro the surrogate models +For this, the `DataConverter` class can be used; see example `ex02_preprocess_data`. Descriptors *********** @@ -11,7 +20,7 @@ calculating descriptors on the grid. Currently, only SNAP descriptors are supported. MALA uses LAMMPS to calculate these SNAP descriptors. Targets -*********** +******* MALA is optimized for the usage of the LDOS (local density of states) as target quantity. The LDOS gives the DOS (density of states) at each grid point, @@ -19,3 +28,27 @@ and thus gives information on the energy-grid as well as the 3D grid. The LDOS can be used to :doc:`efficiently calculate quantities of interest. ` MALA provides parsing routines to read the LDOS from DFT calculations. + +Data Scaling +############ + +An additional step of preprocessing is scaling the data before a model is +trained. This is done automatically in the ``DataHandler`` class, using the +methods requested via the ``mala.Parameters.data.input_rescaling_type`` and +``mala.Parameters.data.output_rescaling_type`` keywords. Currently supported here +are: + +* "None": No normalization is applied. + +* "standard": Standardization (Scale to mean 0, standard deviation 1) + +* "normal": Min-Max scaling (Scale to be in range 0...1) + +* "feature-wise-standard": Row Standardization (Scale to mean 0, standard deviation 1) + +* "feature-wise-normal": Row Min-Max scaling (Scale to be in range 0...1) + +Internally, the ``DataScaler`` class is used. The objects of this class +can be saved and loaded later for e.g. inference or to minimize calculation +time for multiple ML experiments using the same set of data. +Data scaling will always be done using the training data only. diff --git a/docs/source/index.md b/docs/source/index.md index 5a647beec..2cb90846f 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -11,6 +11,7 @@ caption: Features maxdepth: 2 --- +features/overview features/background features/preprocessing features/neuralnetworks @@ -28,6 +29,7 @@ install/INSTALL_LAMMPS install/INSTALL_TE_QE install/tested_systems install/sql_on_hpc +install/tensorboard_setup ``` ```{toctree} diff --git a/docs/source/install/README.md b/docs/source/install/README.md index 732390fd8..980be15e5 100644 --- a/docs/source/install/README.md +++ b/docs/source/install/README.md @@ -22,6 +22,7 @@ In order to run MALA you have to have the following packages installed: * numpy * scipy * oapackage +* tensorboard * optuna * ase * mpmath @@ -39,12 +40,19 @@ or all with $ pip install -r requirements.txt ``` -or just install the package along with dependencies +or just install the package along with its basic dependencies ```sh $ pip install -e . ``` +In order to install additional dependencies (enabling optional features, building documentaion locally, testing etc.) do + +```sh +$ pip install -e .[opt,test,doc] +``` + + See below for what the `-e` option does. Note that we exclude `torch` in `requirements.txt` We don't want torch to be @@ -126,10 +134,7 @@ If you want to use this module, please refer to [Python bindings to Quantum Espr ``` (note: the `-e` is absolutely crucial, so that changes in the code will be reflected system wide) -3. Go to the `examples` folder and run `ex0_verify_installation.py` to make -sure the setup was successful. -4. Enjoy! - +3. (Optional): Download example data (see below) to run the examples. ### Build documentation locally (optional) @@ -148,10 +153,30 @@ $ pip install -r docs/requirements.txt ## Downloading and adding example data The examples and tests need additional data to run. The MALA team provides a data repository, that can be downloaded -from . After downloading it, the data repository -needs to be linked to the MALA repository by using -```sh -$ cd ~/path/to/this/git/root/directory -$ bash install/data_repo_link/link_data_repo.sh ~/path/to/data/repo -``` -Afterwards, all the examples and tests will run out-of-the.box. +from . Please be sure to check out the correct tag for the data repository, +since the data repository itself is subject to ongoing development as well. After downloading the correct revision of +the data repository, it needs to be linked with MALA. + +1. Download data repository and check out correct tag. + + ```sh + $ git clone https://github.com/mala-project/test-data ~/path/to/data/repo + $ cd ~/path/to/data/repo + $ git checkout v1.1.0 + ``` + +2. Link MALA and data repository. + + ```sh + $ cd ~/path/to/mala/root/directory + $ bash install/data_repo_link/link_data_repo.sh ~/path/to/data/repo + ``` + + Afterwards, check that files named `data_repo_path.py` have been generated. + + ```sh + $ find . -name data_repo_path.py + ./install/data_repo_link/data_repo_path.py + ./test/data_repo_path.py + ./examples/data_repo_path.py + ``` diff --git a/docs/source/install/tensorboard_setup.md b/docs/source/install/tensorboard_setup.md new file mode 100644 index 000000000..78e06cb8c --- /dev/null +++ b/docs/source/install/tensorboard_setup.md @@ -0,0 +1,15 @@ +# Set up tensorboard to visualize data from HPC cluster + +Training of surrogate models with MALA is often done on HPC infrastructure, yet the visualization should take place locally. Files that TensorBoard saves data into are called event files. These files have to be on the local device to get access. The best way to achieve this is by either downloading or mounting the relevant folders on the HPC cluster to your local machine. + +## Hemera5 (HZDR) + +- You can find information on how to mount Hemera onto a local device here: + + + +- Alternatively, simply use the following command + + ```sh + $ sshfs username@hemera5.fz-rossendorf.de:folder/file/location folder/location/in/local + ``` diff --git a/examples/ex00_verify_installation.py b/examples/ex00_verify_installation.py deleted file mode 100644 index bc0430260..000000000 --- a/examples/ex00_verify_installation.py +++ /dev/null @@ -1,31 +0,0 @@ -import mala -from mala import printout -import numpy as np - -""" -ex00_verify_installation.py: This example confirms whether or not your setup -is correct. -""" - -printout("Welcome to MALA.") -printout("Running ex00_verify_installation.py") - -test_parameters = mala.Parameters() -test_descriptors = mala.DescriptorInterface(test_parameters) -test_targets = mala.TargetInterface(test_parameters) -test_handler = mala.DataHandler(test_parameters, - descriptor_calculator=test_descriptors, - target_calculator=test_targets) -test_network = mala.Network(test_parameters) -test_hpoptimizer = mala.HyperOptInterface(test_parameters, test_handler) -data_path = None -try: - from data_repo_path import get_data_repo_path - data_path = get_data_repo_path() - test_array = np.load(data_path+"linking_tester.npy") - printout("Current data repository path: ", data_path) -except FileNotFoundError: - printout("It seems that you don't have a data repository set up properly. " - "You can still use MALA, but tests and examples WILL fail.") -printout("Successfully ran ex00_verify_installation.py.") -printout("Congratulations, your installation seems to work!") diff --git a/examples/ex01_run_singleshot.py b/examples/ex01_run_singleshot.py index 13b77fe82..b7a7bb505 100644 --- a/examples/ex01_run_singleshot.py +++ b/examples/ex01_run_singleshot.py @@ -1,7 +1,10 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex01_run_singleshot.py: Shows how a neural network can be trained on material @@ -10,99 +13,82 @@ """ -def run_example01(desired_loss_improvement_factor=1): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - - test_parameters = mala.Parameters() - # Currently, the splitting in training, validation and test set are - # done on a "by snapshot" basis. Specify how this is - # done by providing a list containing entries of the form - # "tr", "va" and "te". - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] - - # Specify the data scaling. - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - - # Specify the used activation function. - test_parameters.network.layer_activations = ["ReLU"] - - # Specify the training parameters. - test_parameters.running.max_number_epochs = 20 - test_parameters.running.mini_batch_size = 40 - test_parameters.running.learning_rate = 0.00001 - test_parameters.running.trainingtype = "Adam" - - #################### - # DATA - # Add and prepare snapshots for training. - #################### - - data_handler = mala.DataHandler(test_parameters) - - # Add a snapshot we want to use in to the list. - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - data_handler.prepare_data() - printout("Read data: DONE.") - - #################### - # NETWORK SETUP - # Set up the network and trainer we want to use. - # The layer sizes can be specified before reading data, - # but it is safer this way. - #################### - - test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), - 100, - data_handler.get_output_dimension()] - - # Setup network and trainer. - test_network = mala.Network(test_parameters) - test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - printout("Network setup: DONE.") - - #################### - # TRAINING - # Train the network. - #################### - - printout("Starting training.") - test_trainer.train_network() - printout("Training: DONE.") - - #################### - # RESULTS. - # Print the used parameters and check whether the loss decreased enough. - #################### - - printout("Parameters used for this experiment:") - test_parameters.show() - - if desired_loss_improvement_factor*test_trainer.initial_test_loss\ - < test_trainer.final_test_loss: - return False - else: - return True - - -if __name__ == "__main__": - if run_example01(): - printout("Successfully ran ex01_run_singleshot.") - else: - raise Exception("Ran ex01_run_singleshot but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") +#################### +# PARAMETERS +# All parameters are handled from a central parameters class that +# contains subclasses. +#################### + +test_parameters = mala.Parameters() +# Currently, the splitting in training, validation and test set are +# done on a "by snapshot" basis. Specify how this is +# done by providing a list containing entries of the form +# "tr", "va" and "te". +test_parameters.data.data_splitting_type = "by_snapshot" +test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + +# Specify the data scaling. +test_parameters.data.input_rescaling_type = "feature-wise-standard" +test_parameters.data.output_rescaling_type = "normal" + +# Specify the used activation function. +test_parameters.network.layer_activations = ["ReLU"] + +# Specify the training parameters. +test_parameters.running.max_number_epochs = 20 +test_parameters.running.mini_batch_size = 40 +test_parameters.running.learning_rate = 0.00001 +test_parameters.running.trainingtype = "Adam" + +#################### +# DATA +# Add and prepare snapshots for training. +#################### + +data_handler = mala.DataHandler(test_parameters) + +# Add a snapshot we want to use in to the list. +data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") +data_handler.prepare_data() +printout("Read data: DONE.") + +#################### +# NETWORK SETUP +# Set up the network and trainer we want to use. +# The layer sizes can be specified before reading data, +# but it is safer this way. +#################### + +test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), + 100, + data_handler.get_output_dimension()] + +# Setup network and trainer. +test_network = mala.Network(test_parameters) +test_trainer = mala.Trainer(test_parameters, test_network, data_handler) +printout("Network setup: DONE.") + +#################### +# TRAINING +# Train the network. +#################### + +printout("Starting training.") +test_trainer.train_network() +printout("Training: DONE.") + +#################### +# RESULTS. +# Print the used parameters and check whether the loss decreased enough. +#################### + +printout("Parameters used for this experiment:") +test_parameters.show() diff --git a/examples/ex02_preprocess_data.py b/examples/ex02_preprocess_data.py index 46e33ee05..1c6c3b330 100644 --- a/examples/ex02_preprocess_data.py +++ b/examples/ex02_preprocess_data.py @@ -1,8 +1,10 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -import numpy as np -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Be2") """ ex02_preprocess_data.py: Shows how this framework can be used to preprocess @@ -14,77 +16,51 @@ """ -def run_example02(): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - - test_parameters = mala.Parameters() - - # Specify input data options, i.e. which descriptors are calculated - # with which parameters. These are the standard parameters for - # the calculation of SNAP descriptors. - test_parameters.descriptors.descriptor_type = "SNAP" - test_parameters.descriptors.twojmax = 10 - test_parameters.descriptors.rcutfac = 4.67637 - test_parameters.data.descriptors_contain_xyz = True - - # Specify output data options, i.e. how the LDOS is parsed. - # The Al system used as an example here actually has 250 energy levels. - # But for the convenience of the user, only 10 energy levels will be - # used for this example. - test_parameters.targets.target_type = "LDOS" - test_parameters.targets.ldos_gridsize = 10 - test_parameters.targets.ldos_gridspacing_ev = 0.1 - test_parameters.targets.ldos_gridoffset_ev = -10 - - #################### - # DATA - # Create a DataConverter, and add snapshots to it. - #################### - - data_converter = mala.DataConverter(test_parameters) - - # Take care to choose the "add_snapshot" function correct for - # the type of data you want to preprocess. - data_converter.add_snapshot_qeout_cube("Al.pw.scf.out", data_path, - "cubes/tmp.pp*Al_ldos.cube", - data_path, output_units="1/Ry") - - # Convert all the snapshots and save them in the current directory. - data_converter.convert_snapshots("./", naming_scheme="Al_snapshot*") - - #################### - # RESULTS. - # Print the used parameters and check whether the preprocessed data - # has the desired dimensions. - #################### - - printout("Parameters used for this experiment:") - test_parameters.show() - - input_data = np.load("Al_snapshot0.in.npy") - input_data_shape = np.shape(input_data) - if input_data_shape[0] != 108 or input_data_shape[1] != 108 or \ - input_data_shape[2] != 100 or input_data_shape[3] != 94: - return False - - output_data = np.load("Al_snapshot0.out.npy") - output_data_shape = np.shape(output_data) - if output_data_shape[0] != 108 or output_data_shape[1] != 108 or \ - output_data_shape[2] != 100 or output_data_shape[3] != 10: - return False - - return True - - -if __name__ == "__main__": - if run_example02(): - printout("Successfully ran ex02_preprocess_data.") - else: - raise Exception("Ran ex02_preprocess_data but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") +#################### +# PARAMETERS +# All parameters are handled from a central parameters class that +# contains subclasses. +#################### + +test_parameters = mala.Parameters() + +# Specify input data options, i.e. which descriptors are calculated +# with which parameters. These parameters are slightly modified for better +# performance. +test_parameters.descriptors.descriptor_type = "SNAP" +test_parameters.descriptors.twojmax = 6 +test_parameters.descriptors.rcutfac = 4.67637 +test_parameters.data.descriptors_contain_xyz = True + +# Specify output data options, i.e. how the LDOS is parsed. +# The Be system used as an example here actually was calculated with +# drastically reduced number of energy levels for better computability. +test_parameters.targets.target_type = "LDOS" +test_parameters.targets.ldos_gridsize = 11 +test_parameters.targets.ldos_gridspacing_ev = 2.5 +test_parameters.targets.ldos_gridoffset_ev = -5 + +#################### +# DATA +# Create a DataConverter, and add snapshots to it. +#################### + +data_converter = mala.DataConverter(test_parameters) + +# Take care to choose the "add_snapshot" function correct for +# the type of data you want to preprocess. +data_converter.add_snapshot_qeout_cube("Be.pw.scf.out", data_path, + "cubes/tmp.pp*Be_ldos.cube", + data_path, output_units="1/Ry") + +# Convert all the snapshots and save them in the current directory. +data_converter.convert_snapshots("./", naming_scheme="Be_snapshot*") + +#################### +# RESULTS. +# Print the used parameters and check whether the preprocessed data +# has the desired dimensions. +#################### + +printout("Parameters used for this experiment:") +test_parameters.show() diff --git a/examples/ex03_postprocess_data.py b/examples/ex03_postprocess_data.py index f117f4f5f..ddfaaa862 100644 --- a/examples/ex03_postprocess_data.py +++ b/examples/ex03_postprocess_data.py @@ -1,8 +1,11 @@ +import os + import mala from mala import printout import numpy as np -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Be2") """ @@ -11,100 +14,85 @@ post processing of LDOS data will be shown in the following. Set do_total_energy to False, if you don't have the QuantumEspresso Python module installed. +Since actual LDOS files are rather larger, this uses a drastically reduced +LDOS. Therefore the accuracy of the overall result is rather poor. """ +# If you don't have the total energy module installed, +# just set the following variable to False. +do_total_energy = True + +#################### +# PARAMETERS +# All parameters are handled from a central parameters class that +# contains subclasses. +#################### +test_parameters = mala.Parameters() + +# Specify the correct LDOS parameters. +test_parameters.targets.target_type = "LDOS" +test_parameters.targets.ldos_gridsize = 11 +test_parameters.targets.ldos_gridspacing_ev = 2.5 +test_parameters.targets.ldos_gridoffset_ev = -5 +# To perform a total energy calculation one also needs to provide +# a pseudopotential(path). +test_parameters.targets.pseudopotential_path = data_path + +#################### +# TARGETS +# Create a target calculator to postprocess data. +# Use this calculator to perform various operations. +#################### +ldos = mala.TargetInterface(test_parameters) + +# Read additional information about the calculation. +# By doing this, the calculator is able to know e.g. the temperature +# at which the calculation took place or the lattice constant used. +ldos.read_additional_calculation_data("qe.out", os.path.join( + data_path, "Be.pw.scf.out")) + +# Read in LDOS data. For actual workflows, this part will come +# from a network. +ldos_data = np.load(os.path.join(data_path, "Be_ldos.npy")) + +# Get quantities of interest. +# For better values in the post processing, it is recommended to +# calculate the "self-consistent Fermi energy", i.e. the Fermi energy +# at which the (L)DOS reproduces the exact number of electrons. +# This Fermi energy usually differs from the one outputted by the +# QuantumEspresso calculation, due to numerical reasons. The difference +# is usually very small. +self_consistent_fermi_energy = ldos.\ + get_self_consistent_fermi_energy_ev(ldos_data) +number_of_electrons = ldos.\ + get_number_of_electrons(ldos_data, fermi_energy_eV= + self_consistent_fermi_energy) +band_energy = ldos.get_band_energy(ldos_data, + fermi_energy_eV= + self_consistent_fermi_energy) +total_energy = 0.0 +if do_total_energy: + total_energy = ldos.get_total_energy(ldos_data, + fermi_energy_eV= + self_consistent_fermi_energy) + +#################### +# RESULTS. +# Print the used parameters and check whether LDOS based results +# are consistent with the actual DFT results. +#################### + +printout("Parameters used for this experiment:") +test_parameters.show() +print("Values from LDOS: ") +print("Number of electrons:", number_of_electrons) +print("Band energy:", band_energy) +if do_total_energy: + print("Total energy:", total_energy) + +print("Values from DFT: ") +print("Number of electrons:", ldos.number_of_electrons) +print("Band energy:", ldos.band_energy_dft_calculation) +if do_total_energy: + print("Total energy:", ldos.total_energy_dft_calculation) -def run_example03(do_total_energy=True, accuracy_electrons=1e-11, - accuracy_total_energy=50, accuracy_band_energy=2): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - test_parameters = mala.Parameters() - - # Specify the correct LDOS parameters. - test_parameters.targets.target_type = "LDOS" - test_parameters.targets.ldos_gridsize = 250 - test_parameters.targets.ldos_gridspacing_ev = 0.1 - test_parameters.targets.ldos_gridoffset_ev = -10 - - #################### - # TARGETS - # Create a target calculator to postprocess data. - # Use this calculator to perform various operations. - #################### - - ldos = mala.TargetInterface(test_parameters) - - # Read additional information about the calculation. - # By doing this, the calculator is able to know e.g. the temperature - # at which the calculation took place or the lattice constant used. - ldos.read_additional_calculation_data("qe.out", - data_path+"Al.pw.scf.out") - - # Read in LDOS data. For actual workflows, this part will come - # from a network. - ldos_data = np.load(data_path+"Al_ldos.npy") - - # Get quantities of interest. - # For better values in the post processing, it is recommended to - # calculate the "self-consistent Fermi energy", i.e. the Fermi energy - # at which the (L)DOS reproduces the exact number of electrons. - # This Fermi energy usually differs from the one outputted by the - # QuantumEspresso calculation, due to numerical reasons. The difference - # is usually very small. - self_consistent_fermi_energy = ldos.\ - get_self_consistent_fermi_energy_ev(ldos_data) - number_of_electrons = ldos.\ - get_number_of_electrons(ldos_data, fermi_energy_eV= - self_consistent_fermi_energy) - band_energy = ldos.get_band_energy(ldos_data, - fermi_energy_eV= - self_consistent_fermi_energy) - total_energy = 0.0 - if do_total_energy: - # To perform a total energy calculation one also needs to provide - # a pseudopotential(path). - ldos.set_pseudopotential_path(data_path) - total_energy = ldos.get_total_energy(ldos_data, - fermi_energy_eV= - self_consistent_fermi_energy) - - #################### - # RESULTS. - # Print the used parameters and check whether LDOS based results - # are consistent with the actual DFT results. - #################### - - printout("Parameters used for this experiment:") - test_parameters.show() - - print("Number of electrons:", number_of_electrons) - print("Band energy:", band_energy) - if do_total_energy: - print("Total energy:", total_energy) - - if np.abs(number_of_electrons - ldos.number_of_electrons) > \ - accuracy_electrons: - return False - - if np.abs(band_energy - ldos.band_energy_dft_calculation) > \ - accuracy_band_energy: - return True - - if do_total_energy: - if np.abs(total_energy - ldos.total_energy_dft_calculation) > \ - accuracy_total_energy: - return False - return True - - -if __name__ == "__main__": - if run_example03(): - printout("Successfully ran ex03_postprocess_data.") - else: - raise Exception("Ran ex03_postprocess_data but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") diff --git a/examples/ex04_hyperparameter_optimization.py b/examples/ex04_hyperparameter_optimization.py index 8d678fbd4..c3e87df4e 100644 --- a/examples/ex04_hyperparameter_optimization.py +++ b/examples/ex04_hyperparameter_optimization.py @@ -1,7 +1,10 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex04_hyperparameter_optimization.py: Shows how a hyperparameter @@ -10,8 +13,7 @@ on the most universal one - optuna. """ - -def run_example04(desired_loss_improvement_factor=2): +def initial_setup(): #################### # PARAMETERS # All parameters are handled from a central parameters class that @@ -38,8 +40,11 @@ def run_example04(desired_loss_improvement_factor=2): # Specify the number of trials, the hyperparameter optimizer should run # and the type of hyperparameter. test_parameters.hyperparameters.n_trials = 20 - test_parameters.hyperparameters.hyper_opt_method = "optuna" - + test_parameters.hyperparameters.hyper_opt_method = "oat" + test_parameters.hyperparameters.number_training_per_trial = 1 + test_parameters.running.verbosity = False + test_parameters.hyperparameters.checkpoint_name = "ex04" + test_parameters.hyperparameters.checkpoints_each_trial = -1 #################### # DATA # Add and prepare snapshots for training. @@ -71,64 +76,52 @@ def run_example04(desired_loss_improvement_factor=2): test_hp_optimizer = mala.HyperOptInterface(test_parameters, data_handler) # Learning rate will be optimized. - test_hp_optimizer.add_hyperparameter("float", "learning_rate", - 0.0000001, 0.01) + test_hp_optimizer.add_hyperparameter("categorical", "learning_rate", + choices=[0.005, 0.01, 0.015]) # Number of neurons per layer will be optimized. - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, 100) - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, 100) + test_hp_optimizer.add_hyperparameter( + "categorical", "ff_neurons_layer_00", choices=[32, 64, 96]) + test_hp_optimizer.add_hyperparameter( + "categorical", "ff_neurons_layer_01", choices=[32, 64, 96]) # Choices for activation function at each layer will be optimized. test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_00", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_01", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_02", - choices=["ReLU", "Sigmoid"]) - - # Perform hyperparameter optimization. - printout("Starting Hyperparameter optimization.") - test_hp_optimizer.perform_study() - test_hp_optimizer.set_optimal_parameters() - printout("Hyperparameter optimization: DONE.") - - #################### - # TRAINING - # Train with these new parameters. - #################### - - test_network = mala.Network(test_parameters) - test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - printout("Network setup: DONE.") - test_trainer.train_network() - printout("Training: DONE.") - - #################### - # RESULTS. - # Print the used parameters and check whether the loss decreased enough. - #################### - - printout("Parameters used for this experiment:") - test_parameters.show() - - # To see if the hyperparameter optimization actually worked, - # check if the best trial is better then the worst trial - # by a certain factor. - performed_trials_values = test_hp_optimizer.study.\ - trials_dataframe()["value"] - if desired_loss_improvement_factor*min(performed_trials_values) > \ - max(performed_trials_values): - return False - else: - return True - - -if __name__ == "__main__": - if run_example04(): - printout("Successfully ran ex04_hyperparameter_optimization.py.") - else: - raise Exception("Ran ex04_hyperparameter_optimization but something " - "was off. If you haven't changed any parameters in " - "the example, there might be a problem with " - "your installation.") - + choices=["ReLU", "Sigmoid", "LeakyReLU"]) + return test_parameters, data_handler, test_hp_optimizer + + +if mala.HyperOptOptuna.checkpoint_exists("ex04"): + parameters, datahandler, hyperoptimizer = \ + mala.HyperOptOAT.resume_checkpoint( + "ex04") + printout("Starting resumed hyperparameter optimization.") +else: + parameters, datahandler, hyperoptimizer = initial_setup() + printout("Starting original hyperparameter optimization.") + + +# Perform hyperparameter optimization. +printout("Starting Hyperparameter optimization.") +hyperoptimizer.perform_study() +hyperoptimizer.set_optimal_parameters() +printout("Hyperparameter optimization: DONE.") + +#################### +# TRAINING +# Train with these new parameters. +#################### + +test_network = mala.Network(parameters) +test_trainer = mala.Trainer(parameters, test_network, datahandler) +printout("Network setup: DONE.") +test_trainer.train_network() +printout("Training: DONE.") + +#################### +# RESULTS. +# Print the used parameters and check whether the loss decreased enough. +#################### + +printout("Parameters used for this experiment:") +parameters.show() diff --git a/examples/ex05_training_with_postprocessing.py b/examples/ex05_training_with_postprocessing.py index d349e27cb..44b73c1f5 100644 --- a/examples/ex05_training_with_postprocessing.py +++ b/examples/ex05_training_with_postprocessing.py @@ -1,9 +1,11 @@ +import os + import mala from mala import printout -import numpy as np -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" -param_path = get_data_repo_path()+"example05_data/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + """ ex05_training_with_postprocessing.py: Train a network, then use this network to predict the LDOS and then analyze the results of this prediction. This @@ -20,7 +22,7 @@ # Uses a trained network to make a prediction. def use_trained_network(network_path, params_path, input_scaler_path, - output_scaler_path, accuracy=0.05): + output_scaler_path): # First load Parameters and network. # Parameters may have to @@ -63,17 +65,15 @@ def use_trained_network(network_path, params_path, input_scaler_path, # We will use the LDOS calculator to do some preprocessing. ldos_calculator = inference_data_handler.target_calculator - ldos_calculator.read_additional_calculation_data("qe.out", - data_path + - "Al.pw.scf.out") + ldos_calculator.read_additional_calculation_data("qe.out", os.path.join( + data_path, + "Al.pw.scf.out")) # Calculate the Band energy. band_energy_predicted = ldos_calculator.get_band_energy(predicted_ldos) band_energy_actual = ldos_calculator.get_band_energy(actual_ldos) printout("Band energy (actual, predicted, error)[eV]", band_energy_actual, band_energy_predicted, band_energy_predicted-band_energy_actual) - if np.abs(band_energy_predicted-band_energy_actual) > accuracy: - return False # Calculate the number of electrons. nr_electrons_predicted = ldos_calculator.\ @@ -82,9 +82,6 @@ def use_trained_network(network_path, params_path, input_scaler_path, printout("Number of electrons (actual, predicted, error)[eV]", nr_electrons_actual, nr_electrons_predicted, nr_electrons_predicted-nr_electrons_actual) - if np.abs(band_energy_predicted-band_energy_actual) > accuracy: - return False - return True # Trains a network. @@ -173,55 +170,13 @@ def initial_training(network_path, params_path, input_scaler_path, data_handler.input_data_scaler.save(input_scaler_path) data_handler.output_data_scaler.save(output_scaler_path) - #################### - # RESULTS. - # Check whether the loss decreased enough. - #################### - if desired_loss_improvement_factor*test_trainer.initial_test_loss \ - < test_trainer.final_test_loss: - return False - else: - return True - - -def run_example05(dotraining, doinference): - printout("Welcome to MALA.") - printout("Running ex05_training_with_postprocessing.py") - - # Choose the paths where the network and the parameters for it should - # be saved. - if dotraining is False: - params_path = param_path+"ex05_params.pkl" - network_path = param_path+"ex05_network.pth" - input_scaler_path = param_path+"ex05_iscaler.pkl" - output_scaler_path = param_path+"ex05_oscaler.pkl" - else: - params_path = "./ex05_params.pkl" - network_path = "./ex05_network.pth" - input_scaler_path = "./ex05_iscaler.pkl" - output_scaler_path = "./ex05_oscaler.pkl" - - training_return = True - inference_return = True - if dotraining: - training_return = initial_training(network_path, params_path, - input_scaler_path, - output_scaler_path) - if doinference: - inference_return = use_trained_network(network_path, params_path, - input_scaler_path, - output_scaler_path) - - return training_return and inference_return - - -if __name__ == "__main__": - if run_example05(True, True): - printout("Successfully ran ex05_training_with_postprocessing.py.") - else: - raise Exception("Ran ex05_training_with_postprocessing but something " - "was off. If you haven't changed any parameters in " - "the example, there might be a problem with your " - "installation.") +params_path = "./ex05_params.pkl" +network_path = "./ex05_network.pth" +input_scaler_path = "./ex05_iscaler.pkl" +output_scaler_path = "./ex05_oscaler.pkl" +initial_training(network_path, params_path, input_scaler_path, + output_scaler_path) +use_trained_network(network_path, params_path, input_scaler_path, + output_scaler_path) diff --git a/examples/ex06_advanced_hyperparameter_optimization.py b/examples/ex06_advanced_hyperparameter_optimization.py index 8917be5f8..90868ec04 100644 --- a/examples/ex06_advanced_hyperparameter_optimization.py +++ b/examples/ex06_advanced_hyperparameter_optimization.py @@ -1,8 +1,10 @@ +import os + import mala from mala import printout -import numpy as np -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex06_advanced_hyperparameter_optimization.py: Shows how recent developments @@ -124,7 +126,7 @@ def optimize_hyperparameters(hyper_optimizer, input_creator_notraining="oat", test_hp_optimizer.perform_study(trial_list=last_optuna_study) else: test_hp_optimizer.perform_study(trial_list= - tmp_hp_optimizer.orthogonal_arr) + tmp_hp_optimizer.get_orthogonal_array()) test_hp_optimizer.set_optimal_parameters() printout("Hyperparameter optimization: DONE.") @@ -142,30 +144,13 @@ def optimize_hyperparameters(hyper_optimizer, input_creator_notraining="oat", return test_trainer.final_test_loss -def run_example06(desired_std=0.1): - results = [] - result, last_study = optimize_hyperparameters("optuna") - results.append(result) - results.append(optimize_hyperparameters("oat")) - results.append(optimize_hyperparameters("notraining", - input_creator_notraining="oat")) - results.append(optimize_hyperparameters("notraining", - input_creator_notraining="optuna", - last_optuna_study=last_study)) - if np.std(results) < desired_std: - return True - else: - printout(results) - printout(np.std(results)) - return False - - -if __name__ == "__main__": - if run_example06(): - printout("Successfully ran ex06_advanced_hyperparameter_optimization." - "py.") - else: - raise Exception("Ran ex06_advanced_hyperparameter_optimization but " - "something was off. If you haven't changed any " - "parameters in the example, there might be a problem " - "with your installation.") +results = [] +result, last_study = optimize_hyperparameters("optuna") +results.append(result) +results.append(optimize_hyperparameters("oat")) +results.append(optimize_hyperparameters("notraining", + input_creator_notraining="oat")) +results.append(optimize_hyperparameters("notraining", + input_creator_notraining="optuna", + last_optuna_study=last_study)) +print(results) diff --git a/examples/ex07_checkpoint_training.py b/examples/ex07_checkpoint_training.py index a76b715e4..8426896e7 100644 --- a/examples/ex07_checkpoint_training.py +++ b/examples/ex07_checkpoint_training.py @@ -1,7 +1,10 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex07_checkpoint_training.py: Shows how a training run can be paused and diff --git a/examples/ex08_checkpoint_hyperopt.py b/examples/ex08_checkpoint_hyperopt.py index 11e89a1a6..32106544b 100644 --- a/examples/ex08_checkpoint_hyperopt.py +++ b/examples/ex08_checkpoint_hyperopt.py @@ -1,7 +1,10 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex08_checkpoint_hyperopt.py: Shows how a hyperparameter optimization run can diff --git a/examples/ex09_distributed_hyperopt.py b/examples/ex09_distributed_hyperopt.py index b0f036df6..0d9983634 100644 --- a/examples/ex09_distributed_hyperopt.py +++ b/examples/ex09_distributed_hyperopt.py @@ -1,8 +1,10 @@ -import numpy as np +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") """ ex09_distributed_hyperopt.py: Shows how a hyperparameter @@ -10,131 +12,121 @@ using a database server system, such as PostgreSQL or MySQL. For this easy example, sqlite will be used. It is highly advisory not to to use this for actual, at-scale calculations! -Please delete ex09.db prior to execution. Afterwards execute this script -in multiple terminals / nodes. """ -def run_example09(desired_loss_improvement_factor=2): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - test_parameters = mala.Parameters() - # Currently, the splitting in training, validation and test set are - # done on a "by snapshot" basis. Specify how this is - # done by providing a list containing entries of the form - # "tr", "va" and "te". - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] - - # Specify the data scaling. - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - - # Specify the training parameters. - test_parameters.running.max_number_epochs = 5 - test_parameters.running.mini_batch_size = 40 - test_parameters.running.learning_rate = 0.00001 - test_parameters.running.trainingtype = "Adam" - - # Specify the number of trials, the hyperparameter optimizer should run - # and the type of hyperparameter. - test_parameters.hyperparameters.n_trials = 20 - test_parameters.hyperparameters.hyper_opt_method = "optuna" - test_parameters.hyperparameters.study_name = "ex09" - test_parameters.hyperparameters.rdb_storage = 'sqlite:///ex09.db' - - #################### - # DATA - # Add and prepare snapshots for training. - #################### - data_handler = mala.DataHandler(test_parameters) - - # Add all the snapshots we want to use in to the list. - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - data_handler.prepare_data() - printout("Read data: DONE.") - - #################### - # HYPERPARAMETER OPTIMIZATION - # In order to perform a hyperparameter optimization, - # one has to simply create a hyperparameter optimizer - # and let it perform a "study". - # Before such a study can be done, one has to add all the parameters - # of interest. - #################### - - test_hp_optimizer = mala.HyperOptInterface(test_parameters, data_handler) - - # Learning rate will be optimized. - test_hp_optimizer.add_hyperparameter("float", "learning_rate", - 0.0000001, 0.01) - - # Number of neurons per layer will be optimized. - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, 100) - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, 100) - - # Choices for activation function at each layer will be optimized. - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_00", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_01", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_02", - choices=["ReLU", "Sigmoid"]) - - # Perform hyperparameter optimization. - printout("Starting Hyperparameter optimization.") - test_hp_optimizer.perform_study() - test_hp_optimizer.set_optimal_parameters() - printout("Hyperparameter optimization: DONE.") - - #################### - # TRAINING - # Train with these new parameters. - #################### - - test_network = mala.Network(test_parameters) - test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - printout("Network setup: DONE.") - test_trainer.train_network() - printout("Training: DONE.") - - #################### - # RESULTS. - # Print the used parameters and check whether the loss decreased enough. - #################### - - printout("Parameters used for this experiment:") - test_parameters.show() - - # To see if the hyperparameter optimization actually worked, - # check if the best trial is better then the worst trial - # by a certain factor. - performed_trials_values = test_hp_optimizer.study.\ - trials_dataframe()["value"] - if desired_loss_improvement_factor*min(performed_trials_values) > \ - max(performed_trials_values): - return False - else: - return True - - -if __name__ == "__main__": - if run_example09(): - printout("Successfully ran ex09_distributed_hyperopt.py.") - else: - raise Exception("Ran ex09_distributed_hyperopt but something " - "was off. If you haven't changed any parameters in " - "the example, there might be a problem with " - "your installation.") - +# Remove the previous data base. +try: + os.remove("ex09.db") +except FileNotFoundError: + pass + +#################### +# PARAMETERS +# All parameters are handled from a central parameters class that +# contains subclasses. +#################### +test_parameters = mala.Parameters() +# Currently, the splitting in training, validation and test set are +# done on a "by snapshot" basis. Specify how this is +# done by providing a list containing entries of the form +# "tr", "va" and "te". +test_parameters.data.data_splitting_type = "by_snapshot" +test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + +# Specify the data scaling. +test_parameters.data.input_rescaling_type = "feature-wise-standard" +test_parameters.data.output_rescaling_type = "normal" + +# Specify the training parameters. +test_parameters.running.max_number_epochs = 5 +test_parameters.running.mini_batch_size = 40 +test_parameters.running.learning_rate = 0.00001 +test_parameters.running.trainingtype = "Adam" + +# Specify the number of trials, the hyperparameter optimizer should run +# and the type of hyperparameter. +test_parameters.hyperparameters.n_trials = 20 +test_parameters.hyperparameters.checkpoints_each_trial = -1 +test_parameters.hyperparameters.checkpoint_name = "ex09" +test_parameters.hyperparameters.hyper_opt_method = "optuna" +test_parameters.hyperparameters.study_name = "ex09" +test_parameters.hyperparameters.rdb_storage = 'sqlite:///ex09.db' + +# Hyperparameter optimization can be further refined by using ensemble training +# at each step and by using a different metric then the validation loss +# (e.g. the band energy). It is recommended not to use the ensemble training +# method in Single-GPU use, as it naturally drastically decreases performance. +test_parameters.hyperparameters.number_training_per_trial = 5 +test_parameters.running.after_before_training_metric = "band_energy" + +#################### +# DATA +# Add and prepare snapshots for training. +#################### +data_handler = mala.DataHandler(test_parameters) + +# Add all the snapshots we want to use in to the list. +data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") +data_handler.prepare_data() +printout("Read data: DONE.") + +#################### +# HYPERPARAMETER OPTIMIZATION +# In order to perform a hyperparameter optimization, +# one has to simply create a hyperparameter optimizer +# and let it perform a "study". +# Before such a study can be done, one has to add all the parameters +# of interest. +#################### + +test_hp_optimizer = mala.HyperOptInterface(test_parameters, data_handler) + +# Learning rate will be optimized. +test_hp_optimizer.add_hyperparameter("float", "learning_rate", + 0.0000001, 0.01) + +# Number of neurons per layer will be optimized. +test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, 100) +test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, 100) + +# Choices for activation function at each layer will be optimized. +test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_00", + choices=["ReLU", "Sigmoid"]) +test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_01", + choices=["ReLU", "Sigmoid"]) +test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + +# Perform hyperparameter optimization. +printout("Starting Hyperparameter optimization.") +test_hp_optimizer.perform_study() +test_hp_optimizer.set_optimal_parameters() +printout("Hyperparameter optimization: DONE.") + +#################### +# TRAINING +# Train with these new parameters. +#################### + +test_network = mala.Network(test_parameters) +test_trainer = mala.Trainer(test_parameters, test_network, data_handler) +printout("Network setup: DONE.") +test_trainer.train_network() +printout("Training: DONE.") + +#################### +# RESULTS. +# Print the used parameters and check whether the loss decreased enough. +#################### + +printout("Parameters used for this experiment:") +test_parameters.show() diff --git a/examples/ex10_tensor_board.py b/examples/ex10_tensor_board.py new file mode 100644 index 000000000..a2639282e --- /dev/null +++ b/examples/ex10_tensor_board.py @@ -0,0 +1,147 @@ +import os +import shutil +import webbrowser + +import mala +from mala import printout +from tensorboard import program + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + + +""" +ex10_tensor_board.py: Shows how a NN training by MALA can be visualized using +tensorboard. The training is the similar to the one performed in ex01, but +at the end of it, tensorboard will be launched in your browser. +""" + + +#################### +# PARAMETERS +# All parameters are handled from a central parameters class that +# contains subclasses. +#################### + +test_parameters = mala.Parameters() +# Currently, the splitting in training, validation and test set are +# done on a "by snapshot" basis. Specify how this is +# done by providing a list containing entries of the form +# "tr", "va" and "te". +test_parameters.data.data_splitting_type = "by_snapshot" +test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + +# Specify the data scaling. +test_parameters.data.input_rescaling_type = "feature-wise-standard" +test_parameters.data.output_rescaling_type = "normal" + +# Specify the used activation function. +test_parameters.network.layer_activations = ["ReLU"] + +# Specify the training parameters. +test_parameters.running.max_number_epochs = 20 +test_parameters.running.mini_batch_size = 40 +test_parameters.running.learning_rate = 0.00001 +test_parameters.running.trainingtype = "Adam" +test_parameters.running.visualisation = True +# test_parameters.running.visualisation_dir = "~/log_dir" + +#################### +# DATA +# Add and prepare snapshots for training. +#################### + +data_handler = mala.DataHandler(test_parameters) + +# Add a snapshot we want to use in to the list. +data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") +data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") +data_handler.prepare_data() +printout("Read data: DONE.") + +#################### +# NETWORK SETUP +# Set up the network and trainer we want to use. +# The layer sizes can be specified before reading data, +# but it is safer this way. +#################### + +test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), + 100, + data_handler.get_output_dimension()] + +# Setup network and trainer. +test_network = mala.Network(test_parameters) +test_trainer = mala.Trainer(test_parameters, test_network, data_handler) +printout("Network setup: DONE.") + +#################### +# TRAINING +# Train the network. +#################### + +printout("Starting training.") +test_trainer.train_network() +printout("Training: DONE.") + +#################### +# RESULTS. +# Print the used parameters and check whether the loss decreased enough. +#################### +printout("Parameters used for this experiment:") +test_parameters.show() + +#################### +# Using tensorboard and launching the link in webbrowser +# Runs tensorboard with the given log_dir and wait for user +# input to kill the app. +#################### + + +class LaunchTensorboard: + + """ + Parameters necessary for Launching tensorboard. + + Parameters + ---------- + params : mala.Parameters + MALA parameters for this particular run. + + clear_on_exit : bool + If True Clears the log_dir on exit and kills the tensorboard app. + """ + + def __init__(self, params, clear_on_exit= False): + + params: mala.common.Parameters + self.tb = program.TensorBoard() + self.log_dir = params.running.visualisation_dir + self.clear_on_exit = clear_on_exit + self.url= None + + def run(self): + self.tb.configure(argv=[None, '--logdir', self.log_dir]) + print("Launching Tensorboard ") + self.url = self.tb.launch() + print(self.url) + webbrowser.open_new_tab(self.url) + try: + input("Enter any key to exit") + except: + pass + finally: + if self.clear_on_exit: + shutil.rmtree(self.log_dir, ignore_errors=True) + print("\nCleared Logdir") + + +launch_tb = LaunchTensorboard(test_parameters) +launch_tb.run() diff --git a/examples/ex11_pass_single_feature.py b/examples/ex11_pass_single_feature.py new file mode 100644 index 000000000..c8bd5333f --- /dev/null +++ b/examples/ex11_pass_single_feature.py @@ -0,0 +1,135 @@ +import os + +pj = os.path.join + +import mala +import numpy as np +import torch + +from data_repo_path import data_repo_path + +""" +Show how to run a single feature vector out of a snapshot through a network. +We load a pre-trained net and pass a single input feature vector through, +including input and output scaling. + +First run ex05_training_with_postprocessing.py to create the +ex05_* files used below. +""" + + +data_path = pj(data_repo_path, "Al36") +params_path = "ex05_params.pkl" +network_path = "ex05_network.pth" +input_scaler_path = "ex05_iscaler.pkl" +output_scaler_path = "ex05_oscaler.pkl" + + +def load_whole_snapshot(): + """Usual MALA workflow: load whole snapshot using DataHandler. Extract + single feature vector afterwards. + """ + + # First load Parameters. + parameters = mala.Parameters.load_from_file(params_path, no_snapshots=True) + + # Load a network from a file. + network = mala.Network.load_from_file(parameters, network_path) + + # Make sure the same scaling is used for data handling. + iscaler = mala.DataScaler.load_from_file(input_scaler_path) + oscaler = mala.DataScaler.load_from_file(output_scaler_path) + + inference_data_handler = mala.DataHandler( + parameters, input_data_scaler=iscaler, output_data_scaler=oscaler + ) + + # Add snapshots that are to be tested and make sure that the + # data_splitting_snapshots list is correct. + # + # Units: output_units="1/Ry" means that the output (target) data (LDOS) has + # unit 1/Ry. Rescaled network output, after oscaler.inverse_transform() is + # applied (see below) will be in 1/eV. + parameters.data.data_splitting_snapshots = ["te"] + inference_data_handler.add_snapshot( + "Al_debug_2k_nr2.in.npy", + data_path, + "Al_debug_2k_nr2.out.npy", + data_path, + output_units="1/Ry", + ) + inference_data_handler.prepare_data(reparametrize_scaler=False) + + # Extract single feature vector from snapshot. The x,y,z part (first 3 + # entries) are removed in DataHandler, so the feature vector length is 91 + # instead of 94. See also load_memmap_snapshot() below for details. The + # removal in DataHandler is controlled by + # parameters.descriptors_contain_xyz, which is True by default. + x_scaled = inference_data_handler.test_data_inputs[0] + with torch.no_grad(): + y_pred = network(x_scaled) + + # Convert to 1/eV + y_rescaled = oscaler.inverse_transform(y_pred) + + return dict(x_scaled=x_scaled, y_pred=y_pred, y_rescaled=y_rescaled) + + +def load_memmap_snapshot(): + """Load numpy memmap of snapshot and extract single feature. Avoid loading + whole snapshot into memory. + """ + # First load Parameters. + parameters = mala.Parameters.load_from_file(params_path, no_snapshots=True) + + # Load a network from a file. + network = mala.Network.load_from_file(parameters, network_path) + + # Make sure the same scaling is used for data handling. + iscaler = mala.DataScaler.load_from_file(input_scaler_path) + oscaler = mala.DataScaler.load_from_file(output_scaler_path) + + # Load snapshot with input features, use memmap. + inputs_array = np.load( + pj(data_path, "Al_debug_2k_nr2.in.npy"), mmap_mode="r" + ) + + # Our inputs usually contain x,y,z information, so one single input vector + # reads [x,y,z,f_0, f_1, ..., f_N] where [f_0, f_1, ..., f_N] is the actual + # SNAP feature vector. Now, we select a single feature vector from the + # snapshot. + x = torch.from_numpy(inputs_array[0, 0, 0, 3:].astype(np.float32)) + + # For some reason, DataScaler changes the shape (N,) -> (1,N), revert that + x_scaled = iscaler.transform(x)[0, :] + with torch.no_grad(): + y_pred = network(x_scaled) + + # Convert to 1/eV + y_rescaled = oscaler.inverse_transform(y_pred) + + return dict(x_scaled=x_scaled, y_pred=y_pred, y_rescaled=y_rescaled, x=x) + + +if __name__ == "__main__": + # fmt: off + assert os.path.exists(data_path), f"{data_path} missing, link data repo first" + # fmt: on + + for pth in [ + params_path, + network_path, + input_scaler_path, + output_scaler_path, + ]: + assert os.path.exists(pth), f"{pth} missing, run ex05 first" + + a = load_whole_snapshot() + b = load_memmap_snapshot() + + for name in ["x_scaled", "y_pred", "y_rescaled"]: + ref = a[name] + val = b[name] + assert (ref == val).all() + assert ref.shape == val.shape + assert ref.ndim == val.ndim == 1 diff --git a/examples/ex12_run_predictions.py b/examples/ex12_run_predictions.py new file mode 100644 index 000000000..a5db2c094 --- /dev/null +++ b/examples/ex12_run_predictions.py @@ -0,0 +1,148 @@ +import os + +import mala +from mala import printout + +from data_repo_path import data_repo_path +data_path = os.path.join(os.path.join(data_repo_path, "Be2"), "training_data") + +""" +ex12_run_predictions.py: Show how a prediction can be made using MALA. +Using nothing more then the trained network and atomic configurations, +predictions can be made. +""" + + +# Uses a network to make a prediction. +def use_predictor(new_network, new_parameters, iscaler, oscaler): + #################### + # PARAMETERS + # Specify the correct LDOS parameters and load network. + #################### + new_parameters.targets.target_type = "LDOS" + new_parameters.targets.ldos_gridsize = 11 + new_parameters.targets.ldos_gridspacing_ev = 2.5 + new_parameters.targets.ldos_gridoffset_ev = -5 + new_parameters.running.inference_data_grid = [18, 18, 27] + + new_parameters.descriptors.descriptor_type = "SNAP" + new_parameters.descriptors.twojmax = 10 + new_parameters.descriptors.rcutfac = 4.67637 + + inference_data_handler = mala.DataHandler(new_parameters, + input_data_scaler=iscaler, + output_data_scaler=oscaler) + + #################### + # PREDICTION + # Create a Predictor object and make a prediction. + #################### + + predictor = mala.Predictor(new_parameters, new_network, + inference_data_handler) + + # Using a QE out is simply for convenience; with the function + # .predict_from_atoms, prediction can be made directly from atomic + # configurations. + ldos = predictor.predict_from_qeout(os.path.join( + data_path, + "Be_snapshot3.out")) + ldos_calculator: mala.LDOS = inference_data_handler.target_calculator + + # Fermi energy has to be calculated self-consistently for predictions, + # and for that we also have to tell the calculator how many electrons + # the system has and at which temperature we perform calculations. + ldos_calculator.number_of_electrons = 4 + ldos_calculator.temperature_K = 298 + + fermi_energy = ldos_calculator.get_self_consistent_fermi_energy_ev(ldos) + + number_of_electrons = ldos_calculator.\ + get_number_of_electrons(ldos, fermi_energy_eV=fermi_energy) + band_energy = ldos_calculator. \ + get_band_energy(ldos, fermi_energy_eV=fermi_energy) + printout("Predicted number of electrons: ", number_of_electrons) + printout("Predicted band energy: ", band_energy) + + +# Trains a network. +def initial_training(): + #################### + # PARAMETERS + # All parameters are handled from a central parameters class that + # contains subclasses. + #################### + + test_parameters = mala.Parameters() + # Currently, the splitting in training, validation and test set are + # done on a "by snapshot" basis. Specify how this is + # done by providing a list containing entries of the form + # "tr", "va" and "te". + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va"] + + # Specify the data scaling. + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + + # Specify the used activation function. + test_parameters.network.layer_activations = ["ReLU"] + + # Specify the training parameters. + test_parameters.running.max_number_epochs = 100 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + + #################### + # DATA + # Add and prepare snapshots for training. + #################### + + data_handler = mala.DataHandler(test_parameters) + + # Add a snapshot we want to use in to the list. + data_handler.add_snapshot("Be_snapshot1.in.npy", data_path, + "Be_snapshot1.out.npy", data_path) + data_handler.add_snapshot("Be_snapshot2.in.npy", data_path, + "Be_snapshot2.out.npy", data_path) + data_handler.prepare_data() + printout("Read data: DONE.") + + #################### + # NETWORK SETUP + # Set up the network and trainer we want to use. + # The layer sizes can be specified before reading data, + # but it is safer this way. + #################### + + test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), + 100, + data_handler.get_output_dimension()] + + # Setup network and trainer. + test_network = mala.Network(test_parameters) + test_trainer = mala.Trainer(test_parameters, test_network, data_handler) + printout("Network setup: DONE.") + + #################### + # TRAINING + # Train the network. + #################### + + printout("Starting training.") + test_trainer.train_network() + printout("Training: DONE.") + + #################### + # SAVING + # In order to be operational at a later point we need to save 4 objects: + # Parameters, input/output scaler, network. + #################### + + return test_network, test_parameters, data_handler.input_data_scaler,\ + data_handler.output_data_scaler + + +network, params, input_scaler, output_scaler = initial_training() +use_predictor(network, params, input_scaler, output_scaler) diff --git a/examples/ex99_verify_all_examples.py b/examples/ex99_verify_all_examples.py deleted file mode 100644 index 8513b54b1..000000000 --- a/examples/ex99_verify_all_examples.py +++ /dev/null @@ -1,130 +0,0 @@ -from mala.common.parameters import printout -from ex01_run_singleshot import run_example01 -from ex02_preprocess_data import run_example02 -from ex03_postprocess_data import run_example03 -from ex04_hyperparameter_optimization import run_example04 -from ex05_training_with_postprocessing import run_example05 -from ex06_advanced_hyperparameter_optimization import run_example06 -from ex07_checkpoint_training import run_example07 -from ex08_checkpoint_hyperopt import run_example08 -from ex09_distributed_hyperopt import run_example09 -import os -""" -ex99_verify_all_examples.py: This example confirms whether or not the examples -run CORRECTLY. That is, even though they might run, they may not run correctly, -e.g. a network will train but with abysmal performance. -""" -printout("Welcome to MALA.") -printout("Running ex99_verify_all_examples.py") - -# Example 1: Perform a training. -if run_example01(): - printout("Successfully ran ex01_run_singleshot.") -else: - raise Exception("Ran ex01_run_singleshot but something was off. If you " - "haven't changed any parameters in " - "the example, there might be a problem with your " - "installation.") - -# Example 2: Preprocess data. -try: - if run_example02(): - printout("Successfully ran ex02_preprocess_data.") -except ModuleNotFoundError: - printout("Could not run ex02_preprocess_data, most likely because of" - "missing LAMMPS installation.") -except FileNotFoundError: - printout("Could not run ex02_preprocess_data, most likely because of" - "missing cube files.") - -# Example 3: Postprocess data. Run it twice, once with Quantum Espresso. -# if run_example03(do_total_energy=False): -# printout("Successfully ran ex03_postprocess_data.") -# else: -# raise Exception("Ran ex03_postprocess_data but something was off." -# " If you haven't changed any parameters in " -# "the example, there might be a problem with your" -# " installation.") -try: - if run_example03(do_total_energy=True): - printout("Successfully ran ex03_postprocess_data.") -except ModuleNotFoundError: - printout("Could not run ex03_postprocess_data, most likely because of " - "missing QE installation.") -except FileNotFoundError: - printout("Could not run ex03_postprocess_data, most likely because of " - "missing LDOS data.") - - -# Example 4: Perform Hyperparameter optimization. -if run_example04(): - printout("Successfully ran ex04_hyperparameter_optimization.py.") -else: - raise Exception("Ran ex04_hyperparameter_optimization but something " - "was off. If you haven't changed any parameters in " - "the example, there might be a problem with " - "your installation.") - -# Example 5: Train a network, do a prediction and process this prediction. -if run_example05(True, True): - printout("Successfully ran ex05_training_with_postprocessing.py.") -else: - raise Exception("Ran ex05_training_with_postprocessing but something " - "was off. If you haven't changed any parameters in " - "the example, there might be a problem with your " - "installation.") - -# Example 6: Novel hyperparameter optimization techniques. -if run_example06(): - printout("Successfully ran ex06_advanced_hyperparameter_optimization.py.") -else: - raise Exception( - "Ran ex10_advanced_hyperparameter_optimization but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your installation.") - -# Example 7: Checkpointing/resuming training. -checkpoint_files = ["ex07_iscaler.pkl", "ex07_oscaler.pkl", "ex07_params.pkl", - "ex07_network.pth", "ex07_optimizer.pth"] -for checkpoint_file in checkpoint_files: - if os.path.exists(checkpoint_file): - os.remove(checkpoint_file) - -for i in range(0, 2): - if run_example07(): - printout("Successfully ran ex07_checkpoint_training ("+str(i+1)+"/2).") - else: - raise Exception("Ran ex07_checkpoint_training but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") - -# Example 8: Checkpointing/resuming hyperparameter optimization. -checkpoint_files = ["ex08_iscaler.pkl", "ex08_oscaler.pkl", "ex08_params.pkl", - "ex08_hyperopt.pth"] -for checkpoint_file in checkpoint_files: - if os.path.exists(checkpoint_file): - os.remove(checkpoint_file) - -for i in range(0, 2): - if run_example08(): - printout("Successfully ran ex08_checkpoint_hyperopt.") - else: - raise Exception("Ran ex08_checkpoint_hyperopt but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") - - -# Example 8: Distritbuted hyperparameter optimitzation. -if os.path.exists("ex09.db"): - os.remove("ex09.db") - -if run_example09(): - printout("Successfully ran ex09_distributed_hyperopt.") -else: - raise Exception("Ran ex09_distributed_hyperopt but something was off." - " If you haven't changed any parameters in " - "the example, there might be a problem with your" - " installation.") - diff --git a/install/data_repo_link/link_data_repo.sh b/install/data_repo_link/link_data_repo.sh old mode 100644 new mode 100755 index f37a91467..bbc936d6e --- a/install/data_repo_link/link_data_repo.sh +++ b/install/data_repo_link/link_data_repo.sh @@ -27,14 +27,17 @@ then data_repo_path=$data_repo_path/ fi +# Append a / if we have to. +lastcharacter="${mala_base_path: -1}" +if [ "$lastcharacter" != "/" ] +then + mala_base_path=$mala_base_path/ +fi + # Write the python file. rm -f ${script_path}/${pythonfile} touch ${script_path}/${pythonfile} echo "data_repo_path = \"${data_repo_path}\"" >> ${script_path}/${pythonfile} -echo "" >> ${script_path}/${pythonfile} -echo "" >> ${script_path}/${pythonfile} -echo "def get_data_repo_path():" >> ${script_path}/${pythonfile} -echo " return data_repo_path" >> ${script_path}/${pythonfile} # copy the file to test and example folders. cp ${script_path}/${pythonfile} ${test_path} diff --git a/install/mala_cpu_base_environment.yml b/install/mala_cpu_base_environment.yml index a4e83d3aa..eda4ddd18 100644 --- a/install/mala_cpu_base_environment.yml +++ b/install/mala_cpu_base_environment.yml @@ -12,5 +12,3 @@ dependencies: - pytorch-cpu - mpmath - pandas - - pip: - - oapackage diff --git a/install/mala_cpu_environment.yml b/install/mala_cpu_environment.yml index 45434ae00..d3e79d6f0 100644 --- a/install/mala_cpu_environment.yml +++ b/install/mala_cpu_environment.yml @@ -98,5 +98,3 @@ dependencies: - zipp=3.4.1=pyhd8ed1ab_0 - zlib=1.2.11=h516909a_1010 - zstd=1.5.0=ha95c52a_0 - - pip: - - oapackage==2.6.8 diff --git a/mala/__init__.py b/mala/__init__.py index 210005ce6..e835eefd5 100644 --- a/mala/__init__.py +++ b/mala/__init__.py @@ -7,8 +7,8 @@ from .version import __version__ from .common import Parameters, printout -from .descriptors import DescriptorInterface, SNAP +from .descriptors import DescriptorInterface, SNAP, DescriptorBase from .datahandling import DataHandler, DataScaler, DataConverter from .network import Network, Tester, Trainer, HyperOptInterface, \ - HyperOptOptuna + HyperOptOptuna, HyperOptNoTraining, HyperOptOAT, Predictor from .targets import TargetInterface, LDOS, DOS, Density, fermi_function diff --git a/mala/common/parameters.py b/mala/common/parameters.py index e8270c194..95d25dde5 100644 --- a/mala/common/parameters.py +++ b/mala/common/parameters.py @@ -1,7 +1,8 @@ """Collection of all parameter related classes and functions.""" +import os import pickle import warnings -from .printout import printout, set_horovod_status + try: import horovod.torch as hvd except ModuleNotFoundError: @@ -11,12 +12,15 @@ "True WILL cause a crash.", stacklevel=3) import torch +from mala.common.printout import printout, set_horovod_status + + class ParametersBase: """Base parameter class for MALA.""" - def __init__(self): - """Create an instance of ParameterBase.""" + def __init__(self,): + self._configuration = {"gpu": False, "horovod": False} pass def show(self, indent=""): @@ -33,6 +37,12 @@ def show(self, indent=""): for v in vars(self): printout(indent + '%-15s: %s' % (v, getattr(self, v))) + def _update_gpu(self, new_gpu): + self._configuration["gpu"] = new_gpu + + def _update_horovod(self, new_horovod): + self._configuration["horovod"] = new_horovod + class ParametersNetwork(ParametersBase): """ @@ -68,7 +78,6 @@ class ParametersNetwork(ParametersBase): """ def __init__(self): - """Create an instance of ParametersNetwork.""" super(ParametersNetwork, self).__init__() self.nn_type = "feed-forward" self.layer_sizes = [10, 10, 10] @@ -103,7 +112,6 @@ class ParametersDescriptors(ParametersBase): """ def __init__(self): - """Create an instance of ParametersDescriptors.""" super(ParametersDescriptors, self).__init__() self.descriptor_type = "SNAP" self.twojmax = 10 @@ -130,15 +138,30 @@ class ParametersTargets(ParametersBase): ldos_gridoffset_ev: float Lowest energy value on the (L)DOS energy grid [eV]. + + """ def __init__(self): - """Create an instance of ParameterTargets.""" super(ParametersTargets, self).__init__() self.target_type = "LDOS" self.ldos_gridsize = 0 self.ldos_gridspacing_ev = 0 self.ldos_gridoffset_ev = 0 + self.restrict_targets = "zero_out_negative" + self.pseudopotential_path = None + + @property + def restrict_targets(self): + """Control if and how targets are restricted to physical values..""" + return self._restrict_targets + + @restrict_targets.setter + def restrict_targets(self, value): + if value != "zero_out_negative" and value != "absolute_values": + self._restrict_targets = None + else: + self._restrict_targets = value class ParametersData(ParametersBase): @@ -205,7 +228,6 @@ class ParametersData(ParametersBase): """ def __init__(self): - """Create an instance of ParametersData.""" super(ParametersData, self).__init__() self.descriptors_contain_xyz = True self.snapshot_directories_list = [] @@ -303,15 +325,23 @@ class ParametersRunning(ParametersBase): checkpoint_name : string Name used for the checkpoints. Using this, multiple runs can be performed in the same directory. + + visualisation : int + If True then Tensorboard is activated for visualisation + case 0: No tensorboard activated + case 1: tensorboard activated with Loss and learning rate + case 2; additonally weights and biases and gradient + + inference_data_grid : list + List holding the grid to be used for inference in the form of + [x,y,z]. """ def __init__(self): - """Create an instance of ParametersRunning.""" super(ParametersRunning, self).__init__() self.trainingtype = "SGD" self.learning_rate = 0.5 self.max_number_epochs = 100 - # TODO: Find a better system for verbosity. Maybe a number. self.verbosity = True self.mini_batch_size = 10 self.weight_decay = 0 @@ -321,14 +351,72 @@ def __init__(self): self.learning_rate_decay = 0.1 self.learning_rate_patience = 0 self.use_compression = False - # TODO: Give this parameter a more descriptive name. self.kwargs = {'num_workers': 0, 'pin_memory': False} - # TODO: Objects should not be parameters! self.sampler = {"train_sampler": None, "validate_sampler": None, "test_sampler": None} self.use_shuffling_for_samplers = True self.checkpoints_each_epoch = 0 self.checkpoint_name = "checkpoint_mala" + self.visualisation = 0 + # default visualisation_dir= "~/log_dir" + self.visualisation_dir= os.path.join(os.path.expanduser("~"), "log_dir") + self.during_training_metric = "ldos" + self.after_before_training_metric = "ldos" + self.inference_data_grid = [0, 0, 0] + + def _update_horovod(self, new_horovod): + super(ParametersRunning, self)._update_horovod(new_horovod) + self.during_training_metric = self.during_training_metric + self.after_before_training_metric = self.after_before_training_metric + + @property + def during_training_metric(self): + """ + Control the metric used during training. + + Metric for evaluated on the validation set during training. + Default is "ldos", meaning that the regular loss on the LDOS will be + used as a metric. Possible options are "band_energy" and + "total_energy". For these, the band resp. total energy of the + validation snapshots will be calculated and compared to the provided + DFT results. Of these, the mean average error in eV/atom will be + calculated. + """ + return self._during_training_metric + + @during_training_metric.setter + def during_training_metric(self, value): + if value != "ldos": + if self._configuration["horovod"]: + raise Exception("Currently, MALA can only operate with the " + "\"ldos\" metric for horovod runs.") + self._during_training_metric = value + + @property + def after_before_training_metric(self): + """ + Get the metric used during training. + + Metric for evaluated on the validation and test set before and after + training. Default is "LDOS", meaning that the regular loss on the LDOS + will be used as a metric. Possible options are "band_energy" and + "total_energy". For these, the band resp. total energy of the + validation snapshots will be calculated and compared to the provided + DFT results. Of these, the mean average error in eV/atom will be + calculated. + """ + return self._after_before_training_metric + + @after_before_training_metric.setter + def after_before_training_metric(self, value): + if value != "ldos": + if self._configuration["horovod"]: + raise Exception("Currently, MALA can only operate with the " + "\"ldos\" metric for horovod runs.") + self._after_before_training_metric = value + + + class ParametersHyperparameterOptimization(ParametersBase): @@ -374,7 +462,7 @@ class ParametersHyperparameterOptimization(ParametersBase): - "optuna" : Use optuna for the hyperparameter optimization. - "oat" : Use orthogonal array tuning (currently limited to categorical hyperparemeters). Range analysis is - currently done by simply choosing the lowesr loss. + currently done by simply choosing the lowest loss. - "notraining" : Using a NAS without training, based on jacobians. checkpoints_each_trial : int @@ -386,10 +474,58 @@ class ParametersHyperparameterOptimization(ParametersBase): Name used for the checkpoints. Using this, multiple runs can be performed in the same directory. Currently. this only works with optuna. + + study_name : string + Name used for this study (in optuna#s storage). Necessary + when operating with a RDB storage. + + rdb_storage : string + Adress of the RDB storage to be used by optuna. + + rdb_storage_heartbeat : int + Heartbeat interval for optuna (in seconds). Default is None. + If not None and above 0, optuna will record the heartbeat of intervals. + If no action on a RUNNING trial is recognized for longer then this + interval, then this trial will be moved to FAILED. In distributed + training, setting a heartbeat is currently the only way to achieve + a precise number of trials: + + https://github.com/optuna/optuna/issues/1883 + + For optuna versions below 2.8.0, larger heartbeat intervals are + detrimental to performance and should be avoided: + + https://github.com/optuna/optuna/issues/2685 + + For MALA, no evidence for decreased performance using smaller + heartbeat values could be found. So if this is used, 1s is a reasonable + value. + + number_training_per_trial : int + Number of network trainings performed per trial. Default is 1, + but it makes sense to choose a higher number, to exclude networks + that performed by chance (good initilization). Naturally this impedes + performance. + + trial_ensemble_evaluation : string + Control how multiple trainings performed during a trial are evaluated. + By default, simply "mean" is used. For smaller numbers of training + per trial it might make sense to use "mean_std", which means that + the mean of all metrics plus the standard deviation is used, + as an estimate of the minimal accuracy to be expected. Currently, + "mean" and "mean_std" are allowed. + + use_multivariate : bool + If True, the optuna multivariate sampler is used. It is experimental + since v2.2.0, but reported to perform very well. + http://proceedings.mlr.press/v80/falkner18a.html + + no_training_cutoff : float + If the surrogate loss algorithm is used as a pruner during a study, + this cutoff determines which trials are neglected. """ def __init__(self): - """Create an instance of ParametersHyperparameterOptimization.""" super(ParametersHyperparameterOptimization, self).__init__() self.direction = 'minimize' self.n_trials = 100 @@ -400,6 +536,11 @@ def __init__(self): self.study_name = None self.rdb_storage = None self.rdb_storage_heartbeat = None + self.number_training_per_trial = 1 + self.trial_ensemble_evaluation = "mean" + self.use_multivariate = True + self.no_training_cutoff = 0 + self.pruner = None @property def rdb_storage_heartbeat(self): @@ -413,6 +554,38 @@ def rdb_storage_heartbeat(self, value): else: self._rdb_storage_heartbeat = value + @property + def number_training_per_trial(self): + """Control how many trainings are run per optuna trial.""" + return self._number_training_per_trial + + @number_training_per_trial.setter + def number_training_per_trial(self, value): + if value < 1: + self._number_training_per_trial = 1 + else: + self._number_training_per_trial = value + + @property + def trial_ensemble_evaluation(self): + """ + Control how multiple trainings performed during a trial are evaluated. + + By default, simply "mean" is used. For smaller numbers of training + per trial it might make sense to use "mean_std", which means that + the mean of all metrics plus the standard deviation is used, + as an estimate of the minimal accuracy to be expected. Currently, + "mean" and "mean_std" are allowed. + """ + return self._trial_ensemble_evaluation + + @trial_ensemble_evaluation.setter + def trial_ensemble_evaluation(self, value): + if value != "mean" and value != "mean_std": + self._trial_ensemble_evaluation = "mean" + else: + self._trial_ensemble_evaluation = value + def show(self, indent=""): """ Print name and values of all attributes of this object. @@ -448,7 +621,6 @@ class ParametersDebug(ParametersBase): """ def __init__(self): - """Create an instance of ParametersDebug.""" super(ParametersDebug, self).__init__() self.grid_dimensions = [] @@ -490,8 +662,9 @@ class Parameters: """ def __init__(self): - """Create an instance of Parameters.""" self.comment = "" + + # Parameters subobjects. self.network = ParametersNetwork() self.descriptors = ParametersDescriptors() self.targets = ParametersTargets() @@ -499,11 +672,11 @@ def __init__(self): self.running = ParametersRunning() self.hyperparameters = ParametersHyperparameterOptimization() self.debug = ParametersDebug() - self.manual_seed = None # Properties self.use_horovod = False self.use_gpu = False + self.manual_seed = None @property def use_gpu(self): @@ -520,6 +693,13 @@ def use_gpu(self, value): else: warnings.warn("GPU requested, but no GPU found. MALA will " "operate with CPU only.", stacklevel=3) + self.network._update_gpu(self.use_gpu) + self.descriptors._update_gpu(self.use_gpu) + self.targets._update_gpu(self.use_gpu) + self.data._update_gpu(self.use_gpu) + self.running._update_gpu(self.use_gpu) + self.hyperparameters._update_gpu(self.use_gpu) + self.debug._update_gpu(self.use_gpu) @property def use_horovod(self): @@ -532,6 +712,13 @@ def use_horovod(self, value): hvd.init() set_horovod_status(value) self._use_horovod = value + self.network._update_horovod(self.use_horovod) + self.descriptors._update_horovod(self.use_horovod) + self.targets._update_horovod(self.use_horovod) + self.data._update_horovod(self.use_horovod) + self.running._update_horovod(self.use_horovod) + self.hyperparameters._update_horovod(self.use_horovod) + self.debug._update_horovod(self.use_horovod) def show(self): """Print name and values of all attributes of this object.""" diff --git a/mala/common/printout.py b/mala/common/printout.py index 3f32827b5..945341977 100644 --- a/mala/common/printout.py +++ b/mala/common/printout.py @@ -36,9 +36,8 @@ def printout(*values, sep=' '): sep : string Separator between printed values. """ - outstring = '' - for v in values: - outstring += str(v)+sep + outstring = sep.join([str(v) for v in values]) + if use_horovod is False: print(outstring) else: diff --git a/mala/datahandling/data_converter.py b/mala/datahandling/data_converter.py index 31c017277..6e2e82a72 100644 --- a/mala/datahandling/data_converter.py +++ b/mala/datahandling/data_converter.py @@ -1,9 +1,12 @@ """DataConverter class for converting snapshots into numpy arrays.""" +import os + +import numpy as np + from mala.common.printout import printout from mala.common.parameters import ParametersData from mala.descriptors.descriptor_interface import DescriptorInterface from mala.targets.target_interface import TargetInterface -import numpy as np class DataConverter: @@ -12,6 +15,21 @@ class DataConverter: These snapshots can be e.g. Quantum Espresso results. + Parameters + ---------- + parameters : mala.common.parameters.Parameters + The parameters object used for creating this instance. + + descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase + The descriptor calculator used for parsing/converting fingerprint + data. If None, the descriptor calculator will be created by this + object using the parameters provided. Default: None + + target_calculator : mala.targets.target_base.TargetBase + Target calculator used for parsing/converting target data. If None, + the target calculator will be created by this object using the + parameters provided. + Attributes ---------- descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase @@ -23,24 +41,6 @@ class DataConverter: def __init__(self, parameters, descriptor_calculator=None, target_calculator=None): - """ - Create an instances of the DataConverter class. - - Parameters - ---------- - parameters : mala.common.parameters.Parameters - The parameters object used for creating this instance. - - descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase - The descriptor calculator used for parsing/converting fingerprint - data. If None, the descriptor calculator will be created by this - object using the parameters provided. Default: None - - target_calculator : mala.targets.target_base.TargetBase - Target calculator used for parsing/converting target data. If None, - the target calculator will be created by this object using the - parameters provided. - """ self.parameters: ParametersData = parameters.data self.target_calculator = target_calculator if self.target_calculator is None: @@ -179,5 +179,7 @@ def convert_snapshots(self, save_path="./", snapshot_name = naming_scheme snapshot_name = snapshot_name.replace("*", str(snapshot_number)) printout("Saving snapshot", snapshot_number, "at ", save_path) - np.save(save_path+snapshot_name+".in.npy", input_data) - np.save(save_path+snapshot_name+".out.npy", output_data) + np.save(os.path.join(save_path, snapshot_name+".in.npy"), + input_data) + np.save(os.path.join(save_path, snapshot_name+".out.npy"), + output_data) diff --git a/mala/datahandling/data_handler.py b/mala/datahandling/data_handler.py index 9d7c9a037..f22bd724e 100644 --- a/mala/datahandling/data_handler.py +++ b/mala/datahandling/data_handler.py @@ -1,15 +1,22 @@ """DataHandler class that loads and scales data.""" -from torch.utils.data import TensorDataset +import os -from .data_scaler import DataScaler -from .snapshot import Snapshot -from .lazy_load_dataset import LazyLoadDataset -from mala.common.parameters import Parameters -from mala.targets.target_interface import TargetInterface -from mala.descriptors.descriptor_interface import DescriptorInterface -from mala.common.printout import printout +try: + import horovod.torch as hvd +except ModuleNotFoundError: + # Warning is thrown by Parameters class + pass import numpy as np import torch +from torch.utils.data import TensorDataset + +from mala.common.printout import printout +from mala.common.parameters import Parameters, ParametersData +from mala.datahandling.data_scaler import DataScaler +from mala.datahandling.snapshot import Snapshot +from mala.datahandling.lazy_load_dataset import LazyLoadDataset +from mala.descriptors.descriptor_interface import DescriptorInterface +from mala.targets.target_interface import TargetInterface class DataHandler: @@ -18,34 +25,31 @@ class DataHandler: Data that is not in a numpy array can be converted using the DataConverter class. - """ - def __init__(self, parameters: Parameters, target_calculator=None, - descriptor_calculator=None, input_data_scaler=None, - output_data_scaler=None): - """ - Create an instance of DataHandler. + Parameters + ---------- + parameters : mala.common.parameters.Parameters + descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase + Used to do unit conversion on input data. If None, then one will + be created by this class. - Parameters - ---------- - parameters : mala.common.parameters.Parameters - descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase - Used to do unit conversion on input data. If None, then one will - be created by this class. + target_calculator : mala.targets.target_base.TargetBase + Used to do unit conversion on output data. If None, then one will + be created by this class. - target_calculator : mala.targets.target_base.TargetBase - Used to do unit conversion on output data. If None, then one will - be created by this class. + input_data_scaler : mala.datahandling.data_scaler.DataScaler + Used to scale the input data. If None, then one will be created by + this class. - input_data_scaler : mala.datahandling.data_scaler.DataScaler - Used to scale the input data. If None, then one will be created by - this class. + output_data_scaler : mala.datahandling.data_scaler.DataScaler + Used to scale the output data. If None, then one will be created by + this class. + """ - output_data_scaler : mala.datahandling.data_scaler.DataScaler - Used to scale the output data. If None, then one will be created by - this class. - """ - self.parameters = parameters.data + def __init__(self, parameters: Parameters, target_calculator=None, + descriptor_calculator=None, input_data_scaler=None, + output_data_scaler=None): + self.parameters: ParametersData = parameters.data self.dbg_grid_dimensions = parameters.debug.grid_dimensions self.use_horovod = parameters.use_horovod self.training_data_set = None @@ -77,10 +81,18 @@ def __init__(self, parameters: Parameters, target_calculator=None, self.nr_snapshots = 0 self.grid_dimension = [0, 0, 0] self.grid_size = 0 + + # Actual data points in the different categories. self.nr_training_data = 0 self.nr_test_data = 0 self.nr_validation_data = 0 + # Number of snapshots in these categories. + self.nr_training_snapshots = 0 + self.nr_test_snapshots = 0 + self.nr_validation_snapshots = 0 + + self.training_data_inputs = torch.empty(0) """ Torch tensor holding all scaled training data inputs. @@ -190,6 +202,9 @@ def clear_data(self): self.nr_training_data = 0 self.nr_test_data = 0 self.nr_validation_data = 0 + self.nr_training_snapshots = 0 + self.nr_test_snapshots = 0 + self.nr_validation_snapshots = 0 self.parameters.data_splitting_snapshots = [] self.parameters.snapshot_directories_list = [] @@ -243,13 +258,19 @@ def prepare_data(self, reparametrize_scaler=True): self.__build_datasets() printout("Build dataset done.") + # Wait until all ranks are finished with data preparation. + if self.use_horovod: + hvd.allreduce(torch.tensor(0), name='barrier') + def mix_datasets(self): - """For lazily-loaded data sets, the snapshot ordering is (re-)mixed.""" + """ + For lazily-loaded data sets, the snapshot ordering is (re-)mixed. + + This applies only to the training data set. For the validation and + test set it does not matter. + """ if self.parameters.use_lazy_loading: - self.validation_data_set.mix_datasets() self.training_data_set.mix_datasets() - if self.test_data_set is not None: - self.test_data_set.mix_datasets() def raw_numpy_to_converted_scaled_tensor(self, numpy_array, data_type, units, convert3Dto1D=False): @@ -325,17 +346,17 @@ def resize_snapshots_for_debugging(self, directory="./", i = 0 snapshot: Snapshot for snapshot in self.parameters.snapshot_directories_list: - tmp_array = self.__load_from_npy_file(snapshot.input_npy_directory - + snapshot.input_npy_file) + tmp_array = self.__load_from_npy_file(os.path.join(snapshot.input_npy_directory, + snapshot.input_npy_file)) tmp_file_name = naming_scheme_input tmp_file_name = tmp_file_name.replace("*", str(i)) - np.save(directory+tmp_file_name+".npy", tmp_array) + np.save(os.path.join(directory, tmp_file_name) +".npy", tmp_array) - tmp_array = self.__load_from_npy_file(snapshot.output_npy_directory - + snapshot.output_npy_file) + tmp_array = self.__load_from_npy_file(os.path.join(snapshot.output_npy_directory, + snapshot.output_npy_file)) tmp_file_name = naming_scheme_output tmp_file_name = tmp_file_name.replace("*", str(i)) - np.save(directory+tmp_file_name+".npy", tmp_array) + np.save(os.path.join(directory, tmp_file_name + ".npy"), tmp_array) i += 1 def get_snapshot_calculation_output(self, snapshot_number): @@ -379,8 +400,8 @@ def __check_snapshots(self): printout("Checking descriptor file ", snapshot.input_npy_file, "at", snapshot.input_npy_directory) - tmp = self.__load_from_npy_file(snapshot.input_npy_directory + - snapshot.input_npy_file, + tmp = self.__load_from_npy_file(os.path.join(snapshot.input_npy_directory, + snapshot.input_npy_file), mmapmode='r') # We have to cut xyz information, if we have xyz information in @@ -411,8 +432,8 @@ def __check_snapshots(self): printout("Checking targets file ", snapshot.output_npy_file, "at", snapshot.output_npy_directory) - tmp_out = self.__load_from_npy_file(snapshot.output_npy_directory + - snapshot.output_npy_file, + tmp_out = self.__load_from_npy_file(os.path.join(snapshot.output_npy_directory, + snapshot.output_npy_file), mmapmode='r') # The first snapshot determines the data size to be used. @@ -443,37 +464,37 @@ def __check_snapshots(self): if self.parameters.data_splitting_type == "by_snapshot": for snapshot_function in self.parameters.data_splitting_snapshots: if snapshot_function == "tr": - self.nr_training_data += 1 + self.nr_training_snapshots += 1 elif snapshot_function == "te": - self.nr_test_data += 1 + self.nr_test_snapshots += 1 elif snapshot_function == "va": - self.nr_validation_data += 1 + self.nr_validation_snapshots += 1 else: raise Exception("Unknown option for snapshot splitting " "selected.") # Now we need to check whether or not this input is believable. nr_of_snapshots = len(self.parameters.snapshot_directories_list) - if nr_of_snapshots != (self.nr_training_data + - self.nr_validation_data + - self.nr_test_data): + if nr_of_snapshots != (self.nr_training_snapshots + + self.nr_test_snapshots + + self.nr_validation_snapshots): raise Exception("Cannot split snapshots with specified " "splitting scheme, " "too few or too many options selected") - if self.nr_training_data == 0 and self.nr_test_data == 0: + if self.nr_training_snapshots == 0 and self.nr_test_snapshots == 0: raise Exception("No training snapshots provided.") - if self.nr_validation_data == 0 and self.nr_test_data == 0: + if self.nr_validation_snapshots == 0 and self.nr_test_snapshots == 0: raise Exception("No validation snapshots provided.") - if self.nr_training_data == 0 and self.nr_test_data != 0: + if self.nr_training_snapshots == 0 and self.nr_test_snapshots != 0: printout("DataHandler prepared for inference. No training " "possible with this setup. " "If this is not what you wanted, please revise the " "input script.") - if self.nr_validation_data != 0: + if self.nr_validation_snapshots != 0: printout("As this DataHandler can only be used for " "inference, the validation data you have " "provided will be ignored.") - if self.nr_test_data == 0: + if self.nr_test_snapshots == 0: printout("Running MALA without test data. If this is not " "what you wanted, " "please revise the input script.") @@ -483,9 +504,19 @@ def __check_snapshots(self): # As we are not actually interested in the number of snapshots, but in # the number of datasets,we need to multiply by that. - self.nr_training_data *= self.grid_size - self.nr_validation_data *= self.grid_size - self.nr_test_data *= self.grid_size + self.nr_training_data = self.nr_training_snapshots*self.grid_size + self.nr_validation_data = self.nr_validation_snapshots*self.grid_size + self.nr_test_data = self.nr_test_snapshots*self.grid_size + + # Reordering the lists. + snapshot_order = ['tr', 'va', 'te'] + combined = zip(self.parameters.data_splitting_snapshots, + self.parameters.snapshot_directories_list) + order = {key: i for i, key in enumerate(snapshot_order)} + combined_sorted = sorted(combined, key=lambda d: order[d[0]]) + self.parameters.data_splitting_snapshots, \ + self.parameters.snapshot_directories_list = \ + map(list, zip(*combined_sorted)) def __load_from_npy_file(self, file, mmapmode=None): """Load a numpy array from a file.""" @@ -518,9 +549,9 @@ def __parametrize_scalers(self): for snapshot in self.parameters.snapshot_directories_list: # Data scaling is only performed on the training data sets. if self.parameters.data_splitting_snapshots[i] == "tr": - tmp = self.__load_from_npy_file(snapshot. - input_npy_directory + - snapshot.input_npy_file, + tmp = self.__load_from_npy_file(os.path.join(snapshot. + input_npy_directory, + snapshot.input_npy_file), mmapmode='r') if self.parameters.descriptors_contain_xyz: tmp = tmp[:, :, :, 3:] @@ -566,9 +597,9 @@ def __parametrize_scalers(self): for snapshot in self.parameters.snapshot_directories_list: # Data scaling is only performed on the training data sets. if self.parameters.data_splitting_snapshots[i] == "tr": - tmp = self.__load_from_npy_file(snapshot. - output_npy_directory + - snapshot.output_npy_file, + tmp = self.__load_from_npy_file(os.path.join(snapshot. + output_npy_directory, + snapshot.output_npy_file), mmapmode='r') # The scalers will later operate on torch Tensors so we # have to make sure they are fitted on @@ -604,9 +635,9 @@ def __load_training_data_into_ram(self): # Data scaling is only performed on the training data sets. if self.parameters.data_splitting_snapshots[i] == "tr": - tmp = self.__load_from_npy_file(snapshot. - input_npy_directory + - snapshot.input_npy_file, + tmp = self.__load_from_npy_file(os.path.join(snapshot. + input_npy_directory, + snapshot.input_npy_file), mmapmode='r') if self.parameters.descriptors_contain_xyz: tmp = tmp[:, :, :, 3:] @@ -640,8 +671,9 @@ def __load_training_data_into_ram(self): # Data scaling is only performed on the training data sets. if self.parameters.data_splitting_snapshots[i] == "tr": tmp = self. \ - __load_from_npy_file(snapshot.output_npy_directory + - snapshot.output_npy_file, + __load_from_npy_file(os.path.join( + snapshot.output_npy_directory, + snapshot.output_npy_file), mmapmode='r') tmp = np.array(tmp) tmp *= self.target_calculator. \ @@ -723,8 +755,8 @@ def __build_datasets(self): if self.parameters.data_splitting_snapshots[i] == "va" \ or self.parameters.data_splitting_snapshots[i] == "te": tmp = self.\ - __load_from_npy_file(snapshot.input_npy_directory + - snapshot.input_npy_file, + __load_from_npy_file(os.path.join(snapshot.input_npy_directory, + snapshot.input_npy_file), mmapmode='r') if self.parameters.descriptors_contain_xyz: tmp = tmp[:, :, :, 3:] @@ -736,8 +768,8 @@ def __build_datasets(self): if self.parameters.data_splitting_snapshots[i] == "te": self.test_data_inputs.append(tmp) tmp = self.\ - __load_from_npy_file(snapshot.output_npy_directory + - snapshot.output_npy_file, + __load_from_npy_file(os.path.join(snapshot.output_npy_directory, + snapshot.output_npy_file), mmapmode='r') tmp = np.array(tmp) tmp *= self.target_calculator.\ diff --git a/mala/datahandling/data_scaler.py b/mala/datahandling/data_scaler.py index 1c5ace945..b85bd6106 100644 --- a/mala/datahandling/data_scaler.py +++ b/mala/datahandling/data_scaler.py @@ -1,13 +1,15 @@ """DataScaler class for scaling DFT data.""" -import torch import pickle -import numpy as np -from mala.common.parameters import printout + try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by parameters class pass +import numpy as np +import torch + +from mala.common.parameters import printout class DataScaler: @@ -15,31 +17,28 @@ class DataScaler: Sort of emulates the functionality of the scikit-learn library, but by implementing the class by ourselves we have more freedom. + + Parameters + ---------- + typestring : string + Specifies how scaling should be performed. + Options: + + - "None": No normalization is applied. + - "standard": Standardization (Scale to mean 0, + standard deviation 1) + - "normal": Min-Max scaling (Scale to be in range 0...1) + - "feature-wise-standard": Row Standardization (Scale to mean 0, + standard deviation 1) + - "feature-wise-normal": Row Min-Max scaling (Scale to be in range + 0...1) + + use_horovod : bool + If True, the DataScaler will use horovod to check that data is + only saved on the root process in parallel execution. """ def __init__(self, typestring, use_horovod=False): - """ - Create a DataScaler object. - - Parameters - ---------- - typestring : string - Specifies how scaling should be performed. - Options: - - - "None": No normalization is applied. - - "standard": Standardization (Scale to mean 0, - standard deviation 1) - - "normal": Min-Max scaling (Scale to be in range 0...1) - - "feature-wise-standard": Row Standardization (Scale to mean 0, - standard deviation 1) - - "feature-wise-normal": Row Min-Max scaling (Scale to be in range - 0...1) - - use_horovod : bool - If True, the DataScaler will use horovod to check that data is - only saved on the root process in parallel execution. - """ self.use_horovod = use_horovod self.typestring = typestring self.scale_standard = False diff --git a/mala/datahandling/lazy_load_dataset.py b/mala/datahandling/lazy_load_dataset.py index 0f7ef1ba8..d0a618ce5 100644 --- a/mala/datahandling/lazy_load_dataset.py +++ b/mala/datahandling/lazy_load_dataset.py @@ -1,13 +1,16 @@ """DataSet for lazy-loading.""" -import torch -from torch.utils.data import Dataset -from mala.datahandling.snapshot import Snapshot -import numpy as np +import os + try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by Parameters class. pass +import numpy as np +import torch +from torch.utils.data import Dataset + +from mala.datahandling.snapshot import Snapshot class LazyLoadDataset(torch.utils.data.Dataset): @@ -20,50 +23,47 @@ class LazyLoadDataset(torch.utils.data.Dataset): / DataLoader level is discouraged to the point that it was disabled. Instead, we mix the snapshot load order here ot have some sort of mixing at all. - """ - def __init__(self, input_dimension, output_dimension, input_data_scaler, - output_data_scaler, descriptor_calculator, - target_calculator, grid_dimensions, grid_size, - descriptors_contain_xyz, use_horovod): - """ - Create a lazily loaded DataSet. + Parameters + ---------- + input_dimension : int + Dimension of an input vector. - Parameters - ---------- - input_dimension : int - Dimension of an input vector. + output_dimension : int + Dimension of an output vector. - output_dimension : int - Dimension of an output vector. + input_data_scaler : mala.datahandling.data_scaler.DataScaler + Used to scale the input data. - input_data_scaler : mala.datahandling.data_scaler.DataScaler - Used to scale the input data. + output_data_scaler : mala.datahandling.data_scaler.DataScaler + Used to scale the output data. - output_data_scaler : mala.datahandling.data_scaler.DataScaler - Used to scale the output data. + descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase + Used to do unit conversion on input data. - descriptor_calculator : mala.descriptors.descriptor_base.DescriptorBase - Used to do unit conversion on input data. + target_calculator : mala.targets.target_base.TargetBase or derivative + Used to do unit conversion on output data. - target_calculator : mala.targets.target_base.TargetBase or derivative - Used to do unit conversion on output data. + grid_dimensions : list + Dimensions of the grid (x,y,z). - grid_dimensions : list - Dimensions of the grid (x,y,z). + grid_size : int + Size of the grid (x*y*z), i.e. the number of datapoints per + snapshot. - grid_size : int - Size of the grid (x*y*z), i.e. the number of datapoints per - snapshot. + descriptors_contain_xyz : bool + If true, then it is assumed that the first three entries of any + input data file are xyz-information and can be discarded. + Generally true, if your descriptors were calculated using MALA. - descriptors_contain_xyz : bool - If true, then it is assumed that the first three entries of any - input data file are xyz-information and can be discarded. - Generally true, if your descriptors were calculated using MALA. + use_horovod : bool + If true, it is assumed that horovod is used. + """ - use_horovod : bool - If true, it is assumed that horovod is used. - """ + def __init__(self, input_dimension, output_dimension, input_data_scaler, + output_data_scaler, descriptor_calculator, + target_calculator, grid_dimensions, grid_size, + descriptors_contain_xyz, use_horovod): self.snapshot_list = [] self.input_dimension = input_dimension self.output_dimension = output_dimension @@ -136,11 +136,13 @@ def get_new_data(self, file_index): """ # Load the data into RAM. self.input_data = \ - np.load(self.snapshot_list[file_index].input_npy_directory + - self.snapshot_list[file_index].input_npy_file) + np.load(os.path.join( + self.snapshot_list[file_index].input_npy_directory, + self.snapshot_list[file_index].input_npy_file)) self.output_data = \ - np.load(self.snapshot_list[file_index].output_npy_directory + - self.snapshot_list[file_index].output_npy_file) + np.load(os.path.join( + self.snapshot_list[file_index].output_npy_directory, + self.snapshot_list[file_index].output_npy_file)) # Transform the data. if self.descriptors_contain_xyz: diff --git a/mala/datahandling/snapshot.py b/mala/datahandling/snapshot.py index 8b0c475c5..c838e4212 100644 --- a/mala/datahandling/snapshot.py +++ b/mala/datahandling/snapshot.py @@ -7,41 +7,38 @@ class Snapshot: A snapshot consists of numpy arrays for input/output data and an optional DFT calculation output, needed for post-processing. - """ - def __init__(self, input_npy_file="", input_npy_directory="", - input_units="", output_npy_file="", - output_npy_directory="", output_units="", - calculation_output=""): - """ - Create a Snapshot object. + Parameters + ---------- + input_npy_file : string + File with saved numpy input array. - Parameters - ---------- - input_npy_file : string - File with saved numpy input array. + input_npy_directory : string + Directory containing input_npy_directory. - input_npy_directory : string - Directory containing input_npy_directory. + output_npy_file : string + File with saved numpy output array. - output_npy_file : string - File with saved numpy output array. + output_npy_directory : string + Directory containing output_npy_file. - output_npy_directory : string - Directory containing output_npy_file. + input_units : string + Units of input data. See descriptor classes to see which units are + supported. - input_units : string - Units of input data. See descriptor classes to see which units are - supported. + output_units : string + Units of output data. See target classes to see which units are + supported. - output_units : string - Units of output data. See target classes to see which units are - supported. + calculation_output : string + File with the output of the original snapshot calculation. This is + only needed when testing multiple snapshots. + """ - calculation_output : string - File with the output of the original snapshot calculation. This is - only needed when testing multiple snapshots. - """ + def __init__(self, input_npy_file="", input_npy_directory="", + input_units="", output_npy_file="", + output_npy_directory="", output_units="", + calculation_output=""): # Inputs. self.input_npy_file = input_npy_file self.input_npy_directory = input_npy_directory diff --git a/mala/descriptors/__init__.py b/mala/descriptors/__init__.py index 9014029b1..3ba2dff58 100644 --- a/mala/descriptors/__init__.py +++ b/mala/descriptors/__init__.py @@ -1,3 +1,4 @@ """Contains classes for calculating/parsing descriptors.""" from .descriptor_interface import DescriptorInterface from .snap import SNAP +from .descriptor_base import DescriptorBase diff --git a/mala/descriptors/descriptor_base.py b/mala/descriptors/descriptor_base.py index ffc6ad49a..2be5d0f78 100644 --- a/mala/descriptors/descriptor_base.py +++ b/mala/descriptors/descriptor_base.py @@ -1,23 +1,26 @@ """Base class for all descriptor calculators.""" +import ase +import numpy as np +from abc import ABC, abstractmethod +from mala.common.parameters import ParametersDescriptors -class DescriptorBase: + +class DescriptorBase(ABC): """ Base class for all descriptors available in MALA. Descriptors encode the atomic fingerprint of a DFT calculation. + + Parameters + ---------- + parameters : mala.common.parameters.Parameters + Parameters object used to create this object. + """ def __init__(self, parameters): - """ - Create a DescriptorBase object. - - Parameters - ---------- - parameters : mala.common.parameters.Parameters - Parameters object used to create this object. - """ - self.parameters = parameters.descriptors + self.parameters: ParametersDescriptors = parameters.descriptors self.fingerprint_length = -1 # so iterations will fail self.dbg_grid_dimensions = parameters.debug.grid_dimensions @@ -64,3 +67,84 @@ def backconvert_units(array, out_units): """ raise Exception("No unit back conversion method implemented for " "this descriptor type.") + + @staticmethod + def enforce_pbc(atoms): + """ + Explictly enforeces the PBC on an ASE atoms object. + + QE (and potentially other codes?) do that internally. Meaning that the + raw positions of atoms (in Angstrom) can lie outside of the unit cell. + When setting up the DFT calculation, these atoms get shifted into + the unit cell. Since we directly use these raw positions for the + descriptor calculation, we need to enforce that in the ASE atoms + objects, the atoms are explicitly in the unit cell. + + Parameters + ---------- + atoms : ase.atoms + The ASE atoms object for which the PBC need to be enforced. + + Returns + ------- + new_atoms : ase.atoms + The ASE atoms object for which the PBC have been enforced. + """ + new_atoms = atoms.copy() + new_atoms.set_scaled_positions(new_atoms.get_scaled_positions()) + + # This might be unecessary, but I think it is nice to have some sort of + # metric here. + rescaled_atoms = 0 + for i in range(0, len(atoms)): + if False in (np.isclose(new_atoms[i].position, + atoms[i].position, atol=0.001)): + rescaled_atoms += 1 + print("Descriptor calculation: had to enforce periodic boundary " + "conditions on", rescaled_atoms, "atoms before calculation.") + return new_atoms + + @abstractmethod + def calculate_from_qe_out(self, qe_out_file, qe_out_directory): + """ + Calculate the descriptors based on a Quantum Espresso outfile. + + Parameters + ---------- + qe_out_file : string + Name of Quantum Espresso output file for snapshot. + + qe_out_directory : string + Path to Quantum Espresso output file for snapshot. + + Returns + ------- + descriptors : numpy.array + Numpy array containing the descriptors with the dimension + (x,y,z,descriptor_dimension) + + """ + pass + + @abstractmethod + def calculate_from_atoms(self, atoms, grid_dimensions): + """ + Calculate the descriptors based on the atomic configurations. + + Parameters + ---------- + atoms : ase.Atoms + Atoms object holding the atomic configuration. + + grid_dimensions : list + Grid dimensions to be used, in the format [x,y,z]. + + Returns + ------- + descriptors : numpy.array + Numpy array containing the descriptors with the dimension + (x,y,z,descriptor_dimension) + """ + pass + + diff --git a/mala/descriptors/descriptor_interface.py b/mala/descriptors/descriptor_interface.py index b8d007c0f..3a48c6773 100644 --- a/mala/descriptors/descriptor_interface.py +++ b/mala/descriptors/descriptor_interface.py @@ -1,5 +1,5 @@ """Interface functions to automatically get descriptors.""" -from .snap import SNAP +from mala.descriptors.snap import SNAP def DescriptorInterface(params): diff --git a/mala/descriptors/lammps_utils.py b/mala/descriptors/lammps_utils.py index 4e50219ba..253898f7b 100644 --- a/mala/descriptors/lammps_utils.py +++ b/mala/descriptors/lammps_utils.py @@ -1,7 +1,6 @@ """Collection of useful functions for working with LAMMPS.""" - -import numpy as np import ctypes +import numpy as np def set_cmdlinevars(cmdargs, argdict): diff --git a/mala/descriptors/snap.py b/mala/descriptors/snap.py index 9c2fbffda..65285dc8b 100755 --- a/mala/descriptors/snap.py +++ b/mala/descriptors/snap.py @@ -1,9 +1,9 @@ """SNAP descriptor class.""" +import os import warnings + import ase import ase.io -from .lammps_utils import * -from .descriptor_base import DescriptorBase try: from lammps import lammps except ModuleNotFoundError: @@ -13,19 +13,20 @@ "descriptors from atomic positions will crash.", stacklevel=3) +from mala.descriptors.lammps_utils import * +from mala.descriptors.descriptor_base import DescriptorBase + class SNAP(DescriptorBase): - """Class for calculation and parsing of SNAP descriptors.""" + """Class for calculation and parsing of SNAP descriptors. - def __init__(self, parameters): - """ - Create a SNAP object. + Parameters + ---------- + parameters : mala.common.parameters.Parameters + Parameters object used to create this object. + """ - Parameters - ---------- - parameters : mala.common.parameters.Parameters - Parameters object used to create this object. - """ + def __init__(self, parameters): super(SNAP, self).__init__(parameters) self.in_format_ase = "" @@ -101,16 +102,62 @@ def calculate_from_qe_out(self, qe_out_file, qe_out_directory): self.in_format_ase = "espresso-out" print("Calculating SNAP descriptors from", qe_out_file, "at", qe_out_directory) - return self.__calculate_snap(qe_out_directory + qe_out_file, - qe_out_directory) + # We get the atomic information by using ASE. + infile = os.path.join(qe_out_directory, qe_out_file) + atoms = ase.io.read(infile, format=self.in_format_ase) + + # Enforcing / Checking PBC on the read atoms. + atoms = self.enforce_pbc(atoms) + + # Get the grid dimensions. + qe_outfile = open(infile, "r") + lines = qe_outfile.readlines() + nx = 0 + ny = 0 + nz = 0 + + for line in lines: + if "FFT dimensions" in line: + tmp = line.split("(")[1].split(")")[0] + nx = int(tmp.split(",")[0]) + ny = int(tmp.split(",")[1]) + nz = int(tmp.split(",")[2]) + break + + return self.__calculate_snap(atoms, + qe_out_directory, [nx, ny, nz]) + + def calculate_from_atoms(self, atoms, grid_dimensions, + working_directory="."): + """ + Calculate the SNAP descriptors based on the atomic configurations. - def __calculate_snap(self, infile, outdir): + Parameters + ---------- + atoms : ase.Atoms + Atoms object holding the atomic configuration. + + grid_dimensions : list + Grid dimensions to be used, in the format [x,y,z]. + + working_directory : string + A directory in which to perform the LAMMPS calculation. + + Returns + ------- + descriptors : numpy.array + Numpy array containing the descriptors with the dimension + (x,y,z,descriptor_dimension) + """ + # Enforcing / Checking PBC on the input atoms. + atoms = self.enforce_pbc(atoms) + return self.__calculate_snap(atoms, working_directory, grid_dimensions) + + def __calculate_snap(self, atoms, outdir, grid_dimensions): """Perform actual SNAP calculation.""" from lammps import lammps lammps_format = "lammps-data" - # We get the atomic information by using ASE. - atoms = ase.io.read(infile, format=self.in_format_ase) - ase_out_path = outdir+"lammps_input.tmp" + ase_out_path = os.path.join(outdir, "lammps_input.tmp") ase.io.write(ase_out_path, atoms, format=lammps_format) # We also need to know how big the grid is. @@ -124,17 +171,13 @@ def __calculate_snap(self, infile, outdir): ny = self.dbg_grid_dimensions[1] nz = self.dbg_grid_dimensions[2] else: - qe_outfile = open(infile, "r") - lines = qe_outfile.readlines() - for line in lines: - if "FFT dimensions" in line: - tmp = line.split("(")[1].split(")")[0] - nx = int(tmp.split(",")[0]) - ny = int(tmp.split(",")[1]) - nz = int(tmp.split(",")[2]) - break + nx = grid_dimensions[0] + ny = grid_dimensions[1] + nz = grid_dimensions[2] + # Build LAMMPS arguments from the data we read. - lmp_cmdargs = ["-screen", "none", "-log", outdir+"lammps_log.tmp"] + lmp_cmdargs = ["-screen", "none", "-log", os.path.join(outdir, + "lammps_log.tmp")] lmp_cmdargs = set_cmdlinevars(lmp_cmdargs, { "ngridx": nx, @@ -151,7 +194,8 @@ def __calculate_snap(self, infile, outdir): # An empty string means that the user wants to use the standard input. if self.parameters.lammps_compute_file == "": filepath = __file__.split("snap")[0] - self.parameters.lammps_compute_file = filepath+"in.bgrid.python" + self.parameters.lammps_compute_file = os.path.join(filepath, + "in.bgrid.python") # Do the LAMMPS calculation. lmp.file(self.parameters.lammps_compute_file) diff --git a/mala/network/__init__.py b/mala/network/__init__.py index 49befb51c..dedb8be36 100644 --- a/mala/network/__init__.py +++ b/mala/network/__init__.py @@ -4,3 +4,6 @@ from .trainer import Trainer from .hyper_opt_interface import HyperOptInterface from .hyper_opt_optuna import HyperOptOptuna +from .hyper_opt_notraining import HyperOptNoTraining +from .hyper_opt_oat import HyperOptOAT +from .predictor import Predictor diff --git a/mala/network/hyper_opt_base.py b/mala/network/hyper_opt_base.py index d7b238213..f8e9e1a93 100644 --- a/mala/network/hyper_opt_base.py +++ b/mala/network/hyper_opt_base.py @@ -1,25 +1,26 @@ """Base class for all hyperparameter optimizers.""" from abc import abstractmethod, ABC -from .hyperparameter_interface import HyperparameterInterface + +from mala.network.hyperparameter_interface import HyperparameterInterface +from mala.network.objective_base import ObjectiveBase class HyperOptBase(ABC): - """Base class for hyperparameter optimizater.""" + """Base class for hyperparameter optimizater. - def __init__(self, params, data): - """ - Create a hyperparameter optimizer object. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this hyperparameter optimizer. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this hyperparameter optimizer. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the data for the hyperparameter optimization. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the data for the hyperparameter optimization. - """ + def __init__(self, params, data): self.params = params self.data_handler = data + self.objective = ObjectiveBase(self.params, self.data_handler) def add_hyperparameter(self, opttype="float", name="", low=0, high=0, choices=None): @@ -86,3 +87,12 @@ def set_optimal_parameters(self): hyperparameter optimizer was created. """ pass + + def set_parameters(self, trial): + """ + Set the parameters to a specific trial. + + The parameters will be written to the parameter object with which the + hyperparameter optimizer was created. + """ + self.objective.parse_trial(trial) diff --git a/mala/network/hyper_opt_interface.py b/mala/network/hyper_opt_interface.py index 31053944d..dcd8d558e 100644 --- a/mala/network/hyper_opt_interface.py +++ b/mala/network/hyper_opt_interface.py @@ -1,7 +1,7 @@ """Interface to get correct hyperparameter optimizer.""" -from .hyper_opt_notraining import HyperOptNoTraining -from .hyper_opt_oat import HyperOptOAT -from .hyper_opt_optuna import HyperOptOptuna +from mala.network.hyper_opt_notraining import HyperOptNoTraining +from mala.network.hyper_opt_oat import HyperOptOAT +from mala.network.hyper_opt_optuna import HyperOptOptuna def HyperOptInterface(params, data): diff --git a/mala/network/hyper_opt_notraining.py b/mala/network/hyper_opt_notraining.py index 2d8690cf5..7679ac702 100644 --- a/mala/network/hyper_opt_notraining.py +++ b/mala/network/hyper_opt_notraining.py @@ -1,8 +1,9 @@ """Hyperparameter optimizer working without training.""" import optuna -from .hyper_opt_base import HyperOptBase -from .objective_no_training import ObjectiveNoTraining +from mala.common.printout import printout +from mala.network.hyper_opt_base import HyperOptBase +from mala.network.objective_no_training import ObjectiveNoTraining class HyperOptNoTraining(HyperOptBase): @@ -10,20 +11,17 @@ class HyperOptNoTraining(HyperOptBase): Hyperparameter optimizer that does not require training networks. Networks are analysed using the Jacobian. - """ - def __init__(self, params, data): - """ - Create a HyperOptNoTraining object. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this hyperparameter optimizer. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this hyperparameter optimizer. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the data for the hyperparameter optimization. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the data for the hyperparameter optimization. - """ + def __init__(self, params, data): super(HyperOptNoTraining, self).__init__(params, data) self.objective = None self.trial_losses = None @@ -47,6 +45,14 @@ def perform_study(self, trial_list=None): investigates those sampled by a different hyperparameter optimizer. """ + # The minibatch size can not vary in the analysis. + # This check ensures that e.g. optuna results can be used. + for idx, par in enumerate(self.params.hyperparameters.hlist): + if par.name == "mini_batch_size": + printout("Removing mini batch size from hyperparameter list, " + "because NASWOT is used.") + self.params.hyperparameters.hlist.pop(idx) + # Ideally, this type of HO is called with a list of trials for which # the parameter has to be identified. self.trial_list = trial_list @@ -65,7 +71,7 @@ def perform_study(self, trial_list=None): self.trial_losses = [self.objective(row) for row in self.trial_list] # Return the best lost value we could achieve. - return min(self.trial_losses) + return max(self.trial_losses) def set_optimal_parameters(self): """ @@ -75,7 +81,6 @@ def set_optimal_parameters(self): hyperparameter optimizer was created. """ # Getting the best trial based on the test errors - idx = self.trial_losses.index(min(self.trial_losses)) + idx = self.trial_losses.index(max(self.trial_losses)) self.best_trial = self.trial_list[idx] self.objective.parse_trial(self.best_trial) - diff --git a/mala/network/hyper_opt_oat.py b/mala/network/hyper_opt_oat.py index b342796ae..2c38b1205 100644 --- a/mala/network/hyper_opt_oat.py +++ b/mala/network/hyper_opt_oat.py @@ -1,34 +1,79 @@ """Hyperparameter optimizer using orthogonal array tuning.""" -import oapackage as oa -from .hyper_opt_base import HyperOptBase -from .objective_base import ObjectiveBase +from bisect import bisect +import itertools +import warnings +import os +import pickle + import numpy as np -from mala.common.parameters import printout +try: + import oapackage as oa +except ModuleNotFoundError: + warnings.warn("You do not have the OApackage installed. This will not " + "affect MALA performance except for when attempting to use " + "orthogonal array tuning. ", + stacklevel=2) + +from mala.network.hyper_opt_base import HyperOptBase +from mala.network.objective_base import ObjectiveBase +from mala.network.hyperparameter_oat import HyperparameterOAT +from mala.common.printout import printout +from mala.common.parameters import Parameters +from mala.datahandling.data_handler import DataHandler +from mala.datahandling.data_scaler import DataScaler class HyperOptOAT(HyperOptBase): - """Hyperparameter optimizer using Orthogonal Array Tuning.""" + """Hyperparameter optimizer using Orthogonal Array Tuning. - def __init__(self, params, data): - """ - Create a HyperOptOAT object. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this hyperparameter optimizer. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this hyperparameter optimizer. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the data for the hyperparameter optimization. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the data for the hyperparameter optimization. - """ + def __init__(self, params, data): super(HyperOptOAT, self).__init__(params, data) self.objective = None - self.trial_losses = [] - self.best_trial = None + self.optimal_params = None + self.checkpoint_counter = 0 + + # Related to the OA itself. + self.importance = None self.n_factors = None - self.n_levels = None + self.factor_levels = None self.strength = None self.N_runs = None + self.__OA = None + + # Tracking the trial progress. + self.sorted_num_choices = [] + self.current_trial = 0 + self.trial_losses = None + + def add_hyperparameter(self, opttype="categorical", name="", choices=None, **kwargs): + """ + Add hyperparameter such that the hyperparameter list is sorted w.r.t the number of choices. + + Parameters + ---------- + opttype : string + Datatype of the hyperparameter. Follows optunas naming convetions. + Default value - categorical (list) + """ + if not self.sorted_num_choices: # if empty + super(HyperOptOAT, self).add_hyperparameter( + opttype=opttype, name=name, choices=choices) + self.sorted_num_choices.append(len(choices)) + + else: + index = bisect(self.sorted_num_choices, len(choices)) + self.sorted_num_choices.insert(index, len(choices)) + self.params.hyperparameters.hlist.insert( + index, HyperparameterOAT(opttype=opttype, name=name, choices=choices)) def perform_study(self): """ @@ -37,15 +82,59 @@ def perform_study(self): This is done by sampling a certain subset of network architectures. In this case, these are choosen based on an orthogonal array. """ - number_of_trial = 0 + if self.__OA is None: + self.__OA = self.get_orthogonal_array() + print(self.__OA) + if self.trial_losses is None: + self.trial_losses = np.zeros(self.__OA.shape[0])+float("inf") + + printout("Performing",self.N_runs, + "trials, starting with trial number", self.current_trial) + + # The parameters could have changed. self.objective = ObjectiveBase(self.params, self.data_handler) - for row in self.orthogonal_arr: - printout("Trial number", number_of_trial) - self.trial_losses.append(self.objective(row)) - number_of_trial += 1 - # Return the best lost value we could achieve. - return min(self.trial_losses) + # Iterate over the OA and perform the trials. + for i in range(self.current_trial, self.N_runs): + row = self.__OA[i] + self.trial_losses[self.current_trial] = self.objective(row) + + # Output diagnostic information. + best_trial = self.get_best_trial_results() + printout("Trial number", self.current_trial, + "finished with:", self.trial_losses[self.current_trial], + ", best is trial", best_trial[0], + "with", best_trial[1]) + self.current_trial += 1 + self.__create_checkpointing(row) + + # Perform Range Analysis + self.get_optimal_parameters() + + def get_optimal_parameters(self): + """ + Find the optimal set of hyperparameters by doing range analysis. + + This is done using loss instead of accuracy as done in the paper. + """ + printout("Performing Range Analysis.") + + def indices(idx, val): return np.where( + self.__OA[:, idx] == val)[0] + R = [[self.trial_losses[indices(idx, l)].sum() for l in range(levels)] + for (idx, levels) in enumerate(self.factor_levels)] + + A = [[i/len(j) for i in j] for j in R] + + # Taking loss as objective to minimise + self.optimal_params = np.array([i.index(min(i)) for i in A]) + self.importance = np.argsort([max(i)-min(i) for i in A]) + + def show_order_of_importance(self): + """Print the order of importance of the hyperparameters that are being optimised.""" + printout("Order of Importance: ") + printout( + *[self.params.hyperparameters.hlist[idx].name for idx in self.importance], sep=" < ") def set_optimal_parameters(self): """ @@ -54,68 +143,272 @@ def set_optimal_parameters(self): The parameters will be written to the parameter object with which the hyperparameter optimizer was created. """ - # Getting the best trial based on the test errors - idx = self.trial_losses.index(min(self.trial_losses)) - self.best_trial = self.orthogonal_arr[idx] - self.objective.parse_trial_oat(self.best_trial) + self.objective.parse_trial_oat(self.optimal_params) + + def get_orthogonal_array(self): + """ + Generate the best OA used for optimal hyperparameter sampling. + + This is function is taken from the example notebook of OApackage + """ + self.__check_factor_levels() + print("Sorted factor levels:", self.sorted_num_choices) + self.n_factors = len(self.params.hyperparameters.hlist) + + self.factor_levels = [par.num_choices for par in self.params. + hyperparameters.hlist] + + self.strength = 2 + arraylist = None + + # This is a little bit hacky. + # What happens is that while we can _technically_ evaluate N_runs + # analytically, depending on the actual factor levels, such an array + # might not exist. We know however, that one exists with N_runs_actual + # for which: + # N_runs_actual = N_runs_analytical * x + # holds. x is unknown, but we can be confident that it should be + # small. So simply trying 3 time should be fine for now. + for i in range(1, 4): + self.N_runs = self.number_of_runs()*i + print("Trying run size:", self.N_runs) + print("Generating Suitable Orthogonal Array.") + arrayclass = oa.arraydata_t(self.factor_levels, self.N_runs, self.strength, + self.n_factors) + arraylist = [arrayclass.create_root()] + + # extending the orthogonal array + options = oa.OAextend() + options.setAlgorithmAuto(arrayclass) + + for _ in range(self.strength + 1, self.n_factors + 1): + arraylist_extensions = oa.extend_arraylist(arraylist, arrayclass, + options) + dd = np.array([a.Defficiency() for a in arraylist_extensions]) + idxs = np.argsort(dd) + arraylist = [arraylist_extensions[ii] for ii in idxs] + if arraylist: + break + + if not arraylist: + raise Exception("No orthogonal array exists with such a parameter combination.") + + else: + return np.unique(np.array(arraylist[0]), axis=0) + + def number_of_runs(self): + """ + Calculate the minimum number of runs required for an Orthogonal array. - @property - def orthogonal_arr(self): - """Orthogonal array used for optimal hyperparameter sampling.""" - arrayclass = oa.arraydata_t(self.n_levels, self.N_runs, self.strength, - self.n_factors) - arraylist = [arrayclass.create_root()] + Based on the factor levels and the strength of the array requested. + See also here: + https://oapackage.readthedocs.io/en/latest/examples/example_minimal_number_of_runs_oa.html + """ + runs = [np.prod(tt) for tt in itertools.combinations( + self.factor_levels, self.strength)] - # extending the orthogonal array - options = oa.OAextend() - options.setAlgorithmAuto(arrayclass) + N = np.lcm.reduce(runs) + return int(N) - for _ in range(self.strength + 1, self.n_factors + 1): - arraylist_extensions = oa.extend_arraylist(arraylist, arrayclass, - options) - dd = np.array([a.Defficiency() for a in arraylist_extensions]) - idxs = np.argsort(dd) - arraylist = [arraylist_extensions[ii] for ii in idxs] + def get_best_trial_results(self): + """Get the best trial out of the list, including the value.""" + if self.params.hyperparameters.direction == "minimize": + return [np.argmin(self.trial_losses), np.min(self.trial_losses)] + elif self.params.hyperparameters.direction == "maximize": + return [np.argmax(self.trial_losses), np.max(self.trial_losses)] + else: + raise Exception("Invalid direction for hyperparameter optimization" + "selected.") - return np.unique(np.array(arraylist[0]), axis=0) + def __check_factor_levels(self): + """Check that the factors are in a decreasing order.""" + dx = np.diff(self.sorted_num_choices) + if np.all(dx >= 0): + # Factors in increasing order, we have to reverse the order. + self.sorted_num_choices.reverse() + self.params.hyperparameters.hlist.reverse() + elif np.all(dx <= 0): + # Factors are in decreasing order, we don't have to do anything. + pass + else: + raise Exception("Please use hyperparameters in increasing or " + "decreasing order of number of choices") - def add_hyperparameter(self, opttype="float", name="", low=0, high=0, - choices=None): + @classmethod + def checkpoint_exists(cls, checkpoint_name): """ - Add a hyperparameter to the current investigation. + Check if a hyperparameter optimization checkpoint exists. + + Returns True if it does. Parameters ---------- - opttype : string - Datatype of the hyperparameter. Follows optunas naming convetions. - Currently supported are: + checkpoint_name : string + Name of the checkpoint. - - categorical (list) + Returns + ------- + checkpoint_exists : bool + True if the checkpoint exists, False otherwise. - name : string - Name of the hyperparameter. Please note that these names always - have to be distinct; if you e.g. want to investigate multiple - layer sizes use e.g. ff_neurons_layer_001, ff_neurons_layer_002, - etc. as names. + """ + iscaler_name = checkpoint_name + "_iscaler.pkl" + oscaler_name = checkpoint_name + "_oscaler.pkl" + param_name = checkpoint_name + "_params.pkl" + + return all(map(os.path.isfile, [iscaler_name, oscaler_name, + param_name])) + + @classmethod + def resume_checkpoint(cls, checkpoint_name, + no_data=False): + """ + Prepare resumption of hyperparameter optimization from a checkpoint. + + Please note that to actually resume the optimization, + HyperOptOptuna.perform_study() still has to be called. - low : float or int - Currently unsupported: Lower bound for numerical parameter. + Parameters + ---------- + checkpoint_name : string + Name of the checkpoint from which the checkpoint is loaded. + + no_data : bool + If True, the data won't actually be loaded into RAM or scaled. + This can be useful for cases where a checkpoint is loaded + for analysis purposes. - high : float or int - Currently unsupported: Higher bound for numerical parameter. + Returns + ------- + loaded_params : mala.common.parameters.Parameters + The Parameters saved in the checkpoint. - choices : - List of possible choices (for categorical parameter). + new_datahandler : mala.datahandling.data_handler.DataHandler + The data handler reconstructed from the checkpoint. + + new_hyperopt : HyperOptOAT + The hyperparameter optimizer reconstructed from the checkpoint. """ - super(HyperOptOAT, self).add_hyperparameter(opttype=opttype, name=name, - low=low, high=high, - choices=choices) - self.n_factors = len(self.params.hyperparameters.hlist) + printout("Loading hyperparameter optimization from checkpoint.") + # The names are based upon the checkpoint name. + iscaler_name = checkpoint_name + "_iscaler.pkl" + oscaler_name = checkpoint_name + "_oscaler.pkl" + param_name = checkpoint_name + "_params.pkl" + optimizer_name = checkpoint_name + "_hyperopt.pth" + + # First load the all the regular objects. + loaded_params = Parameters.load_from_file(param_name) + loaded_iscaler = DataScaler.load_from_file(iscaler_name) + loaded_oscaler = DataScaler.load_from_file(oscaler_name) + + printout("Preparing data used for last checkpoint.") + # Create a new data handler and prepare the data. + if no_data is True: + loaded_params.data.use_lazy_loading = True + new_datahandler = DataHandler(loaded_params, + input_data_scaler=loaded_iscaler, + output_data_scaler=loaded_oscaler) + new_datahandler.prepare_data(reparametrize_scaler=False) + new_hyperopt = HyperOptOAT.load_from_file(loaded_params, + optimizer_name, + new_datahandler) + + return loaded_params, new_datahandler, new_hyperopt + + @classmethod + def load_from_file(cls, params, file_path, data): + """ + Load a hyperparameter optimizer from a file. + + Parameters + ---------- + params : mala.common.parameters.Parameters + Parameters object with which the hyperparameter optimizer + should be created Has to be compatible with data. + + file_path : string + Path to the file from which the hyperparameter optimizer should + be loaded. + + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the training data. + + Returns + ------- + loaded_hyperopt : HyperOptOAT + The hyperparameter optimizer that was loaded from the file. + """ + # First, load the checkpoint. + with open(file_path, 'rb') as handle: + loaded_tracking_data = pickle.load(handle) + loaded_hyperopt = HyperOptOAT(params, data) + loaded_hyperopt.sorted_num_choices = loaded_tracking_data["sorted_num_choices"] + loaded_hyperopt.current_trial = loaded_tracking_data["current_trial"] + loaded_hyperopt.trial_losses = loaded_tracking_data["trial_losses"] + loaded_hyperopt.importance = loaded_tracking_data["importance"] + loaded_hyperopt.n_factors = loaded_tracking_data["n_factors"] + loaded_hyperopt.factor_levels = loaded_tracking_data["factor_levels"] + loaded_hyperopt.strength = loaded_tracking_data["strength"] + loaded_hyperopt.N_runs = loaded_tracking_data["N_runs"] + loaded_hyperopt.__OA = loaded_tracking_data["OA"] + + return loaded_hyperopt + + def __create_checkpointing(self, trial): + """Create a checkpoint of optuna study, if necessary.""" + self.checkpoint_counter += 1 + need_to_checkpoint = False + + if self.checkpoint_counter >= self.params.hyperparameters.\ + checkpoints_each_trial and self.params.hyperparameters.\ + checkpoints_each_trial > 0: + need_to_checkpoint = True + printout(str(self.params.hyperparameters. + checkpoints_each_trial)+" trials have passed, creating a " + "checkpoint for hyperparameter " + "optimization.") + if self.params.hyperparameters.checkpoints_each_trial < 0 and \ + np.argmin(self.trial_losses) == self.current_trial-1: + need_to_checkpoint = True + printout("Best trial is "+str(self.current_trial-1)+", creating a " + "checkpoint for it.") + + if need_to_checkpoint is True: + # We need to create a checkpoint! + self.checkpoint_counter = 0 + + # Get the filenames. + iscaler_name = self.params.hyperparameters.checkpoint_name \ + + "_iscaler.pkl" + oscaler_name = self.params.hyperparameters.checkpoint_name \ + + "_oscaler.pkl" + param_name = self.params.hyperparameters.checkpoint_name \ + + "_params.pkl" + + # First we save the objects we would also save for inference. + self.data_handler.input_data_scaler.save(iscaler_name) + self.data_handler.output_data_scaler.save(oscaler_name) + self.params.save(param_name) - # if self.n_factors>4: - # raise Exception("Sorry only upto 3 factors are supported") + # Next, we save all the other objects. + # Here some horovod stuff would have to go. + # But so far, the optuna implementation is not horovod-ready... + # if self.params.use_horovod: + # if hvd.rank() != 0: + # return + # The study only has to be saved if the no RDB storage is used. + if self.params.hyperparameters.rdb_storage is None: + hyperopt_name = self.params.hyperparameters.checkpoint_name \ + + "_hyperopt.pth" - self.n_levels = min([par.num_choices for par in self.params. - hyperparameters.hlist]) - self.strength = 3 - self.N_runs = pow(self.n_levels, self.n_factors) + study = {"sorted_num_choices": self.sorted_num_choices, + "current_trial": self.current_trial, + "trial_losses": self.trial_losses, + "importance": self.importance, + "n_factors": self.n_factors, + "factor_levels": self.factor_levels, + "strength": self.strength, + "N_runs": self.N_runs, + "OA": self.__OA} + with open(hyperopt_name, 'wb') as handle: + pickle.dump(study, handle, protocol=4) diff --git a/mala/network/hyper_opt_optuna.py b/mala/network/hyper_opt_optuna.py index 4b38085a6..df288650f 100644 --- a/mala/network/hyper_opt_optuna.py +++ b/mala/network/hyper_opt_optuna.py @@ -1,38 +1,45 @@ """Hyperparameter optimizer using optuna.""" +import os import pickle + import optuna -import os -from .hyper_opt_base import HyperOptBase -from .objective_base import ObjectiveBase + from mala.common.parameters import printout +from mala.common.parameters import Parameters from mala.datahandling.data_handler import DataHandler from mala.datahandling.data_scaler import DataScaler -from mala.common.parameters import Parameters +from mala.network.hyper_opt_base import HyperOptBase +from mala.network.objective_base import ObjectiveBase +from mala.network.no_training_pruner import NoTrainingPruner class HyperOptOptuna(HyperOptBase): - """Hyperparameter optimizer using Optuna.""" + """Hyperparameter optimizer using Optuna. - def __init__(self, params, data): - """ - Create a HyperOptOptuna object. + Parameters + ---------- + params : mala.common.parameters.Parameters + Parameters used to create this hyperparameter optimizer. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this hyperparameter optimizer. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the data for the hyperparameter optimization. - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the data for the hyperparameter optimization. - """ + """ + + def __init__(self, params, data): super(HyperOptOptuna, self).__init__(params, data) self.params = params # Make the sample behave in a reproducible way, if so specified by # the user. - sampler = None - if params.manual_seed is not None: - sampler = optuna.samplers.TPESampler(seed=params.manual_seed) + sampler = optuna.samplers.TPESampler(seed=params.manual_seed, + multivariate=params. \ + hyperparameters.use_multivariate) + + # See if the user specified a pruner. + pruner = None + if self.params.hyperparameters.pruner == "no_training": + pruner = NoTrainingPruner(self.params, data) # Create the study. if self.params.hyperparameters.rdb_storage is None: @@ -40,7 +47,8 @@ def __init__(self, params, data): create_study(direction=self.params.hyperparameters.direction, sampler=sampler, study_name=self.params.hyperparameters. - study_name) + study_name, + pruner=pruner) else: if self.params.hyperparameters.study_name is None: raise Exception("If RDB storage is used, a name for the study " @@ -56,11 +64,11 @@ def __init__(self, params, data): study_name=self.params.hyperparameters. study_name, storage=rdb_storage, - load_if_exists=True) - - self.objective = None + load_if_exists=True, + pruner=pruner) self.checkpoint_counter = 0 + def perform_study(self): """ Perform the study, i.e. the optimization. @@ -68,6 +76,7 @@ def perform_study(self): This is done by sampling a certain subset of network architectures. In this case, optuna is used. """ + # The parameters could have changed. self.objective = ObjectiveBase(self.params, self.data_handler) # Fill callback list based on user checkpoint wishes. @@ -101,7 +110,8 @@ def get_trials_from_study(self): last_trials: list A list of optuna.FrozenTrial objects. """ - return self.study.get_trials() + return self.study.get_trials(states=(optuna.trial. + TrialState.COMPLETE, )) @classmethod def checkpoint_exists(cls, checkpoint_name): @@ -129,7 +139,8 @@ def checkpoint_exists(cls, checkpoint_name): param_name])) @classmethod - def resume_checkpoint(cls, checkpoint_name): + def resume_checkpoint(cls, checkpoint_name, alternative_storage_path=None, + no_data=False): """ Prepare resumption of hyperparameter optimization from a checkpoint. @@ -139,7 +150,18 @@ def resume_checkpoint(cls, checkpoint_name): Parameters ---------- checkpoint_name : string - Name of the checkpoint from which + Name of the checkpoint from which the checkpoint is loaded. + + alternative_storage_path: string + Alternative storage string to load the study from. + For applications on an HPC cluster it might be necessary to + slightly modify the storage path between runs, since the SQL + server might be running on different nodes each time. + + no_data : bool + If True, the data won't actually be loaded into RAM or scaled. + This can be useful for cases where a checkpoint is loaded + for analysis purposes. Returns ------- @@ -163,9 +185,14 @@ def resume_checkpoint(cls, checkpoint_name): loaded_params = Parameters.load_from_file(param_name) loaded_iscaler = DataScaler.load_from_file(iscaler_name) loaded_oscaler = DataScaler.load_from_file(oscaler_name) + if alternative_storage_path is not None: + loaded_params.hyperparameters.rdb_storage = \ + alternative_storage_path printout("Preparing data used for last checkpoint.") # Create a new data handler and prepare the data. + if no_data is True: + loaded_params.data.use_lazy_loading = True new_datahandler = DataHandler(loaded_params, input_data_scaler=loaded_iscaler, output_data_scaler=loaded_oscaler) @@ -213,8 +240,26 @@ def load_from_file(cls, params, file_path, data): return loaded_hyperopt def __check_max_number_trials(self, study, trial): - number_of_completed_trials = len([t for t in study.trials if t.state == - optuna.trial.TrialState.COMPLETE]) + """Check if this trial was already the maximum number of trials.""" + # How to check for this depends on whether or not a heartbeat was + # used. If one was used, then both COMPLETE and RUNNING trials + # Can be taken into account, as it can be expected that RUNNING + # trials will actually finish. If no heartbeat is used, + # then RUNNING trials might be Zombie trials. + # See + # https://github.com/optuna/optuna/issues/1883#issuecomment-841844834 + # https://github.com/optuna/optuna/issues/1883#issuecomment-842106950 + + if self.params.hyperparameters.rdb_storage_heartbeat is None: + number_of_completed_trials = len([t for t in study.trials if + t.state == optuna.trial. + TrialState.COMPLETE]) + else: + number_of_completed_trials = len([t for t in study.trials if + t.state == optuna.trial. + TrialState.COMPLETE or + t.state == optuna.trial. + TrialState.RUNNING]) if number_of_completed_trials >= self.params.hyperparameters.n_trials: self.study.stop() diff --git a/mala/network/hyperparameter_interface.py b/mala/network/hyperparameter_interface.py index e17d681e4..a40c737cf 100644 --- a/mala/network/hyperparameter_interface.py +++ b/mala/network/hyperparameter_interface.py @@ -1,6 +1,6 @@ """Interface function to get the correct type of hyperparameter.""" -from .hyperparameter_oat import HyperparameterOAT -from .hyperparameter_optuna import HyperparameterOptuna +from mala.network.hyperparameter_oat import HyperparameterOAT +from mala.network.hyperparameter_optuna import HyperparameterOptuna def HyperparameterInterface(hotype, opttype="float", name="", low=0, high=0, diff --git a/mala/network/hyperparameter_oat.py b/mala/network/hyperparameter_oat.py index 3b8405841..fe10b6e5b 100644 --- a/mala/network/hyperparameter_oat.py +++ b/mala/network/hyperparameter_oat.py @@ -2,34 +2,32 @@ class HyperparameterOAT: - """Represents a hyperparameter for OAT.""" + """Represents a hyperparameter for OAT. - def __init__(self, opttype="categorical", name="", choices=None): - """ - Create an OAT compatible hyperparameter. + Parameters + ---------- + opttype : string + Datatype of the hyperparameter. Follows optunas naming convetions. + In principle supported are: - Parameters - ---------- - opttype : string - Datatype of the hyperparameter. Follows optunas naming convetions. - In principle supported are: + - float + - int + - categorical (list) - - float - - int - - categorical (list) + Float and int are not available for OA based approaches at the + moment. - Float and int are not available for OA based approaches at the - moment. + name : string + Name of the hyperparameter. Please note that these names always + have to be distinct; if you e.g. want to investigate multiple + layer sizes use e.g. ff_neurons_layer_001, ff_neurons_layer_002, + etc. as names. - name : string - Name of the hyperparameter. Please note that these names always - have to be distinct; if you e.g. want to investigate multiple - layer sizes use e.g. ff_neurons_layer_001, ff_neurons_layer_002, - etc. as names. + choices : + List of possible choices (for categorical parameter). + """ - choices : - List of possible choices (for categorical parameter). - """ + def __init__(self, opttype="categorical", name="", choices=None): self.name = name self.opttype = opttype self.choices = choices @@ -37,7 +35,7 @@ def __init__(self, opttype="categorical", name="", choices=None): if self.opttype != "categorical": raise Exception("Unsupported Hyperparameter type.") - + def get_parameter(self, trial, idx): """ Extract current value of hyperparameter from an orthogonal array. diff --git a/mala/network/hyperparameter_optuna.py b/mala/network/hyperparameter_optuna.py index d18daa6d3..4986eea83 100644 --- a/mala/network/hyperparameter_optuna.py +++ b/mala/network/hyperparameter_optuna.py @@ -3,40 +3,38 @@ class HyperparameterOptuna: - """Represents an optuna parameter.""" + """Represents an optuna parameter. - def __init__(self, opttype="float", name="", low=0, high=0, choices=None): - """ - Create an optuna compatible hyperparameter. + Parameters + ---------- + opttype : string + Datatype of the hyperparameter. Follows optunas naming convetions. + In principle supported are: - Parameters - ---------- - opttype : string - Datatype of the hyperparameter. Follows optunas naming convetions. - In principle supported are: + - float + - int + - categorical (list) - - float - - int - - categorical (list) + Float and int are not available for OA based approaches at the + moment. - Float and int are not available for OA based approaches at the - moment. + name : string + Name of the hyperparameter. Please note that these names always + have to be distinct; if you e.g. want to investigate multiple + layer sizes use e.g. ff_neurons_layer_001, ff_neurons_layer_002, + etc. as names. - name : string - Name of the hyperparameter. Please note that these names always - have to be distinct; if you e.g. want to investigate multiple - layer sizes use e.g. ff_neurons_layer_001, ff_neurons_layer_002, - etc. as names. + low : float or int + Lower bound for numerical parameter. - low : float or int - Lower bound for numerical parameter. + high : float or int + Higher bound for numerical parameter. - high : float or int - Higher bound for numerical parameter. + choices : + List of possible choices (for categorical parameter). + """ - choices : - List of possible choices (for categorical parameter). - """ + def __init__(self, opttype="float", name="", low=0, high=0, choices=None): self.name = name self.high = high self.low = low @@ -128,6 +126,9 @@ def get_categorical(self, trial: Trial): Return value is based on type of hyperparameter. """ if self.opttype == "categorical": - return trial.suggest_categorical(self.name, self.choices) + if len(self.choices) > 1: + return trial.suggest_categorical(self.name, self.choices) + else: + return self.choices[0] else: raise Exception("Wrong hyperparameter type.") diff --git a/mala/network/network.py b/mala/network/network.py index fe1071b11..b2bce32cb 100644 --- a/mala/network/network.py +++ b/mala/network/network.py @@ -1,26 +1,24 @@ """Neural network for MALA.""" -import torch -import torch.nn as nn -import torch.nn.functional as functional try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by parameters class pass +import torch +import torch.nn as nn +import torch.nn.functional as functional class Network(nn.Module): - """Central network class for this framework, based on pytorch.nn.Module.""" + """Central network class for this framework, based on pytorch.nn.Module. - def __init__(self, params): - """ - Create a Network object, representing a neural network. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this neural network. + """ - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this neural network. - """ + def __init__(self, params): # copy the network params from the input parameter object self.use_horovod = params.use_horovod self.params = params.network @@ -38,7 +36,8 @@ def __init__(self, params): self.activation_mappings = { "Sigmoid": nn.Sigmoid, "ReLU": nn.ReLU, - "LeakyReLU": nn.LeakyReLU + "LeakyReLU": nn.LeakyReLU, + "Tanh": nn.Tanh } # initialize the layers @@ -72,6 +71,8 @@ def __initialize_as_feedforward(self): use_only_one_activation_type = True elif len(self.params.layer_activations) < self.number_of_layers: raise Exception("Not enough activation layers provided.") + elif len(self.params.layer_activations) > self.number_of_layers: + raise Exception("Too many activation layers provided.") # Add the layers. # As this is a feedforward layer we always add linear layers, and then diff --git a/mala/network/no_training_pruner.py b/mala/network/no_training_pruner.py new file mode 100644 index 000000000..47c93f52b --- /dev/null +++ b/mala/network/no_training_pruner.py @@ -0,0 +1,66 @@ +"""Prunes a network when the score is above a user defined limit.""" +import optuna +from optuna.pruners import BasePruner +from optuna.trial._state import TrialState + +from mala import Parameters, DataHandler +from mala.network.objective_no_training import ObjectiveNoTraining + + +class NoTrainingPruner(BasePruner): + """ + Implements the NASWOT method (first version of paper) as an optuna pruner. + + This means that before each training of a trial network the network will + be tested against a user defined surrogate score (which has to be + calibrated). If this score is good enough, the candidate will be trained. + + Parameters + ---------- + search_parameters : mala.common.parametes.Parameters + Parameters used to create this objective. + + data_handler : mala.datahandling.data_handler.DataHandler + datahandler to be used during the hyperparameter optimization. + + """ + + def __init__(self, search_parameters: Parameters, data_handler: + DataHandler): + self._data_handler = data_handler + self._params = search_parameters + self._trial_type = self._params.hyperparameters.hyper_opt_method + if self._trial_type != "optuna": + raise Exception("This pruner only works for optuna at the moment.") + + def prune(self, study: "optuna.study.Study", trial: + "optuna.trial.FrozenTrial") -> bool: + """ + Judge whether the trial should be pruned based on the reported values. + + Note that this method is not supposed to be called by library users. Instead, + :func:`optuna.trial.Trial.report` and :func:`optuna.trial.Trial.should_prune` provide + user interfaces to implement pruning mechanism in an objective function. + + Parameters + ---------- + study : optuna.study.Study + Study object of the target study. + + trial : optuna.trial.FrozenTrial + FrozenTrial object of the target trial. + Take a copy before modifying this object. + + Returns + ------- + should_prune : bool + A boolean indicating whether this particular trial should be + pruned. + """ + objective = ObjectiveNoTraining(self._params, self._data_handler, + self._trial_type) + surrogate_loss = objective(trial) + if surrogate_loss < self._params.hyperparameters.no_training_cutoff: + return True + else: + return False diff --git a/mala/network/objective_base.py b/mala/network/objective_base.py index 8a012349f..6580467ba 100644 --- a/mala/network/objective_base.py +++ b/mala/network/objective_base.py @@ -1,9 +1,12 @@ """Objective function for all training based hyperparameter optimizations.""" -from optuna import Trial -from .hyperparameter_optuna import HyperparameterOptuna -from .hyperparameter_oat import HyperparameterOAT -from .network import Network -from .trainer import Trainer +import numpy as np +from optuna import Trial, TrialPruned + +from mala.network.hyperparameter_optuna import HyperparameterOptuna +from mala.network.hyperparameter_oat import HyperparameterOAT +from mala.network.network import Network +from mala.network.trainer import Trainer +from mala import printout class ObjectiveBase: @@ -30,14 +33,29 @@ def __init__(self, params, data_handler): # We need to find out if we have to reparametrize the lists with the # layers and the activations. - self.optimize_layer_list = any(map( + contains_single_layer = any(map( lambda p: "ff_neurons_layer" in p.name, self.params.hyperparameters.hlist )) - self.optimize_activation_list = any(map( - lambda p: "layer_activation" in p.name, + contains_multiple_layer_neurons = any(map( + lambda p: "ff_multiple_layers_neurons" in p.name, + self.params.hyperparameters.hlist + )) + contains_multiple_layers_count = any(map( + lambda p: "ff_multiple_layers_count" in p.name, self.params.hyperparameters.hlist )) + if contains_multiple_layer_neurons != contains_multiple_layers_count: + print("You selected multiple layers to be optimized, but either " + "the range of neurons or number of layers is missing. " + "This input will be ignored.") + self.optimize_layer_list = contains_single_layer or ( + contains_multiple_layer_neurons and + contains_multiple_layers_count) + self.optimize_activation_list = list(map( + lambda p: "layer_activation" in p.name, + self.params.hyperparameters.hlist + )).count(True) self.trial_type = self.params.hyperparameters.hyper_opt_method @@ -53,12 +71,39 @@ def __call__(self, trial): """ # Parse the parameters included in the trial. self.parse_trial(trial) + if self.trial_type == "optuna": + if trial.should_prune(): + raise TrialPruned() + + # Train a network for as often as the user desires. + final_validation_loss = [] + for i in range(0, self.params.hyperparameters. + number_training_per_trial): + test_network = Network(self.params) + test_trainer = Trainer(self.params, test_network, self.data_handler) + test_trainer.train_network() + final_validation_loss.append(test_trainer.final_validation_loss) - # Perform training and report best test loss. - test_network = Network(self.params) - test_trainer = Trainer(self.params, test_network, self.data_handler) - test_trainer.train_network() - return test_trainer.final_validation_loss + if self.params.hyperparameters.number_training_per_trial > 1: + printout("Losses from multiple runs are: ") + printout(final_validation_loss) + + if self.params.hyperparameters.trial_ensemble_evaluation == "mean": + return np.mean(final_validation_loss) + + elif self.params.hyperparameters.trial_ensemble_evaluation == \ + "mean_std": + mean = np.mean(final_validation_loss) + + # Cannot calculate the standar deviation of a bunch of infinities. + if np.isinf(mean): + return mean + else: + return np.mean(final_validation_loss) + \ + np.std(final_validation_loss) + else: + raise Exception("No way to estimate the trial metric from ensemble" + " training provided.") def parse_trial(self, trial): """ @@ -90,17 +135,51 @@ def parse_trial_optuna(self, trial: Trial): if self.optimize_layer_list: self.params.network.layer_sizes = \ [self.data_handler.get_input_dimension()] - if self.optimize_activation_list: + if self.optimize_activation_list > 0: self.params.network.layer_activations = [] + # Some layers may have been turned off by optuna. + turned_off_layers = [] + + # This is one because of the input layer. + layer_counter = 1 + par: HyperparameterOptuna for par in self.params.hyperparameters.hlist: if par.name == "learning_rate": self.params.running.learning_rate = par.get_parameter(trial) - elif "layer_activation" in par.name: - self.params.network.layer_activations.\ - append(par.get_parameter(trial)) + # If the user wants to optimize multiple layers simultaneously, + # we have to parse to parameters at the same time. + elif par.name == "ff_multiple_layers_neurons": + neurons_per_layer = par.get_parameter(trial) + number_layers = 0 + max_number_layers = 0 + other_par: HyperparameterOptuna + for other_par in self.params.hyperparameters.hlist: + if other_par.name == "ff_multiple_layers_count": + number_layers = other_par.get_parameter(trial) + max_number_layers = max(other_par.choices) + if number_layers > 0: + for i in range(0, number_layers): + if neurons_per_layer > 0: + self.params.network.layer_sizes. \ + append(neurons_per_layer) + else: + turned_off_layers.append(layer_counter) + layer_counter += 1 + if number_layers != max_number_layers: + for i in range(number_layers, max_number_layers): + turned_off_layers.append(layer_counter) + layer_counter += 1 + else: + for i in range(0, max_number_layers): + turned_off_layers.append(layer_counter) + layer_counter += 1 + + elif par.name == "ff_multiple_layers_count": + # This is parsed directly abve. + pass elif "ff_neurons_layer" in par.name: if self.params.network.nn_type == "feed-forward": @@ -110,6 +189,9 @@ def parse_trial_optuna(self, trial: Trial): if layer_size > 0: self.params.network.layer_sizes.\ append(par.get_parameter(trial)) + else: + turned_off_layers.append(layer_counter) + layer_counter += 1 elif "trainingtype" in par.name: self.params.running.trainingtype = par.get_parameter(trial) @@ -117,9 +199,36 @@ def parse_trial_optuna(self, trial: Trial): elif "mini_batch_size" in par.name: self.params.running.mini_batch_size = par.get_parameter(trial) + elif "early_stopping_epochs" in par.name: + self.params.running.early_stopping_epochs = par.\ + get_parameter(trial) + + elif "learning_rate_patience" in par.name: + self.params.running.learning_rate_patience = par.\ + get_parameter(trial) + + elif "learning_rate_decay" in par.name: + self.params.running.learning_rate_decay = par.\ + get_parameter(trial) + + elif "layer_activation" in par.name: + pass + else: raise Exception("Optimization of hyperparameter ", par.name, "not supported at the moment.") + + # We have to process the activations separately, because they depend on + # the results of the layer lists. + + layer_counter = 0 + for par in self.params.hyperparameters.hlist: + if "layer_activation" in par.name: + if layer_counter not in turned_off_layers: + self.params.network.layer_activations.\ + append(par.get_parameter(trial)) + layer_counter += 1 + if self.optimize_layer_list: self.params.network.layer_sizes.\ append(self.data_handler.get_output_dimension()) @@ -133,17 +242,99 @@ def parse_trial_oat(self, trial): trial : numpy.array Row in an orthogonal array which respresents current trial. """ + if self.optimize_layer_list: + self.params.network.layer_sizes = \ + [self.data_handler.get_input_dimension()] + if self.optimize_activation_list: self.params.network.layer_activations = [] + # Some layers may have been turned off by optuna. + turned_off_layers = [] + + # This is one because of the input layer. + layer_counter = 1 + par: HyperparameterOAT for factor_idx, par in enumerate(self.params.hyperparameters.hlist): - if "layer_activation" in par.name: - self.params.network.layer_activations.\ - append(par.get_parameter(trial, factor_idx)) + if "learning_rate" in par.name: + self.params.running.learning_rate = \ + par.get_parameter(trial, factor_idx) + # If the user wants to optimize multiple layers simultaneously, + # we have to parse to parameters at the same time. + elif par.name == "ff_multiple_layers_neurons": + neurons_per_layer = par.get_parameter(trial, factor_idx) + number_layers = 0 + max_number_layers = 0 + other_par: HyperparameterOAT + for other_idx, other_par in enumerate(self.params. + hyperparameters.hlist): + if other_par.name == "ff_multiple_layers_count": + number_layers = other_par.get_parameter(trial, + other_idx) + max_number_layers = max(other_par.choices) + if number_layers > 0: + for i in range(0, number_layers): + if neurons_per_layer > 0: + self.params.network.layer_sizes. \ + append(neurons_per_layer) + else: + turned_off_layers.append(layer_counter) + layer_counter += 1 + if number_layers != max_number_layers: + for i in range(number_layers, max_number_layers): + turned_off_layers.append(layer_counter) + layer_counter += 1 + else: + for i in range(0, max_number_layers): + turned_off_layers.append(layer_counter) + layer_counter += 1 + + elif par.name == "ff_multiple_layers_count": + # This is parsed directly abve. + pass + + elif "ff_neurons_layer" in par.name: + if self.params.network.nn_type == "feed-forward": + # Check for zero neuron layers; These indicate layers + # that can be left out. + layer_size = par.get_parameter(trial, factor_idx) + if layer_size > 0: + self.params.network.layer_sizes. \ + append(par.get_parameter(trial, factor_idx)) + else: + turned_off_layers.append(layer_counter) + layer_counter += 1 + elif "trainingtype" in par.name: self.params.running.trainingtype = par.\ get_parameter(trial, factor_idx) + elif "mini_batch_size" in par.name: + self.params.running.mini_batch_size = par.get_parameter(trial, + factor_idx) + elif "early_stopping_epochs" in par.name: + self.params.running.early_stopping_epochs = par.\ + get_parameter(trial, factor_idx) + + elif "layer_activation" in par.name: + pass + else: raise Exception("Optimization of hyperparameter ", par.name, "not supported at the moment.") + + # We have to process the activations separately, because they depend on + # the results of the layer lists. + + layer_counter = 0 + par: HyperparameterOAT + for factor_idx, par in enumerate(self.params.hyperparameters.hlist): + if "layer_activation" in par.name: + if layer_counter not in turned_off_layers: + self.params.network.layer_activations.\ + append(par.get_parameter(trial, factor_idx)) + layer_counter += 1 + + if self.optimize_layer_list: + self.params.network.layer_sizes.\ + append(self.data_handler.get_output_dimension()) diff --git a/mala/network/objective_no_training.py b/mala/network/objective_no_training.py index 31f8cceff..7deb4b04e 100644 --- a/mala/network/objective_no_training.py +++ b/mala/network/objective_no_training.py @@ -3,11 +3,12 @@ import torch from torch import Tensor from torch.utils.data import DataLoader + +from mala.common.printout import printout from mala.common.parameters import Parameters from mala.datahandling.data_handler import DataHandler from mala.network.network import Network from mala.network.objective_base import ObjectiveBase -from mala.common.parameters import printout class ObjectiveNoTraining(ObjectiveBase): @@ -15,28 +16,25 @@ class ObjectiveNoTraining(ObjectiveBase): Represents the objective function using no NN training. The objective value is calculated using the Jacobian. + + Parameters + ---------- + search_parameters : mala.common.parameters.Parameters + Parameters used to create this objective. + + data_handler : mala.datahandling.data_handler.DataHandler + datahandler to be used during the hyperparameter optimization. + + trial_type : string + Format of hyperparameters used in this objective. Supported + choices are: + + - optuna + - oat """ def __init__(self, search_parameters: Parameters, data_handler: DataHandler, trial_type): - """ - Create an ObjectiveNoTraining object. - - Parameters - ---------- - search_parameters : mala.common.parameters.Parameters - Parameters used to create this objective. - - data_handler : mala.datahandling.data_handler.DataHandler - datahandler to be used during the hyperparameter optimization. - - trial_type : string - Format of hyperparameters used in this objective. Supported - choices are: - - - optuna - - oat - """ super(ObjectiveNoTraining, self).__init__(search_parameters, data_handler) self.trial_type = trial_type @@ -55,23 +53,54 @@ def __call__(self, trial): super(ObjectiveNoTraining, self).parse_trial(trial) # Build the network. - net = Network(self.params) - device = "cuda" if self.params.use_gpu else "cpu" - - # Load the batchesand get the jacobian. - loader = DataLoader(self.data_handler.training_data_set, - batch_size=self.params.running.mini_batch_size, - shuffle=True) - jac = ObjectiveNoTraining.__get_batch_jacobian(net, loader, device) - - # Loss = - score! - surrogate_loss = float('inf') - try: - surrogate_loss = - ObjectiveNoTraining.__calc_score(jac) - surrogate_loss = surrogate_loss.detach().numpy().astype(np.float64) - except RuntimeError: - printout("Got a NaN, ignoring sample.") - return surrogate_loss + surrogate_losses = [] + for i in range(0, self.params.hyperparameters. + number_training_per_trial): + net = Network(self.params) + device = "cuda" if self.params.use_gpu else "cpu" + + # Load the batchesand get the jacobian. + do_shuffle = self.params.running.use_shuffling_for_samplers + if self.data_handler.parameters.use_lazy_loading or \ + self.params.use_horovod: + do_shuffle = False + if self.params.running.use_shuffling_for_samplers: + self.data_handler.mix_datasets() + loader = DataLoader(self.data_handler.training_data_set, + batch_size=self.params.running.mini_batch_size, + shuffle=do_shuffle) + jac = ObjectiveNoTraining.__get_batch_jacobian(net, loader, device) + + # Loss = - score! + surrogate_loss = float('inf') + try: + surrogate_loss = - ObjectiveNoTraining.__calc_score(jac) + surrogate_loss = surrogate_loss.cpu().detach().numpy().astype( + np.float64) + except RuntimeError: + printout("Got a NaN, ignoring sample.") + surrogate_losses.append(surrogate_loss) + + if self.params.hyperparameters.number_training_per_trial > 1: + printout("Losses from multiple runs are: ") + printout(surrogate_losses) + + if self.params.hyperparameters.trial_ensemble_evaluation == "mean": + return np.mean(surrogate_losses) + + elif self.params.hyperparameters.trial_ensemble_evaluation == \ + "mean_std": + mean = np.mean(surrogate_losses) + + # Cannot calculate the standar deviation of a bunch of infinities. + if np.isinf(mean): + return mean + else: + return np.mean(surrogate_losses) + \ + np.std(surrogate_losses) + else: + raise Exception("No way to estimate the trial metric from ensemble" + " training provided.") @staticmethod def __get_batch_jacobian(net: Network, loader: DataLoader, device) \ diff --git a/mala/network/predictor.py b/mala/network/predictor.py new file mode 100644 index 000000000..47b04e0c6 --- /dev/null +++ b/mala/network/predictor.py @@ -0,0 +1,144 @@ +"""Tester class for testing a network.""" +try: + import horovod.torch as hvd +except ModuleNotFoundError: + # Warning is thrown by Parameters class + pass +import ase.io +import numpy as np +import torch + +from mala.common.parameters import printout +from mala.network.runner import Runner + + +class Predictor(Runner): + """ + A class for testing a neural network. + + It enables easy inference throughout a test set. + + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this Tester object. + + network : mala.network.network.Network + Network which is being tested. + + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the test data. + """ + + def __init__(self, params, network, data): + # copy the parameters into the class. + super(Predictor, self).__init__(params, network, data) + self.data.grid_dimension = self.parameters.inference_data_grid + self.data.grid_size = self.data.grid_dimension[0] * \ + self.data.grid_dimension[1] * \ + self.data.grid_dimension[2] + self.test_data_loader = None + self.number_of_batches_per_snapshot = 0 + self.__prepare_to_predict() + + def predict_from_qeout(self, path_to_file): + """ + Get predicted LDOS for the atomic configuration of a QE.out file. + + Parameters + ---------- + path_to_file : string + Path from which to read the atomic configuration. + + Returns + ------- + predicted_ldos : numpy.array + Precicted LDOS for these atomic positions. + """ + atoms = ase.io.read(path_to_file, format="espresso-out") + return self.predict_for_atoms(atoms) + + def predict_for_atoms(self, atoms): + """ + Get predicted LDOS for an atomic configuration. + + Parameters + ---------- + atoms : ase.Atoms + ASE atoms for which the prediction should be done. + + Returns + ------- + predicted_ldos : numpy.array + Precicted LDOS for these atomic positions. + """ + # Calculate SNAP descriptors. + snap_descriptors = self.data.descriptor_calculator.\ + calculate_from_atoms(atoms, self.data.grid_dimension) + + # Now reshape and scale the descriptors. + feature_length = self.data.descriptor_calculator.fingerprint_length + if self.parameters_full.data.descriptors_contain_xyz: + snap_descriptors = snap_descriptors[:, :, :, 3:] + feature_length -= 3 + + snap_descriptors = \ + snap_descriptors.astype(np.float32) + snap_descriptors = \ + snap_descriptors.reshape( + [self.data.grid_size, feature_length]) + snap_descriptors = \ + torch.from_numpy(snap_descriptors).float() + snap_descriptors = \ + self.data.input_data_scaler.transform(snap_descriptors) + + # Provide info from current snapshot to target calculator. + self.data.target_calculator.\ + read_additional_calculation_data("atoms+grid", + [atoms, self.data.grid_dimension]) + + # Forward the SNAP descriptors through the network. + return self.\ + _forward_snap_descriptors(snap_descriptors) + + def _forward_snap_descriptors(self, snap_descriptors): + """Forward a scaled tensor of SNAP descriptors through the NN.""" + predicted_outputs = np.zeros((self.data.grid_size, + self.data.target_calculator.\ + get_feature_size())) + + for i in range(0, self.number_of_batches_per_snapshot): + inputs = snap_descriptors[i * self.parameters.mini_batch_size: + (i+1)*self.parameters.mini_batch_size] + if self.parameters_full.use_gpu: + inputs = inputs.to('cuda') + predicted_outputs[i * self.parameters.mini_batch_size: + (i+1)*self.parameters.mini_batch_size] \ + = self.data.output_data_scaler.\ + inverse_transform(self.network(inputs). + to('cpu'), as_numpy=True) + + # Restricting the actual quantities to physical meaningful values, + # i.e. restricting the (L)DOS to positive values. + predicted_outputs = self.data.target_calculator.\ + restrict_data(predicted_outputs) + return predicted_outputs + + # Currently a copy of the prepare_to_test function of the Tester class. + # Might change in the future. + def __prepare_to_predict(self): + """Prepare the tester class to for test run.""" + # We will use the DataSet iterator to iterate over the test data. + # But since we only want the data per snapshot, + # we need to make sure the batch size is compatible with that. + optimal_batch_size = self.\ + _correct_batch_size_for_testing(self.data.grid_size, + self.parameters.mini_batch_size) + if optimal_batch_size != self.parameters.mini_batch_size: + printout("Had to readjust batch size from", + self.parameters.mini_batch_size, "to", + optimal_batch_size) + self.parameters.mini_batch_size = optimal_batch_size + self.number_of_batches_per_snapshot = int(self.data.grid_size / + self.parameters. + mini_batch_size) diff --git a/mala/network/runner.py b/mala/network/runner.py index 15b25bea1..06d91d016 100644 --- a/mala/network/runner.py +++ b/mala/network/runner.py @@ -1,11 +1,15 @@ """Runner class for running networks.""" -import torch -from mala.common.parameters import printout try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by Parameters class pass +import numpy as np +import torch + +from mala.common.printout import printout +from mala.common.parameters import ParametersRunning +from mala import Parameters class Runner: @@ -13,25 +17,22 @@ class Runner: Parent class for all classes that in some sense "run" the network. That can be training, benchmarking, inference, etc. - """ - def __init__(self, params, network, data): - """ - Create a Runner object to run a Network. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this Runner object. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this Runner object. + network : mala.network.network.Network + Network which is being run. - network : mala.network.network.Network - Network which is being run. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the data for the run. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the data for the run. - """ - self.parameters_full = params - self.parameters = params.running + def __init__(self, params, network, data): + self.parameters_full: Parameters = params + self.parameters: ParametersRunning = params.running self.network = network self.data = data self.__prepare_to_run() @@ -50,3 +51,85 @@ def __prepare_to_run(self): torch.cuda.get_device_name(hvd.local_rank())) # pin GPU to local rank torch.cuda.set_device(hvd.local_rank()) + + def _forward_entire_snapshot(self, snapshot_number, data_set, + number_of_batches_per_snapshot=0, + batch_size=0): + """ + Forward a snapshot through the network, get actual/predicted output. + + Parameters + ---------- + snapshot_number : int + Snapshot for which the prediction is done. + + number_of_batches_per_snapshot : int + Number of batches that lie within a snapshot. + + batch_size : int + Batch size used for forward pass. + + Returns + ------- + actual_outputs : torch.Tensor + Actual outputs for snapshot. + + predicted_outputs : torch.Tensor + Precicted outputs for snapshot. + """ + if self.data.parameters.use_lazy_loading: + data_set.return_outputs_directly = True + actual_outputs = \ + (data_set + [snapshot_number * self.data. + grid_size:(snapshot_number + 1) * self.data.grid_size])[1] + else: + actual_outputs = \ + self.data.output_data_scaler.\ + inverse_transform( + (data_set[snapshot_number * + self.data.grid_size: + (snapshot_number + 1) * + self.data.grid_size])[1], + as_numpy=True) + + predicted_outputs = np.zeros((self.data.grid_size, + self.data.get_output_dimension())) + + offset = snapshot_number * self.data.grid_size + for i in range(0, number_of_batches_per_snapshot): + inputs, outputs = \ + data_set[offset+(i * batch_size):offset+((i + 1) * batch_size)] + if self.parameters_full.use_gpu: + inputs = inputs.to('cuda') + predicted_outputs[i * batch_size:(i + 1) * batch_size, :] = \ + self.data.output_data_scaler.\ + inverse_transform(self.network(inputs). + to('cpu'), as_numpy=True) + + # Restricting the actual quantities to physical meaningful values, + # i.e. restricting the (L)DOS to positive values. + predicted_outputs = self.data.target_calculator.\ + restrict_data(predicted_outputs) + + # It could be that other operations will be happening with the data + # set, so it's best to reset it. + if self.data.parameters.use_lazy_loading: + data_set.return_outputs_directly = False + + return actual_outputs, predicted_outputs + + @staticmethod + def _correct_batch_size_for_testing(datasize, batchsize): + """ + Get the correct batch size for testing. + + For testing snapshot the batch size needs to be such that + data_per_snapshot / batch_size will result in an integer division + without any residual value. + """ + new_batch_size = batchsize + if datasize % new_batch_size != 0: + while datasize % new_batch_size != 0: + new_batch_size += 1 + return new_batch_size diff --git a/mala/network/tester.py b/mala/network/tester.py index 69cb6ced2..473a5b4da 100644 --- a/mala/network/tester.py +++ b/mala/network/tester.py @@ -1,14 +1,13 @@ """Tester class for testing a network.""" -import numpy as np -import torch -from torch.utils.data import DataLoader -from mala.common.parameters import printout -from .runner import Runner try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by Parameters class pass +import torch + +from mala.common.parameters import printout +from mala.network.runner import Runner class Tester(Runner): @@ -16,23 +15,20 @@ class Tester(Runner): A class for testing a neural network. It enables easy inference throughout a test set. - """ - def __init__(self, params, network, data): - """ - Create a Tester object to run a Network. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this Tester object. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this Tester object. + network : mala.network.network.Network + Network which is being tested. - network : mala.network.network.Network - Network which is being tested. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the test data. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the test data. - """ + def __init__(self, params, network, data): # copy the parameters into the class. super(Tester, self).__init__(params, network, data) self.test_data_loader = None @@ -56,76 +52,26 @@ def test_snapshot(self, snapshot_number): predicted_outputs : torch.Tensor Precicted outputs for snapshot. """ - self.data.prepare_for_testing() - if self.data.parameters.use_lazy_loading: - actual_outputs = \ - (self.data.test_data_set - [snapshot_number * self.data. - grid_size:(snapshot_number + 1) * self.data.grid_size])[1] - else: - actual_outputs = \ - self.data.output_data_scaler.\ - inverse_transform( - (self.data.test_data_set[snapshot_number * - self.data.grid_size: - (snapshot_number + 1) * - self.data.grid_size])[1], - as_numpy=True) - - predicted_outputs = np.zeros((self.data.grid_size, - self.data.get_output_dimension())) - - offset = snapshot_number * self.data.grid_size - for i in range(0, self.number_of_batches_per_snapshot): - inputs, outputs = \ - self.data.test_data_set[offset+(i * self.parameters. - mini_batch_size): - offset+((i + 1) * self.parameters. - mini_batch_size)] - if self.parameters_full.use_gpu: - inputs = inputs.to('cuda') - predicted_outputs[i * self.parameters. - mini_batch_size:(i + 1) * self.parameters. - mini_batch_size, :] = \ - self.data.output_data_scaler.\ - inverse_transform(self.network(inputs). - to('cpu'), as_numpy=True) - - return actual_outputs, predicted_outputs + # Forward through network. + return self.\ + _forward_entire_snapshot(snapshot_number, + self.data.test_data_set, + self.number_of_batches_per_snapshot, + self.parameters.mini_batch_size) def __prepare_to_test(self): """Prepare the tester class to for test run.""" - if self.parameters_full.use_horovod: - self.parameters.sampler["test_sampler"] = torch.utils.data.\ - distributed.DistributedSampler(self.data.test_data_set, - num_replicas=hvd.size(), - rank=hvd.rank()) - # We will use the DataLoader iterator to iterate over the test data. + # We will use the DataSet iterator to iterate over the test data. # But since we only want the data per snapshot, # we need to make sure the batch size is compatible with that. - self.__check_and_adjust_batch_size(self.data.grid_size) - self.test_data_loader = DataLoader(self.data.test_data_set, - batch_size=self.parameters. - mini_batch_size * 1, - sampler=self.parameters. - sampler["test_sampler"], - **self.parameters.kwargs, - shuffle=False) + optimal_batch_size = self.\ + _correct_batch_size_for_testing(self.data.grid_size, + self.parameters.mini_batch_size) + if optimal_batch_size != self.parameters.mini_batch_size: + printout("Had to readjust batch size from", + self.parameters.mini_batch_size, "to", + optimal_batch_size) + self.parameters.mini_batch_size = optimal_batch_size self.number_of_batches_per_snapshot = int(self.data.grid_size / self.parameters. mini_batch_size) - - def __check_and_adjust_batch_size(self, datasize): - """ - Check batch size and adjust it if necessary. - - For testing the batch size needs to be such that data_per_snapshot / - batch_size will result in an integer division without any residual - value. - """ - if datasize % self.parameters.mini_batch_size != 0: - old_batch_size = self.parameters.mini_batch_size - while datasize % self.parameters.mini_batch_size != 0: - self.parameters.mini_batch_size += 1 - printout("Had to readjust batch size from", old_batch_size, "to", - self.parameters.mini_batch_size) diff --git a/mala/network/trainer.py b/mala/network/trainer.py index ae3fd371d..3e52efbbf 100644 --- a/mala/network/trainer.py +++ b/mala/network/trainer.py @@ -1,41 +1,42 @@ """Trainer class for training a network.""" -from mala.network.network import Network -from mala.datahandling.data_handler import DataHandler -from mala.datahandling.data_scaler import DataScaler -from mala.common.parameters import Parameters import os -import numpy as np -import torch -from torch import optim -from torch.utils.data import DataLoader -from mala.common.parameters import printout -from .runner import Runner +import time + try: import horovod.torch as hvd except ModuleNotFoundError: # Warning is thrown by Parameters class pass -import time +import numpy as np +import torch +from torch import optim +from torch.utils.data import DataLoader +from torch.utils.tensorboard import SummaryWriter + +from mala.common.parameters import Parameters +from mala.common.parameters import printout +from mala.datahandling.data_handler import DataHandler +from mala.datahandling.data_scaler import DataScaler +from mala.network.network import Network +from mala.network.runner import Runner class Trainer(Runner): - """A class for training a neural network.""" + """A class for training a neural network. - def __init__(self, params, network, data, optimizer_dict=None): - """ - Create a Trainer object to run a Network. + Parameters + ---------- + params : mala.common.parametes.Parameters + Parameters used to create this Trainer object. - Parameters - ---------- - params : mala.common.parametes.Parameters - Parameters used to create this Trainer object. + network : mala.network.network.Network + Network which is being trained. - network : mala.network.network.Network - Network which is being trained. + data : mala.datahandling.data_handler.DataHandler + DataHandler holding the training data. + """ - data : mala.datahandling.data_handler.DataHandler - DataHandler holding the training data. - """ + def __init__(self, params, network, data, optimizer_dict=None): # copy the parameters into the class. super(Trainer, self).__init__(params, network, data) self.final_test_loss = float("inf") @@ -51,6 +52,13 @@ def __init__(self, params, network, data, optimizer_dict=None): self.validation_data_loader = None self.test_data_loader = None self.__prepare_to_train(optimizer_dict) + self.tensor_board = None + if self.parameters.visualisation: + if not os.path.exists(self.parameters.visualisation_dir): + os.makedirs(self.parameters.visualisation_dir) + # Set the path to log files + self.tensor_board = SummaryWriter(self.parameters.visualisation_dir) + @classmethod def checkpoint_exists(cls, checkpoint_name): @@ -167,38 +175,51 @@ def load_from_file(cls, params, file_path, network, data): def train_network(self): """Train a network using data given by a DataHandler.""" - # Create reference to data and network and setup training. - # Calculate initial loss. + ############################ + # CALCULATE INITIAL METRICS + ############################ + tloss = float("inf") vloss = self.__validate_network(self.network, - self.validation_data_loader) + "validation", + self.parameters. + after_before_training_metric) + if self.data.test_data_set is not None: tloss = self.__validate_network(self.network, - self.test_data_loader) + "test", + self.parameters. + after_before_training_metric) # Collect and average all the losses from all the devices if self.parameters_full.use_horovod: vloss = self.__average_validation(vloss, 'average_loss') - self.initial_validation_loss = vloss if self.data.test_data_set is not None: tloss = self.__average_validation(tloss, 'average_loss') - self.initial_test_loss = tloss if self.parameters.verbosity: printout("Initial Guess - validation data loss: ", vloss) if self.data.test_data_set is not None: printout("Initial Guess - test data loss: ", tloss) + # Save losses for later use. + self.initial_validation_loss = vloss + self.initial_test_loss = tloss + # Initialize all the counters. checkpoint_counter = 0 - # If we restarted from a checkpoint, we + # If we restarted from a checkpoint, we have to differently initialize + # the loss. if self.last_loss is None: vloss_old = vloss else: vloss_old = self.last_loss - # Perform and log training. + ############################ + # PERFORM TRAINING + ############################ + for epoch in range(self.last_epoch, self.parameters.max_number_epochs): start_time = time.time() @@ -223,12 +244,31 @@ def train_network(self): # Calculate the validation loss. and output it. vloss = self.__validate_network(self.network, - self.validation_data_loader) + "validation", + self.parameters. + during_training_metric) if self.parameters_full.use_horovod: vloss = self.__average_validation(vloss, 'average_loss') if self.parameters.verbosity: printout("Epoch: ", epoch, "validation data loss: ", vloss) + #summary_writer tensor board + if self.parameters.visualisation: + self.tensor_board.add_scalar("Loss", vloss, epoch) + self.tensor_board.add_scalar("Learning rate", self.parameters.learning_rate, epoch) + if self.parameters.visualisation == 2: + print("visualisation = 2") + for name, param in self.network.named_parameters(): + self.tensor_board.add_histogram(name,param,epoch) + self.tensor_board.add_histogram(f'{name}.grad',param.grad,epoch) + + self.tensor_board.close() #method to make sure that all pending events have been written to disk + + + + + + # Mix the DataSets up (this function only does something # in the lazy loading case). if self.parameters.use_shuffling_for_samplers: @@ -275,17 +315,38 @@ def train_network(self): if self.parameters.verbosity: printout("Time for epoch[s]:", time.time() - start_time) + ############################ + # CALCULATE FINAL METRICS + ############################ + + if self.parameters.after_before_training_metric != \ + self.parameters.during_training_metric: + vloss = self.__validate_network(self.network, + "validation", + self.parameters. + after_before_training_metric) + if self.parameters_full.use_horovod: + vloss = self.__average_validation(vloss, 'average_loss') + + + # Calculate final loss. self.final_validation_loss = vloss + printout("Final validation data loss: ", vloss) + tloss = float("inf") if self.data.test_data_set is not None: tloss = self.__validate_network(self.network, - self.test_data_loader) + "test", + self.parameters. + after_before_training_metric) if self.parameters_full.use_horovod: tloss = self.__average_validation(tloss, 'average_loss') printout("Final test data loss: ", tloss) self.final_test_loss = tloss + + def __prepare_to_train(self, optimizer_dict): """Prepare everything for training.""" # Configure keyword arguments for DataSampler. @@ -432,20 +493,128 @@ def __process_mini_batch(self, network, input_data, target_data): self.optimizer.zero_grad() return loss.item() - def __validate_network(self, network, vdl): + def __validate_network(self, network, data_set_type, validation_type): """Validate a network, using test or validation data.""" + if data_set_type == "test": + data_loader = self.test_data_loader + data_set = self.data.test_data_set + number_of_snapshots = self.data.nr_test_snapshots + offset_snapshots = self.data.nr_validation_snapshots + \ + self.data.nr_training_snapshots + + elif data_set_type == "validation": + data_loader = self.validation_data_loader + data_set = self.data.validation_data_set + number_of_snapshots = self.data.nr_validation_snapshots + offset_snapshots = self.data.nr_training_snapshots + + else: + raise Exception("Please select test or validation" + "when using this function.") network.eval() - validation_loss = [] - with torch.no_grad(): - for x, y in vdl: - if self.parameters_full.use_gpu: - x = x.to('cuda') - y = y.to('cuda') - prediction = network(x) - validation_loss.append(network.calculate_loss(prediction, y) - .item()) + if validation_type == "ldos": + validation_loss = [] + with torch.no_grad(): + for x, y in data_loader: + if self.parameters_full.use_gpu: + x = x.to('cuda') + y = y.to('cuda') + prediction = network(x) + validation_loss.append(network.calculate_loss(prediction, y) + .item()) + + return np.mean(validation_loss) + elif validation_type == "band_energy": + # Get optimal batch size and number of batches per snapshots. + optimal_batch_size = self. \ + _correct_batch_size_for_testing(self.data.grid_size, + self.parameters. + mini_batch_size) + number_of_batches_per_snapshot = int(self.data.grid_size / + optimal_batch_size) + errors = [] + for snapshot_number in range(offset_snapshots, + number_of_snapshots+offset_snapshots): + actual_outputs, \ + predicted_outputs = self.\ + _forward_entire_snapshot(snapshot_number-offset_snapshots, + data_set, + number_of_batches_per_snapshot, + optimal_batch_size) + calculator = self.data.target_calculator + + # This works because the list is always guaranteed to be + # ordered. + calculator.\ + read_additional_calculation_data("qe.out", + self.data. + get_snapshot_calculation_output(snapshot_number)) + fe_actual = calculator.\ + get_self_consistent_fermi_energy_ev(actual_outputs) + be_actual = calculator.\ + get_band_energy(actual_outputs, fermi_energy_eV=fe_actual) + + try: + fe_predicted = calculator.\ + get_self_consistent_fermi_energy_ev(predicted_outputs) + be_predicted = calculator.\ + get_band_energy(predicted_outputs, fermi_energy_eV=fe_predicted) + except ValueError: + # If the training went badly, it might be that the above + # code results in an error, due to the LDOS being so wrong + # that the estimation of the self consistent Fermi energy + # fails. + be_predicted = float("inf") + errors.append(np.abs(be_predicted-be_actual)*(1000/len(calculator.atoms))) + return np.mean(errors) + elif validation_type == "total_energy": + # Get optimal batch size and number of batches per snapshots. + optimal_batch_size = self. \ + _correct_batch_size_for_testing(self.data.grid_size, + self.parameters. + mini_batch_size) + number_of_batches_per_snapshot = int(self.data.grid_size / + optimal_batch_size) + errors = [] + for snapshot_number in range(offset_snapshots, + number_of_snapshots+offset_snapshots): + actual_outputs, \ + predicted_outputs = self.\ + _forward_entire_snapshot(snapshot_number-offset_snapshots, + data_set, + number_of_batches_per_snapshot, + optimal_batch_size) + calculator = self.data.target_calculator + + # This works because the list is always guaranteed to be + # ordered. + calculator.\ + read_additional_calculation_data("qe.out", + self.data. + get_snapshot_calculation_output(snapshot_number)) + fe_actual = calculator.\ + get_self_consistent_fermi_energy_ev(actual_outputs) + te_actual = calculator.\ + get_total_energy(ldos_data=actual_outputs, + fermi_energy_eV=fe_actual) + + try: + fe_predicted = calculator.\ + get_self_consistent_fermi_energy_ev(predicted_outputs) + te_predicted = calculator.\ + get_total_energy(ldos_data=actual_outputs, + fermi_energy_eV=fe_predicted) + except ValueError: + # If the training went badly, it might be that the above + # code results in an error, due to the LDOS being so wrong + # that the estimation of the self consistent Fermi energy + # fails. + te_predicted = float("inf") + errors.append(np.abs(te_predicted-te_actual)*(1000/len(calculator.atoms))) + return np.mean(errors) - return np.mean(validation_loss) + else: + raise Exception("Selected validation method not supported.") def __create_training_checkpoint(self): """ @@ -501,3 +670,4 @@ def __average_validation(val, name): tensor = torch.tensor(val) avg_loss = hvd.allreduce(tensor, name=name, op=hvd.Average) return avg_loss.item() + diff --git a/mala/targets/calculation_helpers.py b/mala/targets/calculation_helpers.py index 170b9ff09..09c5d790c 100644 --- a/mala/targets/calculation_helpers.py +++ b/mala/targets/calculation_helpers.py @@ -1,8 +1,8 @@ """Helper functions for several calculation tasks (such as integration).""" -import numpy as np from ase.units import kB -from scipy import integrate import mpmath as mp +import numpy as np +from scipy import integrate def integrate_values_on_spacing(values, spacing, method, axis=0): @@ -343,20 +343,21 @@ def analytical_integration(D, I0, I1, fermi_energy_ev, energy_grid, energy_grid_edges[0] = energy_grid[0] - spacing energy_grid_edges[-1] = energy_grid[-1] + spacing - if len(D.shape) > 1: - real_space_grid = D.shape[0] - integral_value = np.zeros(real_space_grid, dtype=np.float64) - else: - real_space_grid = 1 - integral_value = 0 - # Calculate the weights. + # It is not really possible to express this as a vector operation, + # since mp.polylog (which is called in function_mappings) does not support + # that. + beta = 1 / (kB * temperature_k) for i in range(0, gridsize): - # Calculate beta and x - beta = 1 / (kB * temperature_k) - x = beta*(energy_grid_edges[i]-fermi_energy_ev) - x_plus = beta*(energy_grid_edges[i+1]-fermi_energy_ev) - x_minus = beta*(energy_grid_edges[i-1]-fermi_energy_ev) + # Some aliases for readibility + ei = energy_grid_edges[i+1] + ei_plus = energy_grid_edges[i+2] + ei_minus = energy_grid_edges[i] + + # Calculate x + x = beta*(ei-fermi_energy_ev) + x_plus = beta*(ei_plus-fermi_energy_ev) + x_minus = beta*(ei_minus-fermi_energy_ev) # Calculate the I0 value i0 = function_mappings[I0](x, beta) @@ -368,19 +369,43 @@ def analytical_integration(D, I0, I1, fermi_energy_ev, energy_grid, i1_plus = function_mappings[I1](x_plus, beta) i1_minus = function_mappings[I1](x_minus, beta) - # Some aliases for readibility - ei = energy_grid_edges[i] - ei_plus = energy_grid_edges[i+1] - ei_minus = energy_grid_edges[i-1] - weights_vector[i] = (i0_plus-i0)*(1 + ((ei-fermi_energy_ev)/(ei_plus-ei)))\ + (i0-i0_minus)*(1-((ei-fermi_energy_ev)/(ei-ei_minus))) - \ ((i1_plus-i1) / (ei_plus-ei)) + ((i1 - i1_minus) / (ei - ei_minus)) - if real_space_grid == 1: - integral_value += weights_vector[i] * D[i] - else: - for j in range(0, real_space_grid): - integral_value[j] += weights_vector[i] * D[j, i] + + integral_value = np.dot(D, weights_vector) return integral_value + + +# Define Gaussian +def gaussians(grid, centers, sigma): + """ + Calculate multiple gaussians on the same grid, but with different centers. + + Gaussian functions are used as approximations to the delta in the + Brillouin zone integration. Note that this defines Gaussians without the + factor of 1/sqrt(2). All the Gaussians will have the same sigmas + Parameters + ---------- + grid : np.array + Grid on which this Gaussian is defined. + + centers : np.array + Array of centers for the Gaussians + + sigma : float + Sigma value for the Gaussian. + + Returns + ------- + multiple_gaussians : np.array + multiple gaussians on the same grid, but with different centers. + + + """ + multiple_gaussians = 1.0/np.sqrt(np.pi*sigma**2) * \ + np.exp(-1.0*((grid[np.newaxis] - centers[..., np.newaxis])/sigma)**2) + + return multiple_gaussians diff --git a/mala/targets/cube_parser.py b/mala/targets/cube_parser.py index c565ec400..e7cbef9a4 100644 --- a/mala/targets/cube_parser.py +++ b/mala/targets/cube_parser.py @@ -1,57 +1,60 @@ """ Cube parser, taken from cubetools (see below). -#------------------------------------------------------------------------------ -# Module: cubetools -#------------------------------------------------------------------------------ -# -# Description: -# Module to work with Gaussian cube format files -# (see http://paulbourke.net/dataformats/cube/) -# -#------------------------------------------------------------------------------ -# -# What does it do: -# * Read/write cube files to/from numpy arrays (dtype=float*) -# * Read/write pairse of cube files to/from numpy arrays (dtype=complex*) -# * Provides a CubeFile object, to be used when cubefiles with -# constant and static data is required. It simulates the readline method -# of a file object with a cube file opened, without creating a file -# -#------------------------------------------------------------------------------ -# -# Dependency: numpy -# -#------------------------------------------------------------------------------ -# -# Author: P. R. Vaidyanathan (aditya95sriram gmail com) -# Date: 25th June 2017 -# -#------------------------------------------------------------------------------ -# -# MIT License -# -# Copyright (c) 2019 P. R. Vaidyanathan -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -#------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + +Module: cubetools + +------------------------------------------------------------------------------ + +Description: +Module to work with Gaussian cube format files +(see http://paulbourke.net/dataformats/cube/) + +------------------------------------------------------------------------------ + +What does it do: + +- Read/write cube files to/from numpy arrays (dtype=float*) +- Read/write pairse of cube files to/from numpy arrays (dtype=complex*) +- Provides a CubeFile object, to be used when cubefiles with constant and + static data is required. It simulates the readline method + of a file object with a cube file opened, without creating a file + +------------------------------------------------------------------------------ + +Dependency: numpy + +------------------------------------------------------------------------------ + +Author: P. R. Vaidyanathan (aditya95sriram gmail com) +Date: 25th June 2017 + +------------------------------------------------------------------------------ + +MIT License + +Copyright (c) 2019 P. R. Vaidyanathan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------------ """ import numpy as np @@ -77,20 +80,18 @@ class CubeFile(object): Doesn't copy atoms metadata, retains number of atoms, but returns dummy atoms Mimics file object's readline method. - """ - def __init__(self, srcname, const=1): - """Create cube file object. + Parameters + ---------- + srcname: string + source file to copy metadata from - Parameters - ---------- - srcname: string - source file to copy metadata from + const: int + numeric value to return instead of volumetric data + """ - const: int - numeric value to return instead of volumetric data - """ - self.cursor = 0 + def __init__(self, srcname, const=1): + self.cursor = 0 self.const = const self.src = src = open(srcname) # comments @@ -151,10 +152,15 @@ def _getline(cube): First field is an int and the remaining fields are floats. - params: - cube: - - returns: (int, list) + Parameters + ---------- + cube : TextIO + The cubefile from which the line is read. + + Returns + ------- + line : tuple + First entry is an int, and the rests are floats. """ line = cube.readline().strip().split() return int(line[0]), map(float, line[1:]) @@ -165,11 +171,16 @@ def _putline(*args): Generate a line to be written to a cube file. The first field is an int and the remaining fields are floats. - - params: - *args: first arg is formatted as int and remaining as floats - - returns: formatted string to be written to file with trailing newline + + Parameters + ---------- + args : tuple + First arg is formatted as int and remaining as floats. + + Returns + ------- + line : string + Formatted string to be written to file with trailing newline. """ s = "{0:^ 8d}".format(args[0]) s += "".join("{0:< 12.6f}".format(arg) for arg in args[1:]) diff --git a/mala/targets/density.py b/mala/targets/density.py index 136c33ac4..fa0d3787a 100644 --- a/mala/targets/density.py +++ b/mala/targets/density.py @@ -1,11 +1,9 @@ """Electronic density calculation class.""" -from .target_base import TargetBase -from .calculation_helpers import * -from .cube_parser import read_cube +import os import warnings + import ase.io from ase.units import Rydberg -from mala.common.parameters import printout try: import total_energy as te except ModuleNotFoundError: @@ -16,27 +14,33 @@ "access the total energy of a system WILL fail.", stacklevel=2) +from mala.common.parameters import printout +from mala.targets.target_base import TargetBase +from mala.targets.calculation_helpers import * +from mala.targets.cube_parser import read_cube + class Density(TargetBase): - """Postprocessing / parsing functions for the electronic density.""" + """Postprocessing / parsing functions for the electronic density. + + Parameters + ---------- + params : mala.common.parameters.Parameters + Parameters used to create this TargetBase object. + """ te_mutex = False def __init__(self, params): - """ - Create a Density object. - - Parameters - ---------- - params : mala.common.parameters.Parameters - Parameters used to create this TargetBase object. - - """ super(Density, self).__init__(params) # We operate on a per gridpoint basis. Per gridpoint, # there is one value for the density (spin-unpolarized calculations). self.target_length = 1 + def get_feature_size(self): + """Get dimension of this target if used as feature in ML.""" + return 1 + def read_from_cube(self, file_name, directory, units=None): """ Read the density data from a cube file. @@ -53,7 +57,7 @@ def read_from_cube(self, file_name, directory, units=None): Units the density is saved in. Usually none. """ printout("Reading density from .cube file in ", directory) - data, meta = read_cube(directory + file_name) + data, meta = read_cube(os.path.join(directory, file_name)) return data def get_number_of_electrons(self, density_data, grid_spacing_bohr=None, @@ -83,7 +87,7 @@ def get_number_of_electrons(self, density_data, grid_spacing_bohr=None, grid_spacing_bohr = self.grid_spacing_Bohr # Check input data for correctness. - data_shape = np.shape(density_data) + data_shape = np.shape(np.squeeze(density_data)) if len(data_shape) != 3: if len(data_shape) != 1: raise Exception("Unknown Density shape, cannot calculate " @@ -309,12 +313,11 @@ def get_energy_contributions(self, density_data, create_file=True, convert_to_threedimensional=True) density_for_qe = np.reshape(density_for_qe, [number_of_gridpoints, 1], order='F') - - # Reset the positions. For some reason creating the positions - # directly from ASE (see above) sometimes - # causes slight errors. This is more accurate. - te.set_positions(np.transpose(atoms_Angstrom.get_scaled_positions()), - number_of_atoms) + # Reset the positions. Some calculations (such as the Ewald sum) + # is directly performed here, so it is not enough to simply + # instantiate the process with the file. + positions_for_qe = self.get_scaled_positions_for_qe(atoms_Angstrom) + te.set_positions(np.transpose(positions_for_qe), number_of_atoms) # Now we can set the new density. te.set_rho_of_r(density_for_qe, number_of_gridpoints, nr_spin_channels) @@ -323,6 +326,31 @@ def get_energy_contributions(self, density_data, create_file=True, energies = np.array(te.get_energies())*Rydberg return energies + @staticmethod + def get_scaled_positions_for_qe(atoms): + """ + Get the positions correctly scaled for QE. + + QE (for ibrav=0) scales a little bit different then ASE would. + ASE uses all provided cell parameters, while QE simply sets the + first entry in the cell parameter matrix as reference and divides + all positions by this value. + + Parameters + ---------- + atoms : ase.Atoms + The atom objects for which the scaled positions should be + calculated. + + Returns + ------- + scaled_positions : numpy.array + The scaled positions. + """ + principal_axis = atoms.get_cell()[0][0] + scaled_positions = atoms.get_positions()/principal_axis + return scaled_positions + @classmethod def from_ldos(cls, ldos_object): """ @@ -356,5 +384,6 @@ def from_ldos(cls, ldos_object): return_density_object.total_energy_dft_calculation = \ ldos_object.total_energy_dft_calculation return_density_object.kpoints = ldos_object.kpoints - + return_density_object.number_of_electrons_from_eigenvals = \ + ldos_object.number_of_electrons_from_eigenvals return return_density_object diff --git a/mala/targets/dos.py b/mala/targets/dos.py index 5fc2e220c..cd2a81327 100644 --- a/mala/targets/dos.py +++ b/mala/targets/dos.py @@ -1,28 +1,32 @@ """DOS calculation class.""" -from .target_base import TargetBase -from .calculation_helpers import * +import os + +from mala.targets.target_base import TargetBase +from mala.targets.calculation_helpers import * from scipy import integrate, interpolate from scipy.optimize import toms748 from ase.units import Rydberg +import ase.io from mala.common.parameters import printout class DOS(TargetBase): - """Postprocessing / parsing functions for the density of states (DOS).""" + """Postprocessing / parsing functions for the density of states (DOS). - def __init__(self, params): - """ - Create a DOS object. + Parameters + ---------- + params : mala.common.parameters.Parameters + Parameters used to create this TargetBase object. + """ - Parameters - ---------- - params : mala.common.parameters.Parameters - Parameters used to create this TargetBase object. - - """ + def __init__(self, params): super(DOS, self).__init__(params) self.target_length = self.parameters.ldos_gridsize + def get_feature_size(self): + """Get dimension of this target if used as feature in ML.""" + return self.parameters.ldos_gridsize + @staticmethod def convert_units(array, in_units="1/eV"): """ @@ -109,7 +113,7 @@ def read_from_qe_dos_txt(self, file_name, directory): return_dos_values = [] # Open the file, then iterate through its contents. - with open(directory+file_name, 'r') as infile: + with open(os.path.join(directory, file_name), 'r') as infile: lines = infile.readlines() i = 0 @@ -125,15 +129,54 @@ def read_from_qe_dos_txt(self, file_name, directory): return np.array(return_dos_values) - def get_energy_grid(self, shift_energy_grid=False): + def read_from_qe_out(self, path_to_file=None, smearing_factor=2): """ - Get energy grid. + Calculate the DOS from a Quantum Espresso DFT output file. + + The DOS will be read calculated via the eigenvalues and the equation + + D(E) = sum_i sum_k w_k delta(E-epsilon_{ik}) Parameters ---------- - shift_energy_grid : bool - If True, the entire energy grid will be shifted by - ldos_gridoffset_ev from the parameters. + path_to_file : string + Path to the QE out file. If None, the QE output that was loaded + via read_additional_calculation_data will be used. + + smearing_factor : int + Smearing factor relative to the energy grid spacing. Default is 2. + + Returns + ------- + dos_data: + DOS data in 1/eV. + """ + # dos_per_band = delta_f(e_grid,dft.eigs) + if path_to_file is None: + atoms_object = self.atoms + else: + atoms_object = ase.io.read(path_to_file, format="espresso-out") + kweights = atoms_object.get_calculator().get_k_point_weights() + if kweights is None: + raise Exception("QE output file does not contain band information." + "Rerun calculation with verbosity set to 'high'.") + + # Get the gaussians for all energy values and calculate the DOS per + # band. + dos_per_band = gaussians(self.get_energy_grid(), + atoms_object.get_calculator(). + band_structure().energies[0, :, :], + smearing_factor*self.parameters. + ldos_gridspacing_ev) + dos_per_band = kweights[:, np.newaxis, np.newaxis]*dos_per_band + + # QE gives the band energies in eV, so no conversion necessary here. + dos_data = np.sum(dos_per_band, axis=(0, 1)) + return dos_data + + def get_energy_grid(self): + """ + Get energy grid. Returns ------- @@ -146,15 +189,11 @@ def get_energy_grid(self, shift_energy_grid=False): self.parameters.ldos_gridsize * \ self.parameters.ldos_gridspacing_ev grid_size = self.parameters.ldos_gridsize - if shift_energy_grid is True: - emin += self.parameters.ldos_gridspacing_ev - emax += self.parameters.ldos_gridspacing_ev linspace_array = (np.linspace(emin, emax, grid_size, endpoint=False)) return linspace_array def get_band_energy(self, dos_data, fermi_energy_eV=None, - temperature_K=None, integration_method="analytical", - shift_energy_grid=True): + temperature_K=None, integration_method="analytical"): """ Calculate the band energy from given DOS data. @@ -176,10 +215,6 @@ def get_band_energy(self, dos_data, fermi_energy_eV=None, - "simps" for Simpson method. - "analytical" for analytical integration. Recommended. - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - Returns ------- band_energy : float @@ -191,18 +226,14 @@ def get_band_energy(self, dos_data, fermi_energy_eV=None, if temperature_K is None: temperature_K = self.temperature_K - if shift_energy_grid and integration_method == "analytical": - energy_grid = self.get_energy_grid(shift_energy_grid=True) - else: - energy_grid = self.get_energy_grid() + energy_grid = self.get_energy_grid() return self.__band_energy_from_dos(dos_data, energy_grid, fermi_energy_eV, temperature_K, integration_method) def get_number_of_electrons(self, dos_data, fermi_energy_eV=None, temperature_K=None, - integration_method="analytical", - shift_energy_grid=True): + integration_method="analytical"): """ Calculate the number of electrons from given DOS data. @@ -224,10 +255,6 @@ def get_number_of_electrons(self, dos_data, fermi_energy_eV=None, - "simps" for Simpson method. - "analytical" for analytical integration. Recommended. - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - Returns ------- number_of_electrons : float @@ -238,10 +265,7 @@ def get_number_of_electrons(self, dos_data, fermi_energy_eV=None, fermi_energy_eV = self.fermi_energy_eV if temperature_K is None: temperature_K = self.temperature_K - if shift_energy_grid and integration_method == "analytical": - energy_grid = self.get_energy_grid(shift_energy_grid=True) - else: - energy_grid = self.get_energy_grid() + energy_grid = self.get_energy_grid() return self.__number_of_electrons_from_dos(dos_data, energy_grid, fermi_energy_eV, temperature_K, @@ -249,8 +273,7 @@ def get_number_of_electrons(self, dos_data, fermi_energy_eV=None, def get_entropy_contribution(self, dos_data, fermi_energy_eV=None, temperature_K=None, - integration_method="analytical", - shift_energy_grid=True): + integration_method="analytical"): """ Calculate the entropy contribution to the total energy. @@ -272,10 +295,6 @@ def get_entropy_contribution(self, dos_data, fermi_energy_eV=None, - "simps" for Simpson method. - "analytical" for analytical integration. Recommended. - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - Returns ------- entropy_contribution : float @@ -286,10 +305,7 @@ def get_entropy_contribution(self, dos_data, fermi_energy_eV=None, if temperature_K is None: temperature_K = self.temperature_K - if shift_energy_grid and integration_method == "analytical": - energy_grid = self.get_energy_grid(shift_energy_grid=True) - else: - energy_grid = self.get_energy_grid() + energy_grid = self.get_energy_grid() return self.\ __entropy_contribution_from_dos(dos_data, energy_grid, fermi_energy_eV, temperature_K, @@ -297,8 +313,7 @@ def get_entropy_contribution(self, dos_data, fermi_energy_eV=None, def get_self_consistent_fermi_energy_ev(self, dos_data, temperature_K=None, - integration_method="analytical", - shift_energy_grid=True): + integration_method="analytical"): """ Calculate the self-consistent Fermi energy. @@ -322,10 +337,6 @@ def get_self_consistent_fermi_energy_ev(self, dos_data, - "simps" for Simpson method. - "analytical" for analytical integration. Recommended. - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - Returns ------- fermi_energy_self_consistent : float @@ -334,10 +345,7 @@ def get_self_consistent_fermi_energy_ev(self, dos_data, # Parse the parameters. if temperature_K is None: temperature_K = self.temperature_K - if shift_energy_grid and integration_method == "analytical": - energy_grid = self.get_energy_grid(shift_energy_grid=True) - else: - energy_grid = self.get_energy_grid() + energy_grid = self.get_energy_grid() fermi_energy_sc = toms748(lambda fermi_sc: (self. __number_of_electrons_from_dos @@ -383,6 +391,8 @@ def from_ldos(cls, ldos_object): return_dos_object.total_energy_dft_calculation = \ ldos_object.total_energy_dft_calculation return_dos_object.kpoints = ldos_object.kpoints + return_dos_object.number_of_electrons_from_eigenvals = \ + ldos_object.number_of_electrons_from_eigenvals return return_dos_object diff --git a/mala/targets/ldos.py b/mala/targets/ldos.py index 10ef67b60..6ee7d97e4 100644 --- a/mala/targets/ldos.py +++ b/mala/targets/ldos.py @@ -1,29 +1,38 @@ """LDOS calculation class.""" -from .cube_parser import read_cube -from .target_base import TargetBase -from .calculation_helpers import * -from .dos import DOS -from .density import Density +from ase.units import Rydberg + import numpy as np import math -from ase.units import Rydberg +import os + from mala.common.parameters import printout +from mala.targets.cube_parser import read_cube +from mala.targets.target_base import TargetBase +from mala.targets.calculation_helpers import * +from mala.targets.dos import DOS +from mala.targets.density import Density class LDOS(TargetBase): - """Postprocessing / parsing functions for the local density of states.""" + """Postprocessing / parsing functions for the local density of states. - def __init__(self, params): - """ - Create a LDOS object. + Parameters + ---------- + params : mala.common.parameters.Parameters + Parameters used to create this TargetBase object. + """ - Parameters - ---------- - params : mala.common.parameters.Parameters - Parameters used to create this TargetBase object. - """ + def __init__(self, params): super(LDOS, self).__init__(params) self.target_length = self.parameters.ldos_gridsize + self.cached_dos_exists = False + self.cached_dos = [] + self.cached_density_exists = False + self.cached_density = [] + + def get_feature_size(self): + """Get dimension of this target if used as feature in ML.""" + return self.parameters.ldos_gridsize @staticmethod def convert_units(array, in_units="1/eV"): @@ -131,7 +140,7 @@ def read_from_cube(self, file_name_scheme, directory, units="1/eV"): tmp_file_name = tmp_file_name.replace("*", str(i).zfill(digits)) # Open the cube file - data, meta = read_cube(directory + tmp_file_name) + data, meta = read_cube(os.path.join(directory, tmp_file_name)) # Once we have read the first cube file, we know the dimensions # of the LDOS and can prepare the array @@ -147,16 +156,10 @@ def read_from_cube(self, file_name_scheme, directory, units="1/eV"): ldos_data[:, :, :, i-1] = data[:, :, :] return ldos_data - def get_energy_grid(self, shift_energy_grid=False): + def get_energy_grid(self): """ Get energy grid. - Parameters - ---------- - shift_energy_grid : bool - If True, the entire energy grid will be shifted by - ldos_gridoffset_ev from the parameters. - Returns ------- e_grid : numpy.array @@ -168,9 +171,6 @@ def get_energy_grid(self, shift_energy_grid=False): self.parameters.ldos_gridsize * \ self.parameters.ldos_gridspacing_ev grid_size = self.parameters.ldos_gridsize - if shift_energy_grid is True: - emin += self.parameters.ldos_gridspacing_ev - emax += self.parameters.ldos_gridspacing_ev linspace_array = (np.linspace(emin, emax, grid_size, endpoint=False)) return linspace_array @@ -180,7 +180,7 @@ def get_total_energy(self, ldos_data=None, dos_data=None, grid_spacing_bohr=None, grid_integration_method="summation", energy_integration_method="analytical", - shift_energy_grid=True, atoms_Angstrom=None, + atoms_Angstrom=None, qe_input_data=None, qe_pseudopotentials=None): """ Calculate the total energy from LDOS or given DOS + density data. @@ -228,10 +228,6 @@ def get_total_energy(self, ldos_data=None, dos_data=None, - "simps" for Simpson method. - "analytical" for analytical integration. (recommended) - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - atoms_Angstrom : ase.Atoms ASE atoms object for the current system. If None, MALA will create one. @@ -279,9 +275,7 @@ def get_total_energy(self, ldos_data=None, dos_data=None, fermi_energy_ev=fermi_energy_eV, temperature_K=temperature_K, integration_method= - energy_integration_method, - shift_energy_grid= - shift_energy_grid) + energy_integration_method) # Now we can create calculation objects to get the necessary # quantities. @@ -297,17 +291,14 @@ def get_total_energy(self, ldos_data=None, dos_data=None, fermi_energy_eV, temperature_K=temperature_K, integration_method= - energy_integration_method, - shift_energy_grid= - shift_energy_grid) + energy_integration_method) # Smearing / Entropy contribution e_entropy_contribution = dos_calculator.\ get_entropy_contribution(dos_data, fermi_energy_eV=fermi_energy_eV, temperature_K=temperature_K, integration_method= - energy_integration_method, - shift_energy_grid=shift_energy_grid) + energy_integration_method) # Density based energy contributions (via QE) e_rho_times_v_hxc, e_hartree, e_xc, e_ewald \ @@ -323,8 +314,7 @@ def get_total_energy(self, ldos_data=None, dos_data=None, def get_band_energy(self, ldos_data, fermi_energy_eV=None, temperature_K=None, grid_spacing_bohr=None, grid_integration_method="summation", - energy_integration_method="analytical", - shift_energy_grid=True): + energy_integration_method="analytical"): """ Calculate the band energy from given LDOS data. @@ -355,10 +345,6 @@ def get_band_energy(self, ldos_data, fermi_energy_eV=None, - "simps" for Simpson method. - "analytical" for analytical integration. (recommended) - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - grid_spacing_bohr : float Grid spacing (distance between grid points) in Bohr. @@ -380,14 +366,12 @@ def get_band_energy(self, ldos_data, fermi_energy_eV=None, return dos_calculator.\ get_band_energy(dos_data, fermi_energy_eV=fermi_energy_eV, temperature_K=temperature_K, - integration_method=energy_integration_method, - shift_energy_grid=shift_energy_grid) + integration_method=energy_integration_method) def get_number_of_electrons(self, ldos_data, grid_spacing_bohr=None, fermi_energy_eV=None, temperature_K=None, grid_integration_method="summation", - energy_integration_method="analytical", - shift_energy_grid=True): + energy_integration_method="analytical"): """ Calculate the number of electrons from given LDOS data. @@ -418,10 +402,6 @@ def get_number_of_electrons(self, ldos_data, grid_spacing_bohr=None, - "simps" for Simpson method. - "analytical" for analytical integration. (recommended) - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - grid_spacing_bohr : float Grid spacing (distance between grid points) in Bohr. @@ -444,8 +424,7 @@ def get_number_of_electrons(self, ldos_data, grid_spacing_bohr=None, get_number_of_electrons(dos_data, fermi_energy_eV=fermi_energy_eV, temperature_K=temperature_K, integration_method= - energy_integration_method, - shift_energy_grid=shift_energy_grid) + energy_integration_method) def get_self_consistent_fermi_energy_ev(self, ldos_data, grid_spacing_bohr=None, @@ -453,8 +432,7 @@ def get_self_consistent_fermi_energy_ev(self, ldos_data, grid_integration_method= "summation", energy_integration_method= - "analytical", - shift_energy_grid=True): + "analytical"): """ Calculate the self-consistent Fermi energy. @@ -487,10 +465,6 @@ def get_self_consistent_fermi_energy_ev(self, ldos_data, - "simps" for Simpson method. - "analytical" for analytical integration. (recommended) - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - grid_spacing_bohr : float Grid spacing (distance between grid points) in Bohr. @@ -513,13 +487,11 @@ def get_self_consistent_fermi_energy_ev(self, ldos_data, get_self_consistent_fermi_energy_ev(dos_data, temperature_K=temperature_K, integration_method= - energy_integration_method, - shift_energy_grid= - shift_energy_grid) + energy_integration_method) def get_density(self, ldos_data, fermi_energy_ev=None, temperature_K=None, conserve_dimensions=False, - integration_method="analytical", shift_energy_grid=True): + integration_method="analytical"): """ Calculate the density from given LDOS data. @@ -543,10 +515,6 @@ def get_density(self, ldos_data, fermi_energy_ev=None, temperature_K=None, - "simps" for Simpson method. - "analytical" for analytical integration. Recommended. - shift_energy_grid : bool - When using the analytical integration, one has to shift the energy - grid by setting this parameter to True. Elsewise keep on False. - ldos_data : numpy.array LDOS data, either as [gridsize, energygrid] or [gridx,gridy,gridz,energygrid]. @@ -566,6 +534,9 @@ def get_density(self, ldos_data, fermi_energy_ev=None, temperature_K=None, dimensions. """ + if self.cached_density_exists: + return self.cached_density + if fermi_energy_ev is None: fermi_energy_ev = self.fermi_energy_eV if temperature_K is None: @@ -588,31 +559,22 @@ def get_density(self, ldos_data, fermi_energy_ev=None, temperature_K=None, else: raise Exception("Invalid LDOS array shape.") - # Parse the information about the energy grid. - emin = self.parameters.ldos_gridoffset_ev - emax = self.parameters.ldos_gridsize * self.parameters.\ - ldos_gridspacing_ev + self.parameters.ldos_gridoffset_ev - energy_grid_spacing = self.parameters.ldos_gridspacing_ev - # Build the energy grid and calculate the fermi function. - if shift_energy_grid and integration_method == "analytical": - emin += energy_grid_spacing - emax += energy_grid_spacing - energy_vals = np.arange(emin, emax, energy_grid_spacing) - fermi_values = fermi_function(energy_vals, fermi_energy_ev, + energy_grid = self.get_energy_grid() + fermi_values = fermi_function(energy_grid, fermi_energy_ev, temperature_K, energy_units="eV") # Calculate the number of electrons. if integration_method == "trapz": density_values = integrate.trapz(ldos_data_used * fermi_values, - energy_vals, axis=-1) + energy_grid, axis=-1) elif integration_method == "simps": density_values = integrate.simps(ldos_data_used * fermi_values, - energy_vals, axis=-1) + energy_grid, axis=-1) elif integration_method == "analytical": density_values = analytical_integration(ldos_data_used, "F0", "F1", fermi_energy_ev, - energy_vals, + energy_grid, temperature_K) else: raise Exception("Unknown integration method.") @@ -646,7 +608,15 @@ def get_density_of_states(self, ldos_data, grid_spacing_bohr=None, - "trapz" for trapezoid method - "simps" for Simpson method. - "summation" for summation and scaling of the values (recommended) + + Returns + ------- + dos_values : np.array + The DOS. """ + if self.cached_dos_exists: + return self.cached_dos + if grid_spacing_bohr is None: grid_spacing_bohr = self.grid_spacing_Bohr @@ -712,3 +682,115 @@ def get_density_of_states(self, ldos_data, grid_spacing_bohr=None, (grid_spacing_bohr ** 3) return dos_values + + def get_and_cache_density_of_states(self, ldos_data, + grid_spacing_bohr=None, + integration_method="summation"): + """ + Calculate a DOS from LDOS data and keep it in memory. + + For all subsequent calculations involving the DOS, this cached + DOS will be used. Usage of this function is advised for time-critical + calculations. + + Parameters + ---------- + ldos_data : numpy.array + LDOS data, either as [gridsize, energygrid] or + [gridx,gridy,gridz,energygrid]. + + grid_spacing_bohr : float + Grid spacing (in Bohr) used to construct this grid. As of now, + only equidistant grids are supported. + + integration_method : str + Integration method used to integrate LDOS on the grid. + Currently supported: + + - "trapz" for trapezoid method + - "simps" for Simpson method. + - "summation" for summation and scaling of the values (recommended) + + Returns + ------- + dos_values : np.array + The DOS. + + """ + self.uncache_density_of_states() + self.cached_dos = self.\ + get_density_of_states(ldos_data, + grid_spacing_bohr=grid_spacing_bohr, + integration_method=integration_method) + self.cached_dos_exists = True + return self.cached_dos + + def uncache_density_of_states(self): + """Uncache a DOS, to calculate a new one in following steps.""" + self.cached_dos_exists = False + + def get_and_cache_density_cached(self, ldos_data, + fermi_energy_ev=None, + temperature_K=None, + conserve_dimensions=False, + integration_method="analytical"): + """ + Calculate an electronic density from LDOS data and keep it in memory. + + For all subsequent calculations involving the electronic density, this + cached density will be used. Usage of this function is advised for + time-critical calculations. + + Parameters + ---------- + conserve_dimensions : bool + If True, the density is returned in the same dimensions as + the LDOS was entered. If False, the density is always given + as [gridsize]. + + fermi_energy_ev : float + Fermi energy level in eV. + + temperature_K : float + Temperature in K. + + integration_method : string + Integration method to be used. Currently supported: + + - "trapz" for trapezoid method + - "simps" for Simpson method. + - "analytical" for analytical integration. Recommended. + + ldos_data : numpy.array + LDOS data, either as [gridsize, energygrid] or + [gridx,gridy,gridz,energygrid]. + + integration_method : string + Integration method to integrate LDOS on energygrid. + Currently supported: + + - "trapz" for trapezoid method + - "simps" for Simpson method. + - "analytical" for analytical integration. Recommended. + + Returns + ------- + density_data : numpy.array + Density data, dimensions depend on conserve_dimensions and LDOS + dimensions. + """ + self.uncache_density() + self.cached_density = self.\ + get_density(ldos_data, + fermi_energy_ev=fermi_energy_ev, + temperature_K=temperature_K, + conserve_dimensions=conserve_dimensions, + integration_method=integration_method) + + self.cached_density_exists = True + return self.cached_density + + def uncache_density(self): + """Uncache a density, to calculate a new one in following steps.""" + self.cached_density_exists = False + diff --git a/mala/targets/target_base.py b/mala/targets/target_base.py index 016476342..68910a27e 100644 --- a/mala/targets/target_base.py +++ b/mala/targets/target_base.py @@ -1,31 +1,30 @@ """Base class for all target calculators.""" +from abc import ABC, abstractmethod + from ase.units import Rydberg, Bohr, kB import ase.io import numpy as np + from mala.common.parameters import Parameters, ParametersTargets -from .calculation_helpers import fermi_function +from mala.targets.calculation_helpers import fermi_function -class TargetBase: +class TargetBase(ABC): """ Base class for all target quantity parser. Target parsers read the target quantity (i.e. the quantity the NN will learn to predict) from a specified file format and performs postprocessing calculations on the quantity. + + Parameters + ---------- + params : mala.common.parameters.Parameters or + mala.common.parameters.ParametersTargets + Parameters used to create this TargetBase object. """ def __init__(self, params): - """ - Create a TargetBase object. - - Parameters - ---------- - params : mala.common.parameters.Parameters or - mala.common.parameters.ParametersTargets - Parameters used to create this TargetBase object. - - """ if isinstance(params, Parameters): self.parameters = params.targets elif isinstance(params, ParametersTargets): @@ -37,6 +36,7 @@ def __init__(self, params): self.temperature_K = None self.grid_spacing_Bohr = None self.number_of_electrons = None + self.number_of_electrons_from_eigenvals = None self.band_energy_dft_calculation = None self.total_energy_dft_calculation = None self.grid_dimensions = [0, 0, 0] @@ -46,7 +46,7 @@ def __init__(self, params): "calculation": 'scf', "restart_mode": 'from_scratch', "prefix": 'MALA', - "pseudo_dir": None, + "pseudo_dir": self.parameters.pseudopotential_path, "outdir": './', "ibrav": None, "smearing": 'fermi-dirac', @@ -69,6 +69,23 @@ def __init__(self, params): self.kpoints = None # (2, 2, 2) self.qe_pseudopotentials = {} + @abstractmethod + def get_feature_size(self): + """Get dimension of this target if used as feature in ML.""" + pass + + @property + def qe_input_data(self): + """Input data for QE TEM calls.""" + # Update the pseudopotential path from Parameters. + self._qe_input_data["pseudo_dir"] = \ + self.parameters.pseudopotential_path + return self._qe_input_data + + @qe_input_data.setter + def qe_input_data(self, value): + self._qe_input_data = value + def read_from_cube(self): """Read the quantity from a .cube file.""" raise Exception("No function defined to read this quantity " @@ -108,7 +125,7 @@ def get_total_energy(self): "of electons has been implemented for this target " "type.") - def read_additional_calculation_data(self, data_type, path_to_file=""): + def read_additional_calculation_data(self, data_type, data=""): """ Read in additional input about a calculation. @@ -123,8 +140,8 @@ def read_additional_calculation_data(self, data_type, path_to_file=""): Type of data or file that is used. Currently only supports qe.out for Quantum Espresso outfiles. - path_to_file : string - Path to the file that is used. + data : string or list + Data from which additional calculation data is inputted. """ if data_type == "qe.out": # Reset everything. @@ -138,7 +155,7 @@ def read_additional_calculation_data(self, data_type, path_to_file=""): self.atoms = None # Read the file. - self.atoms = ase.io.read(path_to_file, format="espresso-out") + self.atoms = ase.io.read(data, format="espresso-out") vol = self.atoms.get_volume() self.fermi_energy_eV = self.atoms.get_calculator().\ get_fermi_level() @@ -147,7 +164,7 @@ def read_additional_calculation_data(self, data_type, path_to_file=""): total_energy = None past_calculation_part = False bands_included = True - with open(path_to_file) as out: + with open(data) as out: pseudolinefound = False lastpseudo = None for line in out: @@ -222,16 +239,40 @@ def read_additional_calculation_data(self, data_type, path_to_file=""): self.temperature_K) eband_per_band = kweights[np.newaxis, :] * eband_per_band self.band_energy_dft_calculation = np.sum(eband_per_band) - else: - raise Exception("Unsupported auxiliary file type.") + enum_per_band = fermi_function(eigs, + self.fermi_energy_eV, + self.temperature_K) + enum_per_band = kweights[np.newaxis, :] * enum_per_band + self.number_of_electrons_from_eigenvals = np.sum(enum_per_band) + elif data_type == "atoms+grid": + # Reset everything. + self.fermi_energy_eV = None + self.temperature_K = None + self.grid_spacing_Bohr = None + self.number_of_electrons = None + self.band_energy_dft_calculation = None + self.total_energy_dft_calculation = None + self.grid_dimensions = [0, 0, 0] + self.atoms: ase.Atoms = data[0] - def set_pseudopotential_path(self, newpath): - """ - Set a path where your pseudopotentials are stored. + # Read the file. + vol = self.atoms.get_volume() - This is needed for doing QE calculations. - """ - self.qe_input_data["pseudo_dir"] = newpath + # Parse the file for energy values. + total_energy = None + past_calculation_part = False + bands_included = True + self.grid_dimensions[0] = data[1][0] + self.grid_dimensions[1] = data[1][1] + self.grid_dimensions[2] = data[1][2] + + # Post process the text values. + cell_volume = vol / (self.grid_dimensions[0] * + self.grid_dimensions[1] * + self.grid_dimensions[2] * Bohr ** 3) + self.grid_spacing_Bohr = cell_volume ** (1 / 3) + else: + raise Exception("Unsupported auxiliary file type.") def get_energy_grid(self): """Get energy grid.""" @@ -280,3 +321,33 @@ def backconvert_units(array, out_units): """ raise Exception("No unit back conversion method implemented " "for this target type.") + + def restrict_data(self, array): + """ + Restrict target data to only contain physically meaningful values. + + For the LDOS this e.g. implies non-negative values. The type + of data restriction is specified by the parameters. + + Parameters + ---------- + array : numpy.array + Numpy array, for which the restrictions are to be applied. + + Returns + ------- + array : numpy.array + The same array, with restrictions enforced. + """ + if self.parameters.restrict_targets == "zero_out_negative": + array[array < 0] = 0 + return array + elif self.parameters.restrict_targets == "absolute_values": + array[array < 0] *= -1 + return array + elif self.parameters.restrict_targets is None: + return array + else: + raise Exception("Wrong data restriction.") + + diff --git a/mala/targets/target_interface.py b/mala/targets/target_interface.py index f7acd3f26..5f9bce512 100644 --- a/mala/targets/target_interface.py +++ b/mala/targets/target_interface.py @@ -1,7 +1,7 @@ """Interface function for getting Targets.""" -from .ldos import LDOS -from .dos import DOS -from .density import Density +from mala.targets.ldos import LDOS +from mala.targets.dos import DOS +from mala.targets.density import Density def TargetInterface(params): diff --git a/ml-dft-sandia/notebooks/dos2eband/.ipynb_checkpoints/dos2eband_02-checkpoint.ipynb b/ml-dft-sandia/notebooks/dos2eband/.ipynb_checkpoints/dos2eband_02-checkpoint.ipynb deleted file mode 100644 index 27916b42f..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/.ipynb_checkpoints/dos2eband_02-checkpoint.ipynb +++ /dev/null @@ -1,789 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "_Updated 200220_" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Fermi Level\n", - "# The Fermi energy printed out by QE (in the DOS output file) is 7.770. \n", - "# The output is truncated and it turns this is too inaccurate to obtain the correct electron number. \n", - "# We determined the Fermi energy to higher accuracy (by imposing the correct electron number = 3*256 = 768).\n", - "# There are 3 electrons per atom due to the choice of pseudopotential. \n", - "# CAUTION: Need to define an accurate Fermi energy for each snapshot. \n", - "fermi_energy = 7.770345\n", - "\n", - "# Boltzmann's constant\n", - "k = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load eigenvalues and DOS from QE output for two snapshots" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# filepath: blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333\n", - "## Snapshot 0: Eigenvalues (from PW std output file, slurm-1006575.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe_00 = np.loadtxt('snap_0/EIGS', delimiter=',')\n", - "k_weights_qe_00 = np.loadtxt('snap_0/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe_00 = np.loadtxt('snap_0/Al.dos', skiprows=1)\n", - "## Snapshot 1: Eigenvalues (from PW std output file, slurm-1006846.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe_01 = np.loadtxt('snap_1/EIGS', delimiter=',')\n", - "k_weights_qe_01 = np.loadtxt('snap_1/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe_01 = np.loadtxt('snap_1/Al.dos', skiprows=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energy, eF, t): \n", - " return 1.0 / (1.0 + np.exp((energy - eF) / (k * t)))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(en, eF, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((en-eF)/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we define functions which compute reference values of the electron number and band energy = sum of eigenvalues.\n", - "Recall the some definitions:\n", - "\n", - "The electron number is defined as\n", - "$$ N = \\sum_{k,i} w_{k,i}\\, f(\\epsilon(k,i) - \\mu)\\,,$$\n", - "the band energy is defined as\n", - "$$ E_b = \\sum_{k,i} w_{k,i}\\, \\epsilon(k,i) f(\\epsilon(k,i) - \\mu)\\,,$$ \n", - "where $i$ denotes the band, $k$ the k point, $w_{k,i}$ the weight of the k point, $\\epsilon(k,i)$ the eigenvalue for a given k point and band, $\\mu$ the chemical potential (which equals the Fermi energy at zero temperature), and $f$ the Fermi-Dirac distribution function (which truncates the sum at the chemical potential). " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating electron number from sum of eigenvalues\n", - "def gen_ENUM(k_weights, array_eigs):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " # output:\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=fermi_energy, t=temp)\n", - " enum = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " enum += k_weights[idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating sum of eigenvalues = band energy\n", - "def gen_EBAND(k_weights, array_eigs):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " # output:\n", - " ## eband\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=fermi_energy, t=temp)\n", - " eband = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " eband += k_weights[idx_k]*array_eigs[idx_bnd , :][idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return eband" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the reference values for the electron number and the band energy by directly summing over the eigenvalues.\n", - "It turns out the value of the band energy obtained from QE below is not correct." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SNAPSHOT 0\n", - "Electron number: 768.3800699587922\n", - "Band energy [eV]: 2598.726246188354\n", - " \n", - "SNAPSHOT 1\n", - "Electron number: 768.0000014009643\n", - "Band energy [eV]: 2598.579547828817\n" - ] - } - ], - "source": [ - "# Reference values of electron number and band energy\n", - "## Snapshot 0\n", - "enum_ref_00 = gen_ENUM(k_weights_qe_00, eigs_qe_00)\n", - "eband_ref_00 = gen_EBAND(k_weights_qe_00, eigs_qe_00)\n", - "print(\"SNAPSHOT 0\")\n", - "print(\"Electron number:\", enum_ref_00)\n", - "print(\"Band energy [eV]:\", eband_ref_00)\n", - "print(\" \")\n", - "\n", - "## Snapshot 1 #Need to determine more accurate Fermi energy for snaphot2\n", - "#fermi_energy = 7.7733618\n", - "enum_ref_01 = gen_ENUM(k_weights_qe_01, eigs_qe_01)\n", - "eband_ref_01 = gen_EBAND(k_weights_qe_01, eigs_qe_01)\n", - "print(\"SNAPSHOT 1\")\n", - "print(\"Electron number:\", enum_ref_01)\n", - "print(\"Band energy [eV]:\", eband_ref_01)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, the electron number and band energy can be by aid of the density of states. This is useful, because, eventually, we will predict the local DOS/DOS from ML.\n", - "\n", - "In terms of the DOS, they are defined as \n", - "\n", - "$$N = \\int_{-\\infty}^{\\infty} d\\epsilon\\ D(\\epsilon)\\, f(\\epsilon)$$\n", - "and\n", - "$$E_b = \\int_{-\\infty}^{\\infty} d\\epsilon\\ D(\\epsilon)\\, f(\\epsilon)\\, \\epsilon\\,,$$\n", - "\n", - "\n", - "where $\\epsilon$ denotes the energy as a continuous variable, $D(\\epsilon)$ the DOS, $f(\\epsilon)$ the Fermi-Dirac distribution function.\n", - "\n", - "The explicit defintion of the DOS is given as a sum of $\\delta$-functions over the spectrum of eigenvalues.\n", - "$$ D(\\epsilon) = \\sum_i \\sum_k w_k\\, \\delta(\\epsilon-\\epsilon(i,k))$$\n", - "\n", - "Commonly (in particular, for the purposes of visualization), the $\\delta$-functions are represented by particular choice of functions (for example, Gaussians)\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "where $\\sigma$ denotes the width." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS sum over eigenvalues\n", - "def gen_DOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " ra_dos_ik[idx_bnd].append(gaussian(ra_en, array_eigs[idx_bnd , :][idx_k], sigma))\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating electron number from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enumFromDOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## enum\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights, array_en, array_eigs, sigma)\n", - " enum = sp.integrate.trapz(ra_dos*ra_fd, array_en)\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_ebandFromDOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## eband [Ry]\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights, array_en, array_eigs, sigma)\n", - " eband = sp.integrate.simps(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS and compare with QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en_00 = dos_qe_00[: , 0]\n", - "ra_dos_00 = gen_DOS(k_weights_qe_00, ra_en_00, eigs_qe_00, sigma=sigma_qe*Ry2eV )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_00[: , 0], dos_qe_00[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe_00[: , 0] , ra_dos_00, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We recover the QE-DOS result by using the same parameters as in the input for computing the DOS.\n", - "Now we can go ahead and investigate different energy grids and smearing values in order to improve upon the band energy and achieve better agreement with the band-energy output of QE." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**CAUTION: This is not correct. The direct sum over eigenvalues (see analysis above) does not yield the same value for the band energy.** \n", - "The QE output of snapshot 0 is given at ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```. \n", - "QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution. \n", - "\n", - "**However, this does not agree with the reference value of the band energy we obtain above by explicitly summing over the eigenvalues (which we know is the correct band energy.)**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(\"Band energy from QE output [Ry]:\", eband_qe)\n", - "print(\"Reference value of band energy (correct) [Ry]:\", eband_ref_00/Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below we analyze the behavior of the predicted electron number and band energy with respect to the choice of energy bin and smearing. One important question to answer is whether we can recover an accurate band energy (error < 10 meV) for a relatively smooth DOS which will be more suited for ML." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Snapshot 0:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define energy bin\n", - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe_00[: , 0][1]-dos_qe_00[: , 0][0])*0.5\n", - "print(ewidth)\n", - "# Define smearing\n", - "ra_sigma_00 = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum_00 = np.zeros(len(ra_sigma_00))\n", - "ra_eband_00 = np.zeros(len(ra_sigma_00))\n", - "ra_en = np.linspace(dos_qe_00[0, 0], dos_qe_00[-1, 0], int((dos_qe_00[-1, 0]-dos_qe_00[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma_00)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum_00[i] = gen_enumFromDOS(k_weights_qe_00, ra_en, eigs_qe_00, sigma=ra_sigma_00[i])\n", - " # Generate band energy\n", - " ra_eband_00[i] = gen_ebandFromDOS(k_weights_qe_00, ra_en , eigs_qe_00, sigma=ra_sigma_00[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum_00)\n", - "print(ra_eband_00)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref_00, ra_sigma_00[0], ra_sigma_00[-1], linewidth=3)\n", - "ax.plot(ra_sigma_00, ra_enum_00, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref_00/Ry2eV, ra_sigma_00[0], ra_sigma_00[-1], linewidth=3)\n", - "ax.scatter(ra_sigma_00, ra_eband_00, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(\"Error in band energy [Ry/atom]\", np.min(abs(ra_eband_00-eband_ref_00/Ry2eV))/256)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Generate the corresponding DOS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos_00 = gen_DOS(k_weights_qe_00, ra_en, eigs_qe_00, sigma=ra_sigma_00[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos_00, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe_00[: , 0], dos_qe_00[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Snapshot 1:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define energy bin\n", - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0])*0.5\n", - "print(ewidth)\n", - "# Define smearing\n", - "ra_sigma_01 = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "ra_en_01 = np.linspace(dos_qe_01[0, 0], dos_qe_01[-1, 0], int((dos_qe_01[-1, 0]-dos_qe_01[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma_01)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enumFromDOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_ebandFromDOS(k_weights_qe_01, ra_en_01 , eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_en_01[1]-ra_en_01[0])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot0/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot0/Al.scf.pw deleted file mode 100644 index 830c9337c..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot0/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.57477164 0.63046187 0.21656476 -Al 0.85248017 0.44389598 0.67239040 -Al 0.03994941 0.64118785 0.79236078 -Al 0.25274132 0.88644851 0.87652872 -Al 0.31882745 0.66279089 0.04567437 -Al 0.44155915 0.11244582 0.02249422 -Al 0.51446954 0.62305476 0.50278527 -Al 0.15152081 0.74260921 0.28712404 -Al 0.11776733 0.84363764 0.59709204 -Al 0.84642794 0.08546095 0.23319279 -Al 0.81380679 0.05564631 0.91033719 -Al 0.32176613 0.29129213 0.84724466 -Al 0.05601237 0.32653343 0.16438889 -Al 0.71827413 0.46810126 0.80967370 -Al 0.51739646 0.08152952 0.31785518 -Al 0.50878305 0.46737826 0.19365655 -Al 0.14952101 0.96434756 0.44292303 -Al 0.65162797 0.93927828 0.50954606 -Al 0.82634918 0.55013184 0.51358700 -Al 0.07930174 0.41263684 0.42643924 -Al 0.99006669 0.94441834 0.49791326 -Al 0.65637720 0.05893206 0.23389922 -Al 0.31356810 0.26785295 0.39587215 -Al 0.33053887 0.49114649 0.12280239 -Al 0.63215913 0.24989962 0.06263221 -Al 0.04905748 0.60972745 0.24290518 -Al 0.46379650 0.82787777 0.35694231 -Al 0.85876047 0.68664759 0.62039542 -Al 0.34465316 0.19108192 0.71703178 -Al 0.11834227 0.69302326 0.50416952 -Al 0.17838347 0.92586121 0.73359803 -Al 0.68167192 0.66839852 0.47622151 -Al 0.53030268 0.44532334 0.50351956 -Al 0.04111442 0.76347762 0.88627482 -Al 0.04005202 0.09693783 0.47036815 -Al 0.37513829 0.86005516 0.51627308 -Al 0.92460929 0.99460031 0.71067025 -Al 0.23061726 0.92307000 0.29958371 -Al 0.42000948 0.60620748 0.17988676 -Al 0.79491900 0.46700714 0.34964560 -Al 0.20631468 0.17877136 0.79668803 -Al 0.94637106 0.93368940 0.23448380 -Al 0.57486570 0.34475004 0.88809522 -Al 0.10558037 0.36031436 0.00280131 -Al 0.57390087 0.56995109 0.64729707 -Al 0.49723943 0.84933765 0.61363830 -Al 0.56376837 0.54502414 0.35990151 -Al 0.47505059 0.71602232 0.92436958 -Al 0.85316356 0.59988063 0.75216097 -Al 0.09251854 0.80060933 0.09235451 -Al 0.42737112 0.41873013 0.83309613 -Al 0.75869758 0.27337016 0.62274950 -Al 0.68028835 0.50764119 0.21145512 -Al 0.16606015 0.35761965 0.28880424 -Al 0.78446744 0.29752156 0.07131244 -Al 0.56567174 0.79115725 0.47561601 -Al 0.79736467 0.39908799 0.20967568 -Al 0.25163000 0.62587285 0.39263331 -Al 0.38784515 0.80860018 0.02163971 -Al 0.78388035 0.94598426 0.31127474 -Al 0.35089955 0.83324121 0.72653423 -Al 0.85680578 0.06046498 0.50904651 -Al 0.25258043 0.44825100 0.58037136 -Al 0.67683022 0.74664960 0.09633878 -Al 0.91583468 0.66197358 0.89481724 -Al 0.34698132 0.97754843 0.95291736 -Al 0.95704028 0.77428193 0.50365437 -Al 0.13576755 0.64027295 0.12348984 -Al 0.92115170 0.02785762 0.36321250 -Al 0.24794140 0.46017602 0.40606404 -Al 0.82832438 0.41388068 0.94758371 -Al 0.67495001 0.99577311 0.95515150 -Al 0.56418361 0.82323880 0.19664745 -Al 0.85243943 0.14579451 0.08195693 -Al 0.20375538 0.51227089 0.01288841 -Al 0.48452378 0.26562796 0.77776134 -Al 0.13725499 0.18735720 0.60582032 -Al 0.85251564 0.80181864 0.15221907 -Al 0.34580983 0.94525589 0.13406721 -Al 0.18984827 0.32408808 0.49049804 -Al 0.69531010 0.43372872 0.63808864 -Al 0.36588610 0.38026297 0.49869006 -Al 0.68115429 0.41546501 0.00707650 -Al 0.03458838 0.25908053 0.51043115 -Al 0.62403475 0.73051286 0.61591876 -Al 0.21478391 0.36476340 0.12271602 -Al 0.79403931 0.50020230 0.08278029 -Al 0.22566272 0.09502195 0.49604431 -Al 0.74166866 0.16589241 0.80873795 -Al 0.45394228 0.26112631 0.96350354 -Al 0.31019964 0.65836171 0.71688422 -Al 0.33429809 0.12208071 0.87836067 -Al 0.96002590 0.67036782 0.11632246 -Al 0.59212977 0.17069976 0.89939107 -Al 0.91512733 0.53096635 0.19839054 -Al 0.38729330 0.05069505 0.58216582 -Al 0.56385928 0.04790556 0.60919640 -Al 0.10453300 0.36554379 0.62321778 -Al 0.30088270 0.23512435 0.55899494 -Al 0.25326962 0.60216496 0.56426269 -Al 0.65468898 0.39080680 0.38702457 -Al 0.56567643 0.33214719 0.62481022 -Al 0.60576373 0.06248460 0.08126760 -Al 0.79858968 0.86611816 0.99357432 -Al 0.93825536 0.34367553 0.38713272 -Al 0.07969002 0.63608811 0.98056435 -Al 0.50210284 0.93808560 0.73766799 -Al 0.22892307 0.90292697 0.02965359 -Al 0.34848137 0.36350975 0.21896478 -Al 0.09610446 0.01033057 0.61319428 -Al 0.19208453 0.75868136 0.96019784 -Al 0.07198867 0.03197409 0.30770502 -Al 0.28521992 0.09468288 0.04164588 -Al 0.98907478 0.09422530 0.16352079 -Al 0.79161402 0.90311614 0.79617426 -Al 0.92889007 0.27793636 0.66411451 -Al 0.12496822 0.17096487 0.08626692 -Al 0.53795382 0.74763911 0.76071518 -Al 0.63810914 0.83309434 0.84302156 -Al 0.91319573 0.76074678 0.77070111 -Al 0.15216765 0.47687341 0.73970523 -Al 0.98914627 0.53992374 0.66422157 -Al 0.04190898 0.21873614 0.74849454 -Al 0.92011594 0.24176890 0.21063159 -Al 0.06820983 0.04809178 0.77844102 -Al 0.02282025 0.73049101 0.63797392 -Al 0.41188163 0.53284316 0.59491923 -Al 0.33950050 0.37088705 0.98845088 -Al 0.96712101 0.39316968 0.55348956 -Al 0.99246003 0.33166675 0.89520231 -Al 0.37904167 0.53113108 0.43832993 -Al 0.57387900 0.19384208 0.18801655 -Al 0.40010152 0.77852532 0.19169822 -Al 0.90624905 0.85718742 0.64316828 -Al 0.51882395 0.02056504 0.90659939 -Al 0.75649193 0.82178980 0.56871194 -Al 0.79990448 0.14287460 0.38692067 -Al 0.46289384 0.19863650 0.61071091 -Al 0.32680942 0.72970852 0.86542329 -Al 0.46787130 0.23934032 0.30459802 -Al 0.40322483 0.96226153 0.29442843 -Al 0.49317970 0.97752238 0.48552292 -Al 0.38849268 0.12869386 0.44586290 -Al 0.61424586 0.91993618 0.31159921 -Al 0.64488923 0.61123791 0.78755290 -Al 0.71645472 0.14100602 0.00895767 -Al 0.83480854 0.90797286 0.48113649 -Al 0.43545585 0.68297895 0.64851932 -Al 0.51100487 0.38187483 0.03733030 -Al 0.14792083 0.62570049 0.68063492 -Al 0.65205720 0.26988686 0.50380153 -Al 0.26860611 0.77081156 0.59895433 -Al 0.79766166 0.01096405 0.09068293 -Al 0.72381713 0.77788315 0.25375002 -Al 0.73645324 0.18886282 0.17858114 -Al 0.07844142 0.91301161 0.95242993 -Al 0.50658003 0.70758450 0.09747765 -Al 0.88440572 0.84348175 0.35270295 -Al 0.01544908 0.39187033 0.76117522 -Al 0.15025824 0.31719674 0.82911584 -Al 0.40362847 0.10683642 0.19282651 -Al 0.75042789 0.75396697 0.71739746 -Al 0.64490698 0.36321380 0.15781509 -Al 0.62441637 0.23286516 0.34841356 -Al 0.24890645 0.80974074 0.15902473 -Al 0.33157553 0.99253644 0.79946028 -Al 0.77248738 0.74608928 0.87878425 -Al 0.69777509 0.91014208 0.16083279 -Al 0.78644455 0.96741980 0.63556087 -Al 0.79375981 0.29674135 0.34248058 -Al 0.86267370 0.24113317 0.94533714 -Al 0.11216486 0.19716697 0.92735820 -Al 0.67644664 0.50532373 0.48856786 -Al 0.36600658 0.70540228 0.47528118 -Al 0.09969146 0.20522191 0.24361755 -Al 0.10218608 0.52021205 0.55960698 -Al 0.89125039 0.68865405 0.26215014 -Al 0.00993457 0.42710892 0.28317024 -Al 0.42180334 0.25920806 0.10998547 -Al 0.30405551 0.77899960 0.31635055 -Al 0.23911474 0.32629455 0.69621831 -Al 0.21993414 0.60131706 0.85606277 -Al 0.24265884 0.95084729 0.57794296 -Al 0.29798133 0.09815019 0.32138813 -Al 0.77870517 0.64379785 0.16855570 -Al 0.15603381 0.20080671 0.38897358 -Al 0.50941849 0.97824886 0.18106830 -Al 0.64160541 0.02725315 0.77289387 -Al 0.26503471 0.23472643 0.00216269 -Al 0.25990925 0.63982250 0.22405250 -Al 0.91979693 0.39301929 0.09735002 -Al 0.82037667 0.13992412 0.67933857 -Al 0.91929726 0.54492381 0.36314152 -Al 0.42652713 0.65182358 0.33402965 -Al 0.65965991 0.30717155 0.75270435 -Al 0.91297938 0.12885055 0.81947808 -Al 0.33112911 0.50651628 0.28910964 -Al 0.84943967 0.31123643 0.80234733 -Al 0.96006486 0.93418825 0.06819968 -Al 0.46004333 0.86513309 0.88422059 -Al 0.71365538 0.82537224 0.39996589 -Al 0.21640511 0.04071447 0.19095136 -Al 0.56101875 0.45350906 0.74869482 -Al 0.27147639 0.22498283 0.23917605 -Al 0.83227982 0.69662660 0.42650862 -Al 0.39776163 0.36100502 0.64864653 -Al 0.72467409 0.62276093 0.33650332 -Al 0.09057410 0.56700069 0.39052666 -Al 0.70007290 0.13235864 0.56393670 -Al 0.02249321 0.70221147 0.35745918 -Al 0.93506140 0.94944439 0.86528222 -Al 0.47575339 0.93450507 0.03993958 -Al 0.96505251 0.17402962 0.34921094 -Al 0.08439368 0.50313326 0.90196749 -Al 0.58072297 0.52001932 0.89810992 -Al 0.80398364 0.37480349 0.50862377 -Al 0.61140405 0.16284712 0.70590063 -Al 0.60534317 0.85375105 0.00797941 -Al 0.45883895 0.42324755 0.35062021 -Al 0.46171080 0.55530870 0.03526843 -Al 0.05909061 0.84493683 0.39319878 -Al 0.63464478 0.68710957 0.96255084 -Al 0.90965645 0.48133760 0.83469803 -Al 0.97791299 0.08543923 0.97769198 -Al 0.81196413 0.68793715 0.02401677 -Al 0.92779797 0.78669985 0.98307004 -Al 0.88912523 0.22311764 0.51941204 -Al 0.98675091 0.11832256 0.62427098 -Al 0.32793154 0.50381155 0.72140048 -Al 0.66104307 0.04557555 0.39388302 -Al 0.16695435 0.50052819 0.21358574 -Al 0.48792149 0.28892388 0.46614692 -Al 0.18465104 0.03622256 0.89037000 -Al 0.32858795 0.97321493 0.42648167 -Al 0.59622194 0.73632289 0.32901421 -Al 0.63077579 0.55381811 0.05615386 -Al 0.46184678 0.58770006 0.78886099 -Al 0.97862865 0.23819162 0.06653690 -Al 0.36855172 0.55515890 0.92537911 -Al 0.97867034 0.60915028 0.51936234 -Al 0.20407144 0.80838614 0.45051253 -Al 0.25551299 0.43070882 0.86139082 -Al 0.55475571 0.14345541 0.47190679 -Al 0.76981765 0.57042268 0.92746538 -Al 0.71723781 0.29339095 0.89804963 -Al 0.10421405 0.91959816 0.18230576 -Al 0.93541500 0.53055606 0.98469651 -Al 0.02783327 0.87507401 0.75544200 -Al 0.17238518 0.75312988 0.77720857 -Al 0.47043815 0.10077689 0.75912776 -Al 0.01709523 0.78643129 0.22208659 -Al 0.64077734 0.88664330 0.68764304 -Al 0.72353341 0.61148059 0.64968068 -Al 0.24784782 0.06758699 0.67191406 -Al 0.04259226 0.50316477 0.10478923 -Al 0.10496891 0.02784405 0.05259849 diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot1/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot1/Al.scf.pw deleted file mode 100644 index 73eeb903f..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot1/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.62108581 0.64054929 0.21771043 -Al 0.83291078 0.44541570 0.66671615 -Al 0.02631386 0.61955137 0.78724707 -Al 0.27217058 0.88824020 0.88897111 -Al 0.34215281 0.64502695 0.03923128 -Al 0.46776104 0.12527433 0.07375344 -Al 0.54389706 0.64185463 0.46557682 -Al 0.16353054 0.76477892 0.23643026 -Al 0.12764435 0.87098716 0.57697039 -Al 0.88332670 0.10489691 0.26906817 -Al 0.84968378 0.98328601 0.94631548 -Al 0.33783950 0.30774924 0.84222685 -Al 0.10433379 0.35347123 0.16866283 -Al 0.71283370 0.45953383 0.78284027 -Al 0.46721816 0.06700196 0.33920024 -Al 0.50468454 0.45747278 0.17292427 -Al 0.11178981 0.96569966 0.44760401 -Al 0.68304449 0.97206547 0.46365167 -Al 0.82413381 0.53298289 0.52393630 -Al 0.07353224 0.34860860 0.41369435 -Al 0.98430228 0.95071125 0.60134460 -Al 0.73027445 0.04996070 0.16915048 -Al 0.32989219 0.27050096 0.37085113 -Al 0.35435035 0.49969171 0.12329664 -Al 0.61474621 0.22222238 0.06674680 -Al 0.05229603 0.59951027 0.24098251 -Al 0.47393874 0.80465902 0.39436573 -Al 0.84335088 0.67254999 0.62033416 -Al 0.37035797 0.17093772 0.73467519 -Al 0.14885556 0.69702020 0.50962572 -Al 0.18757527 0.93785112 0.76121441 -Al 0.70948197 0.66569975 0.49119417 -Al 0.52083894 0.42725531 0.50902587 -Al 0.05983025 0.79215367 0.85971163 -Al 0.01197121 0.09071888 0.47348885 -Al 0.34929195 0.84249674 0.50181846 -Al 0.90753173 0.03421916 0.73474865 -Al 0.25543497 0.92379574 0.28321770 -Al 0.47190534 0.61447019 0.16420777 -Al 0.77406881 0.44011630 0.35828740 -Al 0.20996399 0.20401427 0.81000389 -Al 0.94699717 0.95041329 0.21273335 -Al 0.58591604 0.37644514 0.91171571 -Al 0.05970940 0.36493387 0.00701442 -Al 0.54542817 0.54995238 0.59814255 -Al 0.47400902 0.84208232 0.59629371 -Al 0.53444494 0.51974005 0.32300725 -Al 0.48532211 0.67887486 0.88988820 -Al 0.83214198 0.58576721 0.75057875 -Al 0.08536208 0.82443726 0.04666791 -Al 0.44627532 0.44800916 0.84506562 -Al 0.74542801 0.28544169 0.64327078 -Al 0.67981199 0.48377363 0.20260465 -Al 0.20507384 0.36126801 0.33150372 -Al 0.78197092 0.28204411 0.08274986 -Al 0.59562130 0.80828940 0.49362247 -Al 0.81047617 0.36890542 0.22580180 -Al 0.18909018 0.64254856 0.34320030 -Al 0.35417481 0.82115820 0.01602270 -Al 0.78285070 0.94791713 0.31739830 -Al 0.35074287 0.83974540 0.72970552 -Al 0.83142401 0.03304571 0.52922412 -Al 0.24578633 0.45492951 0.59769877 -Al 0.65285019 0.74642030 0.10254922 -Al 0.93251953 0.63717668 0.91105943 -Al 0.37673334 0.98265122 0.96829478 -Al 0.00894253 0.80915403 0.48972751 -Al 0.11180212 0.68315701 0.11532893 -Al 0.93471066 0.97192956 0.39217134 -Al 0.22211061 0.49687765 0.42270738 -Al 0.75012143 0.41664461 0.93860648 -Al 0.68447103 0.98710860 0.92863003 -Al 0.53764527 0.77970294 0.21613632 -Al 0.86237836 0.13453489 0.10927819 -Al 0.20185618 0.57099749 0.04989245 -Al 0.48363787 0.26610135 0.81044003 -Al 0.15186446 0.18379008 0.60927833 -Al 0.84201233 0.79915884 0.12889553 -Al 0.34756681 0.01176107 0.17682145 -Al 0.20914305 0.30737013 0.49085788 -Al 0.67238933 0.43963097 0.59559968 -Al 0.35515725 0.37336073 0.51505990 -Al 0.62361772 0.40440904 0.07619316 -Al 0.00661597 0.25483175 0.52867065 -Al 0.59286121 0.71697868 0.61693698 -Al 0.24045197 0.39185008 0.08088622 -Al 0.78486887 0.49041038 0.07504823 -Al 0.22045665 0.10520203 0.48488285 -Al 0.73638490 0.11089319 0.83058605 -Al 0.47780703 0.26379665 0.97971244 -Al 0.34509515 0.64427726 0.73973158 -Al 0.39642584 0.14286614 0.89444349 -Al 0.95722566 0.67806959 0.06516717 -Al 0.58292489 0.16179910 0.90273659 -Al 0.89518657 0.51572245 0.21567843 -Al 0.40298402 0.01339664 0.59515333 -Al 0.56975639 0.01756603 0.59748122 -Al 0.09871082 0.34656382 0.59327940 -Al 0.32760968 0.22892564 0.59144442 -Al 0.26843823 0.60324546 0.55698987 -Al 0.59964510 0.38267912 0.38152437 -Al 0.57825439 0.29371542 0.64752101 -Al 0.60070159 0.04253796 0.06390030 -Al 0.74762777 0.84441796 0.98659913 -Al 0.91821039 0.35020570 0.37850700 -Al 0.08219912 0.66313462 0.96069564 -Al 0.48167849 0.93858924 0.73167282 -Al 0.24058679 0.96411388 0.03558089 -Al 0.34319364 0.35944277 0.22240570 -Al 0.12923950 0.02565323 0.60779287 -Al 0.20576023 0.75638458 0.95056796 -Al 0.07497843 0.04637210 0.31543248 -Al 0.30502832 0.12753752 0.03350405 -Al 0.01492240 0.08787266 0.14870321 -Al 0.80682819 0.89173462 0.80733484 -Al 0.91597906 0.28726329 0.67839686 -Al 0.14223667 0.21450574 0.08581469 -Al 0.50130681 0.76091878 0.75109153 -Al 0.62960468 0.85353535 0.83983330 -Al 0.93586034 0.74855810 0.77554407 -Al 0.14004230 0.49321540 0.75149219 -Al 0.95884008 0.54953030 0.67642352 -Al 0.05124769 0.23896242 0.76040441 -Al 0.91154887 0.24120648 0.21697956 -Al 0.08681299 0.07483685 0.77530806 -Al 0.06043411 0.72608530 0.63681672 -Al 0.39202400 0.49708287 0.60632040 -Al 0.41329826 0.40448743 0.01888096 -Al 0.96746934 0.43983702 0.51643000 -Al 0.93927153 0.33254998 0.89050645 -Al 0.39213106 0.54738539 0.45161588 -Al 0.56770597 0.15345694 0.21426193 -Al 0.39631546 0.79042534 0.17195863 -Al 0.86500793 0.84191625 0.67083573 -Al 0.51931762 0.01465624 0.92230576 -Al 0.74086530 0.80882362 0.56629875 -Al 0.76329834 0.10386745 0.39640256 -Al 0.49746047 0.17753970 0.60715492 -Al 0.33487403 0.72685812 0.87344259 -Al 0.48535201 0.28604982 0.30399438 -Al 0.43173421 0.91103684 0.28976779 -Al 0.51520089 0.93626805 0.46150447 -Al 0.38306187 0.14074309 0.46452298 -Al 0.60824538 0.87964575 0.33153387 -Al 0.61914856 0.66465746 0.79715259 -Al 0.71706044 0.12501043 0.98758864 -Al 0.86701725 0.88279877 0.50225596 -Al 0.40753992 0.70185386 0.59135321 -Al 0.49515300 0.28646290 0.15044068 -Al 0.17343401 0.63877765 0.70612133 -Al 0.66234521 0.27762483 0.50338706 -Al 0.24334701 0.75396338 0.61899310 -Al 0.83415645 0.94659398 0.10624057 -Al 0.72456858 0.78590195 0.25423966 -Al 0.74270810 0.18993641 0.22983375 -Al 0.12189429 0.93473560 0.93029157 -Al 0.50230340 0.71700250 0.04005277 -Al 0.90069673 0.81686147 0.32798932 -Al 0.01439921 0.40385680 0.72507715 -Al 0.14726886 0.36313798 0.85439998 -Al 0.39281495 0.18444201 0.23289209 -Al 0.73882543 0.75165513 0.72369933 -Al 0.64352216 0.31101485 0.21345625 -Al 0.61375903 0.19483124 0.36964126 -Al 0.23395303 0.81475404 0.11327353 -Al 0.35028507 0.00296589 0.78987603 -Al 0.78911242 0.73475872 0.86066437 -Al 0.65192858 0.89803728 0.14203202 -Al 0.75051263 0.99522843 0.65386191 -Al 0.76022681 0.28281816 0.36806117 -Al 0.84657953 0.20647752 0.95416932 -Al 0.08601102 0.20866154 0.90856527 -Al 0.66467567 0.51388873 0.44757924 -Al 0.31273250 0.70198866 0.45334566 -Al 0.07886093 0.20840252 0.23707782 -Al 0.10994505 0.52203555 0.55636925 -Al 0.89400507 0.65704805 0.26968233 -Al 0.02322961 0.43907581 0.27747353 -Al 0.33784952 0.26112874 0.09493391 -Al 0.31878910 0.78819615 0.31782494 -Al 0.22743011 0.31345241 0.71435082 -Al 0.20497997 0.60102316 0.87044594 -Al 0.25628518 0.94228232 0.59453422 -Al 0.28101473 0.09361818 0.33300714 -Al 0.77574934 0.63917399 0.16442398 -Al 0.14452694 0.20474115 0.39161117 -Al 0.53234308 0.99926071 0.20208819 -Al 0.63378491 0.99903361 0.77586072 -Al 0.23550670 0.28836264 0.96073115 -Al 0.29369618 0.66519510 0.20811408 -Al 0.94272333 0.39507321 0.13707073 -Al 0.81896691 0.13715820 0.67504494 -Al 0.90757578 0.54416971 0.38833380 -Al 0.42365839 0.66576657 0.32648295 -Al 0.63906596 0.29587480 0.79165633 -Al 0.92445285 0.17432372 0.81665280 -Al 0.32445922 0.52053883 0.30147675 -Al 0.80242064 0.30556526 0.79765086 -Al 0.98352329 0.95397209 0.02992284 -Al 0.46168605 0.85457732 0.89338350 -Al 0.74750146 0.81973142 0.40951112 -Al 0.18680816 0.08649793 0.16117706 -Al 0.54306534 0.43687518 0.71205279 -Al 0.24477140 0.22984340 0.24393662 -Al 0.85368492 0.69561215 0.43472736 -Al 0.39258827 0.34960603 0.68389374 -Al 0.73221268 0.60467499 0.33884472 -Al 0.06616104 0.54858473 0.40171580 -Al 0.70368449 0.11973518 0.55734597 -Al 0.03844527 0.71744260 0.35284579 -Al 0.97012372 0.94077687 0.84673214 -Al 0.47151588 0.94024276 0.08249191 -Al 0.97473010 0.18583872 0.36372816 -Al 0.06857245 0.50859058 0.92758425 -Al 0.59790018 0.53174843 0.88691581 -Al 0.80745861 0.37806373 0.50424768 -Al 0.64220558 0.14539471 0.70949592 -Al 0.58777596 0.86835463 0.00105926 -Al 0.41653639 0.41799513 0.37155293 -Al 0.49739037 0.54631390 0.00190262 -Al 0.06604427 0.86929638 0.32488679 -Al 0.64284842 0.71117348 0.94505155 -Al 0.91344810 0.48448815 0.83538811 -Al 0.97440029 0.09542063 0.94315710 -Al 0.81429142 0.69038477 0.01080191 -Al 0.91069891 0.82049739 0.93548689 -Al 0.84839205 0.20277490 0.53899341 -Al 0.99145195 0.13425309 0.63944509 -Al 0.30048932 0.48616708 0.75459260 -Al 0.64043008 0.04407971 0.31923162 -Al 0.18913884 0.50901438 0.20370389 -Al 0.47797093 0.27077048 0.47333010 -Al 0.22648964 0.06909235 0.88501336 -Al 0.33923478 0.98060433 0.43153221 -Al 0.60442924 0.71556781 0.35427854 -Al 0.66460179 0.58292982 0.04251515 -Al 0.48874852 0.58288300 0.75034825 -Al 0.97270806 0.23825617 0.03988598 -Al 0.37221880 0.57368795 0.89702246 -Al 0.99064983 0.62524755 0.51357068 -Al 0.19558560 0.81094938 0.39352152 -Al 0.27006344 0.45471270 0.91188303 -Al 0.55821711 0.09725552 0.47100498 -Al 0.76377880 0.58071576 0.89375485 -Al 0.71252063 0.27369364 0.93685153 -Al 0.12050162 0.91889284 0.17249126 -Al 0.91489163 0.46147608 0.98941428 -Al 0.02718933 0.87312592 0.72057604 -Al 0.20671734 0.76885833 0.77970135 -Al 0.49366876 0.10341861 0.76371770 -Al 0.00600166 0.78443680 0.18002335 -Al 0.62224981 0.86429787 0.67252083 -Al 0.69585498 0.59298076 0.66237448 -Al 0.26711828 0.08893515 0.66650479 -Al 0.05242168 0.52093345 0.09240899 -Al 0.11795383 0.06836059 0.01163851 diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot10/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot10/Al.scf.pw deleted file mode 100644 index b313879f5..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot10/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.00518829 0.00356501 0.98791897 -Al 0.00222191 0.13453940 0.11763345 -Al 0.12110347 0.99364921 0.12494853 -Al 0.11818861 0.12588069 0.99073258 -Al 0.00845727 0.00205675 0.25908128 -Al 0.03211246 0.12003628 0.36844451 -Al 0.12686519 0.98943532 0.36074737 -Al 0.14291592 0.12438468 0.23972361 -Al 0.00223606 0.98994139 0.50673488 -Al 0.99677299 0.13407831 0.62773526 -Al 0.11611898 0.99373014 0.63843963 -Al 0.12852260 0.13550884 0.50441864 -Al 0.00228543 0.99623742 0.75524920 -Al 0.97645393 0.12987079 0.87426509 -Al 0.12794806 0.01294677 0.87049605 -Al 0.12171736 0.12628441 0.74555146 -Al 0.99435455 0.23727612 0.99099955 -Al 0.01177951 0.36446420 0.11012020 -Al 0.13094126 0.23063292 0.11619068 -Al 0.13264832 0.35959784 0.98560643 -Al 0.01947177 0.24042304 0.24484141 -Al 0.99582073 0.37421412 0.36593777 -Al 0.13140224 0.24949750 0.37985388 -Al 0.12685522 0.36873851 0.23472870 -Al 0.00601142 0.25793001 0.51809184 -Al 0.00473613 0.38447453 0.62727243 -Al 0.12827519 0.25091026 0.63552511 -Al 0.11886290 0.38534167 0.49782246 -Al 0.99938144 0.25371900 0.75535161 -Al 0.99476132 0.36540992 0.86831817 -Al 0.12586684 0.23790194 0.87561347 -Al 0.11939885 0.36792742 0.75142379 -Al 0.99976850 0.49873944 0.98581816 -Al 0.98696743 0.63309127 0.11912346 -Al 0.11773085 0.49504140 0.11233206 -Al 0.12212522 0.62669157 0.98913158 -Al 0.99654304 0.48977098 0.23547843 -Al 0.98703335 0.63256726 0.37480575 -Al 0.10439504 0.50224306 0.37798465 -Al 0.12461175 0.61474723 0.24535347 -Al 0.98528942 0.50551753 0.49926364 -Al 0.00592043 0.60975040 0.62800791 -Al 0.13733296 0.48418419 0.62105260 -Al 0.11669745 0.62690148 0.49729174 -Al 0.99887305 0.50855326 0.76314694 -Al 0.01540105 0.63263269 0.87462249 -Al 0.13630515 0.49084700 0.89517306 -Al 0.12197448 0.63003525 0.75108286 -Al 0.99054590 0.75082041 0.99764465 -Al 0.98367196 0.87147752 0.11361634 -Al 0.11526503 0.74334806 0.11959483 -Al 0.12216203 0.87677470 0.00828756 -Al 0.00610748 0.74356303 0.24779213 -Al 0.99858631 0.87019306 0.38682102 -Al 0.10916246 0.73487762 0.38316910 -Al 0.13460407 0.85444406 0.25203331 -Al 0.99413431 0.74583300 0.50404073 -Al 0.98441209 0.87117792 0.62176477 -Al 0.10056616 0.74916145 0.62606709 -Al 0.12780142 0.88141278 0.49115094 -Al 0.97763798 0.74174636 0.74299466 -Al 0.99834243 0.88873388 0.89168128 -Al 0.14236315 0.77016294 0.88557120 -Al 0.10198680 0.86911057 0.74124561 -Al 0.25412647 0.99364625 0.00700858 -Al 0.25005094 0.11341867 0.13189214 -Al 0.38224266 0.00280935 0.12256209 -Al 0.38861826 0.11857598 0.99269867 -Al 0.25249830 0.00026697 0.26702078 -Al 0.24554726 0.11025190 0.38482362 -Al 0.38422919 0.01072749 0.37157606 -Al 0.37620179 0.13635528 0.25337487 -Al 0.25271010 0.99930598 0.50041773 -Al 0.25071085 0.12963214 0.62003056 -Al 0.37550421 0.01092590 0.61489455 -Al 0.37363617 0.14091220 0.50453049 -Al 0.25901142 0.99956673 0.74847157 -Al 0.26039063 0.11403604 0.87808276 -Al 0.38512240 0.98453169 0.87572573 -Al 0.36013003 0.11635579 0.77463764 -Al 0.26154579 0.22818761 0.01214907 -Al 0.23510920 0.37273360 0.12282410 -Al 0.39075780 0.24889600 0.12882660 -Al 0.38672315 0.36283989 0.00387710 -Al 0.25185041 0.25512451 0.25588275 -Al 0.24602127 0.38415989 0.35125722 -Al 0.37444317 0.26156650 0.36932558 -Al 0.37918793 0.36482048 0.23694650 -Al 0.25038777 0.25712797 0.49289437 -Al 0.25927125 0.36028126 0.64700610 -Al 0.36010540 0.24629383 0.62448929 -Al 0.36760419 0.37804499 0.50837011 -Al 0.24386491 0.25414291 0.76403944 -Al 0.25694999 0.37239108 0.88647054 -Al 0.38803805 0.25819558 0.86885061 -Al 0.39875931 0.37657452 0.76023057 -Al 0.26236759 0.49678644 0.01263916 -Al 0.24296175 0.63257392 0.12702601 -Al 0.37985377 0.49944601 0.12561102 -Al 0.36620870 0.61948153 0.00919132 -Al 0.26151482 0.50790380 0.24077530 -Al 0.25027249 0.61340420 0.36478022 -Al 0.37887910 0.47991548 0.35522089 -Al 0.38928607 0.61064503 0.24901158 -Al 0.26196637 0.49980316 0.50541479 -Al 0.24220702 0.62546741 0.61312369 -Al 0.36882949 0.49848132 0.65307592 -Al 0.35549552 0.61687072 0.50303060 -Al 0.25804498 0.47180014 0.76489766 -Al 0.24449073 0.61928638 0.87576275 -Al 0.38262823 0.50651159 0.87573934 -Al 0.35864801 0.64705572 0.74361030 -Al 0.25183481 0.75219373 0.00128730 -Al 0.24417962 0.88721153 0.12340070 -Al 0.39359309 0.75669881 0.13328541 -Al 0.37901687 0.87201637 0.02031994 -Al 0.27229927 0.75284596 0.25265201 -Al 0.25879781 0.85876946 0.38570484 -Al 0.38899532 0.75458685 0.37681566 -Al 0.37776265 0.89104110 0.25287808 -Al 0.23924190 0.73593885 0.49744398 -Al 0.24890469 0.86809897 0.60609107 -Al 0.36098645 0.75601087 0.61527487 -Al 0.38031625 0.87403201 0.48513761 -Al 0.23905734 0.76431565 0.74743325 -Al 0.24459003 0.88295081 0.87267617 -Al 0.35899675 0.75828211 0.87990673 -Al 0.36496814 0.87423404 0.74022344 -Al 0.50646206 0.01326787 0.99902447 -Al 0.50919701 0.13246851 0.11985017 -Al 0.63718857 0.00496138 0.11217757 -Al 0.62755815 0.12266421 0.97788932 -Al 0.50100880 0.00946745 0.24271122 -Al 0.50912531 0.12269642 0.38642596 -Al 0.62691462 0.00294036 0.37688534 -Al 0.64122728 0.11313385 0.25155305 -Al 0.50493980 0.00476837 0.50152382 -Al 0.50666445 0.12715326 0.62369881 -Al 0.63950995 0.99831468 0.61956463 -Al 0.63171800 0.13181365 0.49787812 -Al 0.48711068 0.99745626 0.74674203 -Al 0.51551971 0.11529596 0.86247870 -Al 0.63926115 0.99948041 0.83249027 -Al 0.65355259 0.12857630 0.72329032 -Al 0.50353759 0.25395184 0.99970510 -Al 0.51239178 0.36270782 0.13159800 -Al 0.62853335 0.24426968 0.14009652 -Al 0.63549813 0.35806940 0.99337420 -Al 0.52230425 0.23543148 0.26174737 -Al 0.50170223 0.37243976 0.35654180 -Al 0.64051205 0.25628921 0.37658009 -Al 0.63219784 0.37391496 0.25652977 -Al 0.49778324 0.25330358 0.49919555 -Al 0.49726361 0.37147631 0.62349847 -Al 0.62454774 0.26022474 0.63254804 -Al 0.61848909 0.36887689 0.49727756 -Al 0.49157160 0.22452425 0.74397457 -Al 0.48780242 0.37291044 0.89286602 -Al 0.62753123 0.24958369 0.87617470 -Al 0.60551364 0.37487263 0.76231912 -Al 0.50265201 0.50772668 0.99888090 -Al 0.51785974 0.62680863 0.13766941 -Al 0.63531903 0.50271490 0.13719287 -Al 0.63676918 0.63791571 0.99375411 -Al 0.50031197 0.48873671 0.23622600 -Al 0.49005905 0.61871216 0.37660480 -Al 0.61792792 0.48141513 0.38003717 -Al 0.63151472 0.61483726 0.26204703 -Al 0.48053458 0.48757111 0.48399634 -Al 0.46912258 0.63601034 0.62403736 -Al 0.59490169 0.50344733 0.62638005 -Al 0.60631265 0.62006920 0.50016155 -Al 0.50274258 0.50727498 0.75495920 -Al 0.48843114 0.64839979 0.87688759 -Al 0.61068632 0.50105027 0.89376588 -Al 0.59350719 0.64201122 0.74400251 -Al 0.48571827 0.74015950 0.99883917 -Al 0.50825429 0.89190105 0.11493698 -Al 0.62291624 0.76740233 0.12222527 -Al 0.63055817 0.87012409 0.00245697 -Al 0.51715517 0.73918487 0.25833222 -Al 0.50089424 0.88830769 0.36248813 -Al 0.61900857 0.73850743 0.38419534 -Al 0.61597026 0.88002727 0.24637279 -Al 0.48994594 0.76888379 0.51150148 -Al 0.50263673 0.90334148 0.62590374 -Al 0.60491824 0.75335763 0.62759893 -Al 0.61363884 0.87005923 0.50597812 -Al 0.48354677 0.77955609 0.73455386 -Al 0.51587930 0.89268698 0.89376110 -Al 0.62783566 0.74689666 0.86725500 -Al 0.61031700 0.87714623 0.75589810 -Al 0.75363315 0.99821040 0.99742924 -Al 0.75511863 0.13081842 0.13289225 -Al 0.88763858 0.01192720 0.13221398 -Al 0.86182498 0.13480650 0.00130590 -Al 0.74869069 0.00173981 0.25987278 -Al 0.75479489 0.13289727 0.40002656 -Al 0.87100412 0.00391153 0.38978780 -Al 0.89408860 0.14291965 0.26614553 -Al 0.74902004 0.99895888 0.50510598 -Al 0.75736463 0.13065713 0.60552045 -Al 0.88617425 0.99256774 0.62512125 -Al 0.89069061 0.13165506 0.49588748 -Al 0.76807193 0.98758409 0.73323091 -Al 0.75121839 0.12516642 0.85081313 -Al 0.86129148 0.99329109 0.86965708 -Al 0.86679940 0.12572173 0.74279637 -Al 0.74399052 0.23464508 0.97992181 -Al 0.75097870 0.35395981 0.15206695 -Al 0.87880005 0.24794231 0.12565196 -Al 0.87972692 0.36963332 0.99470781 -Al 0.76816855 0.24427025 0.25322878 -Al 0.76436655 0.37508066 0.37866786 -Al 0.88326190 0.26687911 0.40100156 -Al 0.87683158 0.37609954 0.25526195 -Al 0.74449706 0.27356236 0.50803174 -Al 0.74914496 0.39874807 0.64120002 -Al 0.86983032 0.24354768 0.63031318 -Al 0.87386513 0.38976290 0.51941270 -Al 0.75500396 0.25812057 0.73690540 -Al 0.74653008 0.36639993 0.87144555 -Al 0.87530036 0.25978447 0.86781981 -Al 0.88381855 0.38226607 0.74618072 -Al 0.74789025 0.50109044 0.00066145 -Al 0.76152969 0.63133799 0.11689554 -Al 0.88593821 0.49175395 0.12778569 -Al 0.86409783 0.61844808 0.99333327 -Al 0.74978900 0.50080603 0.24565012 -Al 0.76382742 0.62256071 0.37174165 -Al 0.87121536 0.49749286 0.38186693 -Al 0.88657518 0.62247084 0.25448128 -Al 0.74434534 0.50502028 0.50701912 -Al 0.72929111 0.62292713 0.63136663 -Al 0.86773891 0.51735998 0.64800040 -Al 0.85494407 0.61897276 0.50946640 -Al 0.73582686 0.50159348 0.76010049 -Al 0.74086465 0.62424129 0.87322336 -Al 0.87037120 0.49065063 0.86753762 -Al 0.86031396 0.63244518 0.76916385 -Al 0.74872142 0.75807691 0.98789469 -Al 0.74579462 0.87545768 0.14311744 -Al 0.87255945 0.76965125 0.11316542 -Al 0.85374546 0.87231249 0.00121863 -Al 0.76054771 0.73845794 0.23760014 -Al 0.75059396 0.85783054 0.37700315 -Al 0.88350866 0.75558997 0.36329071 -Al 0.88014712 0.88813051 0.23506911 -Al 0.72977947 0.74121761 0.50357392 -Al 0.75531111 0.88095013 0.61051136 -Al 0.85515073 0.74322600 0.61394923 -Al 0.86454255 0.86961613 0.50275624 -Al 0.74679467 0.75264780 0.73763491 -Al 0.75412808 0.87006055 0.85982851 -Al 0.87671455 0.75534015 0.87914969 -Al 0.87133699 0.86706346 0.74561647 diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot11/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot11/Al.scf.pw deleted file mode 100644 index 34675c1b4..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot11/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.00858289 0.01093749 0.99854894 -Al 0.00650019 0.10646378 0.14261096 -Al 0.11414445 0.99120282 0.13071859 -Al 0.13613163 0.11418453 0.96893017 -Al 0.99188790 0.00290036 0.28155398 -Al 0.01071068 0.12986677 0.38369003 -Al 0.14084471 0.99236998 0.37096713 -Al 0.12161004 0.11119674 0.26652391 -Al 0.01781931 0.99367868 0.48970131 -Al 0.99458495 0.11525955 0.63182212 -Al 0.11556474 0.99458500 0.60825805 -Al 0.13958498 0.12065153 0.49389065 -Al 0.00720192 0.99903777 0.74800024 -Al 0.98924305 0.13490549 0.89024407 -Al 0.13349779 0.99354044 0.84717213 -Al 0.12865504 0.13077759 0.75989174 -Al 0.99643586 0.23944491 0.00512210 -Al 0.00389022 0.39610574 0.11733760 -Al 0.12386092 0.23646580 0.11749215 -Al 0.12569339 0.37838641 0.01508017 -Al 0.00227652 0.24752433 0.25287832 -Al 0.02235238 0.37705521 0.38998160 -Al 0.13150792 0.26278574 0.37005527 -Al 0.13084340 0.36210508 0.24691288 -Al 0.99429545 0.24346983 0.52577720 -Al 0.98994458 0.37286007 0.63688652 -Al 0.13583066 0.25727161 0.61363231 -Al 0.12889933 0.36777235 0.49684355 -Al 0.99712003 0.24133391 0.76229279 -Al 0.00472385 0.36946518 0.87158490 -Al 0.12916835 0.24849073 0.87709119 -Al 0.11691349 0.36586636 0.75506487 -Al 0.00584253 0.49702625 0.00649414 -Al 0.98286828 0.62471811 0.11074647 -Al 0.13295936 0.50479973 0.11622544 -Al 0.12336840 0.62103060 0.00361731 -Al 0.99616524 0.48925375 0.25362513 -Al 0.98117131 0.62644935 0.37136093 -Al 0.12894634 0.50379571 0.37242499 -Al 0.11281094 0.61791522 0.23653922 -Al 0.01808736 0.50293326 0.50861626 -Al 0.00904743 0.61591806 0.62103423 -Al 0.13848768 0.50133681 0.62704074 -Al 0.14125752 0.61723661 0.49711754 -Al 0.99447209 0.50092890 0.73587422 -Al 0.00233139 0.61987218 0.88485758 -Al 0.11423935 0.49978838 0.87062184 -Al 0.13290899 0.61725594 0.74270006 -Al 0.99086456 0.75364660 0.99968861 -Al 0.00398990 0.87229282 0.12787519 -Al 0.12239428 0.75017273 0.12784381 -Al 0.12555114 0.90816791 0.98258663 -Al 0.01049989 0.74713048 0.24369317 -Al 0.01452501 0.86242344 0.36343987 -Al 0.14068372 0.71919916 0.37983031 -Al 0.12732315 0.86545353 0.25547295 -Al 0.00324572 0.73973536 0.49213570 -Al 0.00415696 0.87955716 0.61086809 -Al 0.12238405 0.73452563 0.63076634 -Al 0.12409440 0.87390067 0.49943718 -Al 0.98777456 0.73322840 0.75407881 -Al 0.99646019 0.86583180 0.85498692 -Al 0.13659795 0.76454256 0.86532624 -Al 0.10978263 0.87092221 0.73606175 -Al 0.25915597 0.00401851 0.00187250 -Al 0.24571288 0.13490653 0.12313283 -Al 0.38461535 0.01321989 0.12024588 -Al 0.38254938 0.10881029 0.99932284 -Al 0.23630941 0.00365269 0.23682128 -Al 0.23932729 0.13748136 0.37767376 -Al 0.35175036 0.00299014 0.35462908 -Al 0.38160570 0.11768793 0.24656927 -Al 0.25022772 0.00247378 0.50223552 -Al 0.25290592 0.12804105 0.64129006 -Al 0.35833252 0.00892378 0.61879582 -Al 0.36587948 0.13756262 0.48839728 -Al 0.26255835 0.99810339 0.75801599 -Al 0.25478784 0.11463255 0.86633148 -Al 0.38643670 0.99579132 0.87259852 -Al 0.37406867 0.13033491 0.75869549 -Al 0.25590653 0.22641386 0.99306590 -Al 0.24480256 0.37198323 0.12480935 -Al 0.36307446 0.24728100 0.12855749 -Al 0.36611837 0.37770560 0.98956894 -Al 0.25732328 0.24036596 0.24963263 -Al 0.26178391 0.37436523 0.37213467 -Al 0.39540356 0.25277326 0.36554549 -Al 0.37211418 0.36624633 0.24368251 -Al 0.24998185 0.25956939 0.50866947 -Al 0.25933098 0.38042074 0.63280852 -Al 0.36977365 0.24938293 0.63194413 -Al 0.37611510 0.37176966 0.52143167 -Al 0.25125820 0.26625872 0.75123849 -Al 0.24572735 0.37921961 0.87722562 -Al 0.38001966 0.26265017 0.87915180 -Al 0.38797703 0.38734783 0.75318925 -Al 0.25337644 0.48311489 0.98893756 -Al 0.25082130 0.63030047 0.12522591 -Al 0.36812638 0.50542986 0.11192537 -Al 0.37147702 0.64352610 0.99748713 -Al 0.25482885 0.49279128 0.24426320 -Al 0.26255859 0.61980747 0.35381809 -Al 0.39833472 0.47411286 0.37543666 -Al 0.38601867 0.62823543 0.22622947 -Al 0.28657218 0.49549567 0.52595028 -Al 0.24380946 0.62661418 0.62404858 -Al 0.39373417 0.50706466 0.64301044 -Al 0.37095206 0.62533078 0.48733605 -Al 0.24736526 0.49933268 0.74125274 -Al 0.24761888 0.63431750 0.88196157 -Al 0.37149023 0.51800057 0.87696325 -Al 0.37794096 0.63369203 0.75816843 -Al 0.23836561 0.76056427 0.99477818 -Al 0.24131568 0.89210906 0.11549309 -Al 0.37048120 0.76124854 0.12049514 -Al 0.38519915 0.86810347 0.00567275 -Al 0.25016305 0.75138659 0.23978858 -Al 0.25572040 0.86443513 0.38218184 -Al 0.37122386 0.75221266 0.36822337 -Al 0.37304725 0.88660401 0.24725417 -Al 0.24853807 0.74934332 0.49937981 -Al 0.24578430 0.86783388 0.61230958 -Al 0.36545620 0.75806076 0.62410880 -Al 0.38269084 0.86964335 0.49019401 -Al 0.24754642 0.75355619 0.74245691 -Al 0.25394675 0.88863666 0.88148363 -Al 0.37863264 0.75636537 0.87606615 -Al 0.35761682 0.86440202 0.74521648 -Al 0.51499715 0.00319261 0.00477126 -Al 0.51481261 0.12996220 0.13474526 -Al 0.62158434 0.00614594 0.12215865 -Al 0.65237837 0.12549271 0.00390157 -Al 0.49754806 0.00528446 0.26262522 -Al 0.50287427 0.12470574 0.37188463 -Al 0.61946372 0.98982600 0.38218034 -Al 0.64935763 0.10729665 0.24758591 -Al 0.47551685 0.99956968 0.49901800 -Al 0.50892011 0.13889582 0.61668574 -Al 0.60076090 0.01007511 0.63385797 -Al 0.63091576 0.13976607 0.49362185 -Al 0.49421776 0.01312506 0.75862686 -Al 0.49621059 0.12291397 0.86890150 -Al 0.63934845 0.99916982 0.85049437 -Al 0.61681448 0.14508342 0.73986697 -Al 0.48769740 0.25124783 0.00207689 -Al 0.47463706 0.36641884 0.12184645 -Al 0.62560511 0.23877120 0.14181062 -Al 0.59987624 0.35913576 0.00109698 -Al 0.50793621 0.24051529 0.24970049 -Al 0.50335967 0.35603215 0.38725303 -Al 0.63660326 0.25582457 0.38160068 -Al 0.60783240 0.36222884 0.24609293 -Al 0.51154027 0.25629003 0.51497816 -Al 0.52090502 0.39798657 0.61938646 -Al 0.64120602 0.25487225 0.63557789 -Al 0.63985186 0.37922251 0.51756772 -Al 0.48558201 0.25005398 0.74979241 -Al 0.48305174 0.38493797 0.89300468 -Al 0.60493260 0.24647258 0.86952639 -Al 0.61161918 0.37481564 0.75721499 -Al 0.49465181 0.51702544 0.99192035 -Al 0.49914787 0.63113208 0.11509975 -Al 0.62302427 0.47390439 0.11172027 -Al 0.63016191 0.62362099 0.00625799 -Al 0.49412118 0.49545462 0.22574940 -Al 0.47747692 0.63009549 0.35695734 -Al 0.60810916 0.50761338 0.35978059 -Al 0.59868251 0.62462031 0.24140141 -Al 0.49397117 0.49436373 0.50461690 -Al 0.49527334 0.63575966 0.61335415 -Al 0.62202937 0.52376172 0.61754791 -Al 0.61067026 0.62615954 0.48975529 -Al 0.50378713 0.52486314 0.76214834 -Al 0.50342176 0.64218225 0.89639227 -Al 0.63460995 0.49635123 0.89215000 -Al 0.62306277 0.62243114 0.77040359 -Al 0.49813316 0.75553856 0.01249464 -Al 0.49821260 0.89797411 0.13401262 -Al 0.62674909 0.76314352 0.11415762 -Al 0.64633386 0.88142948 0.99393902 -Al 0.50262788 0.75466934 0.22817995 -Al 0.49695095 0.88053472 0.36735805 -Al 0.60144892 0.74827175 0.35927704 -Al 0.62697231 0.87481939 0.25321199 -Al 0.50976097 0.75616883 0.50449068 -Al 0.47924483 0.88507555 0.63166182 -Al 0.61072067 0.73626637 0.64143886 -Al 0.62405649 0.86250950 0.51229166 -Al 0.49627788 0.75770414 0.74912230 -Al 0.50931543 0.88500510 0.89103730 -Al 0.62093952 0.75937091 0.86356121 -Al 0.61079532 0.88542366 0.75706146 -Al 0.76942928 0.01275478 0.98896792 -Al 0.76900380 0.13833165 0.12755103 -Al 0.88843162 0.00002330 0.11723526 -Al 0.87904013 0.14493043 0.01566621 -Al 0.76299977 0.98949876 0.25726062 -Al 0.75660628 0.13497699 0.40157499 -Al 0.87337804 0.99298996 0.39733808 -Al 0.86509532 0.14084476 0.24611173 -Al 0.72996921 0.01379975 0.51259482 -Al 0.75608860 0.12392179 0.62199785 -Al 0.88836023 0.99588670 0.61441490 -Al 0.87436399 0.11623832 0.50237334 -Al 0.74398167 0.97164587 0.72782530 -Al 0.77313058 0.12980295 0.87514246 -Al 0.86187816 0.97468338 0.84696398 -Al 0.86126118 0.11153114 0.74510311 -Al 0.75396696 0.25339185 0.00296242 -Al 0.74015671 0.36400648 0.13693966 -Al 0.87351879 0.25698453 0.12214002 -Al 0.86846946 0.37844467 0.99520824 -Al 0.75292998 0.26282060 0.25201310 -Al 0.74094593 0.37281295 0.38427625 -Al 0.88374473 0.25018272 0.39052697 -Al 0.87964520 0.37266828 0.25636568 -Al 0.76129696 0.26752007 0.50952263 -Al 0.75056265 0.38534230 0.64503133 -Al 0.86909435 0.24681380 0.65092018 -Al 0.87561027 0.37153049 0.49836062 -Al 0.75238644 0.24593310 0.76155881 -Al 0.74153230 0.37239140 0.87651124 -Al 0.87743734 0.24764967 0.87830838 -Al 0.87763737 0.37125664 0.76989004 -Al 0.74584829 0.49283393 0.00898408 -Al 0.71809766 0.62079947 0.12517126 -Al 0.85685040 0.50082651 0.12954336 -Al 0.86086108 0.62132596 0.00015819 -Al 0.73061951 0.47970375 0.26100073 -Al 0.74614824 0.61097569 0.34777627 -Al 0.86786155 0.49865301 0.37183224 -Al 0.87376143 0.65193653 0.23354491 -Al 0.77182689 0.49756351 0.51125741 -Al 0.75218156 0.61968730 0.63092796 -Al 0.88241459 0.51069354 0.63527469 -Al 0.87228183 0.62094869 0.51073240 -Al 0.74780567 0.49613700 0.76263882 -Al 0.74787743 0.61833493 0.87864454 -Al 0.88339699 0.49583713 0.88714142 -Al 0.86136746 0.62650713 0.77123128 -Al 0.74945256 0.74756882 0.99327091 -Al 0.74817869 0.88539443 0.13689326 -Al 0.85856705 0.75790909 0.10780622 -Al 0.87931271 0.88451540 0.99870784 -Al 0.73274428 0.74316657 0.24890149 -Al 0.77570677 0.86918008 0.37857483 -Al 0.88402575 0.75230304 0.36329815 -Al 0.89399754 0.86267000 0.23918041 -Al 0.73639190 0.72941077 0.47788508 -Al 0.76226014 0.84168480 0.61434570 -Al 0.87216378 0.74040872 0.62510747 -Al 0.86559942 0.86095482 0.49903510 -Al 0.74108688 0.74090179 0.75678531 -Al 0.74478553 0.87153100 0.87185596 -Al 0.86380129 0.75015417 0.86619297 -Al 0.87277279 0.87628994 0.73369200 diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot12/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot12/Al.scf.pw deleted file mode 100644 index 27d5a4dd0..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot12/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.99356356 0.01003234 0.00089136 -Al 0.98575032 0.10784255 0.14311819 -Al 0.12807012 0.99852230 0.13484251 -Al 0.10989125 0.12653909 0.00754698 -Al 0.99878356 0.98912360 0.25217628 -Al 0.99525099 0.12291132 0.40579143 -Al 0.10611383 0.99632605 0.37614334 -Al 0.10664056 0.12882222 0.26294333 -Al 0.99591937 0.98413624 0.51004513 -Al 0.99873239 0.11964307 0.63516025 -Al 0.12971843 0.98524407 0.61614047 -Al 0.13018385 0.12041564 0.52884396 -Al 0.00208971 0.99522038 0.74327318 -Al 0.01253943 0.14023697 0.89875777 -Al 0.12106366 0.01531784 0.86781823 -Al 0.12956652 0.11909856 0.73876577 -Al 0.02979535 0.24871571 0.01054554 -Al 0.01464289 0.38201263 0.13229357 -Al 0.12182155 0.25149981 0.14253406 -Al 0.12590822 0.38872776 0.99830530 -Al 0.99093004 0.25894721 0.27317879 -Al 0.99602139 0.39049519 0.39439336 -Al 0.12671012 0.23775179 0.41706343 -Al 0.10739525 0.37802063 0.27792375 -Al 0.99999498 0.26184062 0.50700042 -Al 0.01095485 0.37103636 0.62538640 -Al 0.12370907 0.25512713 0.63086101 -Al 0.13261428 0.39036405 0.51287211 -Al 0.00432402 0.25285010 0.75523883 -Al 0.00659139 0.37128221 0.88548254 -Al 0.12972864 0.26206274 0.86786229 -Al 0.13430250 0.38027196 0.76033850 -Al 0.00258158 0.52051824 0.99403345 -Al 0.00530641 0.61791722 0.12303543 -Al 0.12448527 0.48735464 0.11630500 -Al 0.13464893 0.61836395 0.99415827 -Al 0.00225155 0.50050483 0.23070247 -Al 0.01053709 0.60194789 0.37342236 -Al 0.13869118 0.49572983 0.37383649 -Al 0.12651329 0.62381920 0.23766416 -Al 0.00762097 0.49942317 0.50285866 -Al 0.99980680 0.63046327 0.61529426 -Al 0.11974711 0.51537222 0.64109264 -Al 0.13244798 0.61664118 0.49576361 -Al 0.00736615 0.51490744 0.74392904 -Al 0.99940384 0.61284340 0.86526765 -Al 0.12169270 0.50044314 0.89618547 -Al 0.11489764 0.64028970 0.75141705 -Al 0.01586274 0.73555320 0.98553893 -Al 0.00572588 0.85797060 0.11259533 -Al 0.11854537 0.74277112 0.12396578 -Al 0.12702961 0.88501137 0.99969620 -Al 0.00924495 0.75172075 0.24043823 -Al 0.97978514 0.86779037 0.37399871 -Al 0.13199369 0.74460697 0.34998344 -Al 0.13374326 0.86313364 0.23418417 -Al 0.99961163 0.72979918 0.48927139 -Al 0.01766119 0.86531167 0.62828693 -Al 0.12352606 0.74884077 0.61307360 -Al 0.12210593 0.85898068 0.48396704 -Al 0.98478303 0.75002992 0.74060546 -Al 0.98635845 0.86548458 0.87219614 -Al 0.12385645 0.75495956 0.87511538 -Al 0.12794609 0.88350612 0.74281708 -Al 0.23281891 0.00683942 0.99845315 -Al 0.24260286 0.12738938 0.12290146 -Al 0.37319926 0.01604871 0.11133828 -Al 0.37473305 0.12460102 0.99720594 -Al 0.24957219 0.00950823 0.25267825 -Al 0.26124499 0.13695771 0.38311453 -Al 0.37195119 0.00445083 0.35773736 -Al 0.38972988 0.11263582 0.25781414 -Al 0.25141209 0.99457904 0.47453026 -Al 0.27883910 0.12291896 0.61413592 -Al 0.36879991 0.98963524 0.60746848 -Al 0.38667358 0.12478710 0.48190908 -Al 0.25305982 0.00921240 0.74336945 -Al 0.24766462 0.12997246 0.86286458 -Al 0.36915206 0.00779588 0.87171951 -Al 0.37284756 0.13919954 0.74851621 -Al 0.23065113 0.24321274 0.02171583 -Al 0.24503152 0.35412918 0.14217556 -Al 0.37642074 0.23243096 0.12604506 -Al 0.35211490 0.34697485 0.02143041 -Al 0.23439098 0.24562997 0.26084078 -Al 0.25683578 0.37534243 0.39489128 -Al 0.37913489 0.24801094 0.38742430 -Al 0.36911931 0.38424552 0.26137548 -Al 0.24756600 0.26698802 0.52545655 -Al 0.24197568 0.38837382 0.63539973 -Al 0.37413785 0.24821818 0.63050193 -Al 0.39304087 0.38288625 0.51289106 -Al 0.25453562 0.25266592 0.76308536 -Al 0.25666988 0.38418381 0.87516202 -Al 0.36189232 0.24441308 0.87851881 -Al 0.37645368 0.37064658 0.74714361 -Al 0.24095624 0.49707451 0.98612493 -Al 0.25558784 0.61819079 0.10547977 -Al 0.36037732 0.48043934 0.10902784 -Al 0.36469897 0.62467287 0.00040859 -Al 0.25076300 0.50086934 0.23483277 -Al 0.27105230 0.61707349 0.35892034 -Al 0.38488185 0.51051738 0.37533992 -Al 0.36488260 0.62551518 0.23799240 -Al 0.27029579 0.50307561 0.49210801 -Al 0.26295349 0.62334039 0.62588465 -Al 0.36903317 0.51652512 0.62682347 -Al 0.37853376 0.62927934 0.50127062 -Al 0.24372608 0.49811390 0.75521477 -Al 0.23967853 0.63040389 0.86170476 -Al 0.36649781 0.51369507 0.86400692 -Al 0.36227678 0.63416902 0.74670007 -Al 0.24986000 0.74573080 0.99761359 -Al 0.24121059 0.88237354 0.11861331 -Al 0.36388068 0.75204259 0.10948028 -Al 0.34602111 0.87067128 0.97480433 -Al 0.25928845 0.75271950 0.23418736 -Al 0.24493557 0.86546187 0.36675790 -Al 0.37091151 0.74415446 0.36708527 -Al 0.36343262 0.89161499 0.23301950 -Al 0.25603880 0.74242507 0.49913233 -Al 0.25404950 0.86959241 0.63426666 -Al 0.37309762 0.75767445 0.61889837 -Al 0.38158614 0.87119960 0.49199500 -Al 0.24206879 0.73566518 0.73749330 -Al 0.24073126 0.87157190 0.86717599 -Al 0.38304113 0.74107688 0.87729227 -Al 0.36408259 0.85799339 0.75252114 -Al 0.50513062 0.99641307 0.98400984 -Al 0.50296346 0.11448407 0.12668005 -Al 0.62334617 0.00081674 0.10975498 -Al 0.61750462 0.12749031 0.00009284 -Al 0.51024423 0.99838161 0.25179943 -Al 0.51489566 0.11485434 0.37313705 -Al 0.64582982 0.00199386 0.37353296 -Al 0.61796938 0.12867744 0.24490015 -Al 0.51716374 0.99973136 0.48138001 -Al 0.50610684 0.12531688 0.63067543 -Al 0.62036274 0.00178667 0.62155819 -Al 0.62084175 0.12791261 0.50681745 -Al 0.49832577 0.99575068 0.73836487 -Al 0.50070010 0.14207927 0.87351497 -Al 0.63908772 0.00569409 0.88160058 -Al 0.63355509 0.12222953 0.75987675 -Al 0.50038998 0.25762406 0.01340511 -Al 0.48193974 0.37834507 0.13306162 -Al 0.61140817 0.23758186 0.12714498 -Al 0.63563834 0.37082311 0.99664333 -Al 0.47615289 0.26037558 0.26170828 -Al 0.50244274 0.38657000 0.38397936 -Al 0.61447512 0.26576159 0.36920027 -Al 0.62654667 0.36545813 0.23416209 -Al 0.50543096 0.24073779 0.51048729 -Al 0.50459825 0.38682566 0.61881449 -Al 0.62855761 0.26430993 0.63207037 -Al 0.63568155 0.38123575 0.50712325 -Al 0.50967113 0.25120456 0.74106710 -Al 0.48421989 0.36729941 0.88177216 -Al 0.62384526 0.26301694 0.87186622 -Al 0.63073225 0.36866811 0.75201037 -Al 0.48097910 0.48390417 0.99821036 -Al 0.50722141 0.64728210 0.11287231 -Al 0.61881676 0.51277894 0.13060944 -Al 0.63477511 0.61919051 0.99455981 -Al 0.48687654 0.50626543 0.24284525 -Al 0.47859383 0.62869280 0.35594998 -Al 0.61413153 0.50701952 0.38002146 -Al 0.62280048 0.62696908 0.27497080 -Al 0.50294549 0.52214771 0.50004990 -Al 0.50146342 0.62822278 0.62300088 -Al 0.63162580 0.51446293 0.61988389 -Al 0.61141308 0.63472036 0.48349964 -Al 0.51260085 0.46918515 0.76028414 -Al 0.51104040 0.60857060 0.89485797 -Al 0.65011959 0.49446663 0.87902306 -Al 0.61362423 0.62093954 0.75813041 -Al 0.48710437 0.75745600 0.99501901 -Al 0.48973515 0.86789951 0.09837923 -Al 0.63616173 0.74976861 0.12205086 -Al 0.61393755 0.88107241 0.00121918 -Al 0.49251403 0.76169421 0.23530339 -Al 0.48843469 0.86577219 0.36627813 -Al 0.60980726 0.75511509 0.38136663 -Al 0.63006496 0.89021637 0.25609292 -Al 0.50317495 0.75413157 0.50360256 -Al 0.50186666 0.86110304 0.61274668 -Al 0.62591280 0.73642028 0.63902310 -Al 0.62635617 0.86957077 0.50039669 -Al 0.48848703 0.74126400 0.75365852 -Al 0.48830430 0.89929262 0.87274161 -Al 0.60419105 0.75863399 0.88220727 -Al 0.60897796 0.87202443 0.75776707 -Al 0.75198199 0.99514896 0.99067194 -Al 0.74437405 0.11725698 0.11920301 -Al 0.88952245 0.98274769 0.11531456 -Al 0.87028913 0.12588560 0.00787712 -Al 0.75365490 0.00061326 0.23774267 -Al 0.74578279 0.14348118 0.37030803 -Al 0.87559753 0.00289877 0.37717284 -Al 0.86859827 0.11175353 0.25779592 -Al 0.76189478 0.99350554 0.50477659 -Al 0.74128373 0.12545870 0.63043970 -Al 0.88529468 0.00275624 0.61235046 -Al 0.85535532 0.13345023 0.50518137 -Al 0.76889044 0.02237831 0.76412046 -Al 0.74708388 0.13464176 0.88235626 -Al 0.88898039 0.97942093 0.86774633 -Al 0.90108592 0.12092111 0.77053068 -Al 0.75532731 0.25389389 0.01334853 -Al 0.74021578 0.38131483 0.11953630 -Al 0.88138249 0.23845556 0.12745773 -Al 0.89094944 0.36508644 0.00523307 -Al 0.75431519 0.24787375 0.22378998 -Al 0.75943440 0.38120771 0.36654359 -Al 0.87415826 0.24436743 0.38648693 -Al 0.87703009 0.36167569 0.26034223 -Al 0.75796453 0.26249101 0.50398517 -Al 0.76349973 0.38560940 0.63662388 -Al 0.88315901 0.25170637 0.62818998 -Al 0.87181258 0.36382161 0.50864451 -Al 0.77820221 0.24752534 0.75132653 -Al 0.76996909 0.36273668 0.88154811 -Al 0.87893323 0.24322421 0.88438692 -Al 0.87131771 0.40206408 0.74936811 -Al 0.75595322 0.50634839 0.00512157 -Al 0.75419889 0.63612856 0.15389514 -Al 0.87950252 0.50493572 0.13697031 -Al 0.86711156 0.64367810 0.00025671 -Al 0.73854042 0.50230799 0.26121321 -Al 0.76718935 0.59600012 0.37447511 -Al 0.89096036 0.49190123 0.35505283 -Al 0.87160994 0.61211988 0.25373954 -Al 0.74202255 0.49273495 0.50505658 -Al 0.74787670 0.61804328 0.61136827 -Al 0.88110310 0.50937986 0.62923862 -Al 0.87509207 0.61073232 0.48931031 -Al 0.74702002 0.50347998 0.74961012 -Al 0.73619298 0.62628413 0.87284646 -Al 0.88140637 0.51382436 0.88158995 -Al 0.85403888 0.63099412 0.74884340 -Al 0.74123069 0.77509948 0.00205987 -Al 0.75265569 0.89651831 0.10672897 -Al 0.87799168 0.74945915 0.12091763 -Al 0.88885237 0.85893169 0.99713137 -Al 0.74546051 0.76042638 0.25358915 -Al 0.76622972 0.86281674 0.37754999 -Al 0.88245870 0.72775273 0.37174090 -Al 0.87867874 0.86315492 0.25152519 -Al 0.74554072 0.77004286 0.51338619 -Al 0.73128958 0.88528307 0.63568263 -Al 0.87388715 0.72935706 0.60818655 -Al 0.87314642 0.85904168 0.51145345 -Al 0.75249519 0.75486973 0.74441073 -Al 0.73301069 0.87728214 0.87216128 -Al 0.86527550 0.73970698 0.87581861 -Al 0.87501572 0.86803272 0.72360716 diff --git a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot2/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot2/Al.scf.pw deleted file mode 100644 index 181d0b614..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/933K/2.699gcc/snapshot2/Al.scf.pw +++ /dev/null @@ -1,296 +0,0 @@ -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.false., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.00590928377 - nbnd=576 -/ -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000000000 0.00000000000000 0.00000000000000 -0.00000000000000 16.19800000000000 0.00000000000000 -0.00000000000000 0.00000000000000 16.19800000000000 - -ATOMIC_POSITIONS crystal -Al 0.60575303 0.65152903 0.25701091 -Al 0.85404731 0.46357614 0.67433872 -Al 0.99877772 0.60914911 0.82390070 -Al 0.27859413 0.89969962 0.89125424 -Al 0.30361768 0.66392310 0.01769301 -Al 0.45909444 0.11041865 0.04158860 -Al 0.51344602 0.66594214 0.49290494 -Al 0.11668300 0.77201108 0.24587013 -Al 0.13530006 0.81932385 0.59349137 -Al 0.90351025 0.12815182 0.25840625 -Al 0.84038666 0.99784379 0.91619911 -Al 0.33487752 0.27498441 0.82918654 -Al 0.07299958 0.34882994 0.16877466 -Al 0.71791859 0.50242523 0.77044836 -Al 0.47841715 0.09506908 0.31515214 -Al 0.49660987 0.43020678 0.18806053 -Al 0.12450417 0.96724343 0.47450171 -Al 0.72333297 0.98318325 0.48682347 -Al 0.83966188 0.56122424 0.52319773 -Al 0.09102734 0.43111722 0.43724920 -Al 0.98924304 0.96842994 0.58600029 -Al 0.76078454 0.04874999 0.17920286 -Al 0.36679411 0.22930742 0.35843401 -Al 0.31831677 0.52075466 0.11108633 -Al 0.63539181 0.23634137 0.02619844 -Al 0.03355046 0.63075531 0.22423275 -Al 0.45024345 0.81675038 0.42315535 -Al 0.87293176 0.69783453 0.61431133 -Al 0.39033617 0.17759780 0.69667792 -Al 0.17649947 0.68154954 0.46579851 -Al 0.18426206 0.94174442 0.74348653 -Al 0.68099671 0.70810844 0.52213904 -Al 0.53876639 0.40915266 0.49815122 -Al 0.02693556 0.76157904 0.90856401 -Al 0.05916912 0.10215678 0.50228288 -Al 0.27550096 0.82766390 0.48058623 -Al 0.93426446 0.02357777 0.73836719 -Al 0.19476741 0.95062519 0.31447977 -Al 0.48632386 0.58472326 0.19500125 -Al 0.78348425 0.48413805 0.33214649 -Al 0.24224007 0.13523114 0.76319141 -Al 0.89883576 0.94937607 0.21968713 -Al 0.60597007 0.35588071 0.90524082 -Al 0.09911145 0.35154851 0.99980366 -Al 0.55260123 0.53856538 0.60958928 -Al 0.42927683 0.79394568 0.58958516 -Al 0.54009471 0.53378352 0.35324718 -Al 0.45537526 0.66343491 0.89127739 -Al 0.84934146 0.60974455 0.75658591 -Al 0.07913572 0.78491549 0.08110364 -Al 0.44829382 0.38966873 0.83349141 -Al 0.77396185 0.29960716 0.63240968 -Al 0.65079274 0.49234018 0.23641034 -Al 0.26446145 0.39048346 0.33250067 -Al 0.81262978 0.26217759 0.05296408 -Al 0.57703112 0.83594868 0.52428150 -Al 0.78398215 0.37381555 0.20171047 -Al 0.22917357 0.66297862 0.30292850 -Al 0.35381317 0.81909122 0.01501819 -Al 0.78507039 0.97664676 0.33911735 -Al 0.32016285 0.83130659 0.75206696 -Al 0.88449864 0.09528742 0.51153741 -Al 0.25119871 0.45909167 0.60155061 -Al 0.64362575 0.73857168 0.12463268 -Al 0.89318594 0.66367051 0.93502635 -Al 0.36876695 0.99862495 0.99965200 -Al 0.97270251 0.82083602 0.50017917 -Al 0.18303659 0.65016600 0.13349029 -Al 0.92487837 0.01931785 0.36704216 -Al 0.24017859 0.53863193 0.41692874 -Al 0.76351266 0.35979086 0.92798958 -Al 0.69261513 0.96531906 0.92574822 -Al 0.54435528 0.79814819 0.22920632 -Al 0.88169857 0.07921779 0.07201909 -Al 0.19037486 0.50578691 0.98494926 -Al 0.52922613 0.25110530 0.77593027 -Al 0.15539472 0.21097437 0.61960001 -Al 0.81382418 0.78895868 0.14437238 -Al 0.32365096 0.00583642 0.18758443 -Al 0.21010421 0.32461183 0.47448313 -Al 0.67931177 0.43063387 0.62478492 -Al 0.38344826 0.36620567 0.49844866 -Al 0.62756477 0.39253491 0.05427839 -Al 0.04682937 0.28097788 0.50446976 -Al 0.56786163 0.71331755 0.63707233 -Al 0.20499961 0.40406683 0.11178370 -Al 0.77903451 0.47441750 0.07174782 -Al 0.22846884 0.14259648 0.45574527 -Al 0.77482681 0.08054184 0.80552625 -Al 0.47923856 0.24010639 0.93365490 -Al 0.29990335 0.60411420 0.72048002 -Al 0.38280909 0.10841593 0.87730851 -Al 0.94793317 0.65472788 0.09620920 -Al 0.59933166 0.10935208 0.92404396 -Al 0.89442099 0.50241381 0.19983297 -Al 0.44926320 0.00833731 0.62232778 -Al 0.59695865 0.02133443 0.59458453 -Al 0.08655773 0.39355389 0.61631447 -Al 0.34115760 0.23177981 0.54128643 -Al 0.25916501 0.59690511 0.56619443 -Al 0.64351181 0.39513499 0.37563901 -Al 0.59353298 0.30235916 0.62681368 -Al 0.62691439 0.99158161 0.07129740 -Al 0.76622660 0.82221380 0.93801245 -Al 0.92729066 0.38258702 0.37765979 -Al 0.07650070 0.62917548 0.99482990 -Al 0.47817196 0.90578786 0.74200364 -Al 0.22480218 0.92469426 0.03924198 -Al 0.34823255 0.35930170 0.19419389 -Al 0.13636063 0.03351556 0.62896613 -Al 0.17602567 0.76468162 0.96634007 -Al 0.09760671 0.08909331 0.34825974 -Al 0.27721080 0.11723323 0.04428822 -Al 0.01786215 0.05815666 0.17369783 -Al 0.75981280 0.90938277 0.78308219 -Al 0.94258367 0.28384175 0.66654037 -Al 0.14218452 0.21042290 0.08924696 -Al 0.44046393 0.72432858 0.74510634 -Al 0.59621620 0.79905290 0.82780970 -Al 0.85756155 0.77744494 0.79610813 -Al 0.15233203 0.50405207 0.73704253 -Al 0.99647060 0.57634925 0.66519171 -Al 0.09405667 0.29738578 0.74163973 -Al 0.92912407 0.28945567 0.23243480 -Al 0.07945465 0.06249319 0.78565280 -Al 0.99789740 0.73017028 0.71705143 -Al 0.40169242 0.46113196 0.64790027 -Al 0.45044267 0.41037427 0.01883480 -Al 0.97070557 0.44634947 0.51674565 -Al 0.94682928 0.34384609 0.91774951 -Al 0.41358077 0.54206941 0.47677968 -Al 0.59047497 0.13244991 0.17673347 -Al 0.38139496 0.84107462 0.19171900 -Al 0.89044259 0.85951746 0.66473633 -Al 0.51085164 0.97589896 0.90281085 -Al 0.75483645 0.84004773 0.58447879 -Al 0.77655170 0.14718522 0.40190238 -Al 0.51342028 0.15597548 0.59328953 -Al 0.30856351 0.71638344 0.86536442 -Al 0.50467659 0.26656937 0.27062658 -Al 0.40950050 0.93478141 0.30704980 -Al 0.49632654 0.96808837 0.47871400 -Al 0.40418357 0.10985918 0.47401821 -Al 0.58263174 0.91403908 0.34832193 -Al 0.59696883 0.62241142 0.77593821 -Al 0.73991348 0.10302885 0.02793209 -Al 0.86155405 0.93600436 0.49469915 -Al 0.42141007 0.62518513 0.61389495 -Al 0.49715974 0.27258546 0.10353424 -Al 0.13115310 0.66411053 0.67922921 -Al 0.69541286 0.28124963 0.48771501 -Al 0.28443482 0.73854518 0.63466638 -Al 0.78897333 0.91943947 0.05570799 -Al 0.73481538 0.78532083 0.26855645 -Al 0.74649227 0.20675779 0.21551230 -Al 0.09848211 0.93034960 0.90790256 -Al 0.47655445 0.72588041 0.08904022 -Al 0.87531324 0.84029999 0.34980348 -Al 0.99279039 0.40406803 0.76307686 -Al 0.18198345 0.37950459 0.84522858 -Al 0.40178622 0.17276487 0.19543897 -Al 0.71078380 0.73365080 0.72057766 -Al 0.62942309 0.32366623 0.20641029 -Al 0.63686154 0.22946259 0.34123840 -Al 0.24013316 0.81026002 0.15791607 -Al 0.35630389 0.01695099 0.75698602 -Al 0.74100807 0.67195587 0.86435892 -Al 0.68130390 0.91853308 0.20358444 -Al 0.77962187 0.01122033 0.65414509 -Al 0.80594434 0.29814741 0.35727759 -Al 0.86719566 0.17063689 0.91377250 -Al 0.09617445 0.19417816 0.88057037 -Al 0.65830987 0.52803190 0.46225234 -Al 0.36330294 0.69203800 0.47978740 -Al 0.05561280 0.19005294 0.23739241 -Al 0.10262102 0.54047468 0.55857653 -Al 0.85293507 0.66532676 0.27457398 -Al 0.03116483 0.45385623 0.27613007 -Al 0.34357680 0.26351094 0.06026797 -Al 0.30236968 0.80077588 0.31964535 -Al 0.25435070 0.31352025 0.67989784 -Al 0.17836992 0.60659356 0.86175773 -Al 0.29483216 0.92671019 0.60422234 -Al 0.30028865 0.09575216 0.33463906 -Al 0.75617106 0.61550222 0.17541513 -Al 0.09268865 0.30757655 0.33375746 -Al 0.52398220 0.98165168 0.19439287 -Al 0.63971205 0.00787398 0.77775910 -Al 0.22177991 0.24899445 0.94011739 -Al 0.34557390 0.68988019 0.17837390 -Al 0.94091897 0.38962752 0.10653767 -Al 0.84567655 0.16455278 0.70114561 -Al 0.92843787 0.57487185 0.37553427 -Al 0.45982769 0.67769308 0.32351874 -Al 0.68094911 0.33089169 0.76635291 -Al 0.96855302 0.17934132 0.79734378 -Al 0.34456289 0.54422723 0.27667147 -Al 0.83636652 0.30880295 0.79439045 -Al 0.98808212 0.95738151 0.04642294 -Al 0.44348916 0.83387989 0.87367433 -Al 0.73870250 0.84315554 0.42904688 -Al 0.18038021 0.08273780 0.18717403 -Al 0.57131991 0.43398227 0.74465081 -Al 0.21598675 0.23797312 0.24892073 -Al 0.84537907 0.71808566 0.44831914 -Al 0.43695274 0.31554804 0.66222382 -Al 0.72039467 0.64690944 0.37327103 -Al 0.09497748 0.58350950 0.36078199 -Al 0.72629010 0.14052787 0.56119854 -Al 0.99503255 0.73702352 0.35211987 -Al 0.94501761 0.90294973 0.84286789 -Al 0.48249488 0.89864129 0.08240329 -Al 0.95500406 0.20842505 0.38776407 -Al 0.05418622 0.47213303 0.89961162 -Al 0.56391593 0.51635959 0.90478074 -Al 0.79354948 0.39581885 0.49269573 -Al 0.65825223 0.16927147 0.70039422 -Al 0.59517577 0.82824228 0.00902820 -Al 0.42734755 0.39985828 0.34840924 -Al 0.46096611 0.57666934 0.03829465 -Al 0.03598724 0.91497138 0.30402213 -Al 0.60224247 0.68381609 0.96974136 -Al 0.87866679 0.47820858 0.84293085 -Al 0.98801737 0.05116872 0.90077649 -Al 0.74532926 0.65189942 0.02370924 -Al 0.91461552 0.81309523 0.01487106 -Al 0.87135192 0.26692808 0.52123400 -Al 0.99693287 0.13753877 0.63816845 -Al 0.29602995 0.43550655 0.77581617 -Al 0.64839415 0.05967065 0.30852787 -Al 0.18991769 0.52913218 0.22927879 -Al 0.49814734 0.25850215 0.45307479 -Al 0.20451406 0.06743441 0.90276964 -Al 0.30901662 0.96992467 0.44238835 -Al 0.60461483 0.76131782 0.38082532 -Al 0.61278211 0.56504988 0.09421874 -Al 0.43915140 0.54644328 0.76611022 -Al 0.98734185 0.20458698 0.02194457 -Al 0.34278239 0.53720103 0.90390850 -Al 0.99384272 0.65970963 0.50713589 -Al 0.11906814 0.81496274 0.41657465 -Al 0.29503749 0.39353297 0.95550697 -Al 0.58730818 0.10631869 0.44904168 -Al 0.73959367 0.51816043 0.92591593 -Al 0.71316569 0.20708547 0.87551824 -Al 0.10855245 0.91696956 0.17233559 -Al 0.92188162 0.51501383 0.00866568 -Al 0.04338507 0.88971714 0.70834859 -Al 0.16282443 0.77993128 0.78410004 -Al 0.50189598 0.08363789 0.76231698 -Al 0.95992165 0.79921291 0.18436796 -Al 0.62743852 0.87590224 0.68348598 -Al 0.71935603 0.59681697 0.62990780 -Al 0.29482637 0.09349561 0.60385284 -Al 0.06399989 0.50471951 0.10357905 -Al 0.11637871 0.06533322 0.03330068 diff --git a/ml-dft-sandia/notebooks/dos2eband/dos2eband_02.ipynb b/ml-dft-sandia/notebooks/dos2eband/dos2eband_02.ipynb deleted file mode 100644 index 27916b42f..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/dos2eband_02.ipynb +++ /dev/null @@ -1,789 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "_Updated 200220_" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Fermi Level\n", - "# The Fermi energy printed out by QE (in the DOS output file) is 7.770. \n", - "# The output is truncated and it turns this is too inaccurate to obtain the correct electron number. \n", - "# We determined the Fermi energy to higher accuracy (by imposing the correct electron number = 3*256 = 768).\n", - "# There are 3 electrons per atom due to the choice of pseudopotential. \n", - "# CAUTION: Need to define an accurate Fermi energy for each snapshot. \n", - "fermi_energy = 7.770345\n", - "\n", - "# Boltzmann's constant\n", - "k = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load eigenvalues and DOS from QE output for two snapshots" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# filepath: blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333\n", - "## Snapshot 0: Eigenvalues (from PW std output file, slurm-1006575.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe_00 = np.loadtxt('snap_0/EIGS', delimiter=',')\n", - "k_weights_qe_00 = np.loadtxt('snap_0/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe_00 = np.loadtxt('snap_0/Al.dos', skiprows=1)\n", - "## Snapshot 1: Eigenvalues (from PW std output file, slurm-1006846.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe_01 = np.loadtxt('snap_1/EIGS', delimiter=',')\n", - "k_weights_qe_01 = np.loadtxt('snap_1/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe_01 = np.loadtxt('snap_1/Al.dos', skiprows=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energy, eF, t): \n", - " return 1.0 / (1.0 + np.exp((energy - eF) / (k * t)))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(en, eF, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((en-eF)/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we define functions which compute reference values of the electron number and band energy = sum of eigenvalues.\n", - "Recall the some definitions:\n", - "\n", - "The electron number is defined as\n", - "$$ N = \\sum_{k,i} w_{k,i}\\, f(\\epsilon(k,i) - \\mu)\\,,$$\n", - "the band energy is defined as\n", - "$$ E_b = \\sum_{k,i} w_{k,i}\\, \\epsilon(k,i) f(\\epsilon(k,i) - \\mu)\\,,$$ \n", - "where $i$ denotes the band, $k$ the k point, $w_{k,i}$ the weight of the k point, $\\epsilon(k,i)$ the eigenvalue for a given k point and band, $\\mu$ the chemical potential (which equals the Fermi energy at zero temperature), and $f$ the Fermi-Dirac distribution function (which truncates the sum at the chemical potential). " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating electron number from sum of eigenvalues\n", - "def gen_ENUM(k_weights, array_eigs):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " # output:\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=fermi_energy, t=temp)\n", - " enum = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " enum += k_weights[idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating sum of eigenvalues = band energy\n", - "def gen_EBAND(k_weights, array_eigs):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " # output:\n", - " ## eband\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=fermi_energy, t=temp)\n", - " eband = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " eband += k_weights[idx_k]*array_eigs[idx_bnd , :][idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return eband" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the reference values for the electron number and the band energy by directly summing over the eigenvalues.\n", - "It turns out the value of the band energy obtained from QE below is not correct." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SNAPSHOT 0\n", - "Electron number: 768.3800699587922\n", - "Band energy [eV]: 2598.726246188354\n", - " \n", - "SNAPSHOT 1\n", - "Electron number: 768.0000014009643\n", - "Band energy [eV]: 2598.579547828817\n" - ] - } - ], - "source": [ - "# Reference values of electron number and band energy\n", - "## Snapshot 0\n", - "enum_ref_00 = gen_ENUM(k_weights_qe_00, eigs_qe_00)\n", - "eband_ref_00 = gen_EBAND(k_weights_qe_00, eigs_qe_00)\n", - "print(\"SNAPSHOT 0\")\n", - "print(\"Electron number:\", enum_ref_00)\n", - "print(\"Band energy [eV]:\", eband_ref_00)\n", - "print(\" \")\n", - "\n", - "## Snapshot 1 #Need to determine more accurate Fermi energy for snaphot2\n", - "#fermi_energy = 7.7733618\n", - "enum_ref_01 = gen_ENUM(k_weights_qe_01, eigs_qe_01)\n", - "eband_ref_01 = gen_EBAND(k_weights_qe_01, eigs_qe_01)\n", - "print(\"SNAPSHOT 1\")\n", - "print(\"Electron number:\", enum_ref_01)\n", - "print(\"Band energy [eV]:\", eband_ref_01)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, the electron number and band energy can be by aid of the density of states. This is useful, because, eventually, we will predict the local DOS/DOS from ML.\n", - "\n", - "In terms of the DOS, they are defined as \n", - "\n", - "$$N = \\int_{-\\infty}^{\\infty} d\\epsilon\\ D(\\epsilon)\\, f(\\epsilon)$$\n", - "and\n", - "$$E_b = \\int_{-\\infty}^{\\infty} d\\epsilon\\ D(\\epsilon)\\, f(\\epsilon)\\, \\epsilon\\,,$$\n", - "\n", - "\n", - "where $\\epsilon$ denotes the energy as a continuous variable, $D(\\epsilon)$ the DOS, $f(\\epsilon)$ the Fermi-Dirac distribution function.\n", - "\n", - "The explicit defintion of the DOS is given as a sum of $\\delta$-functions over the spectrum of eigenvalues.\n", - "$$ D(\\epsilon) = \\sum_i \\sum_k w_k\\, \\delta(\\epsilon-\\epsilon(i,k))$$\n", - "\n", - "Commonly (in particular, for the purposes of visualization), the $\\delta$-functions are represented by particular choice of functions (for example, Gaussians)\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "where $\\sigma$ denotes the width." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS sum over eigenvalues\n", - "def gen_DOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " ra_dos_ik[idx_bnd].append(gaussian(ra_en, array_eigs[idx_bnd , :][idx_k], sigma))\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating electron number from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enumFromDOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## enum\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights, array_en, array_eigs, sigma)\n", - " enum = sp.integrate.trapz(ra_dos*ra_fd, array_en)\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_ebandFromDOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## eband [Ry]\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights, array_en, array_eigs, sigma)\n", - " eband = sp.integrate.simps(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS and compare with QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en_00 = dos_qe_00[: , 0]\n", - "ra_dos_00 = gen_DOS(k_weights_qe_00, ra_en_00, eigs_qe_00, sigma=sigma_qe*Ry2eV )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_00[: , 0], dos_qe_00[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe_00[: , 0] , ra_dos_00, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We recover the QE-DOS result by using the same parameters as in the input for computing the DOS.\n", - "Now we can go ahead and investigate different energy grids and smearing values in order to improve upon the band energy and achieve better agreement with the band-energy output of QE." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**CAUTION: This is not correct. The direct sum over eigenvalues (see analysis above) does not yield the same value for the band energy.** \n", - "The QE output of snapshot 0 is given at ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```. \n", - "QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution. \n", - "\n", - "**However, this does not agree with the reference value of the band energy we obtain above by explicitly summing over the eigenvalues (which we know is the correct band energy.)**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(\"Band energy from QE output [Ry]:\", eband_qe)\n", - "print(\"Reference value of band energy (correct) [Ry]:\", eband_ref_00/Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below we analyze the behavior of the predicted electron number and band energy with respect to the choice of energy bin and smearing. One important question to answer is whether we can recover an accurate band energy (error < 10 meV) for a relatively smooth DOS which will be more suited for ML." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Snapshot 0:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define energy bin\n", - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe_00[: , 0][1]-dos_qe_00[: , 0][0])*0.5\n", - "print(ewidth)\n", - "# Define smearing\n", - "ra_sigma_00 = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum_00 = np.zeros(len(ra_sigma_00))\n", - "ra_eband_00 = np.zeros(len(ra_sigma_00))\n", - "ra_en = np.linspace(dos_qe_00[0, 0], dos_qe_00[-1, 0], int((dos_qe_00[-1, 0]-dos_qe_00[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma_00)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum_00[i] = gen_enumFromDOS(k_weights_qe_00, ra_en, eigs_qe_00, sigma=ra_sigma_00[i])\n", - " # Generate band energy\n", - " ra_eband_00[i] = gen_ebandFromDOS(k_weights_qe_00, ra_en , eigs_qe_00, sigma=ra_sigma_00[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum_00)\n", - "print(ra_eband_00)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref_00, ra_sigma_00[0], ra_sigma_00[-1], linewidth=3)\n", - "ax.plot(ra_sigma_00, ra_enum_00, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref_00/Ry2eV, ra_sigma_00[0], ra_sigma_00[-1], linewidth=3)\n", - "ax.scatter(ra_sigma_00, ra_eband_00, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(\"Error in band energy [Ry/atom]\", np.min(abs(ra_eband_00-eband_ref_00/Ry2eV))/256)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Generate the corresponding DOS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos_00 = gen_DOS(k_weights_qe_00, ra_en, eigs_qe_00, sigma=ra_sigma_00[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos_00, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe_00[: , 0], dos_qe_00[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Snapshot 1:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define energy bin\n", - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0])*0.5\n", - "print(ewidth)\n", - "# Define smearing\n", - "ra_sigma_01 = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "ra_en_01 = np.linspace(dos_qe_01[0, 0], dos_qe_01[-1, 0], int((dos_qe_01[-1, 0]-dos_qe_01[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma_01)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enumFromDOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_ebandFromDOS(k_weights_qe_01, ra_en_01 , eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_en_01[1]-ra_en_01[0])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm04.ipynb b/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm04.ipynb deleted file mode 100644 index f432f2712..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm04.ipynb +++ /dev/null @@ -1,2166 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Attila Cangi, 14.02.2020" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Fermi Level\n", - "fermi_energy = 7.770345\n", - "\n", - "# Boltzmann's constant\n", - "k = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load eigenvalues and DOS from QE output" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# filepath: blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333\n", - "## Snapshot 0: Eigenvalues (from PW std output file, slurm-1006575.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe = np.loadtxt('snap_0/EIGS', delimiter=',')\n", - "k_weights_qe = np.loadtxt('snap_0/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe = np.loadtxt('snap_0/Al.dos', skiprows=1)\n", - "## Snapshot 1: Eigenvalues (from PW std output file, slurm-1006846.out)\n", - "### rows: band index, row i: eigs[i , :]\n", - "### cols: k points, col j: eigs[: , j]\n", - "eigs_qe_01 = np.loadtxt('snap_1/EIGS', delimiter=',')\n", - "k_weights_qe_01 = np.loadtxt('snap_1/k_weights', delimiter=',')\n", - "## DOS\n", - "dos_qe_01 = np.loadtxt('snap_1/Al.dos', skiprows=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energy, eF, t): \n", - " return 1.0 / (1.0 + np.exp((energy - eF) / (k * t)))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(en, eF, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((en-eF)/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Define a discretized delta function that maintains 0th and 1st moments\n", - "def delta_M1(en, eF):\n", - " de = en-eF\n", - " de_above = np.min(de,initial=np.max(de),where=np.greater(de,0.0))\n", - " de_below = np.max(de,initial=np.min(de),where=np.less_equal(de,0.0))\n", - " result = 1.0 - np.abs(de)/(de_above-de_below)\n", - " result = result*np.greater_equal(result,0.0)*np.less_equal(result,1.0)\n", - " result = result/(de_above-de_below)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS(k_weights, array_en, array_eigs, sigma):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " ra_dos_ik[idx_bnd].append(gaussian(ra_en, array_eigs[idx_bnd , :][idx_k], sigma))\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_M1(k_weights, array_en, array_eigs):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " ra_dos_ik[idx_bnd].append(delta_M1(ra_en, array_eigs[idx_bnd , :][idx_k]))\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from eigenvalues\n", - "def gen_EIG(k_weights, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## eig: band energy\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=E_fermi, t=temperature)\n", - " eig = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " eig += k_weights[idx_k]*array_eigs[idx_bnd , :][idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return eig" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating number of electrons from eigenvalues\n", - "def gen_NUM(k_weights, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## num: number of electrons\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_fd = fd_function(array_eigs, eF=E_fermi, t=temperature)\n", - " num = 0.0\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " num += k_weights[idx_k]*ra_fd[idx_bnd , :][idx_k] \n", - " return num" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.7730052436877\n" - ] - } - ], - "source": [ - "eband_ref=gen_EIG(k_weights_qe, eigs_qe)\n", - "print(eband_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0000498916445\n" - ] - } - ], - "source": [ - "enum_ref=gen_NUM(k_weights_qe, eigs_qe)\n", - "print(enum_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband(k_weights, array_en, array_eigs, sigma, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " #eband = sp.integrate.simps(ra_dos*array_en*ra_fd, array_en)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_M1(k_weights, array_en, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " ra_dos = gen_DOS_M1(k_weights_qe, array_en, eigs_qe)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enum(k_weights, array_en, array_eigs, sigma, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " enum = sp.integrate.trapz(ra_dos*ra_fd, array_en)\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enum_M1(k_weights, array_en, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " ra_dos = gen_DOS_M1(k_weights_qe, array_en, eigs_qe)\n", - " enum = sp.integrate.trapz(ra_dos*ra_fd, array_en)\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_int(k_weights, array_en, array_eigs, sigma, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " f_dos = sp.interpolate.interp1d(array_en,ra_dos)\n", - " eband, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*e*fd_function(e, eF=E_fermi, t=temperature),\n", - " array_en[0],array_en[-1],limit=500,points=(E_fermi))\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_int_M1(k_weights, array_en, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " ra_dos = gen_DOS_M1(k_weights_qe, array_en, eigs_qe)\n", - " f_dos = sp.interpolate.interp1d(array_en,ra_dos)\n", - " eband, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*e*fd_function(e, eF=E_fermi, t=temperature),\n", - " array_en[0],array_en[-1],limit=500,points=(E_fermi))\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enum_int(k_weights, array_en, array_eigs, sigma, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " f_dos = sp.interpolate.interp1d(array_en,ra_dos)\n", - " enum, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*fd_function(e, eF=E_fermi, t=temperature),\n", - " array_en[0],array_en[-1],limit=500,points=(E_fermi))\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def gen_enum_int_M1(k_weights, array_en, array_eigs, E_fermi = fermi_energy, temperature = temp):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## E_fermi: fermi_energy used in generating the occupations\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=E_fermi, t=temperature)\n", - " ra_dos = gen_DOS_M1(k_weights_qe, array_en, eigs_qe)\n", - " f_dos = sp.interpolate.interp1d(array_en,ra_dos)\n", - " enum, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*fd_function(e, eF=E_fermi, t=temperature),\n", - " array_en[0],array_en[-1],limit=500,points=(E_fermi))\n", - " return enum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the DOS from its naive definition\n", - "$$ D(E) = \\sum_i \\sum_k w_k\\, \\delta(\\epsilon-\\epsilon_{ik})$$\n", - "where $i$ labels the band and $k$ the k point. We represent the $\\delta$-functions as a Gaussian\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "with a width $\\sigma$." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV )\n", - "ra_en_M1 = ra_en[::1]\n", - "ra_dos_M1 = gen_DOS_M1(k_weights_qe, ra_en_M1, eigs_qe )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "ax.plot(ra_en_M1, ra_dos_M1, linestyle='--', linewidth=3, color='blue', label='computed M1')\n", - "\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We recover the QE-DOS result by using the same parameters as in the input for computing the DOS.\n", - "Now we can go ahead and investigate different energy grids and smearing values in order to improve upon the band energy and achieve better agreement with the band-energy output of QE." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy\" (or better, sum of eigenvalues) is defined as\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} dE\\ D(E)\\, f(E)\\, E$$\n", - "\n", - "where $E$ denotes the energy, $D(E)$ the DOS, $f(E)$ the Fermi-Dirac distribution function." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy\" is also called the \"single-particle energy\" or the \"one-electron energy\" and is obtained from summing the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\epsilon_i\\ .$$\n", - "\n", - "For look at the particular values for a given snapshot (data from ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```). QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "737.82754675" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "737.82754675" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The correct band energy from QE output is" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "188.49839105\n" - ] - } - ], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(eband_qe)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 -5.234489245958457 -1.1743850336642936e-10 -45.807938886497595 1.8189894035458565e-12\n", - "11 -3.0085239583360135 -1.184616849059239e-10 -26.794918722090188 -5.002220859751105e-12\n", - "12 -1.6938272863526436 -1.1732481652870774e-10 -15.31026468328173 2.7284841053187847e-12\n", - "13 -0.9298947758965141 -1.1789325071731582e-10 -8.515658528185668 -4.547473508864641e-13\n", - "14 -0.49824413626174646 -1.1789325071731582e-10 -4.599498588736424 9.094947017729282e-13\n", - "15 -0.26069453180468827 -1.1800693755503744e-10 -2.4242788304977694 -4.547473508864641e-13\n", - "16 -0.13643360852029218 -1.1743850336642936e-10 -1.2616944080477879 3.183231456205249e-12\n", - "17 -0.06895619423528387 -1.1743850336642936e-10 -0.6568335573683726 9.094947017729282e-13\n", - "18 -0.03418726555844387 -1.1857537174364552e-10 -0.32203098547824993 -2.7284841053187847e-12\n", - "19 -0.011282068307764348 -1.1789325071731582e-10 -0.12597016910467573 4.547473508864641e-13\n", - "20 -0.007201335063200531 -1.177795638795942e-10 -0.06170976398198036 1.8189894035458565e-12\n", - "21 -0.002444702199454696 -1.1800693755503744e-10 -0.024341267848740245 -4.547473508864641e-13\n", - "22 -0.0012694421254764165 -1.1800693755503744e-10 -0.009928782347287779 4.547473508864641e-13\n", - "23 0.0005336689835075958 -1.176658770418726e-10 -0.00406024975791297 9.094947017729282e-13\n", - "24 -0.0027406659099824537 -1.1800693755503744e-10 -0.012838814472615923 -2.2737367544323206e-12\n", - "25 0.0004738793097658345 -1.1800693755503744e-10 0.0045840101593057625 -1.3642420526593924e-12\n", - "26 -0.0003504365429307654 -1.1789325071731582e-10 -0.010819808310316148 -4.547473508864641e-13\n", - "27 -3.8703179598087445e-05 -1.1789325071731582e-10 0.0017257026747756754 4.547473508864641e-13\n", - "28 0.001842684864527655 -1.177795638795942e-10 0.013415315645033843 4.547473508864641e-13\n", - "29 -0.000985194552640678 -1.1823431123048067e-10 -0.0037054365066069295 -1.3642420526593924e-12\n", - "30 -0.0008896181742557019 -1.1800693755503744e-10 -0.008360815092146368 -4.547473508864641e-13\n", - "31 4.840791962124058e-05 -1.1800693755503744e-10 0.0014842382961433032 4.547473508864641e-13\n", - "32 0.0032736276467630887 -1.1789325071731582e-10 0.01575374872300017 -4.547473508864641e-13\n", - "33 -0.002582423709213799 -1.1812062439275905e-10 -0.008453579465822258 -4.547473508864641e-13\n", - "34 -0.00212382576478376 -1.1789325071731582e-10 -0.014720101219609205 4.547473508864641e-13\n", - "35 0.00035434004757917137 -1.177795638795942e-10 0.004589871522057365 9.094947017729282e-13\n", - "36 0.004566362448031214 -1.1789325071731582e-10 0.010334915335988626 4.547473508864641e-13\n", - "37 -0.004377595713094706 -1.1789325071731582e-10 -0.011156207361182169 4.547473508864641e-13\n", - "38 0.0035675146625635534 -1.177795638795942e-10 0.02104273133454626 4.547473508864641e-13\n", - "39 -0.002355550988113464 -1.1789325071731582e-10 -0.008779958306149638 4.547473508864641e-13\n", - "40 -0.00012235896292622783 -1.1789325071731582e-10 -0.008012976144982531 -4.547473508864641e-13\n", - "41 0.0004999652636570318 -1.176658770418726e-10 -0.00230668753010832 9.094947017729282e-13\n", - "42 -0.0021075651889077562 -1.177795638795942e-10 -0.008575368438414444 4.547473508864641e-13\n", - "43 0.0030319030553300763 -1.1789325071731582e-10 0.016562732218972087 4.547473508864641e-13\n", - "44 0.0005433604214886145 -1.1812062439275905e-10 0.011731928565041017 -2.2737367544323206e-12\n", - "45 -0.0010088273838846362 -1.176658770418726e-10 -0.008708943430974614 4.547473508864641e-13\n", - "46 -0.001603367676466405 -1.1812062439275905e-10 -0.013802711930566147 -2.2737367544323206e-12\n", - "47 -8.07042173391892e-05 -1.177795638795942e-10 -0.0026368995213488233 4.547473508864641e-13\n", - "48 0.002295590192943564 -1.176658770418726e-10 0.01617136933873553 4.547473508864641e-13\n", - "49 -0.0014555454511082644 -1.1789325071731582e-10 -0.004476415372664633 -4.547473508864641e-13\n", - "50 0.00035125604597396887 -1.177795638795942e-10 -0.0013101162735438265 -4.547473508864641e-13\n", - "51 0.0016319329462248788 -1.1800693755503744e-10 0.009463212976243085 4.547473508864641e-13\n", - "52 -0.00302512234304686 -1.1789325071731582e-10 -0.017204067398324696 4.547473508864641e-13\n", - "53 0.00028151116418939637 -1.1800693755503744e-10 0.0016020121302062762 -4.547473508864641e-13\n", - "54 0.0012816275261684495 -1.1812062439275905e-10 0.007145622741518309 -4.547473508864641e-13\n", - "55 0.001126999803545914 -1.1789325071731582e-10 0.005915846563766536 -4.547473508864641e-13\n", - "56 0.00020314853190939175 -1.1789325071731582e-10 0.0005386391162574 -4.547473508864641e-13\n", - "57 -0.0034187031020564973 -1.1800693755503744e-10 -0.013410666247182235 4.547473508864641e-13\n", - "58 0.0012288018449453375 -1.177795638795942e-10 -0.0001916369278660568 4.547473508864641e-13\n", - "59 -0.0004857048043049872 -1.1789325071731582e-10 -0.00212350793162841 4.547473508864641e-13\n", - "60 0.003501269644630156 -1.1789325071731582e-10 0.022771334907247365 -4.547473508864641e-13\n", - "61 -0.0016885998169300365 -1.1800693755503744e-10 -0.006429138255043654 -4.547473508864641e-13\n", - "62 -0.0010568483633051073 -1.177795638795942e-10 -0.013827199322804518 4.547473508864641e-13\n", - "63 -0.0008933123565384449 -1.1800693755503744e-10 -0.005141747195921198 -4.547473508864641e-13\n", - "64 0.0013269309381485073 -1.1789325071731582e-10 0.010083763519560307 4.547473508864641e-13\n", - "65 0.0006475092280879835 -1.1789325071731582e-10 0.010179060189329903 -4.547473508864641e-13\n", - "66 -0.001284762960608532 -1.176658770418726e-10 -0.004656814642203244 4.547473508864641e-13\n", - "67 0.0012693203317439838 -1.1789325071731582e-10 -0.0029110520981703303 -4.547473508864641e-13\n", - "68 -0.00015330596500007232 -1.177795638795942e-10 -0.010735553715221613 9.094947017729282e-13\n", - "69 -0.00012178556187336653 -1.1789325071731582e-10 0.0006866773910587654 4.547473508864641e-13\n", - "70 -0.0026542983832769096 -1.1789325071731582e-10 0.012951500257713633 4.547473508864641e-13\n", - "71 0.0017767957976957405 -1.176658770418726e-10 0.00398444177244528 9.094947017729282e-13\n", - "72 0.0040228029490663175 -1.1789325071731582e-10 -6.206920306794927e-05 4.547473508864641e-13\n", - "73 -0.005091702241543317 -1.1789325071731582e-10 -0.016539730961085297 4.547473508864641e-13\n", - "74 0.0014211212156851616 -1.1789325071731582e-10 -0.0005834911135025322 4.547473508864641e-13\n", - "75 -0.00028382031462115265 -1.177795638795942e-10 0.008294995108826697 9.094947017729282e-13\n", - "76 0.0008338022706766424 -1.1812062439275905e-10 0.004943728889429622 -1.3642420526593924e-12\n", - "77 -0.0010795310075764064 -1.1800693755503744e-10 -0.0035290992927912157 -2.2737367544323206e-12\n", - "78 0.0008844808822914274 -1.1789325071731582e-10 -0.0006506551944767125 4.547473508864641e-13\n", - "79 0.0009685616795422902 -1.1789325071731582e-10 0.00532219552587776 -4.547473508864641e-13\n", - "80 -0.0010624552402305198 -1.1789325071731582e-10 -0.007222146211006475 4.547473508864641e-13\n", - "81 -0.0014160807016878607 -1.1789325071731582e-10 -0.005087683979581925 4.547473508864641e-13\n", - "82 0.0013608886875999815 -1.1812062439275905e-10 0.004453055809335638 -2.2737367544323206e-12\n", - "83 -0.00046237325398124085 -1.1789325071731582e-10 0.0001811402580642607 -4.547473508864641e-13\n", - "84 0.0012817554161301814 -1.1812062439275905e-10 0.008766634972289467 -4.547473508864641e-13\n", - "85 -0.0002932988562633909 -1.1789325071731582e-10 -0.001227802756602614 4.547473508864641e-13\n", - "86 -0.0011584700799858183 -1.177795638795942e-10 -0.007768050187678455 4.547473508864641e-13\n", - "87 -0.00027752026619509707 -1.1789325071731582e-10 -0.003162962736951158 4.547473508864641e-13\n", - "88 0.0018488125023168323 -1.176658770418726e-10 0.006281168407440418 9.094947017729282e-13\n", - "89 -0.0009115505114323241 -1.1800693755503744e-10 -0.0013072686815576162 -4.547473508864641e-13\n", - "90 -0.0003555319053702988 -1.1789325071731582e-10 -0.0007272212951647816 -1.3642420526593924e-12\n", - "91 -0.0006601058353226108 -1.1789325071731582e-10 -0.00011014266829079133 4.547473508864641e-13\n", - "92 0.00132096517336322 -1.1789325071731582e-10 0.007852551183987089 4.547473508864641e-13\n", - "93 0.00020571833454141597 -1.1789325071731582e-10 -0.006892176095334435 4.547473508864641e-13\n", - "94 7.425794251503248e-06 -1.1789325071731582e-10 -0.0031314102870965144 -4.547473508864641e-13\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "95 -0.0011109472937960163 -1.1789325071731582e-10 0.00441628471844524 4.547473508864641e-13\n", - "96 0.00016933372432959004 -1.1789325071731582e-10 -0.0005063980133854784 4.547473508864641e-13\n", - "97 2.85445787540084e-06 -1.1789325071731582e-10 -0.002920579854162497 4.547473508864641e-13\n", - "98 -7.979905831234646e-06 -1.1800693755503744e-10 -0.0003530890285219357 -4.547473508864641e-13\n", - "99 0.000559094152436046 -1.1789325071731582e-10 0.0031685118592577055 9.094947017729282e-13\n", - "100 0.001027479174013024 -1.1789325071731582e-10 0.007263485191288055 4.547473508864641e-13\n", - "101 -0.001116513069746361 -1.1800693755503744e-10 -0.0050331918878328 -4.547473508864641e-13\n", - "102 -0.0006489360438308722 -1.1789325071731582e-10 -0.00699392353044459 -4.547473508864641e-13\n", - "103 -0.0006882263490979312 -1.1812062439275905e-10 -0.0034550372265584883 -4.547473508864641e-13\n", - "104 0.001200238797878228 -1.1800693755503744e-10 0.008152729330959119 -2.2737367544323206e-12\n", - "105 0.000827325944783297 -1.1789325071731582e-10 0.005007990665944817 9.094947017729282e-13\n", - "106 0.00042817427129193675 -1.1789325071731582e-10 0.0006980972652854689 4.547473508864641e-13\n", - "107 -0.0029028855032038337 -1.1789325071731582e-10 -0.012964501523583749 -4.547473508864641e-13\n", - "108 0.0017754035651478262 -1.1789325071731582e-10 0.004670949142109748 -4.547473508864641e-13\n", - "109 0.00023524652203832375 -1.176658770418726e-10 0.005555764756081771 9.094947017729282e-13\n", - "110 0.00037104776208707335 -1.1789325071731582e-10 0.0005289245987114555 4.547473508864641e-13\n", - "111 -0.001813982255157498 -1.176658770418726e-10 -0.007354642759310082 9.094947017729282e-13\n", - "112 0.000610749674251565 -1.1789325071731582e-10 -0.001995754167182895 -4.547473508864641e-13\n", - "113 0.00140386495365874 -1.1789325071731582e-10 0.008672721736729727 4.547473508864641e-13\n", - "114 -0.0007781602959084921 -1.1789325071731582e-10 0.0003452836999713327 -4.547473508864641e-13\n", - "115 -1.9517106807143136e-05 -1.1789325071731582e-10 -0.003092517372806469 4.547473508864641e-13\n", - "116 -0.001075494572887692 -1.1789325071731582e-10 -0.0033759274770090997 4.547473508864641e-13\n", - "117 0.0016082892149142936 -1.1789325071731582e-10 0.005582119886639703 -4.547473508864641e-13\n", - "118 -0.0004395089471245228 -1.1789325071731582e-10 -0.0032766252570581855 -4.547473508864641e-13\n", - "119 -0.0010735641684505026 -1.1789325071731582e-10 -0.005206662624004821 4.547473508864641e-13\n", - "120 0.0009210747482484294 -1.1789325071731582e-10 0.007752810608508298 -4.547473508864641e-13\n", - "121 0.0009482989765956518 -1.1789325071731582e-10 0.005911202150400641 -4.547473508864641e-13\n", - "122 -0.0011456740402309151 -1.1789325071731582e-10 -0.008325446518028912 4.547473508864641e-13\n", - "123 -0.0009604649206949034 -1.1789325071731582e-10 -0.008187366848687816 4.547473508864641e-13\n", - "124 0.0010907286911105984 -1.1789325071731582e-10 0.006893389511787973 4.547473508864641e-13\n", - "125 0.0010941517142555313 -1.1789325071731582e-10 0.010712622042774456 -4.547473508864641e-13\n", - "126 -0.001217176218460736 -1.1789325071731582e-10 -0.006257268082663359 4.547473508864641e-13\n", - "127 4.357180011993478e-05 -1.1789325071731582e-10 -0.0053350153257269994 -4.547473508864641e-13\n", - "128 -0.0006111651373430504 -1.1800693755503744e-10 -0.003851741546895937 -4.547473508864641e-13\n", - "129 0.0005181965879046402 -1.1789325071731582e-10 0.004666918049224478 4.547473508864641e-13\n", - "130 0.0004586998344393578 -1.177795638795942e-10 0.006080747882151627 4.547473508864641e-13\n", - "131 0.0004976448724391958 -1.1789325071731582e-10 0.0018919710646514432 -4.547473508864641e-13\n", - "132 -0.0009205638323237508 -1.1800693755503744e-10 -0.00634310312807429 -4.547473508864641e-13\n", - "133 -0.0002688371092745001 -1.177795638795942e-10 -0.004747798338030407 4.547473508864641e-13\n", - "134 0.0003768948396327687 -1.1789325071731582e-10 0.003540135038747394 4.547473508864641e-13\n", - "135 -0.0003735190744009742 -1.176658770418726e-10 0.0027690808747138362 4.547473508864641e-13\n", - "136 0.0008443424435427005 -1.1800693755503744e-10 9.370140787723358e-05 -4.547473508864641e-13\n", - "137 -0.0006366657436274181 -1.1800693755503744e-10 -0.004140103426834685 -4.547473508864641e-13\n", - "138 0.0004790252793327454 -1.1789325071731582e-10 0.0027747441185965727 -4.547473508864641e-13\n" - ] - } - ], - "source": [ - "emin = dos_qe[: , 0][0] - 1.0\n", - "emax = dos_qe[: , 0][-1] + 1.0\n", - "n_egrid_max = int(len(dos_qe[:,0]))\n", - "#n_egrids = np.int32(np.arange(1,11)/10.0*n_egrid_max)\n", - "n_egrids = np.arange(10,n_egrid_max)\n", - "ra_enum = []\n", - "ra_eband = []\n", - "ra_enum_M1 = []\n", - "ra_eband_M1 = []\n", - "for n_egrid in n_egrids:\n", - " ra_en = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = ra_en[1] - ra_en[0]\n", - " # Generate electron number \n", - " ra_enum = np.append(ra_enum,gen_enum(k_weights_qe, ra_en, eigs_qe, sigma_mod, E_fermi = 15.0) - gen_NUM(k_weights_qe, eigs_qe, E_fermi = 15.0))\n", - " # Generate band energy\n", - " ra_eband = np.append(ra_eband,gen_eband(k_weights_qe, ra_en, eigs_qe, sigma_mod, E_fermi = 15.0)*Ry2eV - gen_EIG(k_weights_qe, eigs_qe, E_fermi = 15.0))\n", - " # Generate electron number \n", - " ra_enum_M1 = np.append(ra_enum_M1,gen_enum_M1(k_weights_qe, ra_en, eigs_qe, E_fermi = 15.0) - gen_NUM(k_weights_qe, eigs_qe, E_fermi = 15.0))\n", - " # Generate band energy\n", - " ra_eband_M1 = np.append(ra_eband_M1,gen_eband_M1(k_weights_qe, ra_en , eigs_qe, E_fermi = 15.0)*Ry2eV - gen_EIG(k_weights_qe, eigs_qe, E_fermi = 15.0))\n", - " print(\"{0} {1} {2} {3} {4}\".format(n_egrid,ra_enum[-1],ra_enum_M1[-1],ra_eband[-1],ra_eband_M1[-1]))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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5phuN9b3798/0/qkgYCAALp27crmzZspV64c+/fvZ9SoUXbtevfuzeXLl3nooYf46quvCA0NtdpesGBBPvzwQ0aMGMHNmzd55JFHuH37dur2/fv3s3PnTgIDA/n4448JDg62O0fVqlWZPHkygYGBvn+jLvBEfIQBa6WUVx01SNm2FiiW3o5lRaSUme8YyygsA081Go1THMV8HDp0KDVeIikpiUmTJhEdHU2BAgWsBov9+/fTt29fypYtS2BgIMHBwZQrV44HH3yQxYsXp7YrU6YMgwcPBuCTTz6xiht47LHHPOpzeHg4rVu35vfff+evv/6y2nbx4kW+//57oqOjqVOnjoMjKI4dO8bQoUOJjIwkb9683HPPPbRq1Yqvv/7atP1LL72EEII33niDEydO0LdvX0qUKEH+/PmJiYlh0aJFqW3XrVtH+/btCQkJoUCBArRu3ZotW7Y47MuFCxd48cUXqVGjBgUKFKBAgQLExsby/vvvk5RkP59p7969EULwxRdfcPDgQXr16kVYWBh58+alSpUqTJ482Sre4fbt2wghePPNNwF4+eWXrb6DN954w+ln5QkhISH873//A+Dzzz/n/PnzqdtWrlzJpk2bCAwMZOrUqQghHB5n4sSJFC1alMOHD1t9J+fOnQMgODg4810qbuCJ+DgJuCOPAoFT3nRGCFFZCPGUEOILIcR+IUSyEEIKIbq5se8jQoh1QojLQogrQojNQognhBA6ndgRvXvDL7/AmTP+7olGk61JTk6ma9euvPLKK5QoUYLOnTtTtWpVALZv305sbCxz586lQIECdOrUKTXW5KeffuKTTz5JPU737t1p1KgRABUrVqRfv36pS+PGjT3u14ABAwDsrB9fffUVN2/eTN3uiPXr11OrVi1mzJhBQEAADz74ILGxscTFxdGrVy8GDhzocN8jR44QExPD+vXradGiBbVr12br1q1069aNBQsW8O2339KqVSv+/fdf2rRpQ3h4OL/++istWrTg8GH7uUl37NhBdHQ0EyZM4PLly7Rq1YrmzZtz5MgRnn76aTp27GgqQAC2bNlCTEwMmzdvplWrVjRq1IhDhw4xatQoRo4cmdouICCAfv36ER0dDUDt2rWtvoOaNWs6/bw8pVOnThQuXJikpCTWrFmTuv77778HVMxI8eLFnR4jf/78PPzww1b7QVrMUnx8PF98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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_enum), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_enum_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_num_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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00/cdNNNbvu48847iY2N5a677mLixInkyZPHrXzz5s28++67ZMlyWXMSp4pQjniI4CYOvAE4kDpzLFcETz4Jb70Fx46F2xKLJVORK1cuKlWqRExMTLhNCZo+ffqQJUsW3nvvPZ/lzvp+/fplmE0WyJIlC126dGHVqlWUKVOGrVu3Mnz4cK96vXv35vjx43Tt2pWPPvrITaAA5M6dmzfffJMhQ4Zw/vx5evXqxcWLF5PKt27dyvr164mIiODtt9/2EigAN954I+PHjyciIiLtTzQFQhEpy4Haxhi/oRxjTGugIrDkMu2yZGbKlIGOHWHChHBbYrFkKvzlpOzYsSMpnyM+Pp5x48ZRvXp1oqKi3BqVrVu30qdPH0qVKkVERAR58uShTJky/Pvf/2bu3LlJ9UqWLMk999wDwLRp09zyGnx5QwIRExNDy5YtWb58Odu3b3crO3r0KF988QXVq1endu3aAfezZ88eBg0aRNmyZcmRIwfXXXcdLVq04OOPP/ZZf9SoURhjeP7559m3bx99+vShaNGi5MqVizp16vDZZ58l1V26dCnt2rWjYMGCREVF0bJlS1YHmKH9yJEjPPnkk1SrVo2oqCiioqKoW7cur7/+OvHx8V71e/fujTGGDz74gG3btnHHHXdQuHBhcuTIQeXKlRk/frxbPsbFixcxxvBCojf5qaeecrsGzz//fMDvKhQKFizIq6++CsCMGTM4fPhwUtn333/Pb7/9RkREBBMnTsQEmLrkpZdeokCBAuzcudPtmhw6dAiAPHnyZHgoJxhCESmvor15PjPGtDHGuG1rjLkFndfnIvBm2ployZQ88YQm0J46FW5LLJYrhoSEBLp06cLTTz9N0aJF6dSpEzfeeCMA69ato27dusycOZOoqCg6duyYlAvzzTffMG3atKT93H777TRq1AiAChUq0Ldv36SlcePGIdvVv39/AC9vykcffcT58+eTyv2xYsUKatasyZQpU8iSJQv//ve/qVu3LsuWLeOOO+5gwIABfrfdtWsXderUYcWKFTRr1oxatWqxZs0aunXrxuzZs/n0009p0aIF//zzD61atSImJoYffviBZs2asXPnTq/9/f7771SvXp0XX3yR48eP06JFC5o2bcquXbt46KGH6NChg0+hArB69Wrq1KnDqlWraNGiBY0aNWLHjh0MHz6cYcOGJdXLkiUL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3TRlyhR22WUXVq9eXekzRASUpNRrN998Mz179ky6rUePHhknKdOnT2e33Xajb9++zJ49myVLlvDjjz8yduxYjj766KTHmjBhAhs3buSNN97I6DVGjx7NaaedxpZbbslDDz3E+eefz5IlSzLatz6YOHEiQ4cOrZSkTJw4kYEDB9KoUSO++OKLWoqutJ177rmceOKJ7LPPPvTt2zen2pAZM2awzTbb0KtXL957770CRFk3TZw4kX79+nHqqafy4IMP1nY4UoSUpJSoHj16ZPTLZdWqVSxYsIAuXbrQsGFDBg4cyCuvvML48ePp2rUr7du3T5qkjB8/no4dO2bUqHbFihU899xz5ff7+/bty+mnn551d+e3334746So2EycOJFzzjmHGTNmsHbt2grr+/btS58+fXSroBY8+uijTJ06lWuvvRYg5ySlpv6Oa9asqVPtO2Ln5ZRTTuHxxx/PuJ2clI6qkpR2ZrZf4qOKbe0KHLPkQffu3Zk+fTobNqQf627GjBnsvPPO5fP9HHzwwYwbN45nnnmGwYMHA7D77rvz0UcfVbhXP378eK644oqMkpSnnnqKAQMG0KZNm/J1V155JWPHjs2qV8vIkSO55pprMi5fLL766iuWL1/OHnvsQZcuXZgyZUr5ttiHeK5fjpK7d999lwsuuIDHHnuMLbfcEiDnJKOm/o4vvfQSI0aMYPbs2QV7jXyKnZcddtiBPfbYg+eff762Q5Ji4+5JH8BGYEOuj1TH1SP1Y8899/SatNNOO/lHH32Utsz999/vw4YNK3/++eefe7t27bx9+/Y+a9as8vVdu3b1KVOmuLv7/Pnzfeutt/a1a9d606ZNfdmyZWlfY9999/Vnnnmm0vrBgwf7mDFjMnovy5cv96ZNm3qzZs2qfL1i89xzz/nBBx/s7u6/+tWv/LbbbnN39/Xr15efv9dee8379etXm2GWlDlz5nj79u39ueeeq7B+3bp1GV3Tibp16+aTJk3yuXPneps2bXzjxo35DLfcKaec4i1atPBbb721IMfPpyVLlnjz5s19w4YN7u4+ZswYP+KII2o5KqkNwCRP8b2YriZlXjUfUuQyueUT69kTs+OOO9KkSRNatmxJly5dKhwrdstnwoQJ7LfffmyxxRb069ePN998M+XxP/vsM2bOnMnhhx9eadvgwYN59tlnM3ov//znP9l3330ZOHAgL774Ykb7FIt3332Xvn3DjA/xv7Q/+ugjOnToQMuWLenVqxfTpk3TeBI14Pvvv+eoo47i0ksv5eijj66wbfPNN6dnz55kMzL0ihUr+OKLL9h9993Zbrvt2GyzzZg3L/8fkevWreOFF17ghhtu4Jlnnsn78fPtvffeo3fv3uW9D3/xi1/w9ttvs2jRolqOTIpJyiTF3Xdw9065PmryTUhuEtuSLFq0iEGDBrFy5crydbGePfEGDx5caYC4+GONHz+eAQMGADBgwIC0t3zuu+8+Tj75ZBo1alRp25FHHskrr7zCmjVrqnwvzz77LMccc0xWiU06d999NzfccEO1jwNw//33p50vKVblDRWTlPj1zZo1Y8cdd8ypZ0l9tGHDBo466ihmzJiRttwLL7zAueeem9Wxhw8fzl577cVFF12UdHu2t2wmTZpE9+7dadiwIWaWl1s+Dz74IFdffXWFdW+88QY77rgjp512GlOnTq2xhucjR45k1KhRWe83ceJE+vTpU/68SZMm/OIXv+CBBx7I+Bjr16/niCOO4OOPP6607ZZbbqlT7XMkhVRVLHrU/9s9Y8eO9QMOOKD8+YUXXuiNGzf2G2+80d3dN27c6FtvvbUvWLCgwn7r16+vVF396quv+j777OPu7p07d/apU6e6u/sbb7zhPXv2TPr6S5cu9VatWvmcOXNSxjhw4MBKVe6J1q5d6y1atPBFixb5119/7c2bN/fVq1en3Sed77//3svKyrxly5b+1Vdf5Xwcd/eVK1d627ZtvUWLFr5w4cJK2zds2OAtWrTwJUuWlD9v3ry5L1myxM866yy//fbby8ueeeaZfscdd1QrnvrikUce8caNG/txxx2XssyGDRt8l1128a222qr8eqzKhx9+6G3atPEVK1akLPP000/7kUcemXGs119/vV944YXlz//nf/7HL7744oz3T7Rq1Spv166dt2jRwufPn1++/vzzz/frrrvO3d2HDBnio0aNyvk1MrVgwQJv0aKFt23b1letWpXVvocccog/++yzFdZ99NFHXlZWlvb8xxszZow3btzYTzjhhArrly5d6i1btvTWrVv7d999l1VcUvPI8XaP1HOx2g93Z/HixTz00EP84x//4NZbb2XVqlUsXrwYd6d9+/YV9mvQoAFmFWdM6N69O1OnTmX+/Pl888037LrrrkCYmHDWrFlJZ1C+9dZbOfbYY9l+++1TxphJzchrr71Gt27daNeuHa1bt6ZHjx688sormZ6GSu644w4OOuggTjjhBG655ZacjwNwzz33sO+++3Laaadx0003Vdo+a9YsWrVqRVlZGQCbbbYZvXv35r333qtQkwK59yypbzZs2MDIkSN57LHHmDBhQsralKeffppmzZpxzTXXZNygeuTIkVx88cU0bdo0ZZnY3yF8tlYt33/He++9l7322oszzzyTG2+8EQg/NmPjFkH4f1MTt3xuuukmzjjjDPbee2/uueeejPdz9wq3OWO6du3KoEGDuPPOO6s8xoYNG7j22mt5/PHHee211yrUptx6660MGTKEww8/nL/8RXPd1mmpshc96n9Nirt7+/bt/YsvvvCLL77YR4wY4e7uxx13nN98880+btw4HzBgQMbH2n777f3qq6/2wYMHV1g/aNAgf/755yusi9WifPHFF2mPOWfOHG/durWvW7cuZZmzzz7bb7755vLnf/rTn/yMM87IOO54sVqUjz/+2OfNm+etWrUqr+XIVuwX77Rp03zhwoXesmVLX7RoUYUyDz74YKVfgVdccYVfcsklvtVWW/kPP/xQvn7q1KnepUuXnGKpTx599FHv37+/b9y40W+88UY//vjjK5XZsGGDd+vWzceOHVtemzVt2rS0x50xY0bGv+I7dOjgs2fPrrLcxo0bvX379hXKLl++3Js0aeI//vhjlfsnWr16tbdv394/+OADX7Rokbds2dIXLFjgkyZN8s6dO5fXcH777bferFmzjGskchF/TU+ZMsXbtWuXcW3KrFmzvGPHjkm3zZgxo8raLHf3hx9+2PfZZx/fuHGjX3/99X7SSSe5e8XPlk8++US1KXUAaWpSav2LWY/aTVIOP/xwv+eee8o/7Nzdp02b5u3atfNrrrnGzz///IyPNXjwYG/btm1575SYa665xi+55JIK637/+9/7WWedldFxe/bs6ePHj0+6bcOGDd62bVv/9NNPy9d98cUXXlZW5uvXr8849pjrr7/eTzzxxPLnv/71r/2yyy7L+jju7rfccosfe+yx5c9HjBjhF110UYUyv/71r/1Pf/pThXXPPfect2rVqlJvnvjePqVq/fr13rVrVx83bpy7u69YscLbtGnjM2bMqFDuySef9D59+pR/ad98880+ZMiQtMc+4YQT/Prrr88ojmOOOcYfe+yxKsvNmzfPy8rKKt0e7datm7///vsZvVa82267rcKPgIsuushHjBjhf/jDH/y3v/1thbIHHXSQP/3001m/RqYuvPDCCrexjjnmmIx7FY0ZMybtrbrjjz++/LZzMuvXr/edd97ZX3nlFXev+OMi8bNl2LBhPnLkyIziktqhJKWOPGojSfnDH/7gLVq08PPOO6/C+mOPPdabNm3q9957b8bHuuaaaxwo74oc8/rrr3v8e/vmm2+8VatWGf0SjR03/sMw3ltvveW77rprpfXdu3f3CRMmZBy7e/jCKysrq9Ate+7cud6qVSv/+uuvszpWrBYlvi3EggULvGXLlr548eLydT169PC33367wr6LFi1ywC+44IJKx91vv/38pZdeyiqW+uSxxx7zfv36VfjSv/766yvURsVqUV588cXydbHalOnTpyc9bqwtxPfff59RHIntTFJ56qmnkrZfOf300/2uu+7K6LViYrUokydPLl8Xq03ZYYcdKl1Hd911l5988slZvUamYrUo8e2sPvjgA2/fvn1G7cHOPfdc/9///d+U26tqG/TII4/43nvvXeE6uO666/zII4+s9Nkya9Ysb926tS9fvjyTtya1IF2Ssnmt3muSWtejRw/WrFnD5ZdfXmH9H//4R/7+979X6H6cybFatmxZqTdQnz59mDlzJpdffjlmxrRp0zjmmGPo1CmzTmCDBw/m4IMPpnHjxpW2/ec//ym/D5+4z5VXXkn//v0zjv/jjz9m0KBBdO3atXxdx44dOe644xg2bBjdu3fP+FiffPIJ/fv3r3D+OnTowNChQxk2bBh77rkn7s7MmTMrHbddu3Z07NixQs+HmL59+3LzzTdnNEheffTkk09y1113VWgTde6557LTTjtx6aWX0rBhQxYvXsxWW23FYYcdVl6mSZMmXHLJJZx11lkMHDiw0nFff/11LrroIpo1a5ZRHH379uXMM89Mek3Ge+uttzjooIOS7n/fffdl1RX5s88+o0+fPvTo0aN8Xbt27Tj11FN57LHHKrXvOProo7niiiv43e9+l/FrZGrSpEmccsopFdqrde/enb59+zJs2DA6d+6cdv8XXniBv/3tbym3d+vWjQEDBjBs2DB+9rOfVdr+xBNPcO+991a4Ds477zxuueWWSp8tXbp04dBDD2Xo0KF069Ytm7cpKVxx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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_eband), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_eband_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_band_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 2.2844601319465028 16.296672267803615 -31.5760293714593 126.32406658093532\n", - "11 -51.07276969076406 -50.93051740535441 -464.8976302275223 -422.3963633530029\n", - "12 -12.617757114842561 -11.331995734633779 -165.7696424022165 -120.16216349047363\n", - "13 19.438226077840454 21.8087115071487 94.92524901155366 144.6263508188281\n", - "14 46.001438205327986 51.421265754918295 319.03681048251383 389.8194781820275\n", - "15 -49.51921831823677 -50.677594031309695 -417.80241810279404 -401.3243152956279\n", - "16 -21.62432515936166 -22.112666764344908 -205.71928241672822 -187.74413272350694\n", - "17 3.833245985509393 3.517760524066489 -5.312123682076617 11.431645774023764\n", - "18 26.402839965808198 27.10744314317617 177.57206300248208 200.71705587410042\n", - "19 7.342617454117772 7.294689499493643 40.56041050339218 56.46768007854416\n", - "20 -27.97135342934098 -28.708932084874505 -239.1490731216877 -230.85355150670193\n", - "21 -7.142532683850959 -7.547194104271057 -78.334210310858 -69.1433146302038\n", - "22 11.925405093150516 12.209830905257945 72.53975359934793 86.33042889856779\n", - "23 27.535109498416432 28.325450922862842 199.47040776967242 216.60705064542572\n", - "24 -28.092184730298754 -29.02590731807993 -230.8001535680105 -228.13022788640637\n", - "25 -14.71789337426003 -15.3807140972865 -129.6787740064119 -126.17984706301604\n", - "26 1.6816974579397765 2.0965605020566045 -1.8920454650865395 9.382142510321955\n", - "27 16.750528667170556 17.69101635610832 117.8631302020417 133.03108963981367\n", - "28 4.2762141842290475 4.312580740040289 25.561363596274077 33.326184761250715\n", - "29 -19.755391164191792 -20.750394700052198 -163.7895003374706 -164.99777259925804\n", - "30 -5.801392851055994 -5.7308386401754206 -56.28440039778161 -49.7620829244097\n", - "31 7.711896904157811 8.826553332834578 49.7256418264742 64.19546090519862\n", - "32 17.037060319867464 18.072567871616798 124.91414974506688 138.66438223878413\n", - "33 -17.238415182867357 -18.38526145840774 -140.39916334374766 -144.0596706435108\n", - "34 -11.45429430964623 -11.749636152089238 -97.34153058012362 -94.9826919319953\n", - "35 0.6789763654263652 1.3924845188926156 -3.0731351649214957 6.952497149489773\n", - "36 11.715067534199761 13.01655751379326 84.01085188676234 98.55148827586981\n", - "37 2.595047748385241 2.6828736957404544 15.692291423329607 20.67947741016451\n", - "38 -14.855878969712194 -15.622801534825726 -121.42590228129666 -123.53479600669061\n", - "39 -4.946339366912525 -4.570144908957445 -45.15736463183521 -38.67368738441019\n", - "40 5.549917945958214 6.615776817788287 36.88618313252982 48.71559960693958\n", - "41 11.290497519822566 12.416298224011825 83.16137581524936 95.41231660144831\n", - "42 -11.150879173693284 -11.883714241874259 -90.58246953619118 -92.99286073427902\n", - "43 -9.325371552410957 -9.312337315413856 -77.74492816245447 -74.67441673834355\n", - "44 0.20794680927281206 1.117655849598009 -3.764724268585269 6.186017942949093\n", - "45 8.6441434358876 9.67746369409474 62.63186135102251 73.51781666366787\n", - "46 1.7285843061331434 1.976266479149217 10.443362025347597 15.19613687636911\n", - "47 -11.362865754657832 -11.671983622101607 -92.18875114237244 -92.01876012304001\n", - "48 -4.279632913219871 -3.6341941284366612 -37.77584283475244 -30.354928851805653\n", - "49 4.1956040220592286 5.201039937787186 28.37910136668461 38.55197721468312\n", - "50 7.83492182556256 8.613596117144425 57.77988378757118 66.21928676018797\n", - "51 -7.5203685321585 -7.695766376552683 -61.11090180984729 -60.2010032299454\n", - "52 -7.679917372984164 -7.459185806991513 -63.305274395173456 -59.519500718965446\n", - "53 -0.046026870597870584 0.8473952776997749 -4.137482571275541 4.8135663946877685\n", - "54 6.523006458377836 7.489707359800377 47.501241368865976 57.01191940929084\n", - "55 1.2125862600364599 1.5063915986843313 7.268289250656835 11.549932550123685\n", - "56 -8.70974344020351 -8.792677025338435 -70.40539282756663 -69.20046183114982\n", - "57 -3.701196738890303 -3.027382235577079 -31.9952803767992 -25.034601753106017\n", - "58 3.2331346085707082 4.092376198238412 22.052522612791563 30.43504841380627\n", - "59 5.601147186591334 6.360626047987807 41.27850135658218 48.89752608901699\n", - "60 -5.234609228248701 -5.26900307610515 -42.62258689669852 -41.22634033404711\n", - "61 -6.290859270816327 -5.936007217585711 -51.52693625965139 -47.22415735026834\n", - "62 -0.1922651790960117 0.5756020511911402 -4.30067627336075 3.14192839105408\n", - "63 4.96345120851538 5.802576605130298 36.21476622379623 44.20740531207002\n", - "64 0.8862172814026508 1.2484189069506328 5.25213095974641 9.548330599251585\n", - "65 -6.66643551242521 -6.527719194754809 -53.80649482211584 -51.33352745444472\n", - "66 -3.164725508108745 -2.601039748196172 -27.03092750944643 -21.33819287451297\n", - "67 2.4917104317723897 3.2645302289744222 17.030831849876904 24.322035158430026\n", - "68 4.092587647611367 4.765723376068422 30.079599450341448 36.61899021924273\n", - "69 -3.721359245407939 -3.551576728189616 -30.400386008068836 -27.815635864646538\n", - "70 -5.106358706642254 -4.758609505402546 -41.654331307674966 -37.78771328578614\n", - "71 -0.27701622762037914 0.32293278358429234 -4.319045286549226 1.4814301908354537\n", - "72 3.7910714014853966 4.547776744901967 27.610469287974865 34.657348325477415\n", - "73 0.6685067758163541 1.0873134023895545 3.923821848476109 8.298889900967424\n", - "74 -5.088865505398644 -4.846730564742984 -41.09669440727521 -38.108487413961484\n", - "75 -2.6746760464767476 -2.2871725316235825 -22.67081409027969 -18.641623269562388\n", - "76 1.903313802971752 2.5812796249214216 12.974389264208185 19.23729542219371\n", - "77 3.034378265829446 3.6417139942627728 22.226129426832358 27.958960157709498\n", - "78 -2.6773605568175753 -2.359177718355795 -21.99480127500692 -18.512726141332678\n", - "79 -4.100738024002567 -3.827865123268907 -33.43631597033709 -30.3622037698683\n", - "80 -0.32745016407784533 0.11922850629616732 -4.2476918621819095 0.11552766778868317\n", - "81 2.887419765405639 3.5873104660904573 20.99928495048789 27.331060864792107\n", - "82 0.530209976664537 0.9922461054876521 3.0560803453004155 7.562632934076646\n", - "83 -3.8841681862654696 -3.606624664344963 -31.402791044946753 -28.369130364965713\n", - "84 -2.2371399075484533 -1.995726241396369 -18.89625312308408 -16.191936159500983\n", - "85 1.4376394726806438 1.9931378563412636 9.71769398596507 14.833134997460093\n", - "86 2.278829420357283 2.8768981586947575 16.60296372878429 22.06503032802766\n", - "87 -1.9442525513359215 -1.5996570432090493 -16.078218858996934 -12.588751016540755\n", - "88 -3.27227512585614 -3.090598064136657 -26.692271710596742 -24.49945579331552\n", - "89 -0.3506775978440828 -0.02712925530272514 -4.096512249184343 -0.8592644118475619\n", - "90 2.2009836246575105 2.8145420130957746 15.928091301494533 21.42454534801891\n", - "91 0.42628968044471094 0.9063221957817404 2.431366695810084 6.898147110959144\n", - "92 -2.9612522847789933 -2.717380699879641 -24.010574069141057 -21.39215225265025\n", - "93 -1.8583786824269737 -1.700102599725824 -15.675535852669782 -13.757368844226221\n", - "94 1.0722951971292787 1.5143604931191703 7.139178498213823 11.23625624297847\n", - "95 1.7272070190313116 2.3061021615533264 12.51148002676382 17.665293214868598\n", - "96 -1.4191895806254706 -1.0695595733699292 -11.843938236113445 -8.455083257424121\n", - "97 -2.6005534484161217 -2.4935014772347586 -21.238697642147145 -19.76293254244456\n", - "98 -0.3541149801397978 -0.13318063314954998 -3.8841072128157066 -1.5584179680704437\n", - "99 1.675712707482944 2.1996622415535967 12.041650171238416 16.720299553454424\n", - "100 0.3518708347023676 0.8318849741351642 1.9769158043977768 6.323539691812584\n", - "101 -2.2629553984500035 -2.069933164989152 -18.411606724299418 -16.314465975268376\n", - "102 -1.5344673934466755 -1.4445334914087198 -12.937323842630576 -11.667448936968412\n", - "103 0.7878993185643139 1.1438610423600721 5.1348249866882725 8.453397090809176\n", - "104 1.320584042241876 1.8487629728527963 9.475911481774801 14.140257331491739\n", - "105 -1.0401012680990789 -0.7118252047044962 -8.781078122656254 -5.665074190522773\n", - "106 -2.05905352628929 -2.0013761623009714 -16.85901112572128 -15.867329573942243\n", - "107 -0.34752300371189904 -0.1738756204301808 -3.6346764077966327 -1.7789036202780153\n", - "108 1.2752463712151894 1.71755219511806 9.074459488210323 13.03086496842434\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "109 0.29219512948805004 0.7502252984742199 1.6191282202021284 5.693631240757895\n", - "110 -1.7293844850763662 -1.5842363392348489 -14.145657927382672 -12.506592987315798\n", - "111 -1.2633904726218361 -1.213897331353337 -10.658278606282238 -9.794505900155855\n", - "112 0.5712791670318893 0.8646335836276648 3.597423014852666 6.358180364034979\n", - "113 1.0149553047489235 1.467350135315428 7.208174692555531 11.200508907802941\n", - "114 -0.7649856336010998 -0.4731751859153519 -6.543294953270561 -3.8024365582868995\n", - "115 -1.6282378032370843 -1.5934170162646524 -13.37910224058578 -12.64381583077693\n", - "116 -0.32847751256917945 -0.192777248234961 -3.3445826962179126 -1.8523984913326785\n", - "117 0.9670622329313119 1.3267142433576282 6.8005195477221605 10.039752135971412\n", - "118 0.24449778848463666 0.637634835933568 1.3255816748396683 4.824437433661842\n", - "119 -1.3251309329752985 -1.2024464414889735 -10.900954370308682 -9.513979101207042\n", - "120 -1.0339219833242623 -1.0012340452080934 -8.752696430801734 -8.079624505658558\n", - "121 0.4055388256244896 0.6400011277755766 2.4368196085779346 4.6713675742162195\n", - "122 0.7803779758652354 1.1697492195150971 5.4746088313881955 8.908367114682278\n", - "123 -0.5617181194696741 -0.317263929425053 -4.897055443867885 -2.583785931026796\n", - "124 -1.2847131561461538 -1.257270518557334 -10.604455750640682 -9.99113817541911\n", - "125 -0.3042566126736119 -0.19467401721897204 -3.0430649773884397 -1.8089691465461328\n", - "126 0.7274316168602581 1.0244581856386503 5.042826305092149 7.728355552711491\n", - "127 0.20610182076859473 0.5226639885033819 1.0872761106907092 3.937429550919205\n", - "128 -1.0141469008083277 -0.9039375923687203 -8.408261989903622 -7.174230081596306\n", - "129 -0.8460383338957627 -0.8143981030306122 -7.189896418792159 -6.578594932419492\n", - "130 0.2793332492419722 0.4730163637282203 1.5577240706165867 3.419505248801215\n", - "131 0.6028177272143012 0.9094968232377596 4.161813748257828 6.904393884440651\n", - "132 -0.4124468033194262 -0.22200451200876614 -3.6758501206854817 -1.8373415316486899\n", - "133 -1.0139952620700114 -0.970279387613914 -8.418584158435351 -7.729394849118762\n", - "134 -0.27844968143995175 -0.18037200999106062 -2.749678438873161 -1.650182342165408\n", - "135 0.546551743534792 0.7770049885941717 3.7168123863025357 5.83626742372644\n", - "136 0.1722548487534823 0.4188600435529679 0.8774775175215836 3.1374262213407746\n", - "137 -0.7781071269176891 -0.6833999624237777 -6.511932174692902 -5.444925346104355\n", - "138 -0.6904581518492705 -0.6448701757365143 -5.900149444024464 -5.222298774437149\n" - ] - } - ], - "source": [ - "emin = dos_qe[: , 0][0] - 1.0\n", - "emax = dos_qe[: , 0][-1] + 1.0\n", - "n_egrid_max = int(len(dos_qe[:,0]))\n", - "#n_egrids = np.int32(np.arange(1,11)/10.0*n_egrid_max)\n", - "n_egrids = np.arange(10,n_egrid_max)\n", - "ra_enum = []\n", - "ra_eband = []\n", - "ra_enum_M1 = []\n", - "ra_eband_M1 = []\n", - "for n_egrid in n_egrids:\n", - " ra_en = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = ra_en[1] - ra_en[0]\n", - " # Generate electron number \n", - " ra_enum = np.append(ra_enum,gen_enum(k_weights_qe, ra_en, eigs_qe, sigma_mod) - enum_ref)\n", - " # Generate band energy\n", - " ra_eband = np.append(ra_eband,gen_eband(k_weights_qe, ra_en, eigs_qe, sigma_mod)*Ry2eV - eband_ref)\n", - " # Generate electron number \n", - " ra_enum_M1 = np.append(ra_enum_M1,gen_enum_M1(k_weights_qe, ra_en, eigs_qe) - enum_ref)\n", - " # Generate band energy\n", - " ra_eband_M1 = np.append(ra_eband_M1,gen_eband_M1(k_weights_qe, ra_en , eigs_qe)*Ry2eV - eband_ref)\n", - " print(\"{0} {1} {2} {3} {4}\".format(n_egrid,ra_enum[-1],ra_enum_M1[-1],ra_eband[-1],ra_eband_M1[-1]))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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U3Ei8lN8QpOxa9m0JT/88ANvvPFGxP477riD/Pz8kH2HDx9myZIlbN26FavVittX8G/r1q0A7Ny5k7Fjxx7Tenr16oXRaOSjjz7iySef5Prrr6dbt24xxw8dOjTQRHLWrFmce+65JCQkHPX1d+7cySeffMLu3btxOp0Bd4Pb7cbj8bB7924GDBgQcV6sVNNevXqxfft2DrZTiwf/+jSao48qkDF+14QQ/PGPf+T222/n/fff58svv2T9+vX88MMPHD58mBdffJF///vfLFu2jEGDBh319U8GWiM+1gJntNdCFK3HYrGQptGQaDDgiFGxtKysjGwpI8VHfj5lK1d2xDIVJyIddCM/EfE/GccqBHXXXXdx111HjLz5+fkUFxdHjJs7dy533303Lpcr5rXsdvsxrhaMRiOvvfYa06ZNY+bMmcycOZPc3FyGDx/O2LFjmTRpEomJiYHx9913H1999RXLly/noosuIiEhgf79+3PeeecxefLkFse5uN1ubrvtNubNmxfzZtzUa+waFmfmJyUlBYDaZhpiHi1+y1ZwUKn/M/dbhZrjUFAMXTQLWVpaGtOnT2f69OmA93dp/vz5PPzww1gsFm688cYQt48iktZIw6eBPkKI6e21GEXrsFgspAlBitEY8wugrKyMnIaGSPHRsyelMcylCsXPmYEDBwIck9n/u+++49Zbb6WhoYFnnnmGHTt2BKwCUspArEVTN+1oxApinDBhAvv27eP1119n2rRpJCcn8+677zJ16lR69eoVknmi1+v57LPP+Pbbb3nkkUc499xz2bZtG7Nnz6Zv37489thjLVrLc889xyuvvEJOTg4LFixg37591NbWBlIl/e6bWK/xWCwPx4I/viNYZPmtEOvXr6ehmV5YQKCqbXp6eoS1KxqdOnXizjvv5J///CfgtZ7tUgH9TdLa345/AC8LIT4WQtwihLhYCHFutK09FqsIJSA+zGbsMYRE2b59ZHs8YDaH7M85/XRK2+nJQ6E4kRk7dixCCL7//vuAe6S1LFq0CCklv/3tb7n33ns57bTTMBgMgYDD3bt3Rz3Pn9brjNHeIJqFxY/ZbOamm27i1VdfZceOHezevZvzzz+f4uJi7r///ojxZ511Fg8//DDLli2jsrKSf/7zn2i1Wh555BF+/PHHZl+jP1tn7ty5TJw4kby8vBD3TazXeDypqKhg6dKlAFx44YWB/eeffz7JycnY7faQFNxY+N1u/t+VlnLRRReFrEURm9aIjy+AWwEBXAy8BPwPWBFl+7xNV6mIisViIR1ISUvDHuPLrKywkOyUlAgff1qvXjg9nnYzfSoUJyqnnnoqEyZMAGDGjBnU19e3eg6LxQJAXl5exLGKioqQNM9gcnNzAdixY0fEsZqamkCp95bQo0cPZs6cCcD333/f5FidTseUKVMYNmwYUko2tyDeq6nX+Omnn55wN1ePx8Ntt91GbW0tp556KpdffnngmMlk4rbbbgO8bin/a4vGBx98wEcffYRWq+W+++4LOdacJWvfvn2B//s/a0V0WiM+vvRtK33bl01sX7XtMhXRsFgspHk8GDMycNTURB1Ttm8f2VEK6mjS0sjCK04UipONOXPmkJ+fz9dff80FF1zApk2boo7bsmVLVJdmr169AHjzzTdDrBgOh4Np06ZhjRGDdcEFFwDw1ltvhVgfampquPXWW0NuXn42btzIf/7zH2qi/I1/+OGHACEBqHPmzIlq2di7d28gDqGpgNXw1/jSSy+FuIP27NnDjBkzmj2/I9mwYQMXX3wx7777LgaDgfnz5xMXFxcy5tFHH2XAgAEUFxdz/vnnRwgwKSX//Oc/mTRpEgBPPvkkZ5wRGuZ41llnMXfu3Kifb2FhIb/61a8AGDZsWIve45OZFgecSilHteM6FEeBX3xos7Kwx7BglJWVkR2tGp8Q5Oh0lG7dSn7v3u28UoXixCIjI4PVq1dzzTXXsGrVKgYMGEDPnj3p06cPRqMRp9PJ9u3bAzfx0aNHh9xMpk6dyt/+9jc2bNhA9+7dGTlyJFJKvvzyS3Q6HdOmTeO1116LuO7IkSO57LLLWLJkCQMHDuScc85Bq9Wybt06NBoNU6dODcQN+CkuLmbSpEno9XoGDhxIXl4e9fX1bNy4kb1792I0GkPiOF5++WVuv/12unfvzhlnnEFycjJlZWWsWrWK+vp6Jk2aFLViazi///3v+eSTT5g7dy4rVqxgwIABWCwWVq5cyfDhw8nOzmb16tVH+xEcFYsXLw6kPDc0NGC1Wtm8eTP79+8H4IwzzuCNN94IxPUEk5iYyPLly7n66qtZvnw5/fr1Y+DAgZxyyimBxnIHDx4kPj6eZ599lnvuuSdijp07dzJjxgx+85vf0LdvXwoKChBCUFJSwtq1a/F4POTl5UXNllKEorra/oSxWCykNTZCTg72urqoY8oqKsg+++yox3IMBkqbqFCoUPycycnJ4auvvuLjjz9mwYIFrF69muXLl1NXV4fJZKJnz5783//9X9SbdWpqKuvWreOPf/wjn376KR999BGZmZlcddVVPPbYY8ydOzfmdd955x0effRRFixYwOeff05GRgZjx47liSee4B//+EfE+GHDhvHUU0+xcuVKduzYwfr169HpdOTl5XHPPffwm9/8JkQYPf744yxZsoQ1a9awevVq7HY7WVlZnHfeedx8882MHz++Re/P8OHD+e6775g5cybr1q3jgw8+oKCggJkzZ3L//fdz8cUXt/Cdbju+//77gIspMTGRlJQUCgoKGDduHFdccQUXXnhhkzEaqampfPbZZ/z3v//l7bff5ptvvmHbtm3odDq6du3KNddcwx133EGPHj2inv/VV1/x6aef8vnnn7N7926WLVuGy+XCbDYHhOWMGTMwGo3t8vp/TojWRmMHThRCB6QDdVLK2A60kxwhxDhgXM+ePW9u6+jn3Nxc1rhcHPrHP5g+eTIbo0RxZ+j1bL/tNjo9+2zEsRkFBZw5ejS3t7LXQnV1NQaDoUVj7XY7S5cupaqqiltuuaVV11EoFArFTxchxHopZdRSwq3OhRJC3CiE+A6oBvYDzwYdu1IIMV8IUXDUq/2Z0e69XRoaMObl4WhsjDheX1+Pva6O9ILoH0dOp06U+syVreHcc86JGjAXzP79+7nooovo0qULL7/wAveHBW4pFAqF4uSlVeJDCPE68E9gEFCDN/MlmB+BScCEtlicIjY1NTVIKUmqqyOlSxfsUkKY5ePQoUN00unQhHW09ZOTk0NpWVmrr122dSvl333X5JjPFi8m/scfOZiTw7ING3A7HDGD8BQKhUJxctFi8SGEuAm4EfgeGAxEPMpLKX8ASoDIpgKKNsVisZCWloZwu0nJyMAOEBaVX1ZWRrZGE1FgzE9O166UBvU/CD/3xhtvjHrM5nZja8ZiUvbll/RpbCR5wQKExUIBUKTiSxQKhUJB6ywfNwMOYJyUcoOMHSyyBcg/1oUpmsZisZCelgY6HYlJSTQC9WF592VlZd4CY7HER8+elMWojLp/82Y+f++9iP1ut5tqKbEGlR+ORunBg+SccgoMGADx8eQnJVHYjLVEoVAoFCcHrREfZwLfSimba9lnBaLf7RRthsViIc1shoQEhBAY4+JwlJaGjCkrLSWnvh5idHLM6dWL0hj1QVxFRVij9Kyw+4rz2GJ00fVTeugQ2UFFdgrS0ihqRStvhUKhUPx8aY34iAeil9EMJRNovni+4piwWCykpaSAr1xzilaLPSx+o7Sw0NvRNqwltp+sPn047HbTGCVY1WW1Ui1loEunH7+7xRqji66fMquVnKCeCPmdO1Ooeh0oFAqFgtaJj30009VWCBEH9AH2HMuiFM0TEB++XgspOh32MFdIWVER2U1k2WhzckgDDh2INGa5bDYg0sJh87XBtjUTPFrqdHrdLj4KevSgKKj5lUKhUChOXlojPpYCPYUQk5sY82sgB/jomFalaBaLxUKa0XjE8pGYiD085mP/frJ9raSjEhdHtlZLaZTWzy5fozprmGCw+Vw71mZahZfV1pIdVDk1//TTKWwmTkShUCgUJwetER/P4A04fU0I8aQQwl+/NlEI0VsI8RDwF6ASeL6N16kIo7Ky0is+fJYPY2IijrDMlbLycrJjBJv6yUlKojRKzY6A+AizitjKy73/xmhkB96OnY1SkhJk+cgfOJAih6PVLcYVCoVC8fOjxeJDSrkfuBJv3Mf9wHeABCYCW4FHgFpggpRSPeK2MxaLhTSD4YjbxWAIBIP6KausJDtKR8pgclJSKN0T6SXziw9bWBCrraKCThA1GDVw3cJCsoVAmM2BfeYzz0QrJZUxUnsVCoVCcfLQqiJjUsoVwOl4q5puw1torB5vjMfzwBlSypVtvUhFJBaLhTS9/ojbxWjEHhSHIaWkzG4nO0Z1Uz/Z6emURYnFcFVXA2ANC2K1VVbSTavFFqORHUDptm3k6HQQ3GOhc2dV60OhUCgUwFGUV5dSlkkp75dS9pVSJkspk6SUp0op7/RZRxQdgMViIS0p6YjlIyUlpPW3zWYjDkhupq2zKT09wl0D3v4tQEQ9D1tVFV2Tk7HGaGQHULZrF9nhvV/i4ry1Ptata3I9CoVCofj502rxoTgxsFgspAeLD5MJh89VAlBUVER+QkLMAmN+DEZjQGgE43K5EIA1TJjYrFa6ZWRgi9LEzk9pYSE5QS4XPwXp6UdV66O6uprNmze3+jyFQqFQnJgclfgQQuQKIa4VQtzn264TQnRp68UpYmOxWEhLSAi4XYypqdiDRERxcTHdhGiR+HBGid9w1dSQhdfSEYzVbqdr587YotQG8RMry6YgN/eoan189tln3H333a0+T6FQKBQnJq1tLNdJCLEAKALeBv7k294CioQQC4UQmW2+SkUEAfHht3ykp2MPEhFFRUXku93Niw+Tieoo8Ruu2lpydLqIZnA2p5Osbt2QQG2MuI/S8nJyojSzy+/Rg8KjqPVhLy3FehTddxWKWOTn5yOEaHJbvHhxYPxnn32GEIIxY8Ycx1W3jJEjRwZew+TJTVVGgAceeCAwtmfPnh20wp8/Xbp0Cfld0mg0pKSkkJeXx4UXXsiDDz7I1q1bWzRXXV0dc+bM4cILLyQ7OxudTkenTp0455xzeOaZZ0Is3tGorKzkoYceYtCgQaSkpKDT6cjJyWHAgAHcfPPNvPHGG3g8nrZ42a1C29KBQog04CvgFMADrMYrQsDby2UY3m62/YQQw6WUlijTnHQIIcYB49ryD7uuro76+noMQhwRHxkZ2IPEQPHevXSrq4NOnZqcK9lspjpK/Iarro7OyclYw36xbS4X5rw8THiDTxODSqj7KausJGfUqIj9BX36UPThhy14haHYN2zAum9fq89TKJrj4osvjpmO3rVr1w5ejZd58+Zx8803M336dObNm3dMc73//vvY7XZSUlIijjU2NvLWW28d0/w/V/7whz/wxBNPMGvWLP7whz8c9TyXXnopmZne53GXy0VFRQVr167ls88+46mnnuKKK65g7ty5gTHhbN68mSuuuILCwkJ0Oh0jRowgJyeHyspKvv76a1atWsWf//xn3n33XUaOHBlx/tatWxkzZgzl5eUYjUaGDBlCVlYWTqeTzZs3M2/ePObNm8fEiRNJTEw86td5NLRYfOBNpT0VWA7MkFKG5GcKIboDLwFjgIeBO9tojT9ppJQfAh8OHjz45raas6qqytvRtr7+SLZLZiaO+vrAmKKtWxmRnQ3apj9iQyzxUV9PV7OZsrB6HrbaWkyZmZg1Gqz795MVRXyU2u1kd+8esb/bwIEUOZ1IKRHBmTDN4LBasQa9NoWirXjggQcYFUUohzNixAi2b9+OITyQ+gRm8ODBrFu3joULF/KrX/0q4vjSpUs5ePAgQ4YM4TvV9LFdePDBByNEgcfj4YMPPuDuu+9m8eLF7Nixg9WrV5OamhoybufOnZx77rnYbDYmTpzICy+8QEaQO9vpdPL73/+eF154gTFjxvDll18ydOjQkDmuv/56ysvLueGGG3jxxRcxGo0hx3/44Qdee+01NJqOD/9szRWvACqAK8KFB4CUci9wFXAYbz0QRTtRWVlJWloa1NcfKTKWmYk9KAi0eM8euvXp0+xchrQ0nFGCR1319XTOysIW1njOVl+PKSsLk1YbUQPET2lNDTm9ekXsTz79dIxAua9QWUtx2GxYGxubLVAmpWTv3r0sWLCAe++9l++//75V11EoYqHX6+nVqxd5zdTNOZG48cYb0Wg0vP7661GP+/dPmTKlw9akAI1Gw5VXXsm6desoKChgx44d3HfffRHjJk+ejM1mY/z48fz73/8OER4AycnJPP/889xxxx3U1dVx3XXXhfTi2rFjB5s3b0an0/Hyyy9HCA+A008/nWeffRad7yG2I2mN+MgEVkopI1MjfPiOrQSatvUrjgmLxeIVH3V1R9wuOTnYGxvB57srKi8n/6yzmp3LkJZGdTTx0dBATm4u1rC4DltDA6bcXMw6HdYo4sPtdmNxu+kUVFo9QOfO5EtJ4Y8/Rl1LfX19VN+jw+GgEaJm5QRz9dVXM3LkSBYuXMiGDRt45513mhyvULSUWDEfu3fvDsRLNDQ0MHv2bPr27YvBYAi5WezYsYMbb7yRbt26odPpMBqNFBQUcNVVV/H+++8HxnXp0oWbb/YaSV999dWQuIFo1oumyMvL44ILLuDrr79mV1igt8Vi4b///S99+/Zl4MCBMWbwUlRUxIwZM+jevTsJCQmkpqYyevRoFixYEHX8H/7wB4QQPP744+zbt48bb7yR7Oxs9Ho9gwYN4r333guM/eqrr7jkkktIT0/HYDBwwQUXsH79+phrOXz4MA8++CBnnnkmBoMBg8HA4MGDee6552iI8j02efJkhBC8/fbb7Ny5k2uvvZbMzEwSEhLo3bs3zz77bMh3jtvtRgjBE088AcAf//jHkM/g8ccfb/K9ag3p6en89a9/BeDNN9+kIqg9xqeffsp3332HTqfjxRdfbNJS/PTTT5OWlsaePXtCPpNDvjIJRqOxw10qLaE14uMA0BJ5pAMOHt1yFC0hRHz43S6pqdiFAKcTh8NBbX09GSNGNDtXcqdOVEfratvYSOeCAqxhf9C2xkZMubmYEhICpdaDOXTwIOmANkrAKXFxFOj1FG3YEHUtv/nNb1i4cGHEfofP9ROe9hvOt99+y7fffst7773H7dOns1lZPhQdhMfj4corr+Shhx4iOzubyy+/nNNPPx2ATZs2MXjwYN566y0MBgPjxo0LxJp8/PHHvPrqq4F5rrnmGkb4/m5POeUUbrrppsB29tlnt3pdU6dOBYiwfvz73/+mrq4ucDwWq1evpn///sydOxeNRsNVV13F4MGDWbVqFddeey3Tpk2Lee7evXsZNGgQq1evZtSoUQwYMIANGzYwYcIE3n33Xd555x1Gjx5NVVUVY8aMIS8vj88//5xRo0axJ0rV5e+//56+ffvy1FNPYbPZGD16NP6lebAAACAASURBVOeddx579+7lrrvu4rLLLosqQADWr1/PoEGDWLduHaNHj2bEiBHs3r2b++67j3vuuScwTqPRcNNNN9G3b18ABgwYEPIZ9OvXr8n3q7WMGzcOk8lEQ0MDX3zxRWD/f//7X8AbM5KVldXkHHq9nquvvjrkPDgSs1RZWcnbb7/dputuE6SULdrwZrXYgewmxmT7xsxu6bwnyzZo0CDZVrz22mtyypQpUj71lJT33y+llNJisUizEFLu2ye3bN4se2s0UpaWNjvX4e3bZaoQEfu7xcXJ9a+84p3TR0N9vYwD6ampkdPz8uTLt90Wcd76Tz6R/bTamNf7Xdeu8ompU6Meu+qqq+Rf//rXiP3je/SQgNz81Vcx521oaJDxcXGyfuRIKbOz5U6Q3dLSYo5XnNx069ZNAnLFihUtGv/pp59KQF5wwQUh+3ft2iXxtpmQ+fn5cs+ePRHn3nDDDRKQs2fPjjhmt9vlN998E7LvlVdekYCcPn16y19QEGeffbYE5Pvvvy9ramqkyWSSeXl5srGxMTBm0KBBMj4+Xh46dEh+8803EpA9evQImae6ulrm5uZKQN5zzz0h52/atElmZGRIQM6bNy/kvJkzZwbek/Dz/v73v0tA5uXlSbPZLN97773AMbfbLcePHy8Becstt4TM6XQ6A5/Z7NmzpdvtDhw7fPiwHD16tATkrFmzQs67/vrrA2uZNWuW9Hg8gWPLly+XQggZFxcnDxw4EPU1hM/XUvzv21dNfGf5GTVqlATkww8/HNg3fPhwCcgnnniiRdebN2+eBGT37t1D9l966aWB13/WWWfJP/zhD3Lx4sVy//79rXo9RwuwTsa4J7bG8vEY3pLqK4QQl4YfFEJcgjcYdRvegFNFOxHN7WI0GrFLibRaKVq3jm5abbNptgCGzEycUWIpXB4P2WecgV3KgFnSXl6OERCJiZgMBmxRLBGlO3aQk5QU83oFXbpQtHt31GM1mzZhj1IB1eFLIW4q3fbgwYN0EoL4GTPgu+/o/uKLHLbbsdlsMc9RKM4///yoabZHEwfx9NNP0z1KoLU/xunSSyO+NjEajQwbNqzV12opiYmJTJo0iZKSEpYvXw7Ali1bWL9+PWPHjqVTE9lw//nPfzhw4AA9evTgT3/6U0hQYr9+/Xj4Ye/X/LPPPhv1/O7du/PUU0+FnHfrrbdiNpspKSlh3LhxXHnlkfDAuLg47r//fgBWrFgRMtdrr71GcXEx1113Hffddx9xcXGBY+np6bzxxhtotVpeeOGFqGsZNmxYwB3kZ/To0YwZM4bGxsYQq0NH43fPBfe98rtgmrN6+PGPqwjrbD5//nyuueYahBCsWbOGxx9/nCuuuIIuXbrQq1cvnnnmmZglE9qbmOJDCPF58AYsARqB04AlQohKIcR631YJfAT08o1Z0hGLP1mJ5nbRarUkaDS4ysspXrOG/Bb+0iaYzTQCDWG/gC4pMXbtigFwHD4MgG3/fky+LxJzSgrWsAJkAGV795IdJa3PT36PHhTGEBEuux1bWBddAHttLWbAejC2N2///v3keTwwbhx06ULc0KGcodOx5Sgqqp4MNFfj4kTc2oOLL744xKzu36KlLTaFRqPhiiuuiHrMn4Fwyy238Nlnn1HfwZlbfiHld720NNB05Upvm67rr78ebZSsOb/LZseOHVGDyC+44ALi4+ND9mm1Wrr5Wj5ccsklEeec4uuEfTDsb/1///sfQMC9EE6XLl3o3r075eXl7N27N+L42LFjo57XyxcYH369jsT/cHcsGScyRjC+2WzmP//5Dz/++COzZ8/miiuuCARN//jjj/zud79jxIgRx+Uhrak8zFFNHBNAqm8LZwReM4+inbj//vu9v2yzZkFaWmB/ilaLvayMoq1b6RblCSwaQqMhGag+dAizz0coPR5cQFJ6ujeltqQEU2YmtoMHMfm+TEwmE7ui/MKWFheTk54e83oFZ5xBUVDxpmBcDQ3YoxTMcdTXkwdYm8iSKdm5kzwhwB/RfcYZ9K2rY/P69a2+kQCUlZWRmZl5XFLQOoJYX1YnGy1NtW0Of/GnWNdYtWoVX3zxBRdeeCEJCQkMGDCA8847j8mTJ3PGGWcc8/WbYtiwYfTq1Yv3338/4P/PzMyMeUP2c8D3IFAQozmlwWAgKyuL8vJyDhw4EPGU3qVL9KLXycnJMY/7j4U/jfsFRbClJBYVFRURFqhYNVv89U+O19M/eINoAe8DpY+MjAx2797d4sxAf3BpLEvWKaecEpJRs2PHDl544QXmzJnDxo0beeihh3juueeO9iUcFU2Jj/M7bBWKVhEoGBRk+QBI0elwVFRQXFTEoKuuavF8Bo2G6oqKgPios1qJB7QJCZi1Wq81YtAgrGVlmHzXM6emYo1ipSgrK+PUGAVzwFvro8TpxOPxRNzYa9xubNHER0MDZyQmRjS5C6bkhx/IMxqPdNJNTKRvdjabV66EO1tfcmbSpEk8+uijnHfeea0+V3HykdSEq9FgMLBixQq++eYbli5dytdff80333zDt99+y+zZs5k1axYzZ85s1/VNnTqV+++/nylTpnDo0CHuvvvuqNaMaByt1ak54d4aYd/oC4q/7LLLSG/i4QZCb+JHc62OxOPxsGnTJgDOPPPMwP5BgwYFAuhbwtq1awPntYRevXrxwgsvIKVkzpw5LF68+MQRH1LKlR25EMVREBTzAWBMTMReUUHR4cN0Gz68xdMY4uKo9qlvANfhw97qqYBJpwu4O2zl5Zh81zOlpWELK0AGUFpRwXm+KP9oJJ52GvF4C+SEV110ud3YoqTTOtxu8jIzm8x2Kdmzh/ywL6W+/fox/ygzXqwVFVS0sh6JQtEUw4cPZ7jv77K+vp633nqLX//61zz00ENMnDixXcub33DDDTz44IMsWeL1iLckpiXXV0AwmhsDvKnv/ifz3CjFBtuSvLw89uzZwx133MHFF1/crtfqSP773/9it9vR6XQhDzqXX345L774IkuXLqW8vLzJ2A+Xy8W7774LeLNnWsNFF13EnDlzImJFOoITUw4qWkZQkTGAlKQk7Pv2UVxXR/4557R4GkNcHM5g8WGxoPfHdiQmYi0rA8B2+DAmvR4AU6dOWKM0pCuzWsmJYaYFoHNnDFLiiuKycTU2Yg8raialxOHxeMVHlBgTPyX79tElLMD2zPPPZ0tJyVH1LXDu3UvVmjWtPk+haAk6nY7p06czZMgQPB5PSGyS330TXDDqWMnJyeGqq64iPT2d8847L+QpOxb+m+H8+fMDlodg/LEjvXr1anFg5NHiD9btqNo97fEZhFNZWRlomDl16tQQi85FF13EoEGDqK+v5/bbb2/STXr//fdjsVgoKChg0qRJgf0tca3u87WtiOUia0+U+PgpE+52MRgo37ABuxBkRauzEYNknY5qy5FWPCHiQ6/H6lPFtspKTD6frDkzE1sUP2lpdTXZp54a+2JxceiFwBXFilHj8WALK/VeV1eHBsjKzcXaRFBUSVkZeWF+3dSRI0nFWySptTjdbqp8okuhOBZefPFFdu7cGbF/9+7dbN++HSAQhAlHrAj+Y23FwoULOXz4cIszOyZOnEjnzp3ZvXs3M2fODBHxW7Zs4dFHHwXg3nvvbdN1RmPGjBnk5uby2muv8dhjj1ET9pACXgvNv/71rza5Xnt9BuB1tSxevJghQ4ZQWFhInz59ePrppyPGvf322xiNRhYtWsR1110XiA3x43Q6+e1vf8sLL7yATqdj/vz5IQG+GzZsYMyYMSxZsiSqiPriiy+YNWsW4P2sO5rW9HZBCJEK3IY3HqQzEKtsmpRS9jjGtSmaI9zykZzM1o0byUtJaZWP0xAfT3WQVcFVVYXe5w82JycHUmptVVWYfAGdpuxsbGFR+1JKSuvryY5W3TQIfVxciNgJXNfjiZjTYbNhBMydO2Nt4otgv8VCni9SPkC/fvRrbOT7deuipkA2hbOxkaqwP3aF4mh46aWXuOOOO+jRowdnnHEGBoOBsrIyVq1aRX19PZMnTw6pMnr22WeTmZnJ2rVrGTJkCH369EGr1XLOOedw0003ddi69Xo9CxcuZOzYsTz99NMsWrSIwYMHU1lZyRdffEFDQwNTp05l+vTp7b6WlJQUPvroIy677DIefvhh/v73v3PmmWfSuXNnHA4HP/zwA3v27OHss8/m+uuvP+brXXLJJSQmJrJw4ULKysro0aNHoCx6c4G6wTz55JOBpnE1NTVUVFSwYcOGQHbJ+PHjeemllzCZTBHn9urVi5UrV3LllVeyYMEC3n///ZDGcqtWraK6uppOnTrxzjvvRKRsSylZvnw5y5cvx2g0MnDgQHJycnC5XOzcuZMdO3YAMGbMGB588MGjfauOmtZ0te2Jt3R6Nt5sl6ZQofQdQXjMR0oKmxsbyc/JadU0hoQEqoOsCtVB4sNkMmH1CQWbzUYnsxkAc24u1jA1bbfZ0EpJcjO+a0NcHK4wF4rb7aYBsIfN6SgvxygE5qysqG4e8PrPLbW1ZJ92WuiBpCT6pqezeflyrrzmmibXFIzH48ElZZNuHoWipTz55JN89NFHrFmzhq+//hq73U52djbnn38+N998c0QGR2JiIp988gkzZ85kzZo1bNiwIWB16EjxAV4htHHjRv70pz+xdOlS3nvvPZKSkhgxYgS//vWvufbaaztsLf369WPLli3MmTOHDz74gA0bNrB69WoyMzPp2rUrkydPZsKECW1yrdzcXJYsWcKsWbPYuHEjX331FVJK8vPzWyU+Pv74Y8AbtGswGDCbzQwePJizzjqL6667jj7N9N8aMGAAO3bsYN68ebz//vts2bKFVatWkZKSQv/+/Rk3bhy33XZb1L4t/fv3Z8WKFXz66aesWrWKffv2sXbtWjweD5mZmVx++eVce+21TJw4sd1S2ZskVvWx8A34APDgFSBXAH2AbrG2ls57smxtWeE0wJgxUi5dGvjx/iuvlN1A/mrcuFZNM7l7d/n6tGmBn5c9/ri8ID1dSinlM5deKu8eMkRKKeXNp58u/zFxopRSSndxsdRASPXC7WvWyFM0mmavN0qvl5+/+mrIPrvdLvUgNRBSvXDj0qXyTK1Wrnv+eTnQaIw63969e2XXhAQpV66MOLbg3HPlVQMGNLumYJxOpwTkxFNPbdV5CoVCoTgCbVThdBRQBFwopVwspdwmpSyOtbWNNFI0SbjbJTWVYiB/wIBWTZOs11Nttwd+dtls6P0ptWlpWH3HbE4nJl9QVFxamrcAWVBqbNn27WQHrScWhvh4qq3WkH0ul4tkIBmwB63FcegQRq3W63YJiwfxU1JSQh5AlDiXviNHsjlKnwjwFmvrHcVF5PRdvypK2q9CoVAojp3WiA8JrJVSdmx5vhMEIURPIcQ/hBCbhBBuIcTW472mcLdLii/ivFt47EMzGPR6qoPSZl12O3rfvOaMjED6q62mBpO/iI3BgAlvBoyf0l27yPEFpDaFPj4eV5DAAK/gSQJMgD0oGNVRUYFRp8PcpUuEm8dPyb59dGlogCjuplMuuogDTifOKGnBVVVVFBdH6mR/2nFVDDePH4/HQ5kKSlUoFIpW0xrxsQlvvMfJSh9gLLAb+OE4r8VLWLaL0RfzkJ+f36ppDAZDqPhwOgPiIzil1lZbi8lfQEwIb/XToFLpZcXFZKdGK3obil6nC4kxAV+QqxCY4uJCSqw7KitJSUzE1LUrNo8navrY/t27ydNqwWCIOKYdPJjeUrItSr2PmpoaampqIiLBnRUV6ICqZqoerlixgtzcXG655ZbjWp5ZoVAofmq0Rnw8C4wUQjTfp/3nyYdSyjwp5QQgek/4jibc7eIr2hWcttcSDMnJOIOKe7mcTgy+io3m7OyAu8NWX48pqJaGKT4eW2lp4Ofde/fSvQXBroaEBFxhlogaqxV9XFygRLwfh8WCMTERbUYGSRxxiQRTsnMnebFEj8FAv5QUNi9dGnHIn64XbhVxHj5MF8Aaoz23n127djF+/HjMZjNnnnkmTz31VJPjFQqFQuGlxeJDSrkE+D/gIyHELCHESCFEvhCia7St/ZZ8fJBStr5SVXsT7nZJSUGr1dK5FTU+AJJTUqgOcjG4nE70vmJi5s6dA+mv1oYGTEFzm3W6QAEygG1FRfRpQZ8KfWJihPhwWa0kaTSYEhKwBYsPqxWjXg9aLWYhona2LSksJK+Jku69u3dne5QyxS5f/RJHWGyHs7KSPJ0OawxLi5+ioiL69+/P7Nmz2bhxI3/+858DRXtay/79+3nooYeO6lyFQqH4qdHaImMbgXLgQbxZL3uAwihb9Hq8bYwQ4jQhxJ1CiLeFEDuEEB4hhBRCNJtvJYS4TgjxlRDCJoRwCiHWCSFuF0L8dAqvhRcZS0khLy8vpN10SzCkpFAd5GJwuVxHxEdeXiDWwubxYAqqhGdKTMQW1G9lW0UFfVrQxE2fmBji5gFfkKtWS0pCQsicDpsNo7+wmVaLtaQkYr6SgwcDnRqjYSoowBklNqMmhviorqrCrNeTADibKGxWuHMn+Tt3wv/+R1e3m19efnmgzHFr2fnNNyyaO/eozlUoFIqfGq2p8zEK+ATw3+0qgcgovo7lVqDVXcOEEC/iLZZWCywHGoALgBeAC4QQE05IS0c4YW6XAQMGsGDBglZPYzCZQsVHTU2gMI6pa1esUtJQW0stkBzkVjEZDFh9wZmHDh2i0e0me0TzXjmDXs/hsGDOGrsdvVaLSa8PCTi12+1k+sVHfHzUZnYlhw+T10QRMb3RiCtKRcQan+hwhGXeOKuqSE5KwmyzUVVcjNFX2yScwq1bKbDb4eBB+PFHrna5eHTbtkDJ5Nbg/PFHLE30rlEoFIqfE615yp+FV3jMBtKklJ2klAWxtvZZbgRbgWeAiYC/CFqTCCHG4xUeZUBfKeVlUsorgVOA7cCVwG/abcVtSZjlQ6vVMnTo0FZPY0hNpTqosmh1TQ163w1fl5JCPFC2dSspgAiyqgRXP922Zg19hEA0YYHwo09KwhUmPlwOB0nx8ZiC5gRwOJ0YfbEs5sRErEExJuCN27DX1tKpR+yCukkGAzVR4jdqfNYXe1gDOafNRnJCAqnx8VRFyYbxU1haSsFFF8GyZVBczAVnn83OrVspiWKdaY5qm42qxkbV6l6hUJwUtEZ89AfWSykfkFJamx3dAUgp50kpfyelXCiljF7MIZLf+/69X0q5K2iucryWFIAHfhLul7CYj6PFkJqKM0h8uGpr0QdVzDNrNBSvW4cpzJ1jMhqx+qwG21aupE9a2pGW9k1dLzmZ6jBLhMvhQK/TkWI0YguyRDiqqwOWB7NejzXIJQNw4MABchMT0TTRGElvMOCqj8wQd/ktH2FzOm02kvV6UhMSosaYgDdItbq2lqygPjbx993HLzUaFh1F8yunzUYdR6wxCoVC8XOmNTfYGmBXs6NOYIQQXYBBQD0QcYeQUq4EDuBNKR4WfvyEI8ztcrQkp6dTHZRu6qqrQx/U7t6k1VK8ZQumoKZFAGazOdCjYNuGDfRpYYqvXq+PcIPUOJ3odTpMJlNokTGX64j4MBqpCmv9XFJSQl5cXNQCY4HrJSfjimb58GX4OMLcHdUOB4akJFKTkqiKkUJbVFREvl6PCG5mN2IEE3Jzeefll2OuJRb+LB5LjIJoCoVC8XOiNeLjK7y1Ln7K+Et/bpNSRgYBePkubOyJiV8stDK4NBqGjIxQ8VFfHyI+zDodxbt3Ywpy8QCYUlOx+p7Ut+3axektaNMNvhiMsGql/toiJrMZW9DTv6O2lhRfVVVzSgrWMKFQUlJCXmMj+LpQRiMpOTm62yWG+HA6nSQnJ5OanByzs21hYSH5cXEQ7GYSgjGPPML23bvZH8NiEgt/AK5lb4fEaisUCsVxpTXi449ADyFEqwM8TyD8sShNlX/350qGxK0IIfRCiAm+TJpuQIr/ZyFE1MIaQohbfFk06yrCntiPmTZyuQAY0tOpDmqX7WpoQB8UZGlOTGRfSQmmxNAmxub0dGzV1Ugp2VZeTp8WBJsCGIxGqsPFR3U1SYmJpKSlBSqqAjjq6zH6xUdqKtaw7JOSffvIq62F7Nj17/RGI64o1VFrfHEnjrAOu87qapKTkzGnpERYWvwUFhZS4HaHig9Ad/XVXJ6UxKJnn4163s6dOzkQJWjWX2uk6ijiRRQKheKnRouzXYDBwD+Bv/huwEuB/XibzUUgpXzz2JfX5vhrf1c3McafwRPeJjCTSFeN/+epwOvhE0kpXwZeBhg8eHDbRhK2kcsFwNCpE04pQUoQApfbjT6oxbNZr6e4ooKMsM6Jpk6dsNXUUF5eDo2NZA1rmadKn5ISEYNRU1NDZmIipk6dsAcFozrq6zH6Mm/MaWlsKyoKOa9k1y76JiU1+V7oU1Kiig9/P5nwbJdql4vklBRSq6upipGBUrh3LwUuF4THmsTFcfX11/Ont9/mzr/9LeK8559/nry8PH73u9+FXtMnuCyttJgoFArFT5HWiI/X8fZ3EcDZQHOPuSei+DhqpJRFeF/7iUFYpsuxYDCbqQZkTQ1Cr8fldmNISwscNyUn831ZGT3Cqpeas7Kw1taybdMm+kiJaGFPGX1KCtVhbhCXy4U+KQlTZia2oLRfu9t9RHxkZGANqw9SsncvY/39ZmKQZDRS44nUyDUuF1mAI6xqqrOmBkNKCqkNDezasSPqnIU7djDSYIAwaxDAmCef5Nq5c6kqLCS1IDTxy+VyRdQVAXC6XMQBlrBsHoVCofg50hrx8SZe8fFTxn/nimwCcgS/deTETjtoQ7eLTqdDA9RbLCTo9bgaG9H7XB3gjbUorq/HFG75yMnB1tDAti+/pE9KSovXYzCbIywRrpoakrKySMnKwh4kTBweD0afS8WclRXoM+Nn/4EDdGmmoqveZMLV2Bixv6a2lkyiVDitrSXZbCZVo6Fq7dqocxbu2UNBjDiThLQ00uPiqDpwoOXio6aGzhoNlrDMG4VCofg50mLxIaWc0o7r6CiKfP821fzE78QvamJMixFCjAPG9ezZsy2mO0Ibul0ADBoN1RUVJHTpgktK9EGWD7PZjAswhRXbMufmYnW72bZuHWe2oL6HH73JFCE+ampr0ev1mDp3xuYTH42NjdRIicHXrdeck4M1yCoipWRfeTl5w4c3f71olg+/+Ajv7VJfT3JqKvV6PVXVkR46KSVFBw+SP2pU7GtqNFHTZmOJj+q6OvL0eqrC4k/ak/nPP8+wMWPo3rt3h11ToVAooPXl1X/qbPT920cIkRRjzJCwsceElPJDKeUtpqAYijahDd0u4BUfzooK8HioljLU8uETIqaw5m1JWVm4pWTjDz/Qp0/LE6EMaWlUh1kiXHV16JOTSencOdC91mm3YwA0/iJjublYg2JFDh48iE4I0guarmkXn5yMBBrCXT1+8RFmTamuryc5LQ1zbi5VUSqjVlVVgcdDalNVVePiAnVEgqnZvh3H1q0R+511dXRNS8NibbqEziOPPMLSKE3yjoY3H3+cr198sU3mUigUitZwUokPKWUJ3o60OuDq8ONCiPOALnirn37TsatrJW1s+UjWaqmurISaGlwQqHAKYPIJEVOQIAEQZjMmYOPBg/RpxvoQTJLZjCusaZurro4kg4GEzEzigNraWhxlZaQIARrvr6k5Lw9rkGjZtGkT/VNTEU2k2QKQmIheiEAXWz81tbVk6nQ4wvY7fTEvqXl5VEUpTlZYWEiB0Rha4yMMfVxcRPM88BY2C8+uAa+1JS87G0szRcb+9a9/ccMNN1AWIwW4NVTX1XFYBbgqFIrjQGt6u9zYmolP0GwXgKfwZqk8LYRYLaXcDSCEyATm+Mb86YTv7dKGMR8Ahvh4qi0WGmw2JBAfVFDM7O/zEh7YqddjBoRGQ2YryrrHm0xo8FoidD7rjau+3ltVNSkJE2CrqMBRVoYxqI6JqWtX7FLiaWxEExfnFR8JCU0WGAMgIQE9XpdHSlD9kpr6erKMRhxhab9Ot5vkjAyScnJCxI6fwsJCCuLjI9Jsg0mKZfloaIAo1pTqhga6FhSwcdu2mHPW1tZSUlLCXXfdxZQpU/jf//6HRnP0zw/OhgYqVYyJQqE4DhxNtktzCN+4dhcfQoiBHBEMAKf7/n1SCHGvf6eUcljQ/98VQryEt5T6FiHEZxxpLJcCLMbbYO7Epq3dLjod1VVVuA4fRi8EIqhMutkX8GnyxV4EEAJTXBxdGhvhtNNafjG9HoMQVFdXB8RHjV98CEGKRoPtwAEchw5h1B75FdUaDOgBZ3k5KZ07s2nTJq5qbGyR+EiCiH4yNfX1ZKam4giru+H0eEjOzETTpQtVUkYIvcLCQvI9nibFhz4uLlBHJBiX2407KG4lcE23m7zTTsOyaFHMOXfv3k1+t248/thjnHPeefz973/nrrvuijm+OZxuN5WqmZ1CoTgOtEW2iwZvAOdAvFkki4HYfcjblhTgrCj7m8z5lFLeJoRYBdwOnAfEATuA14CX2tLq8ZMJONXpcFZV4bJY0Ic9TZt9bg1TlEJe5vh4eul0EBSg2ixJSQFLRKovjsTldpPky6YxxcdjLy3FfugQxvCS7nFxWPftC4iPR53Ollk+pIwQA676ejK7dsURVDuksbGRWilJSk9Ho9cDULN/P0lBjesKCwvp5XI1LT602qhulxq3m7oo1hSnx0Ne375Y3G7weAKupmC2b99Ob5sN7ZAh/OvWWznrj3+kV69eXHzhhYgtWyAlBZqIQwmnurGRw7aO+lNVKBSKI7RZtovPbfEm3u6yLSt1eYxIKb/gKGtvSCnnA/PbdEHRr/Mh8OHgwYNvbtOJ29jykZyURLXNhquqCn14Azm/+IgSW2FOSKBPM3U2IkhKQi9loKQ4EFLYzKTTYSstxVFZiTFMYJm1Wqz795PqcHDwwAFOW5EuzAAAIABJREFUTUpqsropAHFxXrET5gapqa8nMzsbh9uNlBIhhLfeCEFBrnFxVBUVhYiPosJCLq2ubrqfTHx8hKXF/zrDO9dKKan2eMg75RQsQoDFAhkZEedu376d3nV1MG0a3efO5Q2TiXsmTuS3TifTdDp+NW4cGQsXRpy3ceNGBgyI7Bbg9HiojJLNo1AoFO1NmwWcSikPAdcBucAjbTWvIgZtHfORlES13Y6rqgqDNlSTmn2BlaYonWP/dNppTD7nnNZdLC4OgxC4gp66a9zuQEn3lIQEbIcO4bBYMIaXdE9IwHrwIFu2bKFPVhbaiy9uUX+bJI0GV1gmSY3bjSknhzghqPW5QpxVVd5CL773NlWniyh5XrhrFwXp6aCNrd2T4uNxRbmxu9xuHGFpxnV1dcQB6V26UC0l7hjN7Lb/8AO9nU6YMQPWr+cXf/kLW597jjffe4+ve/fmgfXrI86prq5myJAhUQWPU0oqo7iAFAqFor1p02wXKaUFb2O28W05ryIKbe12SUqi2unEZbWiD3N1JJlM/H7SJJKjWDhOyckhpW/fVl9Pr9HgCsr6cHk8AfFhSkrCXlmJo6oKo8/14ceclIS1rMwbbApw6aUtu15cHDVhlUxr3G6SsrIwcqTQmLOigmSNBnwxL6lJSViDxICUkqKSEvK7NVUqxmv5CM+ukVJS09hIg8cTkvZb7XSSDGiMRkxaLdbCwqhzbt+yhd6pqd7PXaOByy9HTJnCsF/+kpvOP5+qsMBZ8Lq2GhsbI6wwtTU1SOCw2w1R3EAKhULRnrRHqm09kNPsKMWx0dYBpwbDEfERNq8Qgif//e+QINQAd90F41uvNQ1xcVRXVQHem3Ktx0Oi3+2SnIytshKHzUaKIbQYrdlgwHroEJs2bKB/WRlcdFGLrqePi8MVJj5cbjdJOTkYpQyIj+rDhzEExVuk6vVUBZU8LysrIzkhgeT8/Kavp9PhChMf9fX1xPkCaoMLjTktFq+1JT6etIQELMWRfQ8bGxvZuWcPvWLEDumTknBF69zrW4MzvJCaxYIBqARkeXmTr0WhUCjamjYVH0KIbLx9X9q4hetPFyHEOCHEy7a2DuxrY7dLstGIs7qaars9Qnw0yahRTQZexkKv1QbcLrW1tSQIgcYnNFKSk7FbrTjsdoxB9UYAzEYj1spKNn39Nf26dYPwDJxY1wsTHx6Ph3qPh8SMDK/lw5f14Tx8mOQgd0qq0UhV0M25sLCQApOp2decpNNFZtfU1KDXaDAKESo+ggRPmsEQtblccXExGQYDyTHER1JSEjUxmudBlBLyhw/TSaNBIwTVMSwtCoVC0V60WHwIIc5tYvuFEOJu4GvADHzQbiv+idFuFU7b2u1iNFLtcuFyONC34byx0MfHB8SHP8iTJG/RWZPJhM1mw+F0YgyqywFgNpk4XFnJtj176DtuXIuvl6TVUhP09F9bW0uCRoMmKQmjVovDJzCclZUkB9c4MZtDOtsWFRVRkJjYrPjQ63S4wuIpXC6XV3wEWVoAqisrSfbFraQmJ4dYWvxs376dXmYzxKjmqvf15AnHb/mIEB8V/8/eu4e5cdf3/q+vNJrRjEZa7WpXa3vXseO1kzh27JCE3AgQLqE53EtDWgiXXy8c2v6gPG1pKb/Spy0t0HJKf8AhPZTSHxAgnHJpOSVQCIEQktjOhfi6sZ3Yjm/r9V60u7rO6Dq/P2akHY2k9a6jXRJn3s+j5/GONPrOjNY7L70/tykigQD9ikLq6acXPJeuaXYWPvjBc7/Oly9fF7yWUmr7M87d50NgtyX/yPkekK9Fqtthl1iMvGHY8NFmUmu3FZFl8i74UGEePuJxDp09S7VSIeqBtnhvL/fu3s0aIYi++c2LXk8LhZpKXw3DQA0EIBwmGgqRdZpt5Wdn0V3w1dvXx6wr52Pfvn1sDgZhge6mAJqiYHjgwzAMVCGI1mpNk3RzqVTDbemLx5lpEwY5ePAgm0OhjvChalp758NZxwsf+dlZdEkipGmkjh9fcNhRtzT++OP89898hu/9wz+swGq+fPl6LmspYZefL/C4D/gK8E7gesuyFh5Q4evZq9vVLj095ItFCvk8mtpp7E33pMlyo/TVMIwm5yPW10cmlyOTzxP1zJOJ9/fz0NgYV1oWXNeuxUuH9TzwUSgUUIUARSEqy2SnpwHIzc0RccNHfz9zrpDZrl27uKFaPbfzEQ63dz6EsMM8znrg5F84bktfIsGM67m6Dh48yOZyubPzEYm0dz6ca5x18mvca+qSRCIaZfrkyY7ncfz4cd74xje2VMsA8O//Dkuolhk7eZKHKhXwy3t9+XrBayl9Pm5exuPwtVR1e7ZLby+5Onx4KkyWQ5qikHdujIV8Hs2ywHFcevr7SRcKWJbVCh8DA+SrVbZfdtmCpa5eqbKM4brp1fMvUBSi4XBj3kounUZ3OT+9q1axz4GWSqXCL37xC65VlHPnfCgKBU/1SR14okB2aj4tKj83h+64WH3JJLNtwiAHDx7kXel0Z+cjEsFoM7m34Xx4gCY3O4suy4T7+kh1KO0FePjhh/ne977HT37yE1796lfPP3HyJNx+OzzxBCyy2ik3N8ccUHrmGeStWxe1jy9fvi5MvaAGy11Q6nbYpbeXfKlkfzv3VJgshyKK0nAiCnNztgvhJF3GBgZImybZYpGop9lWvdX7la961ZLW0xSlKQHUMAw71OOFj0wG3QVfvatXM+vsNzo6yvDQEL3ZLDjzbjqup6ot8FF3eFqcj3S64bb0thkuZ1mW7XxkMtBhiF5H58MBLi985NNpIrJMor9/wfku+/bt45JLLuGzn/1s8xOf+xyz1Sq0qbDppLr7MrnA/Bpfvny9MOTDxzLr+VLtEunrI1+pUDAMIisAH5qqNppwGXNzTV1Ve1atIlMqkS2ViHl6i8SdrqJXvvOdS1tPUZqafjXgIxwmGomQdRqQ5bPZZvhYu7bRP2PXrl1cd/nlNgCcY6CbFg5jeCbiFgoFVMsiqihNk23zmUzDbelbu5YZT1hiYmKCgGUxsHZtx4ZqHZ2POnx4Junm0ml0RaF/9WqmF5jvsnfvXv7mb/6GnTt3cuzYMWfnHMf+5V9YKwSH27g0U1NTTLYBmpzzf2Dy8OGO6/ny5euFoY6+tRDiZc/mjS3L+vmz2f9C0bK1V+92tUsiYcOHabLGmbGynNJUlbxzYyyk083wsXo16XIZSQiinlLagW3bWKXrDF199ZLWUxWlqe+GYRiolmU7H7rOlHNjzOVyDLngK752LbPlMlgWu3bt4vp162ARw9g0TaPggY+G86GqTTkYuUwG3cl36bvoImaKxab5LgcPHmTz0BBigXbuiqZRtiyq1SpB17VsOB/enA8HeBLDwzy9ABjv3buX66+/nt/8zd/kzjvv5FOf+hS1L32J35QkCpZFeq41vevOO++kXC7zsY99rGl71llnog4xvnz5esFqoaD5z1jcFNt2ss7x3r6erbo92yWZJFetUjBNe7rsMisSiTQ6nBbSaVRX/kZszRrStRoytMDH2ksv5eCpU+0bni0gLRxu6jhaKBTsPBNFIRqNcqze4TSfb+rk2js4yJwQkM2ya9cuPvDWty6qr4mqqi3wUV8zqusNpwVs4Olx3JbegQFmAwGYm2sM6zt48KDd2bRDvgeACIVQhcAwDHRXb5S685HzAEYumyWiaSTWr2dnhwTQyclJzEKBtbfdxu9/7GNc/Ru/wV//5V/yxY9+lNqaNdxQLjfl0dSVz+dburvW1wSY9LSr9+XL1wtPCwHCkywdPi4Glj9b0dfyhF2AvGmieXprLIc0TaPgjLI3stmmlu76mjUYloUJRNtN0nXasC9pPVVtajLmdj5iPT3zfT4KBXTX+ff29jILzB47xunTp9l6111w552LW8+TD2EYBmqtRjQa5YwLBvL5fMNt6evrYyYQgKmpZvhYoMwWAEmyW9YXCk3wYRQK9DHvOrjX7Nc0+teuJVWr2RUonnDb3r172b52LWJigvV33MHLLruMv3jnO/nq7CyP7NzJ791wQ1v4MAyjpbQXIOvk+Ey06WPiy5evF5Y6wodlWYtORxdCbAE+DlzubGpt0eiruyqVuptwquvkgYJhNKbLLqciuk7eKdMsZDJN8BHQNKKAAcjODfjZSvWUvtZBgHCYaDxO1rmJ5k2TiAs+dF2naFnseOABro5EkG69FV73unOup0UiGB74KBQKaLWavZ67w2k+j+6cZ19fHzMAk5Nw6aWADR+vXaDMFgBJajgfbhmFAoO0aTKWy7E+HrcTTiUJJiZgw4am1+zdu5ftPT1w663w5jfzB298I6+cneVz73oXIxs3okoSZpvJvYZhkPG0sq+fZ78sM7mIsJUvX74ubD2rhFMhxFohxJeAPcDrgTngT4FLunBsvhZSt52PSIQCjvOxAvChRaMNGChks6hukHLmn0ThnImdi14vEsFwVZ8YhYINH7JMtK+PbH0GSrGI7nJWhBDEQyH+6wtf4PpSCT71qUWvV/A0/Srk87bzEY83XACw3ZaIE+rq7e1ltlLBchI2LcviwIEDXD431wIHTZIkNGhp6V4oFEhC03oAOcMgouv09/czDXD2bMtb7t27l+2BAFxyCdx0Ezc//jjfueUWfu+f/xmAsCRhdICPts5HPs9IXx+TbcBkUSoWYamt4PP5JVXk+PLla2V0Xn/ZhRAJIcQ/AoeBdwNF4O+ADZZl/YNlWa3jNX11V11OOA0Gg8hCkKpW0Ty9NZZDWjRK3smJKORyLS3deySJaIfKjvNaT9OaSl8LmYzd50MIGz6c53LFYsOFqCuuKPzXk09y/Yc/3BKa6CRF0yhVq1Rd5a9GvcmYy2kBG/jqoR5FUQgFg+Sd+S4nTpxACMFFY2Pn53wYhu18eMIjecNAj0ZJJBKkqtW28LFv3z6253KwaRMAYsMG3nLvvQScyhxVltvDRy5Hpk0ias4wGBkaYqJYtH9/l6q77oI/+IOl7fNHf2Tv58uXr+eUlgQfQghNCPEXwFHgA9hhm88DGy3L+nPLsrpcT/r817KW2nYx7AIQCQSYghWBj0gs1kjINAqFVvgIhYgtoYnYuaR6qk+MXK6R5BodGCDjwEe+XG6Bj954nGPAde94x6LXE7Jsz5NxJ7lms6jBoA0fru050yTicpv6VJUZJylz586d3HDNNYhyGTw9T5rUyfkwDNv58GzPOcCj6zoly8L0JIGWSiWeeuopLj9zxnY+2kgNhdomlhqHDpFtM5k3a5psWLOGSUmCBRqbddRPfwpt1ltIU+PjGE8+ufS1fPnytaxaFHwIISQhxPuwoeOvsPskfRPYbFnW71uW1fq1yRewjIPluhx2AYhIkg0fXcqzWEhaLNZIyCzk8y3zZGLOzJWurafrTTkYXvjIOs/lKhUiXvi4/HIuuugiVq9evfgFZRktGGy6ORuFApok2U6LK/8kVyo1hXr6olFmnJvzjh07uHHTJtv1WKjCR5JQobPz4WmDnjNN9J4ehBD0axopT/nrwYMHuXjdOtRcDjqU+Kqy3B4+TJNMu2qXYpGR4WEmANpM7q3rnnvu4amnnmreaFmcve8+ftjGoVlIf/rEE9z1wANL2seXL1/Lr3PChxDiDuAQ8BlgEPgxcI1lWW+zLOvoMh+fr07qctgFIBIKUcLu+bHc0uJx8k5ORKFQQPXMk+lRVaJddHY0XW+qPjHyeVQHbqKDg2Sd8EiuUmkqtQU7D+P6669f2oKhEFow2OREFHI5Gz4SiUaYBxy3xeU29cZizDrVNzt27ODGgYGFQy5gOx+W1dn58HRbzZVKRBzgScRipDzOx969e9m+bp0dcukAPWqb4XkAZrlMtk1YJVsssuGii5iqVKgtUG77t3/7t3zxi19s3njoEF+ZnuYzC0BLO82aJif96hpfvp5z6ggfQojXCiH2AHcBG4DHgFdZlnWrZVm7V+oAfXXQMoRd6vNFNFep5nIpEo83EjINw2gZZtejaUS7OF1X9cBHwVXeGxkcxKjVqNVq5Gq1FvhYu3YtN99889IWDIVQndLXuoxCAVWSiPb3N5wWgFy53OS29CUSzExNkc/nOXToEFcFAouCD9WyWp0P07ThwwMDbuDp7+tj2nOD3rt3L9v7+jqGXMCGD7PYmt5llMvkymVqno6ruXKZRDKJLstt59eAHe7ZvXs39957b/MT99/Pj3Qds83kXoAPfOADVNo8lymVGPN0d/Xly9cvXwsF1e/B7vNRAD4LfAdACHHVYt7YsqwnnvXR+eqs5Qi71OFjBQbLqb29GLUalmXZjc081n4sGqXcZlbJ+SociVCsVqnVagQCARsEnPMNxONoQDqdpgyEPbkVn/zkJ5e+oCw3+m7UVcjn0UIhoskk2UoFy7IQQpCvVtFdblPfwAAzx4/z2GOPsW3bNsKnT8PIyMLrOc6HFz4KpskAUKhUGucOjsPjAE9iYICUJ0dj7969/PHq1QtW2KiKwkwb58Mol7Gwe4lEXQ3rss6ag7EYk0eP0s5f27t3LyMjI5w4cYKzZ8+yyunzkrv3Xh4qFLimA3DfeeedfOQjH2HAA46ZcpnTpmnniqzAtGZfvnwtTovJ+dCAP8N2Phb7eHQ5DtaXS8sRdnGchnAXHYdOCkQihJ3qjIJponqAJx6LEeuiAxPQNMLBIKZzs3TDB9EoUWD8zBkigPCsK4RYckdVQiE0T/VJoVBADYUIxeNIgGmaWJZFrlptCnX1rVrFzOwsO//rv7jxxhvt8tJFOh/esItRLKIHg4Q9IJSrVhtuS2L1alIud8CyLNv5yOcXdD7CitJUvtxY03EgWnqLVCpE+/tJJhJMHD/e9j0fffRRXvKSl/DKV76SH//4x/bGWo0HfvpTorqO2WZ+TaVSoVqttu0tkqlUGAPosJ4vX75+OVrI+TjJ+bdX97XcWo5qF1VFO58b7flI09CEoFAoYBSLLaGe9/zRH1FqU6553lKURg6Gpml2k7H69ZMkokIwfvgwuvPzs5YsN86vLsMw0GTZhp1AgGw2ixCCIBByJZz2Dg8zOzLC6Kc/zbtjMRs0P/7xhdcLBm3nw5vzYZqosRjRXI5sNouu69RqNYxaDc0Bnv7hYaYzmcY8mfHxcSzLYvWpUwuHXdoMzwMbPvqCQTKZDGscR8uyLLK1GnoiweCqVUw63W29euSRR3jpS19KrVbj3nvv5Z3vfCccOMCPAgFe9+pX8/h3v9uyT9EBoHYVZdlajVwgYMPH5s0dz8WXL18rq47Oh2VZ6y3Luvh8Hyt5Ei9ILUPYRde0pgFvyyoHdPL5PIU28DHw+tcztITS1nNKUZpyMAqFQlOFTTQY5OxTT6F3qakZzqyVprBLHXgcpyWbzZLP59GFaOof0tffT+q669gZjXLjt78Nn/88bNmy8HpC2Ot5+nkYpRJaTw9RIRpOhGEYhIUg6IREEoODpEIhcIbP7d27l+3btyOOHGn0+GgnVVXbOx/VKoPBYJPzUSwWCQJyPE5y7Vomp6bavucjjzzCdcUirxka4sc//rGdN3L//fwIeOPrXkfRav0+VHez2joftRqmZZE5eLDjeSyoz3wG/IRVX766Ln/42/NVyxF2iURWDj40jQg2BBTKZdTlTnINh9ECgUYYxDBNVNcNPxYKMX70KHq3eovIckvfDaM+NycaJWpZZLNZJEkiYlnN8NHXxyOPPIKu66x5+csXvaQWCJDxwEehWETt7SU6NtaAgVwuZzs8zpr9/f3sCYftm2wiwc9//nNu2L4ddu+GBSqfVFVtaSFvWRZmtUrScT7qcq+ZXL+eiUwGqlVw/b7Nzs5y5swZLv/Wt5AOHSKqaezfv5+ee+5h1rK47oYbMBeAD6/zUSmXKQIjfX2cHh1tzH5Ykj7xCdi2DZZSZu3Ll69zqktf83x10vOqyZiuo3WxsdeCUlW0Ws0Ou5TLyz/MTlGawiCGaaK6nQ9ZZvzUKSLdOv9QCI3mvhsF07TdFl0nWquRzWTIpdP2Tdl1LL29vezfv58bbrhhSUuqwWB75yORaMAO2CAQsSxw8mwSiQTTktTocnrfffdxy4YNC5bZgt24zRt2KRaLhISgp1Zrcj6ymYzdLl9VGVyzhklFsefJuPTYY49x1VVXIR06BO96F7+SyXDvd7/LvQ8/zC2vehVab++C8OF1PrIzM+jA8KpVjB050vnCddL4uH2MbZJqO6pahS9/eelr+fL1ApMPH8usZWkyVqvZ8yq6DR+Dg2iLbB/+rKWqaJZFPpejUC4v/zwZRUFl3okwisWm3iJRReHs2bPo3WpsFgq19N0wTNMOu0iSnfMxPU0+lbJDPa6bfJ+TCHrjjTcuaUktGGzK+ahWqxTLZcJ9fUSr1QYM5DOZJuBJJBKkAM6eJZVKcfjwYW4IhxfM9wDb+fCWvhqGgRoIEKtWybiAOzc3Z68ZCpFMJpmQZfDkfTz66KNct22bfbP/5Cd5zbXX8qP/8T+4V5L4lTe/GSUSoWifWNN+jZwPT45QZmKCmBAMX3QRpxfoK9JRe/ZwGzB6+PDi9xkfh9/5HX+ejC9f55APH89H1cGjy4mh+rZtRJxJqsuuQICIEBTm5ihUq6jL7XyEw01ORME0m3qLRFWV8elp9G6FsmS5CXbADoHU14yGQmSnpshNTxPxhLrOFz68zofpwI6IROwcEyenI+cBnv7+fqYrFThxgvvvv5+XvvSlyMeOnRs+NK0l7FKHj6hlNdYDyE5ONmb1DA4OMhkItHQ5feSRR7g2mbQTQ4Xg5q99jV2myU9KJW655RbC4TAm2K6fSw3nw+OkZKemiAWDDG3cyJgzqG8psp54gvugY35KWxUKNhwtdQCeL18vMPnw8XzUMoRcwMn5WIEeH3VpkkRhbg6jWkVzVXssixSlKQfDKJWacj6ikQjjmQyRbsFHKNQIK4GTC1EqEXbePyrLZFMpcjMzLW7LwMAAa9asYdu2bUta0ut81Et7CYXQQyGy09OADR9u4GkMl/unf+LH3/8+r371q+HppxdMNgUIa1qjrLYuwzBQhSAGZFOpxvbczAy6s2YymWSiWm2CD8uy7GTTUAgut7MzYokEV91wAxddcgmrV69GckJiFU9oyXR+TrvWA8hMTxOTJIYvvdTu9dFmCB7AqVOnuOKKK1q2n9m1izRQatMqfmxsjINtklhL6TSfBPv6+fLlq6N8+Hg+ahkqXQCi0SiRlQq7YM+SmXO+VYZczaiWRYrS1AfDKJWaeotEIxHGCwX0bjWikmW0Wq3htJimiRIKEajDh6KQTaXIz862wEckEuH06dOElhgCUiWptbQ3FLLDPLJMzunlkfcAT09PD3nTpPya13Dff/wHt9xyCzz11Lmdj0ikLXyEhSAKZFy9Q7IzM41ZPYODg0yaZhN8nDhxgmAwyPDZsw34AHjr7bdz+6//euNnBSh6+oeYzs8Zl9MCkEmliEkSQ8PDjIXDHXt9PPDAAxw4cICznrkxTz5h90lsBx/f+ta3+Md//MeW7WdOnODDQOl8q2t8+XqByK92eT6qVFoW5+P1r38911xzTdfft5O0UIjpyUk0IZa/+2Q43AQDRrncDB/RKOlqtXvw4XE+3C4E2GGerAMekTaf5fn0WtG8U3Tra0oS0XCYrAMDubm5JvgIBAL09vby+FvfSuGuu9hiWXCOMltw4MOTf2EYBioQFYKzLhjIuSArGo1StiwKJ05Q/wQeeeQRrrvuOsTBg3DLLY393v/+9ze9fzgQwEyncSNyAz68OR8zM8RkmeHhYU7Xe31c3lrz8tBDDwF2iXG9oyrZLKMOGLeDj1Kp1LavyNz0NDXgxBNPsPDV8+XrhS3f+Xg+apmcD13X2bhxY9fft5M0WWZ6chJ1JeBDURowUKlUqNZqyG74cBJe9W45P7KMWq3OOy31BmMOaEQ1jWw6TT6dRu9SR1lVkii4p+gahl29FArZ8OHcnHOzsy3Ak0gk+Ld77+XVV1+NuOMOcEqCF1xP1zvCR0zXm2AgOztL1PmdFUKQ7O1l0uVE1OGDJ59sCwh1hYVowEZdZjaLRJuEU2fNoaEhxsrljs7HQw89xMte9jL27Nkzv3HfPkad34lO8DHXpgnenBPaOuo7H758LSgfPp6PWoYeH78MRWSZ6elp+9vvCsBHHQYMw0CVJIQ74dS50US61W+kjfOhyfK88xGJkE2nyWUyXYMPLRRqdT4kyXY+nPUAu7zX8/vT39/PN7/5TV79u78LgcA5Qy4AajTaHj4si2g0Stbd58NznoPJJJOusMvOnTu5dssWmJmBdes6rqkEAhRzuaZtxVyOJJDxQElmbo5YOEwymWSuXKbYptx2ZmaGkydP8q53vYu9e/fOP7F7N08Gg6yPx5cGH467dNQzK2fROnoU/uzPzm9fX76eRzov+BBCBIUQSSHERZ0e3T5QXy4tU8LpSktTFKZnZlYMPrRqFcMFH26AizoVJnq3ck9kGa1SmQ/z1NesOx+6TjabJZfJEOnSubd1Puphl0ikAQP5bLYFeBKJBOPj47z6V34FvvIV8IQ72ims65Qsq2l6bR0+YvF4Ewxk0+mmKcXJoSEmJibAsjh9+jSHDx/mJb29cOmlNvx0WjMYbHU+8nmSQNoDJdl0mpiqEggEWN3by5k2JbM7duzg+uuv55prrmlyPqzduxnNZLhyaIhSmy6uHeHDCTUdzWTsYXZL1cMPQ32mjS9fF7CWBB9CiOuEED8CssA48EyHx7EuH6cvt5Yp7LLS0sJhpmdnUS1r+eEjGLSnzOZy9g0yGGyGD6eTp96tkl9n1kq99LVQKNggUIePWIxsLkc+l+taqEdTFAxXQ6xCoWCfpyTZsOPcnHPZbEtuSyKRYPPmzQwNDcH27XDbbedcTyiKHQZxrdlwPnp7G+uB0+HUtebgmjVM9vfDo4/yjW98g7e85S2Ejx5dMOQCDnx4IMPM5RiElu7HEyvyAAAgAElEQVSumWyWmHNth1ev5vSx1j9LDz30EDfddBObN2/mmWeeacDimUcfRQ6HWdPbS6lNk7FisdgePubmGNZ1jqqq7WIsUTO7d/NvnpJhX74uRC0aPoQQLwF+BtwChIE57OFz7R7n0dHH16J1oYRdVJXpdBqtVluRceeqJFHIZm0Q8MJHfz8AehdLflVJaoIPNRicD7v09JAtFMjl812rMFJDIQoeENDqYZeeHrLOseRyOSKekurBwUFe85rXLG1BWW5MJq7LNE3UWo1YIkHGVXmTzWaJus4zmUwysXkz/Nu/8fWvf5077rgDDh485/A3JRik6CmZbTgfnu1u+Bhav56xNsPsHnroIW7avh357W/n0k2bOHDgAJTLPPnUU2zZuhVZURZ0PixPx9W5TIarV6/mqBDnVW774K5dfNrJG/Hl60LWUpyPv8audPsXYJVlWQl/sNy5tSzt1S+UsEsdPqBxU17W9SQJI5+fdz5cYYBYMglApIudVrVQqDnh1B126e0laxjkCgX0LuWZaLLcNOjN7XzosVgDPvL5fIvb8qEPfYiPfvSjS1tQllE98GEUCqi1GtGBAbKu7bl8vuk8BwcHmRwaYvTuu5menublL3/5OZNNAcKS1Op8GAYDQKZYbIKBTD5PzAmjDY+McNowwNOEbc+ePVwXDMJ3vsP2Ws0OvRw8yGg8zpZt25DDYUptJveWSiXK5XLTuQPM5XJcvXYtxwwDaymdUR2deOYZyp48mnPqf/0v+N//e8lr+fL1y9RS4ONa4KBlWe+1LGvp7QJfoFqW9uoXSNglEokwW79BroA0WZ4PuwjR7HwMDgKg9/Z2b71QqNH0q8X56Osja5rkDaNroR45FKJcqVB1bl6GYaAFAna1SzxO1nFFcoVCS25LT08PsaUeRzv4yOftJmOJRGM9gGyhQNQFH8lkkolKha9Xq7ztZS8jEAjYzsdi4MPjcBQLBaKA7JpaDJApFIg65zk0PMxYNNpU8fL4449z+eWXEzl6FG67jStPnGDvfffBnj2M6jqXX355Z+fDCanMenqLzOVyrB0YQFdVxt0JrB599atf5f7772/eWKlwYmqKiiuHZlHat8/PE/H1vNNS4EMA+5brQHwtQRdI2KU+R2alhtmpskyh7nx44cPp76AvMMV1qdJkudn5CAbnnY9EgmypRM40iXQJPkQoZOd91FvIFwqogYAdduntJefcRHOG0Z2qHqeFfBN85HKokoTe10euVGo4ETnDaAKeZDLJ2bNnubtS4Q6wkzPHxmBkZMEllVCoNexiGISBHlluGi6XNYwGUA0PD3Nalpvgo57vwf798KpXceX73see738fHnuMJ6tVtmzZ0tn5cKpavHkfc4UC8XickeFhjj35ZMfz+Nd//Vd++MMfNm88fpzjstwRPm677ba2eSYUCnDgQMe1fPl6Lmop8LEfWLVcB+JrCbpQwi7ODXCl4ENz4KNQKNiNzVzwoQwMEAIiXYQPNRRqVJ80QKDufPT32/BRLHYvz0SSUBWlFXgkyV7PBR9dcVtCIVRoTjjN5VCDQYKxGOFgkLwT5siaZqOcGeywy44dO4gkEmy//37b9RgZgXP8LoRDoRbnow4fMUlqavyVMQxizrUdGhpiDNrDx4EDsHUr2z/4QfaZJrXPf57R6WkbPlSVUpshcXUgaYEPwyDe28vIZZd1LLetVCo89thjHPUmpB46xAlZpmy/qGW/Bx98kFNtBuT94vRpDu3fbw+c9OXreaKlwMdngJcKIa5croPxtUhdKGEXBz7UFcj3ALu6xjCMeefDXW4aiXAV0LdmTffWU5QGfDRCIA406gMDFKpVsl2GjxbnQwiQJCJ9fRjVKrVajXyxiN6NMKAso1pWa9hFkkDXiUlSw4nwQlYymaRUKnHHb/0WIpmEL37xnCEX6AAfpomiKPQEg03OR6ZYJOaUUA8PD9vzXZxeH7VajR07dvCSG26A0VHYsoW+RIL44CAPxeMomkZ/f78NHx1yPqANfJgm8b4+RrZu5Wg+D67jqWv//v1UKpVW+Dh8mOOlEhUh2pbpVioVZlwt6+v64tNP80XD6NhEzZev56IWDR+WZf0b8DHgx0KI3/N7efwSdaGEXZxv39oKuTiqAwP1ctCmaygEu+JxoqtXd289WcZ0kiALhUIj/wIg0NODGggwaZpEupVnIkm22+J2PpywSyAWQwsEyOVy5Eql7gBPJ/gIhUDXiQaDZJ2eHNlSiajrPPv7+wmHw7z97W+H22+34eMclS4Aiixjem7MpmkS1nViQjQ7H+VyAz7WrFnD2Xye6s6dgA0AiUSCwWIR4nFwju3Kq6/m7re8hcu3bLFPUVUptXEhSuUyfZLUCh/FIvGBAUY2buSorjdgx61du3bx+te/niNHjjQlyOb37ydlmjZ8tBmCVy6X28JHyjA4EAyef+jl7//eD9v4WnEtpdS2CnwE6AM+BzwjhKh2eLT+b/XVPV0oYRcnB0BbIZDSwuHO8AHwyCMwMNC19QKybN8sTXPehah/btEoUSHIVCrozg3yWUuS7IoXd2Mzx/kgGm3AQK5cJtIl+Ai75uWAU+3iwEcsEJh3PsrlpmReSZI4ceIE69evt+GjXF6c8yHLFD0JoMVikXAsRgwa61mWRaZcbjSPk2WZ3t5eJvftw8rn+fCHP8y73/1uO99j69bGe23fvp1vffvbbKnDh6a1D7uUyySDwVb4KJeJ9/ezYcMGjgYC9oA+j3bu3Mmtt96KLMtMOfNjAE7s34+uqnbYZQnOR6pY5IAknTdAGHffTW109Lz29eXrfLXUhNPFPvy27cupCyXs4twA1ZWCD1XFcEBAawcfi2gpviTJciMHwzAMO8+kHmKKRqmnX3Ytz0SS7KRad4UN2GvqOlEhyGaz5CuV7iTWBoN2wqmrfNUNH1Hs/h7VahWzWkXzAE/SKW9m0yb4tV+Da68955JhRWl1PopFwj099FhWAz5M0yQkBCFXbsvQ8DBjIyN8+a//mvHxcT70oQ818j3quvLKK5mZmWmGjw7OR1KIJvio1WrkqlViySQjIyMcNYy2vT527drF9ddfb7/GFXo5fuQIGzds6Bh26eh8lEqMFYvM/uIXHa9bR1kWb3vySX782GNL39eXr2ehpYRdAkt5LOdBv+C1TFNtV1qak3ewYs6HplEwTdsRqNWacz6WQ071SaFQmAcBt/NhWchCEOpWGbYkNc13aQCPk4OhA+l0GrNaRe2G8yEEaiCA4Wp3bhgGqizbzge2E5HP59GCQQILta7/9rfh4nO3B1IUBdPjfJjFIuF4nFit1gi7ZDIZYoEAuJqpDQ8Ps2twkD+9806+/OUvEwqFbPi44orGa6680k5pu9xxYWRNo9Sm70apUiFpWU3wkclk0AMBArrOqlWrKFSrZDxuRCqVYmJigssvv5yNGzfOw0cqxYlSiY2bN1OBFviwLItKpUIqlWo5llSlwqreXkZ37z7H1WujmRmOVyqkPSXDvnwtt3xIeD7qAnE+lJ4eAtiOxEpIVVUKxeI8fCz3NZTlRgKoYRjNzdQiEaK1GroQ0K1Jup6cjwbwOPARtSzOnj2LGggsDAJLkBoMYriafrnhI1qrkc1m7e6mHhA4X4XD4Zawi1kqEe7ro6dSaTgfDfhwXduhoSH+9MEHef+qVWzfvt3e6Am7XHzxxVx88cVc4QCJHIm0dz4qFZK1WhN8zM3NERcCNA0hBBuGhznqKbfdtWsXL37xiwkGg83Ox+HDnOjtZWRkhLJlteR81OfntHM+ZqpVXn7TTRw4dcr+YtJBtXbVMMeOcRZaypd9+Vpu+fDxfNQFAh8iEkFjBeFD0zBKJfumXK0u/zX0Oh+WNe98SBLRQICIZXUVPjo6H9Eo0VqNs2fPoncJBMCGD3f1iWEYdhhN14lVKnaOSS5nQ1aX4KPF+SiXURIJYuVys/MBTWuuW7eOSy+9lA9PTtqlrOWyHRZxJboGAgGOHTtGXz1XRNfbOx/VKoPlcmOQHDjwAY3Pc+SSSzj2zDNN+9VDLvzsZ4yEQhypJ6QePsxxWWbjxo1tnY+yk3fihQ/TNKkA173kJRzQ9Y4t3efm5li7dm1LO/jqkSNMAUXPXJxzav/+pb3ely+PlgwfQoiQEOJtQoh/FkLc4zz+2dm2MjWTL3S98512kt7zXaqKhg0FK6GQphFwKiK0SmVFnI+6E9HIM3GFy6KhEHqX4UOVpGbnw7Js+IhEiFarnB0fR4euralKUrPzYZqo4bDtfDhORDabtfNbuvA5K+EwpufbvVku285HqURmAfh4//vfz/0//zmhdetgzx77Rn3RRQvOFZIjEUq1Gnhu2qVajSQw54KBubk54pbVWHNk82aOVqvgSirdtWsXN9xwA3z604zcffe883HoECdqNTZu3Gg7Hx74qDjuixc+UlNTJIArXvQiO+m0AxTs3r2bM2fOtIRtJvftowYU2+SYlEqllg6uAJimPXzQD9X4ehZa6lTbq4HDwNeA9wCvdR7vcbYdEkJc1e2D9OXR5s12kt7zXZpGBDsXY0WkKKihEDMzM6iVysrkfDgJoIZh2PDh6mkSVRQbBLp1/pJkz69xOx/OdmSZqBCMj40R6eKa4WCw0UIewCgWCSsKhMN22GVuznY+XDflZ7WeqlL0VJ8UKxXC0SgxWSbt3JwzmQzRWq1pzUgkQjweh5e+FB58sCXZtJ1kVaUsREvTr1K12gofMzPEXUMSRzZu5GhPT6MKpVqt8uijj3LdddfB/v2MpFLzYZlDhziRyzEyMkLVsrA8YZC685E6e7Zpe2psjIQQbN22jQP5PNYC8AG0DNc7e/CgfQ3bwMe///u/8773va/1zXI5G8Yef7ztWr58LUZLKbUdBn4ErMeeWvsJbOh4j/PvU8DFwI+EEENdP1JfF54c50Pr0mC1c0pR0EIhUqmUDR8rEXZxwiAFZ+Bak/OhKEQCAejWbJt2zketNt9VVZY5OzaGXqt1z/kIhZqrXYpF2/kQgpgsk5mZIZfL2SDQhTXDmtbqfFQqhHWdHlUl43wbz2azxKrV9sBz003w0EMt+R7tJMsypTbVJ6VajaQQTc7A3NQU8WAQAvaf1ZGREY6GQuDMeDl48CDJZJL+cBjGx1l9551kMxmymQzmwYOkcjnWrFlDUAiqnuF5HZ2PsTESksTg4CBIEhMdKl46wce4ExYqurrU1pXNZjlz5kzrm9U/b79Cxtez0FKcjz/D7vHxWWCTZVl/blnWvzqPPwc2YndBTTiv9eVrYWka7wEu6WJX0QUVDqNJEqnpabvVeWCZU55kuQEDhmGguUAAIKqq6N0cqidJaMFgs/NRD7tgw874mTM2fHQr58M1PA8c+HC++UdVlezsLNlMxl6zC7k9iqpiepwPs+58RCKknQTQzOysHXZp1z237nzs399U6dJOsixTCgTsUINLRcsi2dvLnKuD6dzUFHHXehs2bLDLbR342Llzpx1yGR2Fyy5DvPWtbFAUjn7+85w6fpzh4WGCwSBSIEDZAx/lUgkdmPFMx56ZmCARCiGEYOtll3GgwzC73bt386IXvajV+XB+bgcfxWKxqQ9JXdVMhtuB6qOPtl3rnMpm4fOfP799fV0wWspf31uBY8AfWpbV0nXHsqwK8MfOa17bncPzdUFLVfkAkOjiPJUFpSioksT09PTKdFUNhdAc+GgkubqdD00j0s3W8pKEGgy2Oh91+AiHGa8nnHYJelRJaoaPUsl2PoCYqpKZmyOXTts5H10417CmtYRdzGoVRdeJ6fp8tUsqRSwUAiFa36Se53HffYt3Pjw355JlMTA4yFw220jinJueJu76fNetW8eZTIYv/fSnfO1rX+Pb3/62nWxaL+8Vgo3bt3P04x/neH8/69avB0AKBKh4EkAruRxxoFypNM3SSU1M0OesufXFL+ZAKjXvTDgqFAocO3aMW265pRk+SiXOzs0RCARaKojATmZtBx/TY2N8Cxh1usUuVcVHHuE//+qvzmtfXxeOlgIfQ8Cjljdd2iXLsmrAo8AKfZV97ksI8QYhxBfSnm8svpj/9r1C1S4oClowyMzsrF0OutySZTQn4bSd87G+r48N3Tz3czgfuqZxNpUi0sVBfqrTwbUus1xuJBBHIxE7rDAzg94lyApHIpie/AuzVrPDLtEoaafnSGZmhthCn/FLX2rncWzcuOB6HeED0JNJFElqDM+bm5kh7sojkmWZ/+dP/oQHxsb44Q9+QCKR4HWve12T4zJy440cjUY50d9vd3sFQsEgFW/ORzpNCEjoelPoJTU1RcJZc+sVV3AgFgNPee/+/fu57LLLuPjii5vDKCdPMh6JMNzf3xY+isUi09PTLSW6Ew7A7MjnoV1Y5hzav2MHH5yeXvJ+vi4sLQU+DOywy7nU57zWF2BZ1vcsy/rvPd1qJHUhqf6HeqXgIxxGCwapVqsrAx+hUAMGCoWCnWfiWvctmzfz8UU01lq0XM5HtVq1245Xq/PORyRCuVLpGgiADR912KlWq5SrVRTn86w7EbnZWaJdut7hSATTVfpqWRbFWg0lGiUWi5FxQCAzO0t0oZyem26yE7fPAWKyLFOCJviomiZVQOrrI65pjV4fczMzxD2/y3/5sY/x5Q0b+Nqf/zl3330369ata4aPjRs5eu21nNiyxX4O2oZdKtksEtCnac3wMT1NwoG9rVu3ckCIljbr9ZDL0NBQs/Nx7Bhnw2HWrV7dkkcDNnzUarWWPJOJ8XEAdvb0nFfex/TRoxj+BN4XvJYCH/uAm4UQl3V6gRDiUuBm57W+fC0sIWzwWEHnQ3XyPFakpbssN2CgUCiglcvNoYdotHtltmA7H4EAhmFgmiaqqiLc8OEk9updBC9VljGcG7NpmoQlCeFc22g0SjafJzs3h96l661EIhRdzkelUiEASLpONB4nb5rUajWy6TSxhaqZbr8dPvWpc64XCoVa4KOcySADIhYjrqrz8JFOE2+XS7NtWyPvA2iGj5ERjqbTHJekhvMhtXE+KrkcIaBPVZvhY2aGhPM7tGXLFkYzGWr7mv/81uFjzZo1LfAxLgTrhocptoGPuqPlDb1MTkxwRU8PO0xzQfg4efIkp06datk+feoUpmWBDyAvaC0FPv4VkIGfCiF+SwjR+Avm9P74TeAnQAj4l+4epq8LVisMH5oDH9pyl9lCw/nIZrOUy2UUj/OxHPChBgLzOSaqajfSqle7OF1NI10Er7CiNODDMAxUSWpUEcV6esjm8+QyGaJdut5hXcd03bRM0yQsBITDBKJRIrJMNpslk04TW+j3qq8PXvnKc64nyzIlT9+NUiaDIgREo8QVpRk+2lVubd8OdSCYmLDDPc705JGREY4cOcKJEycazkdIklrDLnXnQ5ab4WNujoTzufb29tITjXLS02a9o/Nx9Chny2XWr1vXkkcDNEIxXviYmJzkFWvWMFUsMvXww50uHZ/85Ce58847W7ZPj49jQtvJvb5eOFrKbJevAt8AVmHDRV4IcVIIcQIoAF/EzvX4hmVZX1+Og/V1AUrTVjbs4vxTXSn4CATsviKqilhB58MwDLt/SqUy73w4oT+9i+eueuEjFGoAVrSnh4xhkE2nu7ZmWNebwi5u+CASoSccJpPJkMlmiXXh2jbgw+V8lNJpZCFA14nL8jx8ZLOd4aPufNRdDycRdt26dYyPj/P000/Ph10kibK3yVg2a+d8OKXidc2k0yRcw/O2bt7MAdck3XK5zOjoKNu3byeZTJJOp+fzO44d42w+z7qLL25yk+rqCB+pFKt7erjummvY+dhjLQ3Y6hodHWVycrJl+/T0tB2XX2pXVV8XlJZUa2hZ1h3A+4DjQBAYBtY6/34GeJ9lWe/o8jH6upC10mEX54++uhJryjJaIEAqlbJBoFxudj7icXDdOJ61JAlViGbnww0fzjA5vYvnrobDGM5NyjAM1GCwcY56by8507Q7nHYJspRolKLH+VDAhg9dtxuNpdM2fHShf0xb+MhmkQMBGz6CwXn4yOWIt8vtagcfjkKhEMPDw0xOTjI8PAy0D7uUcznb+ZCkZucjm6XPNSTwihe/mAOTk40ZL4cOHWJ4eBhdUQj84R+yatWqRtJp9umnsYSgf/XqtvBhmiayLLcAxOTcHMl4nBtuvpmdgQC4JvO6NTo62lotY1lMz81RBSquuTh13XPPPU0JzA394AfwrW+1XcfX81NLbnRgWdY/WZY1gg0d1zuPtZZlbbQs65+6fYC+LnBFIt3r8HkuKcq887ES8BEKoQrB9PS0vV6p1Ox83HEHfOIT3VtPktCE6Ox8ODepSBevd1v4cMIuUixGWJKYSKXQu9VRNRq18wUcmaZJGBrw0SPLtvORzxPrwvC8tvCRybSHj3y+PXxcdJEdYpiaattbZGRkhKGhIXvKLjaQtDgf+byd8yFEM3zkciT65usArrvxRr4jSVScGS+7d+/mqquugqeegs9+liFNs0MvlsXZY8dYvXq1DXRt5tcUZ2cZ7u9vdT7m5hjs6+OGG25gp6K0zfuYmppiamqq1fmYnaVe52K0GZL3wQ9+kCeeeKJlOw8/DF/4Qut2X89bLaXD6R8IIX6n/rNlWWOWZT3qPMYW2teXr4766lfhqhXqyK8oaJZFSJKQViLsIstoQnR2PjQNBga6t965nA/nJtUtEAAb4upNv7zOB7pOVJY5k0o1kl2frcKxWFPOR7FYJGxZ885HMEg6nSZrGI0cl2ejUChEuVbDcud85HLz8CEEc3Nz1Go1csUisd7e1jcRwk463bevI3zUQy4AUihExTtYLpdDCgTos6wGfFiWxaxhNIbgAbzlLW+hV9f5hAO19XwPDhyASIShdNqGj5kZzgrBqjVrUHSdomXZv58umadOsbZUaoWPbJbB/n6uu+46Hs9kKO/a1XLKo6OjrFq1qtX5OHmSaQdOzTbwYRgG4041TZPyebsrbZuS4EXp4EHwzLXx9cvVUpyPfwTetFwH4usFqq1bu9de/FwKh1Etyy6zXamcj4Wcj27rHM6HlkggAL0LN+W6VFXFcCx+wzDsaiIXfMQkifG5OfQuwYcSi+G+/ZiGYcNHfZJuIGA7H4UCsS6UtwshCAUClF35CaVsFjkYhGiUXuyBcplMBl2WCXQKL23fDrt32z04PI3NNm7c2Kh0ARt4Kp7QQyWfR1IU+lylr+l0Gk2SCLlCd4FAgC+96U187v/8Hx577LF5+Bgdhd/9XYbm5hjbt8+udBkYsJ0PRaEYDLbkYBRNk7WhUGu1Sz5PMpkkHo+zfs0a9v385y2nOzo6yite8YpW5+PkSaad0KfRZjBdJ/iYmprirGnCI4+0PLcY3f/e9/KM75w8p7QU+JgCsst1IL58LbsUBa1Ws5MiV6jUVsOex6Gpqv0NeDlBKxRChdZqFwc+RDSKDl0DAegAH/Vrq+tEg0Eq1Woj2fXZSo5GKUOj8ZWZzdoJp44T0eMk+BrlMpEu5dPIwSAlV9+NUi6HLEm281GrMTs7a0+0leXOIcRt2+C734X+/pY8n/e85z383d/9XeNnqU3YpZzPE1IUEpVKI+F0ZmaGhKK0JC0PXXUV//P663nHO97Bnj175uHjxS9m6JprOHPffXayaSzGqlWrbPgQoqX6pGiaDAvRBBCWZTFpGCQHBwG48eUvZ8eTT7YM3hsdHeX666+nUqk0Ou4CcOIE09UqejCI2abxYif4+MyePfyJpsFPf9ry3GJ054ED/GTPnvPa19fyaCnw8RDw4uU6EF++ll2Kglatrhx8ODBQq9Vs+FjuxmaShAatzkfdbdF1otC1mzLYs1ZK1SrVarW98+HAlt6lNUUohAIUnRuamc2i1Gf06Doxy2JsbIyoLCO6BFlyMEjJ7Xy44aNSYW5ubh4+FnI+Hn647SyZWCzG0ND8LE5JlludD8NACofpK5UazkcqlbJbq3uBZ9Mmbq/VuPbaa4lGo/T399vwsWULQ296E2N798LBg4yHwwvCh1ksstaympyPubk51ECAsBPqueHlL2enLIOTY1LX6OgoW7ZsIZlMNu1vnThBqlhkOBLBaJNw2gk+TmUy/KBapfKTn7Q8txjNFgoUsv535+eSlgIfHwWGhRB/LUS7gQm+fD3HFQ6j1WpoKwgfmvMNXVWU5Q25gJ3zYVkdcz7Qdf4QuNjpMdENCUUhLEmYpmnDBzTnfDiv07vV4VcIGz6cGS5mJkO47ibpOj21GqdPn7Zbq3cpt0UOBim5bsylQmEePsrlefiQpM5rbt1quzPnGGQHEJJlKp7chkqhQEjT6DPNJvhIBIOtwHPJJfDUU9x55518/etft5Nljx+HSy5h6JprGFNV+PznORsIzIddhGgNu5RKrC2Xm+BhcnKSpAuybrzxRnZWKvb7O7IsiwMHDrBlyxYGBgaanJP00aNoikIsHMZ0DeUDuyy4Wq22hY+xXI5MpcKOxx9fsD/IwYMHWzdWq8wWixQ8XWN9/XK1FPh4EfBV4CPAASHEx4UQ7xVCvKvdY3kO15evZyFFQa1U7EZYK5Vw6vxTU5QVcT7kWo1qtUo2m22Fj2iUDwJ632KmJCxSoZA9XM5xW1QhmsIuMeybt9xFtyUsROPGVcznm+AjVq3a8BEKdQ8+JKkZPvJ55FDIho9icR4+gsHOa2oabNq0KPiQZJmyBz7KhQKSptFnGK3w4V1z7VqYniYmSbzsZS+Dw4dhZARk2W40pigwMcHZcplVq1YRDoftPBpv2KVcZqhYJJVKNcJcExMTDLqA55JLLiFjWYy5QhoTExMADA4Okkwmm+Bj+vhx+nt77c64Hviot+lvBx+nTZNfvflmvpdI2A5SGxmGwRVXXEHW63BMTDALGH5fkeeUlgIfXwZ+GxDAZuBDwD8BX+rw8OXruaV62MXVhXNZ5XY+ZHlFnA9RraI6Lbg1VbVbWLvCEkB3S5tluRk+nG319eO7x8oAACAASURBVKK1GtFQqKvN1MJCYDo3GDOXI1yHq0iEnkqFU6dOEV0IBJYoORRqgo+iGz5Mcx4+AoGFz/PTn4b/9t/OuZ7UzvkwTUKahp7LUSqVKDpQkBCidc1gEDZsgCNH7J+dkAvAmjVrOJNOY23ezHihMO98WFaL82GWy+iFArquM+skh05MTDDoOk8hBK+97DL+w5WLUQ+5CCFawi7Tp07Rn0wSVpTGZ1iXYRgEAoEW+LAsi9PFIr9/xx38p2l2zPt4+umnqVarLbNoOH2aWaBg+CPHnktaynjLu4COE219+XrOKxzm8mqVN1166YolnKoOfKyU80GlgqZppFIpu8OnJM2Pla/DRze7qjrw0Qi7WFYzfDjJhd0EHiUQaDgfTfCh68RKJU6fPs36WKy7zoe71LZQQJZlu726YTBXq9nwAQuveeuti1ovFA7b8GFZjc+ubBhIfX0I06QvmWRmZsZOOLWs9p/npk12Hsa2bXaZrQMfkUgERVGYefBBzm7ZMp/zYVmtzke1ilKtkhwYYGpqikQiYYddPGv+xqtexcfvuov3OT/X4QNoDrsUi0zPzdF/7bXI5TKmJwxiGAarVq1icnKSSqWC5HyumUwGAbz8Fa8gLwSHv/99Lm3TH+fw4cOAnYjrLl2unjxJGh8+nmtaNHxYlvV/LeNx+PK1/FIUNpTLfPDaa+dvyMupUKgBH2ootCLOB+UyqqqSSqVYlUg0T22tl9h22/lwJvca7rJXsGGgXO6qCwEQDgQoOt/SzXwexQUfPcUihXqZ7TI5HyXDsOFD0+jJ50mbJrOzs8QtqytrSqEQ5WDQLs12rmXFNAk5LeT74nFmZmZIpVJsqlbbr+nkfQC28/Gu+Uj40NAQJ0+eJJVKkUwmbSelVmsLH2FgoLeXqakpLrvsMtv5qNWa4OOW176Wd3/2s435NKOjo1xxxRVgGCR7e+fhY2yM6Xic/oEBSpOTGG3gQ9d1arUaExMTjSTc06dPMywEIhrlDb/6q3zvK1/h0nQaPHlEdfhIefp5pB0HqNCmc2qhUODkyZNcdlmbeakHD9qTj30ti5bc4dSXr+etFMVuUlQsrljOR6hSIRQKocnyijsfLaGe+g2j286He5Ku1/kol9EDge7CRzA4H3YpFAi7q2ucG0wMunaesiw3Ox91+AgGCWka4XCY06dPE/fclM9XkiRRkeWmYXZl07Qb40Wj9MViDfhIVKudnQ83fDhOBNjwsXv3bhKJBMFgEEVRKNVqWB4YMGs1FGCgp6cBEBMTEwyWy01ryhs38hZZ5pvf/KaznON8/O3fkvzZz+bDLidPMh2L0d/fT1hVMT2wYxgGqqqyevXqptDL2NgYw47b8oY3v5n/1DR48MGWUz58+DDC0wEWYPaZZwAotGlQdt999/He97639foBXHON3RTufNWma6yveS2lw+kxIcTfL+J1nxBCtG/2/zyXEGKTEOKHQoicEGJKCPE/hRAr1Bvc17NWMGg/stkVy/mgXEbTNLvCZiWcj0ql4XxoitLsfNQTbbvsfIRdw+zUWm3+2moasVKJaLu8hGchJRhsWPbFQoFw/brKMjGn9XrMWb8bkmWZkru9umki1+FV14nHYhw/fpx4JxdiiQqFQpRDoSb4qBSLhFQVdJ0+XSeVStnwUSq1v7aXXGKHXQoFGBuDjRsbTw0NDfHEE0+watUqwG5MFgwEKHtyMIq1Gkp/PwPRaAMgJicnSXrXHBribcUi37j7bizLmoePAwcYePxxJp0EVE6cYFpV6e/vR41EMNrAhzY5yepEogk+Tp84wRCAovDKV76SvYZB6p57Wk758OHDbN26tRU+Tp2y39/pR+NWPp/n9OnTrdevUrGv3Xe+0/rcYjQ5ydimTee37wtES3E+1gOL6QXd77z2gpIQIg7cD0SB24A/Bt4G/H+/zOPytUQpCmQyKwcfpRKqqjZNe102uZyPmZkZ2/mQPJFVXV8256MBH/XzDAYZUhSGuhSOqCscDM73+SgUCNc/SyHocc4tWqstK3wobvjQdRs+PI7A+arhfLhuzuViseF8JCKReeejWFw47HLwoP1v1+/B0NAQv/jFL1jtKrlWgkGKLviwLIsioAwNkYxEGvAxMT5uJ5y6QVqSeNmaNZw9c4YHHngASZJIJpNw6BBJy2Ly2DH7dSdPMh0K2c6HpmF6cjAMw0CdnWW1qjbDxzPPMCzLIAThcJhXXn01P/B0VbUsi8OHD3PjjTe2wsfYGAEhKHjax8M8fFjeybz15NvzhI/xX/yCFzuOi6/2Wo6wiwq0jkh8/uu9QC/wJsuyfmhZ1l3AHwC/LoTYsvCuvp4zUhRIp1cs4bThfEjSyjsf7eAjkbCn6XZLC8EH8JqeHr60UP+L81BYkjDrOR+GMR92gcYk21il0lX4cJe+lorFeecjGiUeiXDy5EnipVLXnI+K1/kolZDqzodTzdRwPtoNSVy1yt7/4YebQi5gw8eePXsazgeAIkmN3ilgJ9WGgMDq1QyEw/PwMTHBYBvACq5fz+033cRf/MVf2K5HqQQnTjDwW7/FVB0kTp5kGmznQ9cxPDkYhmGgViqsjkabwy4nTzLsCpO+4dZbucfjVkxMTBAKhdi0aVNLzsfs5CSDiQSFNpN78/k8pVKJ6enp5idyOb4Vj1OdnrZLlZeo1JEjzMH5z6J5Aair8CGE6AFeApzt5vs+R/Ra4CeWZbl/S78DFIFz18/5em6o7nys0GwXSiU0TbPLe1fQ+chkMu2djx074OKLu7emLKMKMV/tUq02g52u2wO9ulnt4oYP05x3PgAtGiUYDHYXPhSFkhs+vGEXVaVSqRA3ze4knEpSS9ilXA+7RKP0Kcp8tYuqzpdSuyWEnffxH//RFj5M02x2PiSpyfkoplL2tOBYjAFFaeR8TE5NkWzXOXbdOn5j82YeeughGz6OHoWLLmLgt3+byVwOq1y24aNctp0PXcf0wkc+b8OHpjU7H6dOMeQCnle+4Q08kMs1uRWHDx/m0ksvpa+vr9n5sCxmUymG1q6lUKvZFUQu5Z3fo1NOaKZx/jMz/PrcHN970YsWdD/Gx8c5Ui9pdil98iQGUGvTQt6XrQXhw8nzOCaEcHwzbnNv8zxOApPARcCPlvvAneO7VAjxASHE14QQh4QQNSGEJYS4bRH7vl0I8aAQIu3kcDwuhPi/hRCdrslm4En3BsuyisBRoE2qtK/npMLhX47z4Z72ulxyOR+AnWfihY9uNhgDGz6Yb+muVirN56nr9h/8bvb5CIXmwy6GgeL6LEU0SiwSIdalEAiAHA43w0ephFx3G3SduAMicS94nackSaIiSfPwUavZpad1+AiFmJiYsKt6FoKdTZvg5z9vGWRXryJpcj5kuVFBBGCmUnbb+miUAUliamqKQqFApVJpP6F43TquCwZZv369DR+HDsFllxHZsgUpECD3gx/YOR+GYTsfsRiGxxUwZmdRgdWK0gwf4+MMu4Yhrtu2jZBlcWTfvsa2jvAxN8dsIMDQRRdhtOniWp874837OHXkCBbw/46NLQgfX/jCF/jUpz7Vsj195oz9/mcvxO/h3dG5nI/1rocF6J5t7sew85rvYjcgWwn9HvBp4A7gUuwGaOeUEOJO4OvANcCDwI+BS4DPAd/uACC9QOswApgFuvwX3deyaSXDLu6E0xUMu2jODUldiTW98FGttsIHdDfsEgo1KiXMYpGw28WKROhxEl275nyEw5RcyYpe+Oh1fpfimtaVEu5G2KWe81EoUJEkQrIMuk5Ckjhy5Ai9PT0Lz6+55BK7yVwb5wM88BEKNTsfMzM2fMRiJINBpqammJiYINnb237NdesQJ0/y5S9/mV/7tV9rwAc41TJf/7rtfKTTtvMRjWJ6EkCNmRkbPiSpOewyMcGwK1QoAgFeGonw4A9+0Njmho+msMvYGLO6zpo1aygIYSebu1R3Przw8czRo/8/e28eJtlV3vd/3tr36mWmZ98XCUloAQkIthAgCI5tmcXYEMsxxnaUGLAdJ4QlDnnsXxwHbGJIsI2NsQ0GOz9AJnaEY8dsArGYXbvQjGY0o5mepWemu2tfurtO/jj31l493T1Vt3qq38/z1FPdd6lz7u3b937r+77nPdyeTnN8dpbvHj8OPfI3jh8/TqaLu5FxREehfVZfpc7lxMc+57Uf+2C/t2lZ+2sHkDDG/LgxpnOu5MHwKPA7wOuAg8CXLreDiPw48CZsaOhGY8yPGmNeDRwCngBeDfzSwHqsDBcvE05DIahWed/73seLDh/2NOwCPZyPftMuPhYWOsMu0D0vYY2EQ6F6smKlUiHS/NmJBKlwmGS7CLoCuooPV9gkEowFAojI8i7EKggEArbOh+t8FAoshEK26FYyyYQIR44cYTKVWt7dOXTIOn1tYbapqSkCgUBr2CUcroeywIqPiN9vnQ9jmJmZYWZmhi1jY93b3LMHTp7kjjvuYMuWLS3iY2r3bmY+8xmWwmHmMxnGx8eJjo1RaksArTsfTVVOS6US+VKJTePjLdvevmULDzQlnbriY3JystX5mJ5mLhJhx44dFKGr+Ni5c2eH+Dhx8iSHkkne8pa38P5Nm3q6H8ePH2e+ywR5GSdHptBU3VVpZVnxYYw56bxOAB8F/r5pWfvrrDHG00RTY8yHjTFvM8Z80hiz0uG973Te326MqU/FaIw5j3VSAN7Rxf2YA7pl6o0Ds12WK+sRN+ziVc7HwgI333wzMRFPE07BKWzmgfiIGNMqPtqdjz4PM46EQlScfIFytdohPt77qldxa59cCIBgONwqPhYWGuIjmWQsECCVSODr0yy6gUCAxWbxkc9b58Mp6T4BnDt3jslkcnl355Zb4IUvtMPLm/D5fBw4cIDdu3fXl3WEXebmbPG2ZJJNS0tcunSJc+fOsSWZXFZ81GkWH7t2cWHXLuZ27CCdThMIBIikUpQXF60z41DKZIgCW50iY7VajenpabZ3cVtuP3iQB773vfrvPcMup08zFwhY8WFMh/goFotcc801nc7HqVPsGxvjnnvu4b5z5zj7P/9n11PcU3w4fVDx0ZsVJ5waY95ojLmqh5WKyE7guUAV+FT7emPMl4BpYCvwgrbVT2DzPpo/LwwcAL4/iP4qAyActmP4PRxqC0D7Q3kQtDsfgcDgxUcwSLRZfEDrw67fQ3ux4sNNVixXKkSaH8CJBC936kj0i1A0SrXpW3qL+EgkGBNh7HJCYBUEg8HWnI9CgYVAoOF8OA/sycud22c/G3pMQf/ggw+2lCAPRyJUmhJcK5lMXXyEikXi8ThPPvmkTTbt1ubu3XD6tBUTxljxcc01gFNi/ZZbuLh1K5s2bQKwdT58vpakWld8hItFkskks7OztsBYOt1w0Byue9azmMvlOHv2LNVqlVOnTnHgwAHGx8eZnZ1tJKNOTzMnwrZt26ga05EAWigUuouPM2fYOznJ+Pg4P3X33fz+44/beilNlEolzpw50118OO0U2ueZgdb+bWBWU2RslzNj7TXLbHONs83O/nSv79zivD9mjOlV6P9bbdu6/B/gThGZbFr2aiDsrFOuBlzR4WHCKWBFiNfOhxfiw5m/plQqUSoW7QibZhKJ/hY1wwkRNDkf4Tbng5mZvrbZIT4WFwm5D8NEgjFgLB7vm8iqh13cnI9CoeF8JJNMOENGJ6LRNbcZaXP+2sVHeX7eDmFOpSCXY/PmzTz66KNsicW6txmN2iHcZ8/CuXP2/2vS3iqnpqaYuf56Lv6bf1MXH5FIhHIgAE1VVUu5HFG/H7JZtm7dytmzZzl9+jQ7kskO8eHbsYMf2LqVBx54gGPHjrFr1y5CwSDhn/5pQqEQefdzp6eZW1piYmLCzgnUJgYKhQKHDx/uGO1yYmaGfVu2APAr//bf8qGlJUrf/W7LNk8//TTJZLJTfNRqZJy/XTfx8drXvpb777+/8xx+4QvwgQ90Ll8pH/sYfPaza9/fY1Yz1PaXWdlstR8B3rym3gweN/h5cpltnmnb1uWPsAmnfyMirxCRfwF8APiEMeZxuiAi9zijaL59Qe239YF7090Izoff75n4qA+19UB8RMJhKs5IifLCApHmh6ErPvrpfEQiVI2pl8uuLi4Scj8/kWBnIMCOiYn+Oh/NrkCz85FIkKxUCAQCTPaxWm2H85HNEnYmzyObZWpqyooPZ36Zrrihl6aQC1jxcWF2louLi63iw+drGX1SyueJjo9DNlsvsX769Gl2dhN227dzeyrFV77ylXrIhfPn4d57mXSK7AE27FKtMj4+TiwQoNhWA6TZ+Wh2I56+dIl9Tk7M4cOHedbYGF9qK+l+/Phxbrnlls6E04sXyTj/d4UursilS5c4dqxLlsC3vw3veldHaGjF/MM/wD/+49r2HQKrER//FOsY9Ky44qx7DHjFlXZsQLjyubDMNq4UTzYvNMbMAy911n8aeB/wCeDnen2QMeZDxphbjTG3bt68kuKwysBxRYdHc7sM0/mItFeiHATNzodX4iMSoeyIj8riYnfx0U/nIxymGghAuQwLC1ShZbTL8xMJPvNrv9a3NgOBAAvN4iOfZ9Hvrzsfks8zMTFhxUefRFY4Gq3n0UCb+HCcj8cff5wpJ++kKz3Ehzuz7cWLFxthl2jUDn1tdj7yeaKbNrWIj+npaXaGw51tbt/O7SI88MADDfHh1NuYMKYhPqanmSsWrfgIBim2ORHFixeZ+uhHiUQi9X1KpRKZcpmtjvMB8NydO3n48dbvmMeOHeOGG26gWq225ARx9iyZcJhoMEi+i/jI5/OcPNnl+28uZ5Ph/2wl3/E7eddXv8qHu8x5s15ZjfjYBXRWU+nkKWytj5HDGHPEGPNDxpi4MWaTMeYtxpji5fdU1g1ehl38fvttuVbz3PmIRqPI0pI3zsfSkhUf5TLRdlE3gJyPcJP4KC8uEml+MA1CfIRCVP1+Kz5KJSo+HyH3+kkmIZ9HSqW+hl06nA+fr+584IqPYLB/4iMWq7tJAOVczoZmmsRHpVJhSyCwJuejXXxEIhHK7eKjVCI6NdXhfOwIhbo6H8/J5Th69Cjf/OY3G+LjhhuYKBTqQqJ26hTZQoGxsTFioRDFudaBmIVsltiTT7Jr16563seJEyfYHY/jS6Xq2924fz8Ptw23PX78OAcOHGBsbKzV/Th7lozfz46xMQpdXIxcLtddfOTz8NrXwvvfv6ZJ6U7Pz3O2zdlZz6xGfESwiZqXowr0927TP9wrfbn+uXeyNXpfyrrGy7CLSMP98Nj5iEajNrHWi9EuS0tks1l8Ph+B9vM6IOej4nzTLHdzPs6f77/4cJ2PYpGq329ntXXby+Vs+KDfYZfmnA+/v55wSi5nxYff37+wSyzW6nzk83b+mqacD8DO67KWsMuFC53Oh3NsLqVSiejWrZ3Oh9/f1fkInT3Lbbfdxn333dcQH695DRPGcOmxx6BcJpPLkUgk8Pv9RMNhSu0Jp6US8bbhtk8//TR7Y7GWNm+87joecgqHuRw/fpz9+/czNjbWmvdx9iwZEbZPTHQVH/l8nmeeeaZjeWF2lgsveIEtjf83f9P9HAOf+MQnWOxSKj5bLDZyXa4CViM+prEjRS7Hc1i/5dVPOO97ltlmV9u2V4SI3CUiH+pWiEYZAl46H1Afbuu18xGLxTwTH9HFRTuRXTjceV4HIT5isXqBqvLiIuHmB1M83vdy7qFQiKrPV3c+qj5fq/jI561Q6GfYRaTF+Vj0+epDbcnnedOb3sQLNm/un/MRj1tB5+Q9VAoFO4qoKecDYApWLT66hV0ikQhlY1qdj3KZ6LZtnTkfIp3iI5kEEW5/3vNYWFhoiI9Dh5jcs4fZr34VzpxhbvNmxp0aIbFwmGLbfbhYqRDP59m5c2c96fTEiRPsC4dtGw7X3XQTT2WzLe5Qs/PRIT6Wltg+NUWhTQwsLi5SKpW6Oh9/+NBDPP8972Hunnvgd3+36ymu1Wq84Q1v6EiQZWmJbKVCvrBcRsH6YjXi44vAfhH52V4biMgbsENPv3CF/RoU7sDw60WkV9Wj29q2vSKMMfcZY+5Jp9P9+DjlSvEy5wPqhcZG2fmILi01xEe7wHrpS+Hf/bu+NhmJxSg7uTTlWo1I00NiEOXc62GXUsk6H73ERz/DLm3iY0Gkxfm4++672eH3963NSDRKxe+vT4RWLhTsKKKmsIvf72dycXF58fH443Dhgv3ZYfPmzVy4cIELFy60Oh/GtDoflQrRHTus+Ni6lVOnTnHhwgW29mpz+3ZuP3yYdDptC5s99RQcPMjEs57F7IMP2mTTTZsa4iMapdg0eR5AoVolnst1Oh9uiMs9Pzt3sj8U4vvft1UVarUaTz/9NPv27SOdTreKj3PnyCwssH3rVgrF1qh8oVAgEolw5swZltpCK9+/dAlE+Jl776V2+jR84xsdhzwzM0OlUiHbdhxcukQWyJV6DeJcf6xGfPwusAB8SET+i4jsd1eIyD4R+S/Ah5xtusu2IWOMOQV8FwgBP9G+XkTuwJaJPwd83dveKZ4QDtuJuAb9UHYZgvORTCZJJpO2Ta+dj/Zj3LIF7rijr02Go1EqrvhYWiLSFJsfRDn39pyPqkin+Oh32KVZfOTzDefDEQNAX9sMh8NUQqG6GKgUi4TjcTuEdmGBzRMTbN68Gd9yIst1Pg4ebKn1Eg6HicViPPXUU63Ox9JSq/OxsGBzPsJhto2P8/DDD7N582YCxWL3JNft27lj504+9rGP2Xk1XPHxnOcw+/TT8NRTzI2PN8RHLEaxKQyysLDAkjGEcjl2bt/ekvOxr91tmZriRp+Ph535ZM6dO0cymSSRSHQ4H+bMGbLlMtu2b6fQJgbybr7O5CRn2sI4R7JZPvjWtzI7N8e7r78e/sf/6DjkEydOAHSOsDl/nqwI+atoFt3VFBn7PnCP8+s7gKMiUhGRCjbJ9B3O5/0rY8xjfe9p//ivzvt7ROSgu1BEpoA/cH59tzGm1rGncvUTiXgXcoHGcNtqdfDiw5nd9JabbuLTn/60dT48cFuiS0vMz88TCQY9ObeRWIzy4iLGGKrGEG53PqD/4kOkkfMh0pjMbkDOxwK05HwsOMvr7RnT1zbD4TCVQKDeZqVUsom8zkP4wJYt3HzzzVac9GpzbMzmiDSFXFympqY4duxYq/PRTXxs3gypFNvicYrFIjt37uzd5vbthC5c4K677gJ3FMvkJBM7dnBpfBz+4i+YSyQa4iMep9TktBQKBeI+HwLs2rSp1flYWuoUH9UqDz/0ENDI97CH3Zpwmj99mkg4THrzZgptYiDn5KDs2bOnI+/jSLHI9TfcwCc/+Uk+8I1v8Lkuzsey4sPvJ19dSVrm+mA1zgfGmD8HXgjcB5SAoPMqOcteaIz5SJ/72BMReY6I/KP7wuabAPxW2/LmY7gX+CC2iukjInKfiHwaOApch50Y7/e8OgbFY7rlJQwSLxNOAQIBZGnJVq/0IuwiQjQYxBhjy7kPWmABkXic8uIi1WqVoAi+tgqnwGBzPpxlQMOJ6HPOxyK05nyIWOcjELDnuFRaXgisknA4TCUYrDsf5XLZOh8AqRQHNm3i7/7u7y7f5p49PcXH0tJSXXwEg0EWazWWmpyI0tJSXXwkazXi8bidBC+f7+l84LoHjuuBiJ3fZWICvvAF5qLRuviIxuMUm8RHsVgk7pTg35lMtjofCwstOR/E49zo9/Pwgw8CdpjtgQMHADqcj8zZs6RTKeITEx3iI5/Pk0gk2L17d0veRy6XI7u0xPb9+9mxYwcf/K3f4j+253VAfZ+OsMv58zbssrBQz9tZ76z6zmSM+TbwKmfuk03YmWwvDckpSAHP77L80HI7GWPeJCJfwRZDuwPwY0uk/ynwwX4ei4jcBdx18ODBy26reEA47F2+BzScDy/CLm577rT2XogPnDlkFhZsjQ8PjjHsiI9yuUxEpPXvOWjnw63z4R5nLGaFRz7f37ALtOZ8GGOdDxhIqCccDjPfVFW1Ui43HCUn6dTtS886H2BLqt94Y8diN2fEzX0TETs78fy8HXpYq1Gq1WzYJZWqJ53u3LkTvvOd3uLDfYC74gPs/C7ONTEXDDacj2SSYlMORqFQIGYMJJPsjMU4ffo0uVyOUqnEZuho88bNm3mo3fk4epSxQqEhPowhc/486T17iG/aRMEVA47IyeVyJJNJ9uzZ0yI+jh49yiGfD59zfn7wn/5Tvl+tYoxBmuYoOnHiBH6/v8P5WDp7lvziInm3cFtT3xcXFzly5AjXXXdd5zn87nft38urMHQTq3I+mjHG1IwxM8aYC8MKURhj7jfGyOVePfb9S2PMDxhjUk7djucaY36/38eiCafrDK/DLkNwPnCH4XkkPiLOcUUDAW/CLvE4laUl++0cvBEf0N358PttXsSFC/0NuxjTmvOBFSVAq9syoLBLuVIh4t6z2vNMlmvzYx+D17ymY/HU1BSTk5P4fI1HTjQUouyKmnyeEhBNJjvFRz7fM+zS4XxgxcelSgW2bWPO72+Ij1SKYlMORqFQIF6rwf79JBcX8fv9fO9732Pv3r1IF5G1c9s2qpUK58+fb4iPj3+csQceaIiPbJaMz0d6fJz4+LitZtnkfrjOR3vY5ciRIxwypt7mpj178AMX2uacOXnyJNdee22H+Mg72+VFoK2w2T/+4z/yute9rvP8AfzIj8C739193YBZk/gQketF5BdE5J0i8mNNy30i4sHXO0VZI16HXbxMOIWhiI+ocz49C7skk5Qd8RGBVvHhio5+j3ZxE0CLRarGNMQH9L22SDAYZNHN6YBO58MpbNb3sIv7rdkYKgsLrc7HSsVHJFLPPWpmamqqHnKpbxoMUnY/N5Ox4iMarYuPw4cPc/jw4dWFXaAxs+2Xv9wSdoml0xSbapkU5+as67J9O2Qy7Ny5kwceeIB9e/faLwttDqls2cKNe/bwyCOPsR706QAAIABJREFUNMTHiROkjx1j3i1edvYsmfFx0uk08XicgjNXjUsv5+PI97/P4VqtcQ2JcDgY5Mh3vtPShxMnTnDjjTd2hF2y09OEAwFbyKpNfMzPz3P8+PHuk9lls3ZYr+PoeMmqxIeI7BaRLwAPY+c6+U3gVU2b/AJQEpE7+9dFRekjw8j58GqoLbSKDy9Gu2CnYxcROymYV2GXWo1KpULEmNaHhFt4a5DOR63WKT76WFW1w/koFFg0puF8DKCwWV18FItQKFDx+xuzBTuFxty+rEXwbN68uUN8RCMRSs5DtDY7SxVnwrtUCjIZPvzhD/OqH/kRW+2z2//sZcSHOXCAufn5Rs5HOk2pyYUonD1LLBiEdBoyGXbt2sUDDzzA3u3b7TmWNtN8aoobp6Z4+OGHGzkfJ08yVi4z77oYZ8+SSaUa4sPng+Zk1HyexLFj7A4GW8MuTzzB4Uikpc3DsRhHHnmk/rsxhpMnT/LsZz+7w/nInj3L9slJcrVah/jIZrMUi0VmZmZaj2dx0V7T730vvOENjXmoPGI1s9puAr4MvBh4FJu02R7S+BRQA17Zp/4pSn+JRLzP+fDa+XDnk/FitAsg4TCRcNi7sEsyScWZzC5iTGeb8Xj/xYcxjdEu7c5HMmmdj37W+ajVOsRHi/MxiLCLiP3MbJZyMNgY0ePmfLh1OdbQ5u7du20IpYlIOEzZGe1Snpkh7PPZ/AbH+QAa7bULAYBt26z4MKZFfITDYUKhEIVCgbm5uYbzMTZGcXGxXrq8cP488XC4Lj527tzJ1772NfZt3dqabOoyNcWNqRRf//rXyWQybNu2DU6cYOy5zyUzPW23OXuWTDzeEB/Q4nzk83mSx4+zJ5Ph5MmTdTfiyJEjHG5zdw6PjXHkiSfqv1+8eJFIJMLOnTs7xceFC0xt3swisHDxYus6p/2n28rDk8/b43zjG2HXLvjN3+w85gGyGufjndg5W94D3GyMeUv7BsaYOawr8oP96d7Vj1Y4XWcMI+wyLOfDo7ALoRDRcNgz5yOSSlE2hnI+b8Mu7cfY56qqLeKjVKK6tNTpfFSr/Q+7NOV8LNRq3RNO+y0+CgXI5agEAq3iI5ezx7jGyQpf+cpX8mdtE6ZFo1FKjvgozczY6wdaxUevkAvY8x2NwtNP23PVNBHcxMQEly5dahUf8TjFQKA+oqdw4QLxaLRFfORyOfZu3ty9zakpbgyH+fu//3v27t2Lr1aDM2cYe+UrmXfnVDl7lkw0SjqdJpFIUDCmI+ySKBZJV6sEAgHm5uYwxnDk+HEOjY21NHd482aOHD9e//3EiRPs3buXdDrdGXa5eJH0xASJQIDC+fOt65xtjzd9lrOCo9Eoi0tL8KEPwR/9kU3u9YjViI+7gKeB/2C6Bo/qHAe2X1GvRghNOF1n7NgBh5YdDNVf3ITTEc75qIsPn8+bsEsqRcUYStksYZ+v81vxAMTHAjScj25hF+hvwunSkk1UrNWs81GrdSac9jvsAtb5yOVs2MV1CN32eiV+rgBfc1VYh0g0StnJayldvGidM+jufPRi+3Z44IH6MFsXN/TSIj5iMSs+nBBS8dIl4rFYi/gA2Dcx0VN8XF+rUSgUbMhlehq2bGHsh36I+Xze/q3OniUTDNadj3yt1hp2yWZJlkowP18fbnvx4kXEGCbbxceOHRxpGm578uRJ9uzZQyqVanU+ajWymQypyUkSoRC5tvBKNpvF7/d3OB8mk+H5MzO85CUv4ZmFBfjrv/b03rjaWW2/exnhAbAIjK+9S4oyQG65Bf70T71rb6M4H6GQFR8euEq+aJQAkJudJdIluZG3vx2e/ey+tRcKhajWalAuY4pFFpaWGkIA+j7CJhAI2InDwmEreAoFFhYXW8Mu2awVJ9Fes0Ssjrr4KBRs2MXnazgfbs5HH50WgGgsRskRH8WLF23CstveSpwPsOLjy1+uh1xcJicnu4qPkt9fFx+F2Vli8XiH+NibTPYUH/FLlzh06FA92ZQ9e0hfcw3zxsBjj9VntE2n07a9pSVqTTkYuZkZO3Pp/Hw96fTo0aMc3rEDaa7UCxzcs4djMzP1MuzNzkeL+JibIxsKkRofJxGJkL9woeVzMpkM1157bYf4OHfiBH6fj7vuuovbbruNe6en7bn3iNWIjxIwdtmtYC8wf7mNFGVD0DzUdoSdj0gw6JnzQThMBMhcukSkqYx3nbvvtg+UPlEXH6US1XyeoN/fUnuh3+IjGAxa8RGN2ofvwgKLzYLHTXCNRruOLFkL4XDYTvTmOh/N4qPZaemj+IjEYg3nwy3PD53OxxrEx8TEBBcvXiSTyTDmOArRaJSiz9cQH/PzxFOploTTVCrFuEj3nI8tW2BmhptuuqmebMrevSQSCYrA4he+YMWHMaTTaXw+H5FAgFLTNPf5S5es+Jibqw+3PXLkCIempjrajG/bxqZotD6JnOt8dIRdzp8nm0iQSqVIRqPk3WqvDtlslptuuqkj7PLYo49yfTLJ2972Nj7zmc/wzne+k/vvv7/3ue4zq7lyHwWeKyI9/6tFZAdwE3b+FEVRmhNOR3S0S935EPFMfISB+UuXiHhwfM3OR7VQINTepvvQ6Odol4UF+3lO/ZCFhYVW5+Pcub6GlsLhMJVarS4+ytAadslmLy8EVkk0maTkDH0tzc4Sddtrdz4uF3ZpSjZ1mZiY4MSJE8Tj8fp5i8ViFEUaYZdslng6XRcf1157Lffee2/XGh8ATE3BzAzvf//7+bmf+7m68+Hz+UjHYmQ+//n6jLZumD0eDFJoSgDNzc6ShBbn48iRIxyenOwUPBMTHE4kOHLkCNBwPjrCLufPk41GSaVSJOLxruLj5ptv7nA+Hj9yhOscV+i2227joYce4o4+z8O0HKsRH3+JdT7+qFstD6fi6f8AwsDH+9M9RbnKaR5qOwznwwvBEwoRDQat+PAimTcYtM7H7Kwn4iMYDFJdWmqIj/ZzmkjY89ync10Pu0SjcPEixOMsLi62Oh99HF0DTeLDTThtnr9mUM5HPE7ZyWspZTK2xgesPuwCXcXHU089VQ+5gCM+oOF85HLExsbq4sPv9/Pyl7+8d5ubNsHsLNu3bLETNzrOB8DYxATzX/2qFR/VakN8hMMUmsRAPpMhEYnA3Fw95+Po0aMcTqc7xcfkJIfD4RbxsWfPHtJPPUU2m23U7Th/nmw4bMVHIkGuy1DbG264genpaStqHR5/+mmu27y55fxIt1FFA2I14uPDwFeBnwSeEBF3yr0bROQ9wBPAq4EvYYWKgo522fBsgCJjdfHh/DxwRIiIMH/xImGvnA9XfBSL3cVHH12IlrCLIz46nI9BiI+lpfpQ24oxDedjQDkfkWiUUjAIpVJv8bGSsAt0zfk4duxYp/gwpiE+8nniExN18VEnl+veZiBgt3XFhON8AIxt2kTGmXMnUyg0xEckQqE55yOfJ7l3b6fzkUh0Fx8+H0eOHKnX+Ni7dy/BV7yCUDDYKBV//jzZYNCGXVIp8u0jYbJZNm3axLZt2+ohHIDHT53iuh07ep/bAbOaWW0XgR8GPgnsA9yhtrcC/x47n8pfA69cQVLqhkFHu2xwNkrCaSBAtFvNjQERFmF+drZe2n2QtIiPXs5HHx/K9bCLW7Y9kWh1PgYVdnHFRy5HuVYbuPMRjUYph0JQKFDK5Yi6D/zVhF127LB1e7a3DrCcmJjg2LFjTExM1JfFYjFKzeKjWCS+aVOn+FjObXFCL0CL85FOp5m/4QbYupVMJtMQH7EYBbf6KZAvFEgcOlQXHydOnOCpp57iYCjUPezizMsyNzeHz+djzKmYmgqFGqGX8+fJ+nzW+UinyTdN1gdWfKRSKfbt21cPvRhjeOzsWa7fvbv3uR0wq53VNmeMeT1wPfBW7BT0fwT8R+C5xpjXGGNyy32GomwoNshQ23fedRcv37LFm2MEIj4fmfl578SHUw2yWio1Hsoug3I+euV8uAmng3A+3LBLu/hwcz766XxEItb5yOet+GiaRXfFYZdrr4U3v7kj8XZiYoJTp061OB/RaJTi0lIj56NcJj411V18dEs4hYb4WFqCU6fAeXiPjY0xf+gQbNvWKj7icQrNRcYqFZLXXANzc2zZsoVsNks6nSZZrXZ3PopFjhw5Uk82xSlmlhZpJJ2eP0/WGCs+xsfJNc3cCw3xsX///nrS6czMDBjD1LZtvc/tgFnTnckY8wQ2zKIoynJsBOcjGOR5u3bB0aPeio9cjkMetBcMBllYXMQUi1RLpY56FSSTg3M+Ll6kFotRq9XwuyN7kkkrZvstPhYWGmGXpaXOOh+DcD5c8VEoEHWHea6mzsfYmC0P3sbExATGmM6wy+Jiw/moVIi5s+i6dTp8Pvuz42h04IqPs2dhYqJeLXlsbIz5G27A/It/Qfb223uKj1y1SuL66+HDH8bn87Fr167G5HldnI+9mQxncjmefPJJ9u7dayu6jo2RrlRanY+lJSs+JibIN83cC3aobeqrX21xPh5//HGuGxtDhujI92eclqIo3Rmm8+HhaBeqVVt3wquwi9/PfC5HxINzKiIEAwEWSiUrPgbsfLQnnC7FYgQCgUYy4ABm7m0RH7kc5cXFwSecRiKUnYqjLeLDbbdSubzz0YPJyUmADuejtLiIyWZhaYnC4qJ1Pvx+e1xuuGIlYZeTJ+v5HuCIj3KZwrOfTSgUqofI4qkUBaeKqzGG/OIiiZtusm3VauzZs4dDhw7Z39vFRzRKMBBgz65dfP7zn284Hy9/OalKhcy5c3a7mRmy1arN+di0iXy5bEvOAwsLC1QrFWL/+T+zb9++uvPx+OOPc1087mldj3ZUfCjKIHETToflfHg02sXTET1AxO8nUywS8UjshIJBqqUS1XK5U3zceCP89E/3ra2WhNMLF1hwxEcd9yHVZyFQWVhohF2axUciUV/eb+ej5Pdb56NUItr8Ldx1P9Y4vNfN9WgWHz6fj3AgQCWTgbk5in6/rfMBraGXXgmn0BAfJ060uCNjY2PMz8+3hFzAER9OGKRSqeADQnv22POYzbJ//36uvfba7uIDbOhlzx4++9nPWudjehr27iU9Nkb2wQftNufPky2XGzkffn+9hHwulyMViSBzc+zfv7/V+eiWZ+IhPcWHiCxdwWvRy4NQlHWL+2Ae8ZyPYYiP+W75FwMiFAxSLZet+GifmHDnTnjTm/rWVnudj8VotLWi6gDEhytuFgsFapkMi83z1/j9Vgj1Oc8kEolQ9vvh/HlKfn8j4RQa4mONJd1d0dEsPgCioRDF+Xm4dImCz0fMdY+axcdKcj6akk3Bio9MJtMpPsbGKDhz9OQvXrQFxsbHbbhofp53v/vd/Ot//a+XFx/btrXmfOzYQXrrVjKPPmodjvPnyRaLjaG2wWB9ZttsNksqEIDZ2Q7n43q/f906H3IFL3VUHHSo7QZn2M7HqIZdAgEylUojL2HAhEIh63xUKp3OR59pD7ssRCKtzscAwi7ghF4KBSrZLKFgsLXmgzvCpp9FxqJRSiJw+jSlSKQx1BZaxcca2oxEIsRisQ7xEYtEKGYycPEiBWxOBtApPlbifDSFXdLpdHfnwxUfxpA7cYKk32/noBkfh7k5JicnbR96iY+JCVuADBrOx44dpHbvJvPkk5DNYgIBcrkcyWSSZDJJPhBoFR8+HxQKbB0fp1AokM/neeyxx7iuVluf4sMY47uSl5cHsZ7RobYbnGDQzs9hjP0GOWg2ivMRDFJqToocMKFQiGo+TxU6nY8+4/f7qdVq1CIR63xEIq3ORzhs/659dCHsx4apFItUcrlOR8kVH/12PlzxEQp1Fx9XUFV1cnKyU3xEoxRzOet8GLN28dHF+egmPhLpNAWfD0ol8idPknD/Pxzno85yzocjEFqcj4MHyZ48CefPU5yaIhwOEwgESCQS5H2+VvHhzA0j8/Ps3buXb37zm1SrVbYVi+sz7KIoSh9w6hgQDHbOvjoINpD4AFuoygtC4TDVTIZqKNQ52qXPiIh1P8JhqFQ6nQ+RvtcWAUd8VCqUM5lOUZdKDUR8lACmpykFAr2djzW2uXXrVrZu3dqyLBaLUXLER3FpqXvYZaU5H+0Jp92cj3icfDgM2Sz506dJuqJufHzF4uPaWIyJiQmbRHvmjBUfe/eSqVTgwQfJTk6ScgRKIpEgL9IqPtyRUbOz7N+/n7/927/luuuuQ3K59el8KIrSB4JBKz48eihvmNEurvjoc+ihF6FwmKoxnogPcJJOnXPZ4XyAfVANIuwSiVjno118DMD5iEajlOHy4mONzsfnPvc5brrpppZlsXicYj5P9fx5DDT+lqtxPs6dg2eeWbH4KAQCkMmQO3uWhPs3GxuDpuJjy4Vdti0ucuzYMaRWs5Vtt24llU6T2bQJ7ruP7NhYi/jIGVMXH5lLl0hVq3DddfW8D1d8sF7Fh4i8SEQOr/YDReRlIvLLV9YtRRkRmp0PLxjWaBcvZ+6F+hDbsJfOB1ANBj0RH4FAgEWnnYVQqNX5gME5H5EIlWCw0/lIJu3ft9/OR61mwy5+f8OFgNawyxrbTHV5sEbjcYqFAoXz54mHQo28lpUmnKbT9jy0nf9lxYdTlTR/7pydE8bu0HA+KhX73k24T07C7KydmXdmxjomoZCd2TaVgv/zf8imUvVjTSaT5JeWGs7HqVOkolE7I68z4uXJJ5/k+muusaFgj74sdGM55+N+4O3dVojIrIh8oMd+dwPvu8J+KcpoMEznY5TDLk47njkfoRDVYNAz5yMQCLDgtLMYDnd3PgYhPqJRyvF495wP6L/zUavBuXOURPrufHQjlkxSLBYpzswQbxZYrvhYWLD/N70eyiLW/WgrQtYz4bRJfORmZki4gshJOAWWD/NMTMClS/ZnJ9/DbS8TDsPsLNl4vDXs0iY+0um0/RzH+QC4bvfuoboecPmwS68g9RjQ3ytfUUYR1/nYCOLDw7DLUMRHKEQlEPA+7OIkE7YwNtb3ZMFwOEwlHKYSi3WKD/dB1W/nY2kJjKEEfU847UYsmaS4uEjh3Dli3cSHK3aWy8+ammoJudjupsjn88zNzXWKDxHIZMjPzpJ055ppdj56hVzAOh9dxEcqlSLj9DEbjbaGXarVhvg4c4bU5GSn+NixY92LD0VRrgTX+RhW2GVEnQ/34Rjp44NpOVzx4WXYZcH52y00Vcys82d/Bnfe2dc26+IjGu0edoH+Ox/OtVoyplN8XLpknYg+CtpYLEYpHKZw6lRjpAt0io/l6OJ8+P1+EokEp06dsiESh3g8TsEY63zMzZFwhs2uSny4s+i2OR/ZYhH27ycbCtXFRygUwgBVR7BkZ2ZIbdlSFx8HDhzgec97HjuHXN0UVHwoymDZCGEXd/4aL50PV3z0OfTQi3rYxe/3LufDERyLwWCn87F9e98FbTgcphIKUY5GPQm7RCKR5cXH2bOXdyFWSTQapRgOU5yeJt78wG8WH5dzlLZvhwMHOhaPjY1x8uTJTufDER/5bJbE5s12RXvYpVeby4VdMhl473vJbttWFx8iQjISIe+Kj9lZUtu21cVHIpHgG9/4hh3pMsRhtqDiY+BokbENzjATTr0e7eJlzofzzTzspfMRDFL1MuziXDML3cTHAHDFRyUc9izno1StAlBaWuouPvosLmOxGMVQiEKxSKyX+LjcNfXe98Ib39ixuKf4WFqyYZd8nqQ79HctYZczZ6zwwQm7ZDLw6lfXZ7R1ScRi5B23JDM/T2rXrrr4qJPNqvMx6miRsQ2O185HMLgh5nZxh4JGPPr2VhcfPp8nJd0DgQALTc5HR9hlAITDYSqBAJVIpHudj2Cwr3/fSCRCeWEBgNLCQqf4OHOmr/ke4IiPYNBWN20Kj6xKfIyP12ezbcYtsd4hPhYX4cwZcsY0wi7NdT4u53zMz9sZd5ucj3g8TrVaZWFhwdbyaBYfiQQ5x1XJ5vOk9u2z7TWLjyEPswUVH4oyWEIhO1PoqOd8lMuwtORNezQSTb0UHwuBgLdhFzfnIxDwzvkIBikHg92djz67EJFIhEq1iqGH+OhzOXdwcj6CQQrhcPewy3IjTy6DKzo6xMfCAhw5Qj4SIek+8JvrfCwnPtxKtplMi/gQEVKpFNlstkN8JJNJ8pkMGEO2VCJ14EB352PIYZfLXdFbReRFq1y3tcsyRdmYBIN2PL2XOR/lsv3ZS/GRz9t3L6q40qhsGvHo21soFKIaCFD1+bwLu7iTvQUCnjkf5UAAEwp1Tzjts/gQEUKhEJVKhVK12ik+lpYGEnY56/dTjMfXnnDaAzfRtF18FKtVzJNPkgsGSbifvdKwCzRCL03iAxqhlw7nI50mf+IEXLxIVoT0tm32PrDOwi6XuzO9wnm1Y5ZZpyiKi/ugGnXnwxUfHuEWFwt5GXbxUHwEAgEW/H4IBFgA75wPv59aIOCJ8wHOcNtKhVK53Ck+oO/ORzQapejzUYhGO4ua5XJX5Ah0Ex9+v59gIEB5epr85GSjyFg83ghVrkR8nDplt22aqyadTnd1PhLpNLl8Hk6eJOvz2XWRSGdF1XUsPp7BigxFUdaKKzpGebRLKGRvZh5WS4zEYkQA8ajCadAZ6VJ1vq170d5iNAp33MHi4qJ3OR8330zN5yPsVt10OXgQfuzH+t5mNBolUygQEMHfPPHigMRHLBajCBQikVbnw++35erdETZrYGxsjGg02vG3SsRiFDIZciIN50Ok4X7kcvbnXkxMwCOP2GTTJmfRHfHSIT5SKTuz7eOPN5JRo1ErrJaW7LFmsx21Srym553JGLPXw34oymji3ohGfbRLPu+t+IjHCUPXxL9BEAqFqPp8dlZbr3I+/H743OdY/NSnvHM+tmyhVqsRabbowZbn/p3f6XubkUiEuXvvJfozP9O6IhYDn28wo12AYijUKj7Ahl6mp+sjSlbL2NgY3QYWxB3xka/VGs6H3aEhPnbt6v3Bk5Pw8MMtIRdg+ZyPaJSl732PUq1mj1PECrpMxoqZdRB20YRTRRkk7oNqWM6HV6NdvBzRA4Qd52OUxceCMxJkYWHBO+ejUqFcLnsyoges8zGbSLSGXKDxsBxEwilQCAZbwy5gxcfp01eUcNpVfMTj5IH84mLD+YBGrY+VhF1c56Otva7ORyJBPhwm+93vkgyHG/PXNCedqvhQlBFno4RdymVPnY9UOs0YeNZmKBSiet11VCcnvQu7OH/HxcVF75yPSoVKpeKZ+IhEIszNzXWKD7APxz47H9FolOLYGIUDB3o7H1cQdukqPpJJCkCuWm0VH67zcbnCZhMT8OijHc7HcuIjFwqRfeQRUs3H2Cw+1kHOh4oPRRkkGyXhtPndA3bt3Mk3wFvnY88eqtHoyDofkUikLj46RrsMiGg0yuzsbG/xMYicD2PsUNte4mONCafXXnstd9xxR8fyeDJJHihVq61turU+VuJ8FIsrDrskEgnywSDZuTlSzWKo3fnQCqeKMsJsFOej+d0LwmHSzrsXhEIhqtUq1WrVu5yPITkfXoZdLut8DEJ8FIsUi8Xu4mNubs1tXn/99fz2b/92x/J4IsFMOEw0EsHna3rkurU+Lic+3MnoujgfMzMzAC1/r2QySd7vJwuk3aJm7udo2EVRNgjDcj6Mse/NIwgGhXuMHoZdCIfty6O6Il6Lj+awy8LCgudhFy+dDy/DLrFYjFKpRKFQ6J7zAX0XPPF4nHOve12jwJhLc8Lp5ZwP6Op8nDp1qsX1ACfsIkI2ELAz2ro0VznVsMvoo3O7bHCG5XwsLdnRAj4P/sW9PkawwsOjByQ0xEelUvE87OLpUNshOB89wy5bt9oZZPuI63wUCoXuzgcMRHyc3769Nd8DVpdwCl2dj9OnT3cVH3kgu2lT6zoNu2wsdG6XDY77jdVr58OrkS4wtLDLMMTHMMIuw3A+1kXY5Y//GF75yr62F41Glw+7QN8fyvF4nHPnzrUOs4WVOx9u2GXbtpbF6XS6q/ORTCbJ12pkx8e7iw9jLt+mB6j4UJRBItL3CbmWpVl8eDTPSl3keBl2SaU8tY2HGXbx2vlYNwmngUDfw2qu+PA67HL+/PlO58PN+bjcaJft2+E1r+n4/0qlUpw9e7a78yFCZsuWTvExN2eTVyMR7+4PPVDxoSiDJhgcjvPh1c3F57Nteel87NoFX/+6Z80Nw/loHu2yIRNOB0DAmaRvbm7O07BLV+djfNxWVA0Gl/9fjcXgr/6qY3E6nca4FUybSCQS5AIBsrff3t35WAchF7j83C5dERE/MAn0lMfGmGfW2ilFGSlCodF2PsAen5fOBzRi4R6wkZyParXqbZGxXs7HgIjFYszOznqb83H+PIcOHWpdMTYGzzyzZiHghvK7Oh/5PNlslj3NJdSbxceQk01hleJDRJ4P/H/A7cByV6dZ7Wcrysgy6s4HeCuwhkCz+PDiwdw+1NaLMEiz+PAq7LJswumAiEajzM/Pdw+7+P19F9HxeJyZmZnuCafT02ueY8UVHV1zPhzx0dP5uJrEh4j8APA5GqJjDsgOolOKMlIMw/nwal4Xlw0kPka1yNgwEk6j0Si5XM5z5yMQCHT+HdNp60L0Oc8kkUiwuLjYPeF0aWnNzkcv8RGPx8nlcmQymdaKq674WAfJprA6d+I3sMLjj4F3GWNmBtMlRRkxhuV8eNUmDCfs4iHDDruM8mgXwHPx0RFyATt5XtuIkn7gttU14dSuWNPnBp35adrFRygUwu/3c+HChdZ1bp2PTObqcj6A5wFPGGP+1aA6oygjyUbJ+VDno28M2/nwcrRL87sX9BQf27bBQw/1vT23rQ7nIxSyyaRX4EKkUqkO8QFW6ExPT7euC4XsKJczZ9aF+FjNaBcBHh5URxRlZBn1obag4qPPbKTy6uC9+OjI93AZgMjr6XyAdT+uQHyk0+mu4iOZTHLmzJnOdRMTcPLkVSc+HgGN8RWnAAAgAElEQVS2DqojijKybJSE0xEPu7jJmF64EBulvPowxEc0Gu3ufAyIns4HDEx8JBIJyuVy57rxcThxYl3kfKxGfPx34HYRuXlQnVGUkUTDLlc9oVCIYrFIIBBonRxsQGyU8urrKuwyIJZ1PsbHr0gIvPCFL+TgwYMdy9221rPzseK7kzHmEyJyHfBZEflPwN9qLQ9FWQHDcD50tEtfCYVC5PN5T0IuMHznY8OGXQbAIJ2P973vfV2XJ5NJRKRT8ExMwGOPXV3iQ0SWmn79PeD3pPeQJGOM0TofigL2oTzqo12CwZEPuxQKBc/ER3vOh1fOR7FYrLfvBep8XJnz0YtEIkEymex06SYmYGZmXYRdVnOFrWbwszfzXCvK1cBv/AbcdJM3bWnYZSC4zsdUn2dZ7UV72MULMRAKhajVakSjUZb5YtlXNlLOR1fx8eIXw969fW8zkUh0zQWpT1J3NTkfxhidB2YNiMhdwF3d4nLKBuH2271rS8XHQHCdh2GFXbxwPkSEUCjkWcgFNobz4RY06xp2+fmfH0ibV4P4UEExYIwx9xlj7mmpNKcogyIY1NEuA8AVHcMKu3gVBgmHw56NdIGNkfMBsH//fsbHxz1rL5lMLi8+rrKwi6Io651AwCabei0+3vxmuOYa79rzmGGID6+LjIEVH6PufNx9992Uy2XP2gN44oknPG3vanA+VHwoyigxrNEud97pXVtDYJhhFy+dj0gkMvLOx541TuR2NXFViw8ROY6dnfZlxpinnd9XijHGHLji3imKsjqGNdplxBERgsGgOh99ZhjOx0Zg+/bt7Ny5s3PF1SA+gL1Y8RFs+n2lmDX2R1GUK2FYCacbAC+TMYeZ8+Gl+HDbUvHRX17/+tfz+te/vnPFxISdtdfDhNteLHdF73Pep9t+VxRlvaLiY2CEQqGRLjIG3iecBgIB/uqv/sqz87rh2bwZXvMaK0CGTM8r2hhzcrnfFUVZh/h8UKtBtario894KT6GUV4dvHc+AF7zmtd42t6GJhyGe+8ddi8AHWqrKKOFiBUdlYqKjz4zLOdjlMMuysZFxYeijBqBAJRKKj76jNfOh9dFxsD7sIuycVHxoSijRiAA5bKOdukzwwy7qPOhjBoqPhRl1HDFhzoffWWYCaejnPOhbExUfCjKqKHiYyAMK+wyyuXVlY2Lig9FGTVUfAyEYYVd1PlQRhEVH4oyaqj4GAgbZbSLOh+KF6xYfIjIp0XkDwbZGUVR+oCOdhkIG2W0izofihesxvn4EWByUB1RFKVP6GiXgbARRrvs37+fvXv3etKWsrFZzRU9TWOeF0VR1isadhkIwwi7GGM8La/+S7/0S560oyircT4+A9wuIrFBdWY9IyIHReQPReRBEVkUkUeH3SdF6YqKj4EwDOejVqvh8/nw+TQ9TxktVnNF/zqQBe4VkV2D6c665nps6Okp4PEh90VReqPiYyAMw/nwMuSiKF6ymqv6vcBjwI8CR0Xku8BJoNRlW2OM+fk+9G89cZ8x5m8AROQjwK3D7Y6i9EDFx0CIRCKejQRxE069TDZVFC9Zzd3pZwHj/BwCXuC8umGAkRIfxpjasPugKCsiEIB8XsVHn3nXu95FIpHwpC037KLOhzKqrOaqfuPAegGIyDXADwG3YV2Fw4AAP2GMWXYOYBH5KeAXgRsBP/B94M+AD6poUDYcOtplIOzYscOzttywizofyqiyYvFhjPnoIDuCFQ+/stqdROT3gTcBZeDzwAJwJ/B7wJ0i8loVIMqGQsMuVz1u2EWdD2VUWU9X9aPA7wDfBr4D/Alwx3I7iMiPY4XHOeBFxpijzvItwBeBVwO/BPz3tv3SwLYV9OkZY0xxdYehKENGxcdVjzu6pVKpqPOhjCRrujuJSAh4LuD6kNPAd4wx1bV2xBjz4bY2VrLbO533t7vCw/ms8yLyi8D9wDtE5ANt7sersWGZy/ES5zMU5epBxcdIEAwGKZVK6nwoI8mqrmoRCWKH3L4ZSLatzovIB4DfMMYs9Kd7y/ZlJ1YAVYFPta83xnxJRKaxAukFwNea1n0E+Mig+6goQ0HFx0gQCAQolUrqfCgjyWrmdvFjC429A0hhQx1fc17nsGLkncBnnG0HzS3O+2PGmG7DfQG+1batoow+gQAsLqr4uMpR50MZZVZzVd8DvBw4AvyKMeb/Nq8UkVcA7wdeBvxL4A/71cke7HPeTy6zzTNt264Zp7LrDzu/7gFSIvJa5/dvGWM6+iEi92DPG7t3777SLijKynC/Kes35quaQCBAuVxW8aGMJKupcPozQAG4s114ADjLXgYUgTf0p3vL4g64LyyzTd55bw8RrYUpbHjnU8CLgV1Nv7+k2w7GmA8ZY241xty6efPmPnRBUVaA+7DSh9ZVjYZdlFFmNXen64AvGmOme21gjJkWkS9ymVEqVyPGmBPYuiOKsr5R8TESaNhFGWVW43wEsa7G5Sjizey3rqsRX2Yb1x3JDbgvirJ+UPExEqjzoYwyqxEfJ7Gz2vacWclZdzvL52H0ixPO+55ltnEnwDuxzDYDRUTuEpEPZTKZYXVB2Wio+BgJXPGhzocyiqxGfPxvbGGuj4rIWPtKp3DXnwJbgb/pT/eW5XvO+/UiEu2xzW1t23qOMeY+Y8w96XR6WF1QNhoqPkYCN+yizocyiqzm7vTbwD8HfhL4ZyJyH/A0dhK5/cBd2MTO0862A8UYc8qZWfc5wE8Af968XkTuAHZihwF/fdD9UZR1gys69KF1VaOjXZRRZjVzu1wSkZcCf4md+O1uGrPcuomY3wJ+yhgz29de9ua/YkebvEdEvmaMeQpARKaAP3C2ebfO7aJsKNT5GAk050MZZVZ1d3Ie7s8TkR/EjmhpLq/+JWPMV9baERF5Dg3BAHZ0DcBvichbm/rwgqaf7xWRD2InpXtERD5HY2K5FPDX2AnmhoaI3AXcdfDgwWF2Q9lIqPgYCXS0izLKrPiqFpEUYIwxOUdkrFlo9CAFPL/L8kPL7WSMeZOIfAVb8v0OwA98H5t/8sFhux7GmPuA+2699dZ/Ocx+KBsIFR8jgYZdlFFmNVf1PDas0k0gXDHGmPtZYx0NY8xfYsNBiqKo+BgJNOFUGWVWM9olBxy97FaKogwXFR8jgQ61VUaZ1YiPJ7CjRxRFWc/oaJeRQBNOlVFmNeLjj4EfFJHnDqoziqL0AXU+RgJNOFVGmRWLD2PMn2BHo3xWRN4uIodFJDy4ro0GWuFU8RwVHyOBOh/KKLNi8SEiS9gRJWngt7BhmKKILHV5LQ6ov1cdWuFU8RwVHyOB5nwoo8xqrurVjETR2V8VZVio+BgJdLSLMsqspsLpavJDFEUZFio+RgKt86GMMiooFGXUCARABPz+YfdEuQI050MZZVaT8zErIl8eZGcURekDgYC6HiOAjnZRRpnVOB8h4NSgOjKq6GgXxXNUfIwEGnZRRpnViI+ngE2D6siooqNdFM9R8TESaMKpMsqsRnx8HHiRiOwbVGcURekDKj5GgkAgwNLSkjofykiyGvHxPuD/Al8QkddpgTFFWaeo+BgJXNGhzocyiqzmDnUUW79jD84MsiIyA5S6bGuMMQeuvHuKoqyaQEDndRkBXNGhzocyiqzmqt7b9LNbRGxLj23NmnqjKMqVo87HSKDOhzLKrOYOpbkeinI1oOJjJHDFhzofyiiymgqnJwfZkVFFRO4C7jp48OCwu6JsFIJBFR8jgOt4qPOhjCJa4XTA6FBbxXPU+RgJ1PlQRpme4kNEXiQih1f7gSLyMhH55SvrlqIoa0bFx0igzocyyiznfNwPvL3bCqfU+gd67Hc3dliuoijDYN8+uPvuYfdCuULU+VBGmcuFXaTH8jEg3ue+KIrSDzZtgre9bdi9UK4QFR/KKKM5H4qiKOsQDbsoo4yKD0VRlHWIOh/KKKPiQ1EUZR2iRcaUUUbFh6IoyjpEy6sro4yKjwEjIneJyIcymcywu6IoylWEOh/KKHM5Sb1VRF60ynVbr7BPI4Ux5j7gvltvvfVfDrsviqJcPWjOhzLKXO6qfoXzascss05RFEW5QnS0izLKLCc+nkFnp1UURRkK6nwoo0zPq9oYs9fDfiiKoihNqPOhjDKacKooirIOUedDGWVUfCiKoqxDVHwoo4yKD0VRlHWIhl2UUUbFh6IoyjpEnQ9llFHxoSiKsg7RImPKKKPiQ1EUZR2i5dWVUUbFx4DR8uqKoqwFV3T4/f4h90RR+o+KjwFjjLnPGHNPOp0edlcURbmKCAQCBAIBRGTYXVGUvqPiQ1EUZR0SDAY130MZWVR8KIqirENc50NRRhEVH4qiKOuQ8fFx/uIv/mLY3VCUgaDiQ1EUZR0iItx1113D7oaiDAQVH4qiKIqieIqKD0VRFEVRPEXFh6IoiqIonqLiQ1EURVEUT1HxoSiKoiiKp6j4UBRFURTFU1R8KIqiKIriKSo+FEVRFEXxFBUfiqIoiqJ4iooPRVEURVE8RcXHgBGRu0TkQ5lMZthdURRFUZR1gYqPAWOMuc8Yc086nR52VxRFURRlXaDiQ1EURVEUTxFjzLD7sCEQkQvAyWH3Yx2xCbg47E5cpei5Wzt67taOnrsrYyOevz3GmM3dVqj4UIaCiHzbGHPrsPtxNaLnbu3ouVs7eu6uDD1/rWjYRVEURVEUT1HxoSiKoiiKp6j4UIbFh4bdgasYPXdrR8/d2tFzd2Xo+WtCcz4URVEURfEUdT4URVEURfEUFR/KFSMiQRG5U0T+m4h8W0SyIlIVkWkRuVdEXtxjv4+IiFnm9X2PD2UorPU8iIhPRN7snPO8iGRE5AER+edeH8OwEJEXX+bcNb92N+23Ya49EblGRH5FRD4uIt8XkZpzjK9dwb4/5VxTGeca+7ZzzS377BCRHxKRfxCRWREpisijIvJrIhLu35ENntWeu7XeC519N8w1CRAYdgeUkeAO4LPOz+eALwMF4Drgx4EfF5H/bIz5Tz32/yrwVJflZ/vd0XXOis+DiPiBTwM/BmSBfwDCwJ3AX4rIC4wxvzLAvq4XzgEfXWb984BnAceAU13Wb4Rr7xeBVV8LIvL7wJuAMvB5YAF7ff0ecKeIvNYYU+uy39uA9wBLwP3AHPYe8ZvAj4rIncaY4toOxXNWe+6u9F4IG+OaBGOMvvR1RS/gpcC9wO1d1r0OWAQM8JK2dR9xlv/ssI9hyOdv1ecB+HfOPo8BW5qWH8Le9AzwymEf27BfwOPOufgPV3rOr9YX8AvAbwM/CRzACgIDvHaZfX7c2eYscKhp+Zamc/orXfa7FahhH7jPb1qeAL7k7Pe+YZ+TQZ27td4LN9o1aYzRsIty5RhjvmCMea0x5oEu6z6B/acC+GlPOzaiOK7H25xff9EYc95dZ4w5Crzd+fXXvO7bekJE/gnW9ViicQ1uOIwxHzbGvM0Y80ljzLEV7vZO5/3tzjXlftZ5rBsA8I4u4Zd3AAK8xxjzjab98sAbscLkTSIytpZj8ZrVnju9F64cFR+KF3zPed851F6MDv8EmAJOG2O+3GX9p7AW+W0issPTnq0vfs55/3tjzJmh9uQqQkR2As8FqthrqQVjzJeAaWAr8IKm/ULAP3N+/Ysu+x0Hvg6EgB/ue8evDvRe6KA5H4oXHHLee8UsXyIiN2Kt2fPAV4DPmi7x5BFnpefhFuf9W90+xBhTFJHHgJud1/SA+rtuEZEY1uYG+JNlNtVrrxP3+nrMGFPqsc23gB3Otl9zll0DxIDZZVyCbwE/4Oz3l/3p7lXF5e6FsEGuSRUfykARka3Azzq//lWPzX6my7LHReT1xphHBtKx9clKz8M+5325iQqfwQqPfctsM8r8BJAEZoDPLLOdXnudrPT6at62+edn6E23/TYEK7wXwga5JjXsogwMEQkAHwfSwOeNMfe1bfIg8MvYTPAEsB34UeAhZ9nnNkjYYLXnIeG8F5b5zLzznuxvV68a3JDLnxtjFrqs12uvN2u9vvS67MEK7oWwwa5JdT6UQfKH2KF5p+iSYGWMeX/bogLwtyLyWWxm/AuwiW9vGXA/h4qeh/4iIgeBFzm//mm3bfScKx6z7L0QNt41qc6HMhBE5L8DP48d9nmnMebcSvc1xlSB/+r8ulET05Y7D+63x/gyu7vfQnP97tdVgOt6fN0Y88RqdtRrD1j79aXXZReu5F4Io3tNqvhQ+o6I/DesfXgB+8929DK7dMOt5jcyNuMa6XYeTjjve5bZb1fbthsCZxiyGzNfLtF0OTb6tXfCeV/t9eX+vJvebKjrsk/3QhjBa1LFh9JXROS3gX8LXAJeZox5fI0fNem855fdavTpdh6+67zf1m0HZ6THDc6v3+u2zQjzCuwNOg98Yo2fsdGvPfeauV5Eoj22ua1tW7APyBIwISIHeuz3vC77jSR9vBfCCF6TKj6UviEi7wb+Pbac8suNMQ9fwcf9pPPedTjpBqLbefg69pvUThF5Uecu/AQQBL5ljNlow2x/3nn/pFPYai1s6GvPGHMKK3BD2GupBRG5A1un4hz2WnT3qwJ/5/x6d5f99mNr1FSBv+17x9cRfb4Xwihek8Musaqv0Xhh520w2H+2565g+5uxmdz+tuUBbOnwJefzXjHsYxvweVvTeQDeSqO8+lTT8kPYGgIbrrw6sAn7YDPAC/t9zkflxcrKq7+WRnn1g03Lp5xrrld59dtolFd/XtPyRFO7V0159TWeu1XdC519Ntw1Kc4BKsqaEZEfA/7G+fXb2JtTN75vjHm3s8+rgP8FzGK/Zc1grcVnY4eY1YB3GGN+Z4BdHzprPQ9ObsP/Au7CTiz3eazb8TIgAnzAGPPLHh3GukBEfhX4Xex19qxltttQ156IPAf4g6ZF12GHuh7FngMAjDEvaNvvD7Cl1MvA52hMLJcC/hr7AF7q0l7zxHJfAOaxE65NAd8AXmqukonlVnvu1nIvdPbbUNckoM6Hvq78hS2cY1bwur9pn33A+7HVEaexN7gS9p/6T1nhN4ar/XUl5wEbNn0L8B3sN80sthriTw37uIZ0Lh92rrN/P6hzfjW+gBev5P+zx74/hZ1lNetcY98B3gz4LtPmD2Fnd51zzu1j2LmGwsM+H4M8d2u5F27Ea9IYdT4URVEURfEYTThVFEVRFMVTVHwoiqIoiuIpKj4URVEURfEUFR+KoiiKoniKig9FURRFUTxFxYeiKIqiKJ6i4kNRFEVRFE9R8aEofUBErhWRPxSRJ0WkKCIlEXlGRL4mIv9NRF7eZZ8TImJEZK/3PR4MIvILIvIdESk4x2ZEZOwy+7y4advlXic8OoyRQkReICJ/ICKPisiciCyIyKyIfEtEPiAiL72Cz/6I87f52VXu9+vOfr++1raVq5vAsDugKFc7IvI64M+xE3FNY+d/mAM2A8/BTqZ1B7bi48giIj8K/DG2OuNnaZSfrq7wIwrAvcusv7j23m08RCQJ/AmNyeFOYyvgZoExbOnutwBvEZGvGGNuH0pHlQ2Jig9FuQJEZCu2/HEI+FXsnCpLTet9wA86r3buxM7HMiozz7oPuV82xvzxGva/aIz52T72Z8MiImGsAHw+8DjwJmPMl7psdxN22vd/tsam3gm8GzsBnaKsGBUfinJl/CgQA75ujHl/+0pjTA34svNqX3ds8N3zlF3O+9Gh9kIB+A2s8HgKO8NvpttGxpiHgDeIyPPW0ogx5iwqPJQ1oDkfinJlTDnvM6vdsVvOR1MsfFW5DyIyKSK/KSKPiEjeybn4roj8qogE19C3oIi8RUS+ISJZJ4flCRF5t4hMtm37ERExwEucRV9s6uuvr7btVfSxnjcgIltE5I9E5LSIVETkaaevkWX2f76I/P/OPlURuSAi/1tEurlUuMfk/PzzTeemJa9FRPaJyMdFZMY5b4+JyFtFxN/+NxeRhIhkRGRRRHYu09fvOPv98ArOSxo7+RvAr/YSHs0YY77Z5XPqfRWRV4nIF52cESMiNzvb9Mz5cK6ht4rI4yJSFpFzIvIxEdlzuf4oo486H4pyZTzjvN8pIjcYYx69ws97EPhoj3U3AzdhpyqvIyLPBv4eO/X2aWzOiQ/7zfd3gR8RkR82xqwo98J5YP8ddkbPIvDF/9fe+cd6XZVx/PUWMUh+LIJCyLo4sOHSLcM0HIlkFFACrh9aEWzMJiyrJaZzU1jpWmyZhKZZ5s2YZjZnEyQsCZuBqenMFJUiFL1zZYwLFGwXffrjOR/ul8/9fL4/7v3yxQvPa/vs7J7nnPM5n8/33O95vuc8z3NSOgW4ArhQ0jQz25qqPJLSTwLvBtYBr1U8z6HmRPy0VeGngg7Dt7muwI9APz9fQdJlQHY8+ZPAJuA9wCz8fV1StnUkaSWwGD/tdTVwMn5SKZI+ADwMjMDHxnrcvuJaoMfqgpntkXQ78HXgK8A1Bfc7C7cd2op/zrU4FxiC29w8UEf5WlyG24Y8ho+LE/Ej3ktJ24334iuD+/D3sBvfapwBrGlCv4L+zOE+VjeuuPrzBQzFbTYM6MK/VL8FnAcMr1F3W6rXVsd9TgF24orHnIr8wfikZMCVwLEVshH4vr8Byxp4puWpzmZgbO5ev06yTQX1NiTZ1Abf4dRUb1uD9ZbRfUT5T4DjKmQT8cnOgLNz9Wak/FeBM3Oys4FO3Ej25Jwsu9dO4MMF/RHwVCpzGzCwQvZ+oKOijbYK2QR8Mu+orFMhvyPVWVLne/lOKv/7Po7tbHx2AbNKyrSnMgty+Zem/FeA8RX5gyrGUEPjMq4j6zrsHYgrrv5+pYnu8Yov1Ox6A/91/PmSenUpH8DoirJfy8kWpfy7S+qOSRPpvwHV8SyDKybtjxfIR1aZ1PuqfNS6bsjVW5byXwYGF7T7oyS/Jpf/55Q/o6Q/S5L8+7n8rB9XldT7aJLvAIYWyBdVtNGWkz2Q8j9X8L73AXuBEXW+z5tTW3eVyE9PSkP+mlQyPm+tcq92ipWPfxTlJ9m78JW0UD6O4iu2XYKgj5jZZuAMSZPxZfsz8S/4dwCTgcmSZlgvPDkkHY8v7b8PWGFmP8wVyWwA7inpW4ekLfjKyQTgxRq3/BC+ZN9hZj1cg83sdUn3AxfhSsOf6nyUeqjlatvDLiGx3sz2FuQ/n9IxWYakkfj2xy7gwZL2Mq+Qj5TI7y3JPyelq81sd4H8TlwhKmIlviKzGPhVRf5C4G1Au5ntKKrYC94LzC/IXw08UZBf9ryFJNuVk/DVnDvzcjP7l6QHgdmNtBscWYTyEQRNwsw24jYH2Z73WcBSYDruUbDGzAqVhCIkDQDuwhWC+3CXyDwnpfQeSbWaHEVt5WNsSv9ZpUxm6zG2Spne0FtX25dL8neltNLodFxKhwH7a7yzUSX5L5Xkj60mN7NOSZ3A8ALxb3EvoXMknWJmz6UxdEmS31StozmyeCiF/Tez+/AtIgAkbaBbcSqi7HnLyAxnO6zczmhbg20GRxihfATBIcDcxXZj8k54DF8JmUPJCkUJNwCfxrcJvpDazDMgpWuoHYTrPw3c2xooe7ipavyYI3tfnbhCV43C91myynJQkSqywr6amUm6EViBr358FV/VagMeN7OiFYkynkzp6ZKOKRk3jVDreYOgYUL5CIJDiJm9IWk9rnyU/ZLugaRv4hPQVuD8KhPedtyY8WYza4YHQRbwbFyVMtlqS38MjrY9pV29XGWpRkdKC11JJQ3Dt+LKaAeuA+ZJuhJXQqCxVQ9w76T/pnvNxLdTWkk2LsZIOq5k9aOthf0J3oJEnI8g6AOqY68D32MHt/yvp80LcDfQHcBMM6sWQ2RtSj9bpUwj/AXYA4yV9LGCvr0TX40BNzDtV5jZq8AzwEhJU5vcfBZI7lOShhTIL6rRt124m/Uw3OX2E/hq1d2NdMLMdtJtW3J9ivvRMsxsO75tdwxwYV4uaRTQ46yj4OgilI8g6BuLJd2uggiRko6VdDHwmZRVcxJJMR1W4e6Nc8zshRpVbsV/zc9PwbbeXtDmOElfqnVvOLClcEv6c4WkEyraGYR7UgwBHjWzZhqbtpKrU7pK0vS8MAUDm5Y+i0Z4GFdsRuCT/oGVZUkTKIjhUcCN+LbN5fj388/MbF+D/SDd6wncyHijpEKbDknjqDDIbSKZYfS1krKVsizs+014VODgKCa2XYKgbwwEFgALJL2GB9XagU9Ap9H9xb7czNbV0d51uLvr34GFkhYWlHndzJbAgSBVs/Cl9aXApZL+im8BDMXdgMfjdiOr6nymq4FJuDfLlrRttBcPMnYCbuD5xTrbaoSRktprlFlsZv/ry03M7DcpyNhyYJ2kF4EX8BWf0cAH8cBgi4BHG2jXJM3DV4QuBqZL2pTaOhf/jM7AV8IKDTHN7HlJv8ONlN/Elb3ePOO+tHLVDswFNkh6BR+fO/ExNgE/XE64ncjTvblXCSvxZ5gBPJvG0B48+NsgPHbJl5t4v6CfEcpHEPSN23DL/fNwF85T8TgGXfg2y8+Bn5rZI2UN5MgMIsenq4iX8FgUAJjZM5JOw20EZuP2JZPx2B7bcY+Zai6sB5Emrum4p8U8fOIciD/nL3BFqhHj1Xo5nmIX0Eq+gceI6BNmdr2kh/BgWFPxbYD9+DklfwTup0EX09Tu05ImAd/GJ9+5+BbEMuAHuAfOm3Sf+FtEpnysNbNqXke1+rILuCC5gM/Hlccp+Hvenfr1Y9wI+g9m1jQj42TrNBv30FqA/390Ag8BV1H7cw6OcNTE8RYEQRCUIGkKrtj8zcxOrVLuKTyU/kwzW1tWLgj6M2HzEQRB0CTSQXETC/In4vY54FshZfXn4orHZuo7xyUI+iWx7RIEQdA8RgPPpaiyW3A7hzY8UNwA/IC1g6LUJg+i7+F2QlnE2subuQ0SBG81YtslCIKgSaRYHkuBafjpr8PxmBvPAr8EbjGzrlydNtz+Yj9uaPxdM7ujdb0OgtYTykcQBIFGfFMAAABBSURBVEEQBC0lbD6CIAiCIGgpoXwEQRAEQdBSQvkIgiAIgqClhPIRBEEQBEFLCeUjCIIgCIKWEspHEARBEAQt5f+wegMFhMkduwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_enum), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_enum_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_num_vs_N_grid_RT_Fermi_function.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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icCNwEIhxH1Syv6Ns1yFNxaLBXNYGOaUFIp++SXouPz8fFJKSsDrSS89NZUc5XY5e/k9PqF5mb+bkh07drBw4cKA7ffdd5+P+ACnkPnss8/45ZdfKCkpoabGaez9xfX/MSsr66TFR6dOnTAajXz++efMnDmTm266ibZtgz829O3bl//973/cfffdzJgxg4suuojIyMgTPn9WVhZffvkle/fupby83ONuqKmpweFwsHfvXnr27BkwL1iqaadOndi5cydHmijd370+ne7EQxplkL81IQR/+9vfuPfee1m6dCnfffcdmzdvZseOHRQWFjJnzhzeffddVqxYQa9evU74/GcDoSwfacCfgVellPVuBCKl/AX4qxDiEeAu4NGTW6IiGBaLBbMQJKamUrRuXdBx+fn5dLXZwPxbSE56+/bkbNnSHMtUnI400438dMT9ZBysENSUKVOYMmWK5/d27dpxUCOg+5VXXuGBBx7g+PHjQc9VVlZ2kqsFo9HIggULuPXWW5k2bRrTpk2jdevWDBgwgBEjRjBu3DgMBoNn/IMPPsiaNWtYuXIll112GZGRkVxwwQUMGTKE8ePH1zvOpaamhnvuuYd58+YFvRmHukZ3fIQ/cXFxANhdwfKNjduy5R1U6v7M3VahujjmVbRRy0KWmJjIbbfdxm233QY4/5YWLVrE9OnTKSoq4pZbbvFx+ygCCSUNO0gp5zREeHgjpayWUs4GOpzY0s4MmrLCqcViIRFIbNOGoqoqqKzUHJd/5AgpQoCXfzW9UydyVBU+xVlIZmYmAJs2bTrhY2zcuJHJkydTXV3NM888w65duzxWASmlJ9Yi1E1bi2BBjGPGjCEnJ4c33niDW2+9ldjYWJYsWcKkSZPo1KmTT+ZJdHQ0X3/9NevXr+eJJ57goosu4tdff2XWrFl0796df/zjH/Vay4svvshrr71Gamoq7733Hjk5Odjtdk+qpNt9E+waT8bycDK44zu8RZbbCrF582aq69FU013V1mw2B1i7tGjRogX3338/r7/+OuC0nu3Zs6ehSz+rCPrXIaW0NcYJGus4v1eklJ9KKe+Mj49v9GNbLBbMUpLYogVFBgMEERP5R4+S4nf+9O7dybFaoba20delUJzOjBgxAiEEP/30k8c90lA+/PBDpJT8+c9/5q9//SvnnXceMTExnoDDvUFcmu603vLycs39WhYWNyaTiQkTJjB//nx27drF3r17ufjiizl48CAPPfRQwPh+/foxffp0VqxYgcVi4fXXXyc8PJwnnniC3bt313mN7mydV155hbFjx5KWlubjvgl2jaeSgoICli9fDsCll17q2X7xxRcTGxtLWVmZTwpuMNxuN/ffSn257LLLfNaiCE5Q8SGE+FAI8QchhKoFcppisVgwOxwkpqRQFBERtL9L/rFjpLjMjm7SzzmH3LAwVetDcdbRsWNHxowZA8Ddd99NVVVVg49R5GrkmJaWFrCvoKDAJ83TG3cg4q5duwL22Ww2T6n3+tChQwemTZsGwE8//RRyrF6vZ+LEifTv3x8pJT///HOdxw91jV999dVpd3N1OBzcc8892O12OnbsyFVXXeXZFx8fzz333AM43VJFIRpxfvzxx3z++eeEh4fz4IMP+uyry5KVk5Pj+bcKOg1NKGFxNfApkCuEmCmEOLeZ1qSoJ0UWC+baWqf40Ok0xYfD4aCwuJgWfkVx0tPTyZESDhxoptUqFKcPc+fOpV27dnz//fdccsklbNu2TXPc9u3bNWMaOnXqBMCbb77pY8WwWq3ceuutlJSUaB7vkksuAeCtt97ysT7YbDYmT57sc/Nys3XrVt5//31stkAj8qeffgrgE4A6d+5cTctGdna2Jw4hVMCq/zW+/PLLPu6gffv2cffdd9c5vznZsmULl19+OUuWLCEmJoZFixYRFhbmM+bvf/87PXv25ODBg1x88cUBAkxKyeuvv864ceMAmDlzJt26dfMZ069fP1555RXNz3f//v3cfvvtAPTv379e7/HZTKiA07nADUAq8BDwkBDie2ABsFhKGTzKStEsWAoL6QxOt4uUmuLDYrFgNBjQ+wVNJSQkUCMEpTt2ED94cDOtWKE4PUhKSmLdunVcf/31rF27lp49e3LOOefQtWtXjEYj5eXl7Ny503MTHzZsmM/NZNKkSbzwwgts2bKFjIwMBg8ejJSS7777Dr1ez6233sqCBQsCzjt48GBGjhzJZ599RmZmJhdeeCHh4eFs2rQJnU7HpEmTPHEDbg4ePMi4ceOIjo4mMzOTtLQ0qqqq2Lp1K9nZ2RiNRp84jldffZV7772XjIwMunXrRmxsLHl5eaxdu5aqqirGjRunWbHVn0ceeYQvv/ySV155hVWrVtGzZ0+Kior49ttvGTBgAC1btmRdiED3pmDZsmUccD0wVVdXU1JSws8//8yhQ4cA6NatGwsXLvTE9XhjMBhYuXIl1113HStXrqRHjx5kZmZy7rnnehrLHTlyhIiICJ599lmmTp0acIysrCzuvvtu/vSnP9G9e3fat2+PEILc3Fw2bNiAw+EgLS1NM1tK4UuomI/7cAqPscAKnEXEBgPzgTxXhdNBzbJKhSaWY8dI1OtJTEykqKZGU3zk5+eTYjSCXzlhIQTp8fHkNqDgkEJxJpGamsqaNWv43//+xy233ALAypUref/991m7di0JCQn85S9/4ccff2TlypU+WQ8JCQls2rSJO++8k9jYWD7//HM2bdrENddcw5YtWzRdFW4++OADHn74YZKTk/nmm2/YsmULI0aMYMuWLZoZIv379+epp57ioosu4tChQyxbtoyvv/6a6Ohopk6dyvbt230Kpj355JPcddddxMXFsW7dOpYsWcKePXsYMmQIixcv5p133qnX+zNgwAA2btzIiBEjKC0t5eOPP+bQoUNMmzaN5cuXExERUd+3utH46aefWLhwIQsXLuSjjz5i06ZNtG7dmsmTJ7N8+XJ+/vlnTeHhJiEhga+//pqPP/6Y6667jmPHjrFs2TK++eYbEhISmDJlCjt37tQUHgBr1qzhueee47LLLqO8vJwVK1awdOlS9u7dy+DBg5k1axa//vorHTt2bKq34IxB1DcaWwjRCpgA3AKc59osgT04rSFvSimDl9k8y+ndu7c8meh6LS4dMoS/btvGoMOHSUlMpGLKFPDrRfDNN9/wj9tvZ/XYsfDUUz77rujalT+3acMfXAFaCoVCoVA0FkKIzVJKzVLC9Q4mlVIekVI+JaXsjLOC6XzACnQEngJyhBCfCCFGCyHCQh1L0ThYLBbMUVHExMRQ7XBg1wgezc/PJyUiwqfGh5u09HRyQkTXB2Xv3rO6ToRCoVAoTo4TymSRUv4gpbwDp1tmArAaCANGAB8ChxtrgYrgWIqLMUdFIYQg0Wik2OX39CY/P58UnU5TfKR37EhOPYvu+DB6NGzd2rA5SqwoFAqFwsVJpdFKKW1SyreklJcAVwCFOHvAaDdNUDQqRSUlmGNiAEhMSKBIQ0jk5+eTImVAzAdA+vnnk1NW1uBaHxfv2cO+INkBWmydP5+556pkKYVCoVA4OSnxIYSIFULcJoRYA3zJb6IjN8Q0RSNQVVWFvbISo6tqqTkpiSJXWWFv8vPzSamp0bZ8dOhATnh4g2t97KmurldfmIKCAu68/XauuOsu/m/fPmSIMtQKhUKhOHs4IfEhhLhYCPEmcBR4FWcMSBWwGKcFpH2jrVChicViITEuDuESH4nJyViKiwPcG/n5+aTY7driIz2dXCEaVutDSkqkxFJHU6hffvmFLl26EJOVxe6hQ4kNC+NIM6flKRQKheL0pN7iQwjRTgjxhBBiP/A1MB6IAX7C2YCulZRynJRyhWxoQwNFg7FYLJhjY8HVUCqxRQuKwsLAryBSfn4+KeXlmm6XNm3acKS6mtp9++p93uqyMioASx2xIuvXr2fE0KE8v2MHpv/+l44mE1lr1tT7PAqFQqE4cwlVZAwhRDRwHTARuBBnPIcAioBFwAIpZf2d/4pGI0B8JCZSFBPjrPXh1cclPz+fFKtVU3xERkaSGBVF3o4d1LcQcOlhZyxxkcUSclxeXh6ttm+HP/0JzjmH81q3ZvfWrVxcz/MoFAqF4swlVG+XBUAezhoeQ1ybvwLG4bRy/FkJj1NHUVER5uhoiIoCXOLDYPApNCal5NixYyTHxECQgkDpCQmaGS8HDx7kwgsvDNhe4ooPsRQXh1zf0a1bSS0sBFfDq46dOpGlujwqFAqFgtBul4lALLAfeBxoJ6W8Qkq5WErZ8E5MZylCiFFCiFdLS0sb9bgWi4VEg8HX8uHXXK6kpITIiAii/JrKeZOekECOhhWjsLCQrKysgO0lec46charNeT6ju7fT8vzz/esr2NmJlmqiZ1CoVAoCC0+3gaGSSnPkVI+KaUMLCKhqBMp5adSyjvj/VranywWiwWzweBr+fBrLnfs2DFSEhI0XS5u0hITydGwYtjtdoqLiwO6OBa7rCSWioqQ68uzWEj16up43pAh7C4rU/U+FAqFQhGyt8stUsrVzbgWRQOwWCyYIyN9LR9+zeXy8/NJiYvTzHRxk2A0UqrRLdNut1NdXU2Fn8goKSggJTwci90ecn1HS0pI9WrElZGZSa6UVJ1IRVWFQqFQnFE0ONVWCHGOEOIZIcRaIcRuIcQsr339hBB3CiFMjbtMhT8WiwVzRISv5cOvuVx+fj4pMTEhxYfBYMBeFehFsxcVAc7YEm9KLBY6xMVhqakJWpxMSsnR8nJaZmR4tun1etoYDOz/9tv6X6RCoVAozkgaJD6EELcBvwBTgYHAOYB3QEE08DJwdWMtUKGNxWLBHB7ua/mw2wPFh14fUnxERUVpi4+cHEBDfBQX0yEhAYsQUFKiecySkhL0QhDjZfkAOK9FC3avX1+/C1QoFArFGUtD6nwMAl4B7MCDQD+cabfefAuUAlc11gIV2hQVFZEYFuZr+Th+PFB8hIeHjPkwREVhr64O2F7pqkYaID5KSsgwmymWEkeQWh95eXmkhoVBcrLP9o7t2pH1yy/1u0CFQqFQnLE0xPLxf4AErpRSPiel3Og/QErpALYCnRtpfYogWCwWzEJ4LB9xcXHYqqqozv2tsn1+fj4pENrtEhWFTUN82N3iw69ke0lpKS0SEogJC6MsSPzG0aNHSZUSUlJ8tnfs2pWshlRTdbH2nXe4sWfPBs9TKILRrl07hBAhX8uWLfOM//rrrxFCMHz48FO46voxePBgzzWMHz8+5NiHH37YM/acc85pphWe+bRp08bnb0mn0xEXF0daWhqXXnopjz76KL/U80GssrKSuXPncumll9KyZUv0ej0tWrTgwgsv5JlnnsFaR+ahxWLh8ccfp1evXsTFxaHX60lNTaVnz57ccccdLFy4EIfD0RiX3SBCFhnzYwCwQUr5Qx3j8oDeJ74kRX3wiA+X5UMIQUJCAsW5uSRXVkJkpFN81NaGFh/R0ZqWD4/48EuPLSkvx5SRQWJkJJYDB9AK7jl6+DAtNfrJnDdgAO+98UbDLhTI3biRvapGiKIJuPzyy2nZsqXmvvT09GZejZN58+Zxxx13cNtttzFv3ryTOtbSpUspKysjLi4uYF9tbS1vvfXWSR3/TOWxxx7jn//8JzNmzOCxxx474eNceeWVJLsswMePH6egoIANGzbw9ddf89RTTzF69GheeeUVzxh/fv75Z0aPHs3+/fvR6/UMHDiQ1NRULBYL33//PWvXruW5555jyZIlDB48OGD+L7/8wvDhw8nPz8doNNKnTx9SUlIoLy/n559/Zt68ecybN4+xY8dicD3INhcNER/xQH3SbWMbeFxFA5FSOouMORweywf8VuU0ec8e6NYtZEdbN4boaOw1NQHbg4mP4vJyTImJmKOjseTm0kHjmHn79pFqMEC4759Bx4suIstuB5vNI5rqQ1lxMZbKynqPVyjqy8MPP8zQoUPrHDdw4EB27txJjKuL9O+B3r17s2nTJhYvXsztt98esH/58uUcOXKEPn36sHFjgCFb0Qg8+uijAaLA4XDw8ccf88ADD7Bs2TJ27drFunXrSEhI8BmXlZXFRRddRGlpKWPHjmX27NkkedVsKi8v55FHHmH27NkMHz6c7777jr59+/oc46abbiI/P5+bb76ZOXPmYDQaffbv2LGDBQsWoNOdVI/ZE6IhZzxG/RrGnQccPrHlKOqD1WpFr9cTWV0dKD7S0mDnTsDldjl+vG7Lh5b4sNkIA4r84jpKbDZMZjPm2NigzeWO7t9PqsaTVqv0dKxCULatYYVxy0pLndk1CsUpIjo6mk6dOpGWlnaql1JvbrnlFnQ6HW8EsTa6t0+cOLHZ1qQAnU7H1VdfzaZNm2jfvj27du3iwQcfDBg3fvx4SktLufbaa3n33Xd9hAdAbGwsL730Evfddx+VlZXceOON1Hh9T+7atYuff/4ZvV7Pq6++GiA8ALp06cKzzz6LXq9v/Autg4aIj++BTCFEUJeKEOJSoCOw+iTXpQhBUVERiYmJARaExMREilJSYNcupJTk5+eTbLWGFh8xMdg1UmbtdjstgaKCAp/tJXY7CS1aYE5ICNpc7uihQ6RqWFt0Oh3nxsWR1cB027KyMkqBmjoKm3lTXFxMlUYWj0JxIgSL+di7d68nXqK6uppZs2bRvXt3YmJifG4Wu3bt4pZbbqFt27bo9XqMRiPt27fnmmuuYenSpZ5xbdq04Y477gBg/vz5PnEDWtaLUKSlpXHJJZfw/fffs8fPbVlUVMQnn3xC9+7dyczMDHmcAwcOcPfdd5ORkUFkZCQJCQkMGzaM9957T3P8Y489hhCCJ598kpycHG655RZatmxJdHQ0vXr14qOPPvKMXbNmDVdccQVms5mYmBguueQSNm/eHHQthYWFPProo5x//vnExMQQExND7969efHFF6nWcB+PHz8eIQRvv/02WVlZ3HDDDSQnJxMZGUnnzp159tlnfeIdampqEELwz3/+E4C//e1vPp/Bk08+GfK9aghms5nnn38egDfffJMCr+/ar776io0bN6LX65kzZw5C+Od2/MbTTz9NYmIi+/bt8/lMjrmSD4xGY7O7VOpDQ8TH8zizWz4SQlwmhPCZK4S4CGcfmBrgpcZbosIfi8WC2WwGuz3Q8pGQADt38sMPP9CyZUtii4pOTHzYbLRCI9ulqgpTcjLmxEQsfsGobvLy82npF2zqpmNqKlkhvly0KHUFVBXVI+5j8+bNTJgwgZYtW/Lfl9SfoaJ5cDgcXH311Tz++OO0bNmSq666ii5dugCwbds2evfuzVtvvUVMTAyjRo3yxJp88cUXzJ8/33Oc66+/noEDBwJw7rnnMmHCBM9r0KBBDV7XpEmTAAKsH++++y6VlZWe/cFYt24dF1xwAa+88go6nY5rrrmG3r17s3btWm644QZuvfXWoHOzs7Pp1asX69atY+jQofTs2ZMtW7YwZswYlixZwgcffMCwYcMoLi5m+PDhpKWl8c033zB06FD2aXTa/muSziwAACAASURBVOmnn+jevTtPPfUUpaWlDBs2jCFDhpCdnc2UKVMYOXKkpgAB5/dCr1692LRpE8OGDWPgwIHs3buXBx98kKlTp3rG6XQ6JkyYQPfu3QHo2bOnz2fQo0ePkO9XQxk1ahTx8fFUV1ezevVqz/ZPPvkEcMaMpAT5LnUTHR3Ndddd5zMPfotZslgsvP3224267kZBSlnvF876Hg6gFih2/SwC8l3/dgBTGnLMs+XVq1cv2VgsX75cXnLJJVL27y/lunWe7ffff7/895QpUl5wgRwxYoR8efZsKcPCpKytDXqsX5Ytk10iIwO2/2nYMPlHkEM7d/bZHqXTyYrVq+X0G26Qj59zjuYxO6ekyO033aS577FRo+T088+vz2V6mNC5swTkjiVLQo674447ZHp6unz6iSfkvxMS5Nju3Rt0HsXZQ9u2bSUgV61aVa/xX331lQSc/++82LNnj8SZBSjbtWsn9+3bFzD35ptvloCcNWtWwL6ysjL5ww8/+Gx77bXXJCBvu+22+l+QF4MGDZKAXLp0qbTZbDI+Pl6mpaXJWq/vgV69esmIiAh57Ngx+cMPP0hAdujQwec4FRUVsnXr1hKQU6dO9Zm/bds2mZSUJAE5b948n3nTpk3zvCf+8/7zn/9IQKalpUmTySQ/+ugjz76amhp57bXXSkDeeeedPscsLy/3fGazZs2SNTU1nn2FhYVy2LBhEpAzZszwmXfTTTd51jJjxgzpcDg8+1auXCmFEDIsLEwePnxY8xr8j1df3O/bmjVr6hw7dOhQCcjp06d7tg0YMEAC8p///Ge9zjdv3jwJyIyMDJ/tV155pef6+/XrJx977DG5bNkyeejQoQZdz4kCbJJB7okNijKRUj4HjAA24QxAFYAJaIGz+NhoKeULDTmmouF4LB82W6DlIyKCbbt2sXXrViaOHAkJCRAimMgQG6tt+aisdFo+yso82yorK6lxOIhKSsLcqhWWIM3yjpaUkNqunea+83r2ZPdh7ZCg/fv3o9WAr8zlbrHUkaa7fPlyvlm5kv/bsoUrU1LYoDJkFHVw8cUXa6bZnkgcxNNPP02GV1VfN/ku9+SVV14ZsM9oNNK/f/8Gn6u+GAwGxo0bR25uLitXrgRg+/btbN68mREjRtCiRYugc99//30OHz5Mhw4d+Ne//uUTlNijRw+mT58OwLPPPqs5PyMjg6eeespn3uTJkzGZTOTm5jJq1Ciuvvq3epRhYWE85OqCvWrVKp9jLViwgIMHD3LjjTfy4IMPEhYW5tlnNptZuHAh4eHhzJ49W3Mt/fv397iD3AwbNozhw4dTW1vrY3VobtzuOYtXg0+3C6Yuq4cb97gCPzf5okWLuP766xFC8OOPP/Lkk08yevRo2rRpQ6dOnXjmmWew19Eqo6locIirlPILKWU/nIKjL84U3DZSyh5Syk9Cz/79IoS4TgixTAiRK4SoEEL8LISY7O9+ag583C7+MR8VFcwUggcmTsRQR7ApuMSHRrM3j/goL/dsKy0txaTTIeLiMLdpg8WVEeONzWbjeHU1iX7VTd10HDyYrJISzQZzjz/+OB988EHA9jK7nSjAcih4slVtbS1Hjx6lzQcfQH4+Hb/6iiKbjQJXF16FL3XVuDgdX03B5Zdf7mNWd7+00hZDodPpGD16tOY+dwbCnXfeyddff93ssUhuIeV2vdQ30PRbV2zWTTfdRHh4YAKj22Wza9cuj8Dy5pJLLiEiIsJnW3h4OG1d3w1XXHFFwJxzzz0XgCN+wez/+9//ADzuBX/atGlDRkYG+fn5ZGdnB+wfMWKE5rxOnTppnq85ccecnEzGiQzSsNNkMvH++++ze/duZs2axejRoz1B07t37+b//u//GDhwoOZDX1NzwimxUkoLENiL/cxlKnAQZ3XXfOBi4D9Ahmtbs2GxWH4LOPWzfKxfv57cmhoW9OoFFku9xIdNo8CMR3x4CYzi4mJnXY/YWBLT0zWby7lLuosgtRM69ulDlsOBrKhAxMb67Dt+/DjFGh12yyoraa/XY/FL+/Xm6NGjmI1GIl94ATZuRNemDX1iYvjxvfcYOWVK0HlnK8G+rM426ptqWxfu4k/BzrF27VpWr17NpZdeSmRkJD179mTIkCGMHz+ebt26nfT5Q9G/f386derE0qVLPf7/5OTkoDdkN4ddFsr27bWTHGNiYkhJSSE/P5/Dhw8HPKW3adNGc16s6/+91n73Pv+ncbeg8LaUBKOgoCDAAhWsZou7/smpevoHZxAtOL+/3SQlJbF3715NUaeFO7g0mCXr3HPP9cmo2bVrF7Nnz2bu3Lls3bqVxx9/nBdffPFEL+GEUPU46s8oKaW3TWuVECIWuE8I8ZiUstkKUQwcOND5RffaawGWjy1btvD3vn2JPXAAwsJC1vgAMMTFaVs+qqpINBqpqajAbrdjMBgoKS7G5HCA0ei0fDgcAUGvR48e1Syt7sZkMlELVJSUeL5o3NhsNk3xUVpVxTlxcVi8Ssf7k5ubS3pVFcydC64vmn7nnceGL744IfHx0n/+wzXXXkvr1q0bPFdx9hEVom5NTEwMq1at4ocffmD58uV8//33/PDDD6xfv55Zs2YxY8YMpk2b1qTrmzRpEg899BATJ07k2LFjPPDAA5rWDC1O1OpU15N8Q570a12u4ZEjRzqtviFIDJJpdzricDjY5io9cP7553u29+rVi/Xr17O+nr2wNmzY4JlXHzp16sTs2bORUjJ37lyWLVt2+ogPIcRM4Gkp5QnbY4QQ8cBDUspHT/QYpwt+wsPNVsAAJALBH8sbmUsvvdT5Dz/LR1JSEkajkT9ddx3s2gUmU52Wj0ijETvOJ2HvLxl7VRVRJhOJ1dUUFxeTmppKSX4+Jp0OwsMxJyVh0emgsBC8nmCOHj1KqsMRUFrdmyghsFmtxPptt9vtlGg0qyurrqZ9SoqPT9SfnJwc0mprwct/3vfii5lzghUc3/zb32hXVUXrv/71hOYrFP4MGDCAAQMGAFBVVcVbb73FXXfdxeOPP87YsWObtLz5zTffzKOPPspnn30G1K+2h1t4a7kxACoqKjxP5k0t0tPS0ti3bx/33Xcfl19+eZOeqzn55JNPKCsrQ6/XM2TIEM/2q666ijlz5rB8+XKnNTnE9+nx48dZsmQJ4MyeaQiXXXYZc+fODYgVaQ5CycGHgGwhxHQhRIPqDAsh0oUQTwDZOHvCNAlCiPOEEPcLId4WQuwSQjiEEFIIMaYec28UQqwRQpQKIcqFEJuEEPc2MIbjQpzZPsEfyZsSP6tDZmYmGzZsIKFXL2ehsTrSbAHCo6MJg4AUNXt1NYbERBLCwjzptiV5eZhcPlyz2UyRlOD3R5t39Cgtq6qCWj7AKT7sXrEkbmy7dlGi0e+grLaWjHbtsATpoguQm5NDemUleLl7+t54IxsLCpAn0LfAWlmJZe/eBs9TKOqDXq/ntttuo0+fPjgcDrZv3+6zD/ApGHWypKamcs0112A2mxkyZIjPU3Yw3DfDRYsWeSwP3rhjRzp16lTvwMgTxR2sqxUT1hQ0xWfgj8Vi4YEHHgCclilvi85ll11Gr169qKqq4t577w3pJn3ooYcoKiqiffv2jBs3zrO9Pq7VHFf38mAusqYk1I12ELAPmI5ThHwthHhECDFUCJEihAgHEEKEu36/WAjxqBDiG5yi43FgDzCwCdc/GXgBuAlnZdV62QeFEHOAd3D2oFkDfIWzONpsYEl9BIir2Nok4HkpZeD/zKamthZqasDLz6zT6ZwBVJ07O8VHPWI+iIjAwG/l1N1UVldjMJtJ1Ol+Ex/HjpHgOl9cXBw2Kanyi8M4evCg0+0SHR30lFE6HTaNZkg2m41iv9ohNTU1VEpJWseOWDQEi5ucrCzSDAaIjPRsa5mZiTEsjD1ffBF0XjDKa2spDBFjolDUlzlz5pCVlRWwfe/evex0VSNu6xWg7bYiuPc1FosXL6awsLDemR1jx46lVatW7N27l2nTpvkU49q+fTt///vfAfhrM1gH7777blq3bs2CBQv4xz/+gc1mCxiTnZ3NO++80yjna6rPAJyulmXLltGnTx/2799P165defrppwPGvf322xiNRj788ENuvPFGT2yIm/Lycv785z8ze/Zs9Ho9ixYt8gnw3bJlC8OHD+ezzz7TFFGrV69mxowZgPOzbm6Cul2klOuBvkKIG4EpwDCcQZYehBCVQKT3JtfP9cCLUsr3G3e5AfwCPIMz9XczMB8YEmqCEOJa4B6cDfAuklLucW1PAVYBVwN/AoI6wIQQLYEPgQ1A4F9Nc+C2emj5Y1NSnOJk92647LLQxxGCKMButRJn+q1NnL2mBkOLFiS6+sgAlBQWYnJZWoQQJOr1FB08iHdo6dEDB+irUVrdmyidDpuGkLDX1FDiJ0rKysowAkkdO2pm17jJzc5miIavt1+bNvz4wQd0rCO4zh9rbS2FIWJMFIr68vLLL3PffffRoUMHunXrRkxMDHl5eaxdu5aqqirGjx/vU2V00KBBJCcns2HDBvr06UPXrl0JDw/nwgsvZMKECc227ujoaBYvXsyIESN4+umn+fDDD+nduzcWi4XVq1dTXV3NpEmTuO2225p8LXFxcXz++eeMHDmS6dOn85///Ifzzz+fVq1aYbVa2bFjB/v27WPQoEHcdNNNJ32+K664AoPBwOLFi8nLy6NDhw6esuh1Bep6M3PmTE/TOJvNRkFBAVu2bPFkl1x77bW8/PLLxMfHB8zt1KkT3377LVdffTXvvfceS5cu9Wkst3btWioqKmjRogUffPBBQMq2lJKVK1eycuVKjEYjmZmZpKamcvz4cbKysti1axcAw4cP59FHmz8yos6IIynlImCR60l/NDAUuACIxhnvAFABbMF5814mpWxY844TRErp0/KxnoFRj7h+PuQWHq5j5QshJuMsDf+wEOIlKWWAvd4Vx/IFcBy4SkqpXVKvqQnVnE0I6NQJvv8ebrihzkMZhMDud9O3V1cTmZREYm3tb+LDYsHkZdEwR0djycnxER95hw/Tsq4gV50Om0apdFttLcJPYJSVlBAHmDt3xhIiRTEnJ4c0jQybvn37smHdOm4OuSJfpJSUS4nFr7qrQnEizJw5k88//5wff/yR77//nrKyMlq2bMnFF1/MHXfcEZDBYTAY+PLLL5k2bRo//vgjW7Zs8VgdmlN8gFMIbd26lX/9618sX76cjz76iKioKAYOHMhdd93FDfX4fmksevTowfbt25k7dy4ff/wxW7ZsYd26dSQnJ5Oens748eMZM6ZOj3u9aN26NZ999hkzZsxg69atrFmzBikl7dq1a5D4+MJldRVCEBMTg8lkonfv3vTr148bb7yRrl27hpzfs2dPdu3axbx581i6dCnbt29n7dq1xMXFccEFFzBq1Cjuuecezb4tF1xwAatWreKrr75i7dq15OTksGHDBhwOB8nJyVx11VXccMMNjB07tslS2UMSrPpYXS+c4iMViDrRYzT2C6dwkMCYIPvbuPZXBls3zs69Ehiosc8AfIuzcV7bhqytMSucSimlzM2VslWr4PsnTZISpFy5ss5DnavTyd3r1/tsS4+OlvtnzJB/CQ+Xzz77rJRSyruuuELO7dLFM2Zwerr89pZbfOZlZmTIDRddFPJ8F8XEyFWvvRawPVmvlylR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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_eband), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_eband_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_band_vs_N_grid_RT_Fermi_function.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":17: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n", - ":15: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n", - ":16: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " eband, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 -13.279457382996725 -1.5943287158244175 -204.99901992889727 -73.64132975782468\n", - "11 -10.584905418379662 -3.3596062347261295 -170.35528764235596 -76.26173069497872\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":18: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " eband, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "12 -7.622572447322909 -3.2910656504813005 -135.78485770069528 -67.63305431379604\n", - "13 -4.958764023423441 -2.3245302207935765 -105.08001968634562 -53.79662825543892\n", - "14 -3.338969396864286 -0.8014179529504872 -83.82751336060619 -36.63252201057048\n", - "15 -3.0658370744960166 -0.5376671044202794 -74.48984024576794 -30.75794666310685\n", - "16 -2.7000378202089905 -0.7014599707579237 -65.73139962042387 -29.078775773406505\n", - "17 -2.0273009942399085 -1.1582635551835665 -55.54811007212311 -29.840695007916565\n", - "18 -1.3925325945957638 -0.9418433490864118 -46.312441692213724 -25.32366446955257\n", - "19 -1.201152508004725 -1.4583033871500675 -41.13879844898838 -27.25127105671436\n", - "20 -1.3217698372741324 -1.3978542702327559 -38.93848348297706 -25.66185703090696\n", - "21 -1.257249997465692 -1.1708179852660123 -35.78022213915847 -22.850744348056196\n", - "22 -1.1049646003036742 -0.7915625320466688 -32.26358493472799 -18.31166365280751\n", - "23 -1.0283864172432686 -1.0326549550003392 -29.62607912091744 -18.872674092292527\n", - "24 -1.1298278111257787 -1.6572650396835797 -28.615654327225457 -22.896859423982278\n", - "25 -1.1624936809980682 -1.7892805355360224 -27.328476805089394 -23.547092584068196\n", - "26 -1.1111326946620466 -0.960330400734847 -25.553043489112497 -16.340056667039335\n", - "27 -1.0978589991798344 -0.8390103934357285 -24.18826266939277 -14.426595067774542\n", - "28 -1.1919684175757084 -1.32158852432201 -23.81391459326005 -17.55071066744722\n", - "29 -1.2704943433964218 -1.8391673279207907 -23.454346229983457 -21.413497661114434\n", - "30 -1.212868579399128 -1.363366989979795 -22.137861592901572 -17.32024850159678\n", - "31 -1.1477045101155454 -0.6862996055888289 -20.81652036622063 -11.467282410310872\n", - "32 -1.2052712770445169 -0.9700864603628361 -20.52673203993345 -13.147341307022998\n", - "33 -1.3382994768262506 -1.8416324945201268 -20.8872993815894 -19.704203665212844\n", - "34 -1.3229101864429822 -1.4900666136479686 -20.1959841939356 -16.857398075625497\n", - "35 -1.2078858191189283 -0.862573597233677 -18.75260544680941 -11.598076917219714\n", - "36 -1.176779966777417 -0.6718562299337236 -18.013130327208273 -9.747335592826857\n", - "37 -1.3052596566740249 -1.4500292510497275 -18.49437389959394 -15.53643492987294\n", - "38 -1.3673093247097086 -1.7075553152285465 -18.597581501012883 -17.446295371575616\n", - "39 -1.274504259234618 -1.0371489423927187 -17.47693048785277 -12.073397138720338\n", - "40 -1.1676145426913536 -0.6486132355776135 -16.284034300804706 -8.74213247070793\n", - "41 -1.2118358078163283 -1.0151339962569637 -16.270959351586498 -11.396679521553779\n", - "42 -1.3399078585487132 -1.5330846923346826 -16.944641618088554 -15.296490704933603\n", - "43 -1.3080456121159614 -1.2322342215223898 -16.437801449013932 -12.891252878096111\n", - "44 -1.1797045152031842 -0.6745344885091527 -15.152487527552694 -8.356985778323178\n", - "45 -1.138875620175554 -0.8852389395520959 -14.571287915782705 -9.821746599643575\n", - "46 -1.2435783880492863 -1.2081906551802604 -15.139327286095067 -12.206282126398946\n", - "47 -1.299857181397897 -1.227783826609766 -15.365353513261198 -12.282472666052854\n", - "48 -1.1953357222664636 -0.7826338843822214 -14.358510512409794 -8.74050123134839\n", - "49 -1.0992441939901028 -0.7298524386426379 -13.391503535324318 -8.197831620988381\n", - "50 -1.1353621874170585 -1.0405384243481421 -13.487871941808862 -10.472011618723627\n", - "51 -1.234786257341625 -1.0744353126588067 -14.086678556788684 -10.660594233643224\n", - "52 -1.2029784834647899 -0.9041379824984688 -13.67601702049933 -9.294045037452634\n", - "53 -1.0823065779804892 -0.6587194186577108 -12.587755899665353 -7.298894556708092\n", - "54 -1.0504186609153976 -0.7974423163491338 -12.182982640889804 -8.280067743410655\n", - "55 -1.1363611042522734 -0.9790154070099106 -12.713988262748444 -9.5806449594902\n", - "56 -1.1713874094338053 -0.9504412993253482 -12.85439363414298 -9.327590902543761\n", - "57 -1.0805852983297655 -0.6388565360930443 -12.013648264031417 -6.860978584903933\n", - "58 -0.9962391019896586 -0.693231276812412 -11.253700606956045 -7.221963751403564\n", - "59 -1.0337558693688607 -0.7347672616996306 -11.414109694358103 -7.442315086086182\n", - "60 -1.102229711837822 -0.9569674722455375 -11.848423335908137 -9.11316655709743\n", - "61 -1.0667431991307694 -0.6914356093226388 -11.46665610333821 -7.014983033910539\n", - "62 -0.9698660461074269 -0.5846185173261347 -10.625282199896446 -6.167058151368565\n", - "63 -0.9486172407811182 -0.5891842083799474 -10.34989695914237 -6.1233203224360295\n", - "64 -1.0102016497062323 -0.7622326949655189 -10.740132086605172 -7.397826898040421\n", - "65 -1.0280609076811515 -0.7747906130528008 -10.79584061104697 -7.453614716668653\n", - "66 -0.9543987965626002 -0.5776064894645287 -10.142469930901825 -5.896605349851598\n", - "67 -0.8895999837575346 -0.48828302001572865 -9.576881647351911 -5.1893450880015735\n", - "68 -0.9156460156364119 -0.5637247915016133 -9.695371216805597 -5.697211141218759\n", - "69 -0.9618206201694193 -0.7028680374996839 -9.973105453122571 -6.733061963810087\n", - "70 -0.9307435911939592 -0.6382115768661833 -9.637598205113136 -6.204786764909841\n", - "71 -0.8550892892579895 -0.48756632929269017 -9.026833541382985 -5.039797111001462\n", - "72 -0.8346643433551435 -0.4121975240457232 -8.819217374405525 -4.3975033586839345\n", - "73 -0.8824212692986748 -0.5605047149791744 -9.075083732252097 -5.498086444993078\n", - "74 -0.8829266759091752 -0.5916729782720722 -9.056417912223878 -5.702405699909832\n", - "75 -0.8294404712046344 -0.5655877895109143 -8.567972737842865 -5.5021145128298485\n", - "76 -0.7833163367145062 -0.35810992715414613 -8.165854470603335 -3.8786152457719254\n", - "77 -0.7971900079213583 -0.42992777385791214 -8.211069286202928 -4.378667005018997\n", - "78 -0.8218698258239101 -0.4649431486741378 -8.366694713052766 -4.61082743890438\n", - "79 -0.7968059343144205 -0.5431472618992075 -8.11743369328724 -5.192680321804346\n", - "80 -0.7461123974713928 -0.45121495227431296 -7.679519052015621 -4.498918426683758\n", - "81 -0.7290457781451778 -0.30707442733626067 -7.492106202996638 -3.341356952371825\n", - "82 -0.748708153381699 -0.3629841792626394 -7.613051174829252 -3.7306624591565196\n", - "83 -0.7546570387060001 -0.42563956177298223 -7.611461798908749 -4.190122200293445\n", - "84 -0.7139146584368063 -0.514214697305647 -7.261308573452425 -4.883643883208151\n", - "85 -0.6781997999910345 -0.33770782673457234 -6.943763277235121 -3.5032302514218827\n", - "86 -0.6805437077416627 -0.2621014380025599 -6.921071073336407 -2.8763810031155117\n", - "87 -0.6969188937795252 -0.3340521233023992 -7.011395845017887 -3.399905644675073\n", - "88 -0.6796497653076585 -0.4466717491905001 -6.851922040107638 -4.268241129856051\n", - "89 -0.6434391126038008 -0.4208313950603042 -6.5243041103722135 -4.073723904297822\n", - "90 -0.6227391966906453 -0.23225718940670959 -6.3328580519878415 -2.5886691299119775\n", - "91 -0.634192976008535 -0.2187108737938388 -6.383003068425296 -2.440765491248385\n", - "92 -0.6372874951005087 -0.3387008804912739 -6.388668764205249 -3.2034552755499135\n", - "93 -0.6123502830256484 -0.435306024458896 -6.171864740912952 -4.1099151328267\n", - "94 -0.580286752313441 -0.3028325815948847 -5.887622733537228 -3.0755496906908775\n", - "95 -0.575310177653364 -0.14045527048460826 -5.805033649428879 -1.7854034173228683\n", - "96 -0.5862958007113548 -0.22528237779465599 -5.8756247215778785 -2.4137993365825423\n", - "97 -0.5797343912718134 -0.3889964731621376 -5.801720054213547 -3.684935095621313\n", - "98 -0.5499738132167522 -0.37474666824221003 -5.52346287847331 -3.5750812818059785\n", - "99 -0.5272735634663377 -0.160737842911999 -5.341969317314124 -1.895773600823759\n", - "100 -0.5306891119086004 -0.11621114211311578 -5.3436185750642835 -1.522512602918141\n", - "101 -0.5398157247492463 -0.282988691995115 -5.388422861932668 -2.8065539156032173\n", - "102 -0.5226982048234277 -0.3836513527229499 -5.237751250652309 -3.590751700726287\n", - "103 -0.49405423555106154 -0.23401345816068897 -4.989677999662945 -2.419215340392384\n", - "104 -0.4816473260644898 -0.06950899385810771 -4.873432946977118 -1.1240183844565763\n", - "105 -0.4917050348005887 -0.15656098695274068 -4.93165823369327 -1.7782994981776028\n", - "106 -0.49146320364741314 -0.34993380650348627 -4.911621505276344 -3.2764727910653164\n", - "107 -0.47106407385149396 -0.29906395613454606 -4.721560350727032 -2.879040362084197\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "108 -0.44286042031683337 -0.1037300245809547 -4.500521893400219 -1.3516501266130945\n", - "109 -0.4439179699379565 -0.051027761327418375 -4.481829759047741 -0.9216857833230279\n", - "110 -0.4543494800495864 -0.24935489044241876 -4.545376784458313 -2.4532639539438605\n", - "111 -0.44671147246424425 -0.33533304786465123 -4.460577104154254 -3.1230413028438306\n", - "112 -0.41772049124017485 -0.164396656658937 -4.233148099609025 -1.7846952268432688\n", - "113 -0.4027067168964322 -0.040836430824697345 -4.09362561606531 -0.8141260736360891\n", - "114 -0.41319560481281314 -0.12055674101497971 -4.1485584397964885 -1.4139214477650057\n", - "115 -0.41696081913653416 -0.29846533339912185 -4.1630660694791 -2.7959490024195475\n", - "116 -0.3995875285080501 -0.23395902631011722 -4.019822922894946 -2.2929065583371084\n", - "117 -0.37273399902676374 -0.07057378414208415 -3.7982999969399316 -1.0132232051360006\n", - "118 -0.3715862652126134 -0.036633393248052926 -3.7715158643231916 -0.7366933655202956\n", - "119 -0.383609748889171 -0.2047413315066251 -3.846884030785077 -2.037628388673056\n", - "120 -0.37770777317871307 -0.26473877818978053 -3.791410248982629 -2.4996719954210675\n", - "121 -0.35407546414307944 -0.12476580225029466 -3.5931594050493914 -1.4030694254611262\n", - "122 -0.3394536866519502 -0.01630793402364361 -3.464825271531481 -0.5509156581924799\n", - "123 -0.3455175891374438 -0.1043968615679205 -3.4993345381053587 -1.2254834499094613\n", - "124 -0.35167375303876725 -0.2387874082454573 -3.537549455475528 -2.2817972569605445\n", - "125 -0.33877893106796364 -0.18017814741438087 -3.4211114201234523 -1.808021477375405\n", - "126 -0.31718039730674263 -0.0536337800997444 -3.2424814280016108 -0.819819624311549\n", - "127 -0.31005007853570987 -0.04287031664841834 -3.179582591509188 -0.7248804788155212\n", - "128 -0.321176652136387 -0.157491237193085 -3.2457500041236926 -1.6305805512852203\n", - "129 -0.3206199476222764 -0.13945794897142605 -3.235610448056377 -1.9564141828163883\n", - "130 -0.301203352412017 -0.10001708429319933 -3.0739351239217285 -1.1559081247210088\n", - "131 -0.2843768469228962 -0.027471595918541425 -2.933811322179281 -0.5784415780271956\n", - "132 -0.2890510646242319 -0.09982537271162073 -2.954403181319776 -1.1411467524885666\n", - "133 -0.2970644535420206 -0.17071466740776486 -2.950219918032417 -1.6392737564474373\n", - "134 -0.28748691053112907 -0.13242073731032633 -2.9244179162378714 -1.3861573755284553\n", - "135 -0.2679364721085449 -0.05429060497726823 -2.7572455783219993 -0.7578980948169374\n", - "136 -0.25939896241914084 -0.05255782778954199 -2.696800979237196 -0.7524658988008923\n", - "137 -0.2706360223538695 -0.12470273770406948 -2.7208878252190516 -1.3090674675413538\n", - "138 -0.2706336612926634 -0.1379835044530182 -2.771722780447817 -1.4066602749298909\n" - ] - } - ], - "source": [ - "emin = dos_qe[: , 0][0] - 1.0\n", - "emax = dos_qe[: , 0][-1] + 1.0\n", - "n_egrid_max = int(len(dos_qe[:,0]))\n", - "#n_egrids = np.int32(np.arange(1,11)/10.0*n_egrid_max)\n", - "n_egrids = np.arange(10,n_egrid_max)\n", - "ra_enum = []\n", - "ra_eband = []\n", - "ra_enum_M1 = []\n", - "ra_eband_M1 = []\n", - "for n_egrid in n_egrids:\n", - " ra_en = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = ra_en[1] - ra_en[0]\n", - " # Generate electron number \n", - " ra_enum = np.append(ra_enum,gen_enum_int(k_weights_qe, ra_en, eigs_qe, sigma_mod) - enum_ref)\n", - " # Generate band energy\n", - " ra_eband = np.append(ra_eband,gen_eband_int(k_weights_qe, ra_en, eigs_qe, sigma_mod)*Ry2eV - eband_ref)\n", - " # Generate electron number \n", - " ra_enum_M1 = np.append(ra_enum_M1,gen_enum_int_M1(k_weights_qe, ra_en, eigs_qe) - enum_ref)\n", - " # Generate band energy\n", - " ra_eband_M1 = np.append(ra_eband_M1,gen_eband_int_M1(k_weights_qe, ra_en , eigs_qe)*Ry2eV - eband_ref)\n", - " print(\"{0} {1} {2} {3} {4}\".format(n_egrid,ra_enum[-1],ra_enum_M1[-1],ra_eband[-1],ra_eband_M1[-1]))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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zJYtW5gwYQLjx49nzJgxuRrfwIEDefnllxkwYADnz5/n+eeft9mbYUtWe50y+ybvyjf9lJQUADp16kTp0qUdXpv+Qzwrz8pLqamp7NmzB4A6deqYjzdo0IAtW7awxcl/v7dt22Zu54zg4GC++OILtNZMmTKFxYsX3znJh9Z6XV4GInJBaChMm5bfUQghgMaNG9O4cWMAbt26xezZs3niiSd488036dmzZ64ub963b19ee+01liwxRsSdqWnx9/cHsDmMAXD16lXzN3PTtbklICCAI0eOMGrUKNq3b5+rz8pLv/76KwkJCXh4eNCiRQ6clUYAACAASURBVAvz8S5dujB58mSWL19OXFycw9qPa9eusWDBAsCYPeOKBx54gClTpljViuSFOzMdFDmjdm04eBDSLTwjhMh/Hh4eDB48mIiICFJTU9m3b5/FOcBiwajsKleuHI888gilS5emRYsWFt+y7TF9GP7www/mnof0TLUjwcHBThdGZpWpWPenn37K1eeY5MbvIKP4+Hief/55wOiZSt+j88ADD9CgQQNu3brFk08+6XCY9OWXX+bSpUsEBQXRq1cv83FnhlZPnjwJ2B8iy02SfNzLihYFf3/IsMCQECLvTJ48mejoaKvjMTExHDx4EMBchAn/9iKYzuWU+fPnc/HiRadndvTs2ZPy5csTExPDmDFjLBbj2rdvH2+99RYAL7zwQo7Gacvw4cPx9/fnm2++4e233+b69etW1xw9epQ5c+bkyPNy63cAxlDL4sWLiYiI4NixY4SEhPDhhx9aXff999/j7e3NwoULefzxx821ISZJSUk8/fTTfPHFF3h4ePDDDz9YFPju2rWLtm3bsmTJEptJ1Nq1axk/fjxg/K7zmtMbywEopUoCIzHqQcoD9pZN01rrKtmMTeQEU9FpzZr5HYkQ/0lTp05l1KhRVKlShdq1a+Pl5cW5c+fYsGEDt27dok+fPharjDZt2hRfX1+2bdtGREQEISEhuLu707x5c/r3759ncRcpUoT58+fTsWNHPvzwQxYuXEh4eDjx8fGsXbuW5ORkBg4cyODBg3M9lmLFirF06VI6derE2LFj+eyzz6hTpw7ly5cnMTGRyMhIjhw5QtOmTendu3e2n9ehQwc8PT2ZP38+586do0qVKuZl0TMr1E3vvffeM28ad/36dS5cuMCuXbvMs0seffRR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PfaYUQtSuzY0bmzswdOsmbFS608/GT0kJkoZs55q1858Gfl//jESlg4djIRIakuEuGc4nXxorecB7wIrlVIj8motjzuJ1jpaa91Ba+2ltfbRWo/SWlsP6t9hnEk+TMMuJn379qVBgwYUKlQo0/uXLVsWDw8PTqft/Lpy5UratWtntfCWLUOGDOH99983//ngwYNO93ykTz4uX75MbGxspomLraGXuLg4h8mHn58fN27csPoZZqXnIzU1lc2bN9PExuwfcNzzsWPHDqvkA2DEiBF89dVXJCcn240F4Mcff6RHjx4sW7aMrVu3sm3bNubNm+ewTXq7du3igw8+sFn/wltvQVycMePp7Fmj3mTSJKs9dgAjAfnyS2Mo53//s1oZFzCKW0NDjdqVXr2MKcphYcaaMUKIu54rU21TgNcx1rT4AjimlEqx87qdWwFnk+lfOS8H15h67FVXwgAAIABJREFUR+6ZPmFnaj7SD7sAhIWFsW3bNqefkb7uw5R8OGPYsGFERkayfv16bt++zZEjR5zqbck47LJz507q1auHe9riX/bYKjrNrOdDKWXV+2Ha/C6z5CNjz0dkZCSlSpWy+zyb023T7NixgwYNGlgdr1OnDlWqVOHXX3+1GwvA3LlzefzxxwEjCXvooYcshssys3LlSgC2bNli+wIPD6NA9fPPYfhwxzdzczMKVqtXN3o2EhKMno0tW4whnyFDjKGazz4zej/27jV6VAYNMopihRB3NVcLTp193anLth9P+6/9eZxgKho47uCau0pWej5cZUo+kpOTWbduHW0cLYSVTqFChXjrrbd49dVXOXbsGH5+fhY1DfZkHHbZvn271ewRW2z1fGSWfAD/Ln2erk3BggXx8fGx28a8v0s6joZcTM85dOiQ1dDGjRs3OHToEKGhoTbbDRkyhDlz5ti97759+7hy5YpFj0vGWp3MrFixgg4dOrB582an2zjk5mbMlAkNhZYtjdk0ffoYf967F9q2/fdapYxekrlzjZ4QW70vJteuGYugxcYaq+k6sa+RECJvuTLs4ubKKzeDzgZTSX6IUqqwnWsiMlybLUqpzkqpr5zZWyW3ZFZwappm6+iDNDOm5GPbtm0EBQXhm37fkUz07t2by5cvM3HiRKeGXMB62GX79u3cd999mbbL2PORmprK+fPnM403Y8+HM7NybA27rF+/nubNm9ttU6xYMUqWLGnVbu/evdSoUcNqhoxJy5Yt2bRpk/WaH2nmzp1Lr169LFZUzVir40hSUhI7d+7k5Zdftt/zkRVubsa6ISNGGMWo0dHGQmb2Zkm1bm0s5W9vyu6yZcZqu/XqGQuq1atn7F+TkJBzMQshsu1OTRJyhdb6FLAL8AC6ZzyvlGoBVMBY/TRHvt5prX/TWg8rXrx4TtwuSzLr+TAVmzpTo2GP6YPMlSEXkwIFCvDee+/x1VdfOVVsCkadSXx8vLnOwdmej+rVq7N//37zny9duoS3t3emtS1ZST4CAgKIjY0lJW3VUK01q1evzrRXyFbdh70hl/TPcnd3t7mOidbaYsjFxNfXFw8PD6vCXVvWrVtHeHg4TZo04ciRIyTm5EwVpYxZNW3bmhdTc2jIEGNJ+Pbt4ccfjZqRlBRjZ+Vhw4zdh8+dM/YZOnfOqC1p3txyNo4QIl/9p5KPNKbqxg+VUuYiB6WUL2BaMOEDrfU901dbrFgxrl69yu3btktxsjvkAsaH88mTJ/nll19cTj4AOnfuTLNmzahXz7nJVO7u7pQpU4a4uDji4uJISkqiSpUqmbZr1KgRUVFRXLxobE6c2TRbk6wkH4UKFaJUqVKcS9sHJTIyksKFC1PZxg7B6dmq+7BXbGqilKJJkyZs2rTJ6tyWLVvw9PSkbt26VuecHXpZuXIlDzzwAB4eHtSrV4/t27dn2iZXffghPPUUfPcd+PsbQzXr1xu7G6cf1nJ3NxY4693bmImTfj0aIUS+cTn5UEoVVEo9ppSappRakvaalnbMwYIAOU8pVV8ptcX0AuqnnXovw3EzrfUCYCrGmiX7lFK/KaV+Bg4DtYDFGAW19ww3NzeKFStmtRy5ScZi06woWLCgeZpos2bNXG6v1P+zd+bxUdXn/n8/CYEkJITIFhJW2TdlEwFZFQVUXKrVWm9VXOotLq11709t7a3XCvfa3rpUrQui11ut2lqr7ArIooIIsi8GEBAIEEI2Qkjy/f1x5oRJcubMOZNlsjzv1+u8hjnnPDPfOR5nPnlWYdGiRfzkJz/xbGPnfaxevZrhw4d78ty0aNGCiRMnsmDBAsBbvgdYLdYzMzPLvRhem6EFl9suWrTIUy6MU7ltOPEBhBQfttfD6fr4ER+2qBw5cmTN5X1ESmws3HijFWbZtcvqyrpwoXNDNRErlPNf/2V5VyrPw7HZvds6r0cPmDHDmrasKEqt4Heq7TBgG/AmcBtwcWC7LbBvq4gMDf0KNU4r4Nygze7N0avS/goYY2ZgTcJdC4wHJgM7gTuBq4wxIaZrNVzatGnD0RBtrWvC8wFW6GXs2LEh8xLC0aJFC1+hHzvvw2vIxWbq1KnMnTsX8C4+EhMTad++Pbt37wa8i4/gvA8vIReoGnYpLCxk586djgPsgnESHyUlJbzzzjtcd911jjZexMe+ffs4dOgQQ4ZYTX9HjRpVs3kf1eWMM6y8jjCVTlxzjVXC++CD1lZSYuWY/OUvVhhn2DBr3//9H7RrZyXBTp5szbFRFKVG8VNq2wmYD3TDmlr7JJbouC3w771YXUHni0hGja/UAWPMEmOMhNtC2L5ljDnPGNMq0LdjmDHmuZoOt9SHhFOwch1ClXDWhOcD4LrrruOOO+6o9ut4pTriY968eZSVlYXt8RGM3en0+PHj5ObmunZTtbE9HyUlJSxbtozzzz8/rE3//v3ZsGFDeSnx+vXr6devX9i8lMGDB7Nz505yg5IrFyxYQLdu3UL+963SGt8B22Njz9sZOXIkn3/+uadEVRtjDFu3bmXNmjWebWqFIUNg9WorPJOaanlCli2DK66APXvg6adhxAirb8mePVYZ8Pjxzu3jFUWJGD+ej4ewenz8CehljPl/xphXAtv/wxpp/z9Am8C5CvUj4RRC/4VrjKnQ3bQ6TJ48mSuuuKLar+OV4LCLH/HRtWtX2rdvz5o1azx7PuB03ofdCM2Ll8b2fKxevbr8fcPRoUMHHnroISZMmMDevXs9hVzAmg0zdOjQCv1ZZs+ezfTp00Pa9O3bl8zMTIqKikKes2DBggp5PBkZGcTHx/Ptt+EHSe/atYtp06bRrl07Jk+ezIUXXlgeuooabdtaHVO3bbMExhtvwPTpkJRU8bwWLawpv88+a3lAlixxf11jIDvbarKmKIorfsTHFCATuMcYU6WVojGmBLg3cM7FNbM8paYIJT6ys7MpKyurVplttMjIyGDlypXExcWRkeHP2XbxxRczd+7caokPL9iNxhYvXsyk4L4VYXjooYf42c9+xvjx4/nnP//pWukSzKhRo8pDL9nZ2SxYsIBrr7025PktWrSgZ8+eIbuqlpWVsWjRoipJxF5DL6+88gpt2rRh/fr17Nmzhw4dOrBhwwZPn6VWiY2F9PSQE5cr8IMfWFU111xjVdRs2GAJDWMsL8qdd1rN0lq2tPJF+vWDmTO1HbyiuOBHfGQAXxoXX2sgZPElkF7dhSk1SyjxURNlttEiIyODFStW+PJ62EydOpWPP/44YvHhtSTYbjTmNdk0mHvuuYd7772XRYsWefJ8QMW8j7/+9a9MnTqV1i6ThcHdK/b73/+etLQ0unat2JfPa9Lp/PnzmT59erk4HD9+PEuXLvX0WeoV558PS5daZb3TplnTeQcMsBqetW8P770HWVnWPJoNG+D99y3REuVwq6LUV/yIjxNYYZdwnBE4V6lH9O7dm71791JYWHEUTU0lm0aD9PR0ysrKIhIfY8aMYdu2bWzevNlTqS1EJj66dOlCZmYma9asYdy4cb7Xeccdd7Bx48byZM9w2B6JsrIyZs+ezU033RTWxkl8FBYWcv311/P3v/+djz/+OOT7uHHkyBG2b9/OqFGjyveNGzeOZcuWefosgK+8klqnXz8rJ2TXLisp9eWXYedOyxsyaNDpsE3nzlYeSUYGDB9u5ZcoilIBP+LjG2CCiIT0N4tIH2BC4FylHhEXF0efPn3YtGlThf1btmzxNEulPmL/NR2J+GjevDkTJ07k+++/9+z5yMjIIDc3l9WrV3sWH6mpqYgIQ4YMIalyToFHBgwY4Nkz1b59e9q1a8e7777L/v37PYV6zjrrrApJp99//z1jxowhNjaWZcuW0alTpyo2Q4YMYevWrRS4TKVduHAhEyZMoHnz5uX7bPHhVVTMmjWL66+/vn6JEBGrMmb06NBhm+bNrVyR3/3OqsSZOdO5zfv27dbMmocfhnXrNFSjNBn8iI9XsDqDfiIiN4tI+TdKoPfHdGAxEAeEn+/dRKgv1S7g/BfuJ598EtFf5PWBlJQUevToEZH4ACv0EhMT4znfJSYmhl69enH06FHP1UEiQpcuXXzle1SX0aNH88tf/pIbbrihvELFjeA268ePH2fKlClcfvnlzJkzJ2TZdHx8PCNHjuQjlymz8+bNY/LkyRX2de7cmeTk5JA5JpV5/fXXWbJkCS+88IKn8+sd115r5YV8+KE1dO+JJyyhceedVuv38eOtTqzGWBU3AwbAH/+o82iURo+f2S5vAP+H1ZzrL0CBiHwnInuAQuBlrFyP/zPGhJ5w1cSoL9UuUFV85OTksHHjRtdBZ/UZEWHnzp2ccYaXaGBVLrnkEkaOHOnpB9qmT58+9OzZk7g47/30rr76aq666qpIlhgRo0ePZv/+/dx4442ezu/YsSPGGPbu3cvVV1/N2LFjeeyxx8J6W2bMmMEzzzzjeMwYUz6IrjJe8z62bt1KTk4On3zyCY899hjr1q3z9HnqHV27WpN4r7wSCgogOdlKUP3Tn6zBd88+C7//vRXOeeUVK1/k4osh0IVXURolxhhfGzAD+BYoq7TtBGb4fb2msg0bNsxEmwULFpgJEyaUP3///ffNRRddFMUVNTwee+wxc+WVV0Z7Ga7s2rXL3H777b5sJk6caM466yxz2WWXmZKSEk82p06dMp07dzZr166tcmzdunWmZ8+ejnavvvqq+dGPfhT29X/3u9+ZO++80xhjzP/+7/+a3r17m9zcXE9ra9CcOmXMgw8a07mzMStXRns1ihIxwBoT4jdRTIQxxkAjMbu+cb8xRqc2uTB8+HAT7QZLhw4don///hw5cgQRYcaMGZx55pncd999UV1XQ2L79u0cPny4wXqLQnHffffx2Wef8emnn5KYmOjZ7sknn2THjh28+uqrFfbPnDmT7777jmefrTqpIDMzk7Fjx7Jv3z5X78rQoUN5+umnmTBhAgC33norzZs35/nnnw9p06j45z+tgXujR8P991uPxsDmzVblzd69VnXNsWPWBN8774T4+GivWlHKEZGvjDGOpXqexYeI3A0UGmNersnFNRXqg/gAq4HV2rVrycjIoFevXrz77ruOA8eUpkVBQQGxsbHE+/zxOnLkCL169WL79u20a9eufP/555/PPffcw7Rp06rYGGPo3LkzS5YsCZk7k5mZyciRIzlw4EB5WOy7775j+PDhHDx4kBgv028bAwUF8NprVpVNq1ZWA7OWLa3W7z16WK3lU1Lg7bfhm2/gySetPJMGWDqvND7cxEeYYQgVeBqYi5XboTRQ7LyPU6dOkZubG3ZeiNI0aNmyZUR2bdu25corr+Tll1/m4YcfBiA/P5/Vq1czceJERxsRYfz48Sxbtiyk+Hjvvfe44oorKuTjdOnShdatW7Nhw4amI5hbtrQ8Gj/7mVW+e+aZVg5JZX78Y6sD6333wYsvwv/+r9VETVHqKX7+fDgM5NXWQhor9anaBU6Lj4ULFzJp0qSm8xekUmvcddddPP/885SUlHD8+HHeeecdzjnnHNfS4nHjxrkmnb733ntcffXVVfZPmjSJRYsWeV7b2rVrPbWBr/fExsLEic7Cw2bCBPjiC7jgAqsUODC5WVHqI35+eZYDkdU0NmFMPap2AUt8bNiwocKIdEWpDkOGDKFXr14kJyeTkZHBrFmzmDFjhquN7flwYt++fezYscPRc+JVfJSWlvLb3/6Wiy++mHPPPZcnnniC4uJibx+oIRMbC488YjVBmz4dbr8dXngB5s6FFStg1ixrTk1yMnTvbvUgueceCDF0UlFqCz/i47dAJxF5XBpiL24FgEGDBvH111+zePFiFR9KjWHPycnLy2PLli2OXotg+vTpA8Dq1aurHHv//feZNm2aYznzxIkTWbFiBSdPngz52llZWUyZMoXFixezdu1a1qxZw8qVKxk6dGj9mCtTF0yYAGvXWp6Sr76yeof8/OfWIL1//3errHfhQrjjDiuXZOxYmD1bm5wpdYafhNMbgDHALcBW4ANgDyFaqRtj5tTQGhsF9SXhtKioiKSkJHr37s3mzZujvRylCTNr1iw2bNjAnDmnvyrKyso466yzePrpp7nooosc7UaMGMGsWbMYP3684/HRo0dz3nnn8eSTT9KsmZXWZozhN7/5DXv27GH27Nk1/lkaPBs3WomqQ4bA889bgkRRqolbwqkfz8dsLOEhQD/gQeB54LUQm1IPiY+Pp3fv3ur1UKLOLbfcwocffsihQ4fK97333nskJia63p9uoZfc3Fy++eYbnnjiiXLhAVaS64UXXsi2bdt8rfG1117j4MGDvmwaJAMHWp1YW7aE/v2thFWnP0yNsbwm8+ZBUVHdr1NpNPipdpkDqE+uEXDdddf5nrCqKDXNGWecwQ9/+ENeeuklHn30UcrKynj88ceZOXOma/+PCy+8kF/96lf8x3/8R5Vjn3/+OcOGDaswT8amb9++bNmyxWpw5CFyvGfPHm677TYefvhhx/dqdCQmWpUyK1bA3XdbuSI//SlkZ8OhQ5CZCcuXQ2kpdOsGN91khW1+9jPwOKJAUWwibjKm+KO+hF0UpT6xYcMGpkyZwu7du/nggw+YOXMmX3zxhas4KCoqol27duzdu5fWrVtXOPbrX/+akpISnnjiCUfbtm3bsnHjRk/DBH/xi1+wY8cOvvnmG3bv3u2rDb9NVlYW7du3920XdUpL4dVXYdEiaN8eOnSALl2sRmc9elh9RDZvtvqPvP8+PPWU1RBNUYKoqbCLoihKjTJo0KDyZnePP/44v/71r8N6JeLj4xk9ejRLliypcmz58uWu3Wf79u3LVg+VHUePHmXOnDm89NJLpKWlsXDhwrA2lcnJyaF79+7s2bPHt23UiY21xMTbb8Mzz1gVNDfcAD17nm5g1r8/vPwyrFoFf/gD3HqrhmIUz3gWHyKSKSJPeTjvSRFpBIX1iqLUBXfddRd33nkn8fHxXHzxxZ5snPI+Tp06xZdffsmoUaNC2nkVH3/+85+54ooryMjI4JZbbuGVV17xtK5g3n77bQoLC6tMkm509Olj9Rc5ftyqmlm1qmq+SE6Odc6XX8KaNVbVjdKk8eP56Aa0C3cS0DZwrkL9azKmKPWNyy+/nDZt2vDb3/7WUy4GWOJj7ty5lAWNnl+/fj3du3cnNTU1pF2/fv3Cio8TJ07w7LPPls88uu6661i4cCGHDx/2tDabV199lQEDBrBp0yZfdg2S5GR45x2rt8jNN1sekkcftdq9jxtnhWzuuMPa/v3fYfhwK1fk6NFor1yJErURdkkASmrhdRsk9a3JmKLUN5o1a8bmzZuZOnWqZ5vBgweTlJRUwfsRLuQC3jwfr7/+OiNGjKB///4ApKSkcNlll/Hmm296Xt/mzZvZt28fP//5z9m4caNnuwaNCMyYYeWC/O1vcOIEfP89PPywlbC6Zo1VUbNmDWzfDs2aQb9+VpKr5h42OWpUfIhICnAe0ARq0xRFqSmCy2K9ICLcddddPPPMM+X7li9fzpgxY1zt7IqXUOTk5DBz5kzuv//+Cvvt0IvXBP3XXnuNn/zkJwwePLhpeD6CEYGhQ+G//svKF5k6FRISKp6TmmodW7jQEh/Tp0NT6ECrlONa7SIimUFPuwH5wJEQpzcDOgQeXzHG/LSG1tgo0GoXRalZCgsL6dq1K59//jlnnnkm6enpfP7553R1mX9SWlpKUlISR44cqTJM78SJE0yePJkhQ4bwP//zPxWOGWPo3bs3b775Jueee67ruk6dOkWXLl1YsmQJGRkZtGvXjry8PN8Cq8lQUGANxsvLg/fes4SJTUmJNVDv/fet88aMsfJKevXSyb0NgOpUu3QL2gyQVGlf8NYpcM4/sBqQKYqi1BqJiYncfPPNPPfcc2RmZtKsWTO6dOniahMbG0vPnj3Zvn17hf0lJSVce+21dOnShT/84Q9V7ESEH/zgB8yfPz/suubNm0f37t3p06cPSUlJdOzY0fNwu7Vr1zJkyBBPSbGNhpYtLXFx1lkwcqSVM3LddXDZZdCxIzzwAGRkwLnnwqefwoUXwjnnQFZWtFeuVINwUrx74FGATOBd4P4Q5xYDh40xmu+hKEqdMGPGDIYOHUqPHj0477zzPCWs2nkfQ4YMASyvxm233UZJSQmvvfZayEnPQ4YM4Z133gn7+q+99hrTp08vfz5w4EA2bdpUPs/GjY8++oi4uDjGjRvHG2+8weTJk8PaBLNw4UK++eYb7r33Xl92USc21po/M2mSlR+SkGBtf/qT1dDM5t//3coP+c1vLA/IokXQuXO0Vq1UA1fPhzFmT2DbDbwOzAvaV3k7oMJDUZS6pGvXrowbN47HHnssbL6HTeWKlyVLlrBq1Sr+9re/OQ6zsxk8eDDr1693fe1Dhw7xySefcO2115bvGzBggOek06VLl/LYY4/x/vvvc9NNN/Hcc895srOZM2cOf/3rX33Z1CsuvRRuucUKw1x5ZUXhYSMCjz9uCZGxY63kVaXB4Tnh1Bgz3Rjzam0uRlEUxS9333032dnZnsVH5YqXl19+mRkzZlTJAalMr169OHjwILm5uSHPefbZZ7nuuutoFTSYzfZ8hKO4uJgvvviCMWPGMGbMGFauXMm9995boZzYjbKyMubNm8fGjRspbgrJm/fcA489BuedB7/7nZUzYrNrF8ycCTfeCOPHWyLmxhuhKczpaSD4aTLWWURuEJGQvkMR6RM4p1PNLE9RFMWdCRMm8MILLzBo0CBP5wdXvGRnZ/PRRx/xb//2b2HtYmNjGThwYMimYYWFhbz44ovcc889FfYPHDjQk+djzZo19OrVq7xlfPfu3WndujUHDhwIa2vbt2/fnu7duzedidU33wwrV8LWrVZvkfvvt5JSR4yA3bst4fGb38D8+Vb+yKBBVjfWU6eivfImj59S27vxNq12NnBHRKtphGiTMUWpXUSE22+/3fPsld69e7Njxw5KS0t58803ueSSSzjjjDM82Q4ePJh169Y5Hnv99dcZNWoUvXv3rrC/T58+fPvtt2G9EUuXLmX8+PEV9nXt2tVze/a5c+cydepUhg0bxldffeXJplHQqxe8+aaVjBoTAw89ZPUXef55S5xMnGh1Yf39763BeHPnWrklwZ4Spc7xIz4uAjYZY0LOpA4c2wT4y5JqxGiTMUWpXyQlJdGuXTt2797NX/7yF27zMRAtlPgoKyvjD3/4Q3lX1GDi4+Pp1q1blQqbyoQSH999952ntQWLj7Vr13qyAXj00Uf55S9/6buDq82+ffs89z+pVfr3twbcXXophMrd6dMH5s2zHidPtlrCO2EMbNwILiE2pXr4ER+dgZ0eztsJuNe7KYqiRJG+ffvyxhtvUFRUVOUH342zzz7bMen0ww8/pHXr1iHzTsKFXk6dOsXKlSsZO3Zshf1ePR9Hjhxhy5YtjBkzhqFDh/ryfHz44Yfs2rWLvn378sgjj5DnwyNgjGHYsGENa35NTAy88AIMG2Z5QLKzTx87eRJefx0GD4aLL4b0dCtUc9ttVhhHqTH8iI94rHLacBQD7plbiqIoUaRfv37MmjWLW265xfM8GbCm8G7atImSkoqFff/93//NvffeG/K1ws14Wbt2Ld26daNNmzYV9nsVHwsWLGDChAm0aNGCIUOGsGHDhiprdMIYQ2ZmJq+99hpfffUVq1atqtA1Nhzbt28nKyur4fUliYmxyngnTLB6iHToAGeeCZ06wVtvWcmqe/bAsWMwe7aVLzJmDDQkkVXP8SM+9gPDPJw3FG2vrihKPaZv376cPHmSm266yZddcnIynTp1Ytu209Hn1atX891333HVVVeFtAvn+Vi6dCkTJkyosr9Lly6exIcdcgleo1sbeZujR48SGxtL69at6datG5dffjnff/99WDub5cuXA7Bjxw7PNvUGEZg1Cw4fhvXrrVbvX31lJadOnmwdj4uzPCS//S08/bTlKVmyJNorbxT4ER+fAmeKyE2hThCRG4EewCfVXJeiKEqtMXbsWO69917S0tJ821bu9/GnP/2Ju+66y7V9uhfx4RT+8eL5sEtsgwfzeU063bVrF2eeeWb58/bt2/vK/fjss88455xzfIuPY8eO+Tq/VklKgrQ06NHDmr4bimuugb/+1Xp89lmr9bsTZWWwbh188IHOq3HBj/h4GjgFvCQiT4hI+R0rIt1F5AngpcA5T9fsMhVFUWqOgQMH8tRTT0Vke/bZZ5cnnR48eJB//etf3Hzzza42PXv2ZN++fZw4caLKsdLSUlasWMG4ceOqHLPFh1tC55o1a2jXrl2FmTZek04zMzPp3r17+fP27duT5aNt+fLly7n55pt9iY/NmzfTu3dvCgoKPNvUG84/3/J8vPsuDB9uzZ0pLbU8Jk8/DZdfDm3bWgLlqaegb1944w3rHKUCfpqMbQXsYXEPATtE5KSInMRKMn0o8Hq3G2Oa2BhHRVGaCsEVLy+++CLXXnstqcHD0ByIi4ujV69ejv031q1bVz6ArjKtW7cmJibG1VMwf/78Cl4PwHPSaWXPR7t27TyLjwMHDpCdnc3ll1/uS3zs37+fI0eOMHv2bM82wZw8edJzBVCt0L+/Vdb7q1/Bv/2bNQjvJz+BHTusmTQbN1pdV1euhFdftZJbzz4btoUsFG2S+PF8YIyZA4wGPgROAHGB7URg32hjzOwaXqOiKEq9wRYfxcXFvPjii9x1112e7EaPHs3SpUur7F+8eLFjvodNuHLbdevWMWLEiAr7hgwZwvr16ykN8xe3k+fDa9hlxYoVnHfeeaSlpVFUVEROTo4nu0OHDtGrVy+efvrpsOtzYs6cOdx+++2+7WoUEcu7sW0bfPstbN4Mf/4z/OhHVoWMzYQJVm+RX/zC+rdONi/Hl/gAMMasMcZcAbQC0oAOQCtjzBXGmNU1vUBFUZT6RHp6OmUg1JdOAAAgAElEQVRlZTzzzDP069ePAQMGeLKbMmUK8+bNq7L/o48+4pJLLglpFy7vY/PmzfTv37/CvtatW5OWllYhMdaJzMzMCp6PNm3acOzYMU+i4LPPPmPMmDGICL169fLs/Th06BCXXHIJaWlpvP/++55sglm2bBn79+/3bVcrJCSAg8eqAiJw662WOJk6FT4JkRK5bRvMmWPllbz/PmzYUPPrrUf4Fh82xpgyY0yWMeawMcbb8AFFUZQGjogwePBgfv3rX3P33Xd7tjv//PNZtWpVhVyHY8eO8fXXXzNx4sSQdm7io7i4mF27dlXpqgre8j4qh12aNWtGSkoKR48eDfdxWL58eXlfkl69eoVtomaTlZVFhw4duP/++5k1a5bvBmXLli3zVZFTb7jiCvjb3yzvyK23wkcfWX1FNm2ywjVjx1oN0P7+dytPZNIkK2zTSIlIfIjIABG5VUQeFpHLgvbHiEjzmlueoihK/WPw4MG0a9eOSy+91LNNq1atGD58OEuCSjXnz5/P+PHjSUhICGnnVm67Y8cOunbtSosWLaocC1fxUlJSwr59++hSqcLDS+glLy+Pbdu2MWyY1X3Br+ejQ4cOTJs2jZycHD777DNPdgB79uyhqKiI3NxcTp486dmu3jBhAqxdCwMGWO3e27eHCy6AIUOs8M1bb8Hbb1sCZNkyeOIJePRRq+NqI8OX+BCRLiLyCfAN8CLwO+CKoFNuBU6IyAU1t0RFUZT6xU033cRLL73keZ6MTeXQy7/+9a+wAsbN8+EUcrEZOnQoX3/9dcjX3bt3Lx06dKgiXLxUvHz++ecMHTq03Nael+OFQ4cO0b59e2JjY7n33nuZNWuWJzuwvB7jx4+nQ4cOHPQxobaoqCii/JJaoVMnayLvZ59ZgiMzEx54AJKTK57Xpw+sWgULFsANN0BRUXTWW0v4mWrbFlgGTAA2An8GKrfz+xtQBlxeQ+tr8OhgOUVpfAwcOJALL7zQt92UKVOYO3cuYJXYzps3zzXfAyIXH926dWPv3r0hX3fXrl0Vkk1tvFS82PkeNpF4PgBuuOEGFixY4NmLsWzZMsaNG0d6erqv0MuMGTN44YUXPJ9fZ7RtC4mJoY+3b29V1pw8CePGwb59Vc/JybHySUaOtHJKFi9uEJ4SP56Ph7FmtjwFDDbG3Fn5BGPMMSyviPOAgyaIDpZTFMXmrLPOorCwkJ07d/L555/TqVMnOnXq5GrjVu3iJj7S0tI4ePBgyJyKysmmNl7CLsH5HnBafHjJ37BzPgASEhJISUnx3HQsUvGxf/9+PvjgA8/n1ysSE61QzFVXwYgRlhj58kv44x+tfd26Wb1Hfv1ruPpquPNOqwfJwoXRXrkroVvyVWUasAv4lXG/wzKBsS7HFUVRmiQiUh562b9/v6eckQ4dOnD8+HFOnDhRJTdk8+bNPPTQQ452SUlJiAj5+fkkV3bpUzXZ1CZc2KW0tJQvv/ySUaNGle+zZ9IcPXqUtm3bhrQ1xpCVlVWhp0lqairHjh0L22324MGDZGVlMXDgQDp27MiBAwdczw/m8OHDbNq0ifz8fJKSkjzb1RtE4MEHrX4h111nzaI57zy48kp46SUIngk0fTp8+KHVg+S55yxBUg/xO9V2bRjhAVACuHfcURRFaaLYoRcv+R4AMTExdO7cuYr3o6SkhJ07d9KnT5+Qtrb3w4nKPT5swoVdsrOziY+Pp3Xr1uX7vJbbHjt2jMTEROLj48v3nXHGGZ48H3aoJyYmxrfn48iRI3Tt2pVFixZ5tqmXTJkCBw9as2ief94SGJWGERITY3VanT/f8oK8/XZ01hoGP+LjBNA67FnQDfDWbUZRFKWJceGFF/Lpp59y6NAhzjnnHE82ThUv3377Lenp6SS65AyEEx+RhF2OHDni6N3wIj6CQy42qampZAePtQ+BHXIBIhIfN954I//617882zR4Bg+2Qi+/+AX85S/WzJlgVq6ECy+0BufZm4/Ko+riR3xsBIaJSMjkBRHJAM4Gwg8VUBRFaYKkpqYyZMgQpk6d6rlaxinp1C3fw8ZNfIRKOA0Xdjl8+LBjK3gvvT6Ck01t7LBLOCIVH4WFhRhjuOaaa/j444999xUBuOuuu8jMzPRtF3UGDYJFi6zQTN++Vqv3zEyreuaaayzPyUsvnd7OOqvOluZHfLyF5fl40amXh4jEAH8CWgBv1szyFEVRGh+PPPKI57bsELn4CFWSmp+fT35+vmOeRbiwy+HDhyP2fNhltsF4CbtkZ2eTmZnJ0KFDAXzlfNieml69epGcnOxafuxEXl4eL7zwgutU4nrNgAFWgurLL8PHH0O/ftCxI2zZAjfeWNHzUYeFEX4STl8GrgeuAc4RkY8C+weKyFNY/T56AUuwhIqiKIriQOVBcOHo2rUrn1Rqy71582YuuugiV7u0tDQOHTpUZf+uXbvo1q0bIpW7JXgLu4TyfEQadgknPlasWMHIkSOJi4sD/Hk+gsXSJZdcwkcffVQuYrzwySefUFJS4quvSL1DxCrVHTfOmrDrsz9NbeBnqm0JcDHwDtAdsEtthwP3YwmPfwCXe0hKVRRFUTzi5PnYsmVLxGGXUPkeYImBvLw8iouLHY+7hV3ClduGCruEy/lYt24dw4cPL3/epk0b8vLyKPLQeCs4R+WSSy7xnfcxf/58Wrdu7au6pl5TD4QH+J9qm2eM+REwALgPeB6r0+kjwDBjzA+MMXk1v0xFUZSmS2XxUVpayrZt2+jbt6+rXSTiIyYmhjZt2nDkyBHH46ESTlNTU4mPj3f0tNhEGnbJy8urUF0TExNDWlqaJ0EQ7KkZO3Ys27ZtC9tEzcYYw7x587j22mt9ez527drl6/ymRkSzXYwxW4wxTxtj7jTG/MwY85/GGH+BNEVRFMUTnTp14sCBA5SUlADWjJO2bds69u8IJpT4CJVsauMWegnl+YDwoZdIE04LCgqq9OdIT0/3LD5ssdS8eXMmTZpU3mU2HDt37uTkyZNMmjTJl+dj7969DBgwoGHOn6kjIp5qqyiKotQNzZs3p0ePHvzxj3/EGOMp2RQi83yAe8VLqIRTsEqC9zm1AA8Qaaltfn4+LVu2rLDPa95H5fWOHj3ac9Lp/PnzmTx5Munp6b48HwcOHODEiRN88cUXnm2aGio+FEVRGgBz585lzpw53H777axbt86T+LBFRFmlHg+hGozZuFW8hEo4BUhJScFtjlWkYZdQng8v4qNymCg1NdV1jcHMmzePyZMnu5YsO2Ffu08//dSzTVMjpPgQkdJqbCV1+SEURVEaO127dmXFihUcOHCAxx9/3JP4aNGiBcnJyRU8C6WlpezatYsePXqEtIs07OJFfEQSdnHyfHgtt60slsKt0ebkyZMsW7aMSZMmhZ2TU5msrCw6duyo4sMFN8+HVGNTj4qiKEoNk5yczD/+8Q+eeuoppkyZ4smm8l/te/bsoV27dlV+zIMJFXYxxriGXVJSUsjJcW5wXVBQgDGmigfDDru4/bDXpOfDbY3BLF++nP79+9OmTRsSExNp0aKFJzuwxMcVV1zBmjVrOHHihCebpkZIkWCMianOVpcfQlEUpakQGxvLL3/5SzIyMjydX7nR2LZt21znwUDosEtBQQGxsbEhW7q7eRXskEvl3iIJCQnExMS4/khXJ+ejsvho3bq1J8/H/PnzKwg8r9U1YImPHj16MGjQIFauXOnJpqmhIkFRFKURU7nRmBfxESrs4hZygfDio3LIxSZc6MVpGm2kCadewy52vodNx44dPed9ZGVl0b59e84//3wNvYRAxYeiKEojpnLYZfv27fTu3dvVJlTYxS3kAu4/7E6VLjbhKl6cwi5ecj7KysrIzs6OKOyyfft2zj777PLnfpJObS/PxIkTVXyEwC3hdJyIuN+hznaTROTu6i2r8SAi00TkJa/Z1YqiKDVJ5R/N6oRd3CpdwD2k4eb5CFfx4hR2adOmDQUFBa7hmuPHj9OyZcvytuxwWiC55ZiUlpZy6tQpEhISyvf5mSdjez5Gjx7N+vXryc/P92TXlHDzfCwBHnQ6ICLZIvJMCLvrgT9Uc12NBmPMh8aYn6bU4cAeRVEUm0jER214PpzKbG3cwi7GGAoKCqqIDxEJKwicurE2b96cuLg4V9FSWFhIYmJihfwUP54P28uTmJjI0KFDWbFihSe7pkS4sEvVqUMWrYHQqdKKoihKvSD4RzM/P5/s7Gy6dOniatOqVSuKi4ur/EDXZs5HqLBLUVERcXFxNGtWdQ5quLyPUK3gw4VeCgoKqiTVehUfZWVlFd5XQy/OaM6HoihKIyb4R3P79u307NmTmBj3r34RoV27dlWSTsOFXSLN+XALuzjle9iE83yEEkvhkk6dPC1ewy7Hjh0jOTmZ5s2bAyo+QqHiQ1EUpRFTWXyEC7nYOIVewoVdWrVqRV5eXpWOqhB52MUp38MmUs9HuHLbwsLCKu/p1fNh53vYjBw5ko0bN1JQUBDWtimh4kNRFKUR06ZNG3Jycjh16hTbtm0LW+liE4nnw+4BkpdXdbh5pGEXpzJbm7oMu3j1fFQWWfHx8bRp0yZkx9imiooPRVGURkxsbCxt27YlKyvLU7KpTSjPh5v4gNAhjdoKu0QqPvyGXdq0aUNubm7YSbWVPR9e3q8m2Lp1K3v37q3V96hJVHwoiqI0cuyQQU2ID7ewCzj/0BYXF5OXl0dqaqqjTXXCLpHkfHgJu1T2fMTExLhO+7VxEll1IT6eeuopZs6cWavvUZNUTR+uSJqIjPN5LK2aa1IURVFqEFt8+Mn5iCTsAs4/tFlZWbRr1y5koqub+Kgtz0e4sIuT4LFDL507dw5pGy3PR2ZmpqeOr/WFcOJjcmCrjHE5piiKotQj0tLS+Prrr0lMTKR169aebDp06MDmzZvLn586dYr8/Pyw9k5eBbeQC4TP+Qjl+UhNTXUVETUZdgFvSadZWVkVOqOC93ky1eHbb78lOzubnTt30rNnz1p9r5rALezyXTU3RVEUpR6QlpbG0qVLPXs9AAYNGsTXX39d/vzIkSOcccYZYct0nX7Y3ZJNIfKcD7u6JhTVqXZxGp7nZbicU1WPF8/H4sWL+c///E/Xc0JRVFTEkSNH+OEPf8i8efMieo26xm2qbTdjTPdIt7r8EIqiKEpo0tLSWLlypedKF4CzzjqLXbt2kZubC3gLuUBo8RGqzBZOezCcWp67eT6SkpIoKChwLO11W3Okng8vw+UiDbt89dVXPProo6xfv971PCd2795Nly5duOSSSxq++FAURVEaB2lpaRQWFvryfDRv3pwhQ4bw5ZdfAt6STSEyz0dcXBwtWrRw9GK4ldrGxMSQmJjoODvFDhM5jbaINOfDa9jFSXyEG2aXm5vLmWeeyV133eU6d8aJzMxMzjzzTCZNmsSyZcsoKiryZR8NVHwoiqI0cuwffj/iA6wGWZ9//jngrcwWnH9ow+V8QOjQSyghYJOcnOwoWo4ePRoyTBTOExEq7OKl10ek1S65ubnMmDGD/Px8/vrXv7qeW5nMzEx69OjBGWecwcCBA1m+fLkv+2ig4kNRFKWRk5ZmFSH6FR+jRo1i1apVQOj8icpEEnaB0BUvbp4PCC0+3NYbLucjUs9HUVERJ06cqOJt8So+UlNTeeaZZ3jggQd8TcL99ttvOfPMMwGYOnVqgwi9qPhQFEVp5HTs2JGEhITyHyiv2J4PY4wvz4ffsAuErnhxSziF0EmnbuKjtsIuhw8fpn379hWm4drv50V8tGrVivPOO4/x48fz5JNPup4fjB12AZgyZQpz5871bGtT1+3fVXwoiqI0clJSUsjMzCQuLs6XXXp6OklJSezYsaNaCafVCbu4JZxCaM+Hm1iKNOxii49QORmhPDxeSm1t8QHwq1/9irfeesv1/GCCxcewYcPIysriu++8F50WFxczbty4Oh2Ap+JDURSlCWCHXvwyatQoPv/882onnEYadgnn+UhOTi6vyAnGzfPRqlUr8vPzQ1bJhPJ8JCYm0qJFi5BeE6dkU/Dm+Th+/Hi5+Ojbty85OTlhu6kCGGPIzMyke3eryDQmJobJkyczf/78sLY2jz32GBkZGUyYMMGzTXVR8aEoiqKEZOTIkaxatcpz2KXyX/mlpaUcPXo0rG2osEukng838eE2AA+cp9rauCWdVkd85ObmlueKxMTEcM455/DFF1+42oAl7BITE8uFC8D48eNZuXJlWFuAJUuWMGfOHF555ZUq4aLaRMWHoiiKEhLb8xFp2CU7O5uUlJSwIR+3sEtNJ5w6rTMYp6m2Nm55H6HCS15LbYMFxLnnnutJfNiVLsF07NjRk9fk2LFj3Hjjjbzyyiue/tvWJCo+FEVRlJAMHjyY7du3s3fv3ojCLl5CLuAedonU8+H2g+qWh+H2nm5dTkN5PpKSkjhx4gQlJSUh11NZfIwcOdKz+KicSNy2bVuOHDkS1vbuu+/msssuY+rUqWHPrWnCzXZxRERigTZAfKhzjDGNqsW6iPQE7gNGAgOBrcaYgdFdlaIoSu3SokULzj77bFatWuVJfCQnJ5Ofn09paSmxsbGeKl3APewSSbVLuBwVN2+EW9glNTU1pGg5dOgQgwYNqrI/JiamPDfljDPOqHK8pKSEkydPVvC2jBgxgi+//JKysjLXlvZO4sNpKKATH330EVu2bAl7Xm3gy/MhIueKyHwgDzgA7AqxZdbwOusDA4BLgJ3A5jDnKoqiNBpGjRpFcnIyLVq0CHtubGwsLVu2LBcEXsWHW5OxSBNO27RpE9Iu0rBLQkICJ06ccDwWyvMR7v3y8vJITk6ukHPRrl072rZty9atW0N+Bgjt+QgnPk6dOkVubq4nQVkbeBYfInIesAS4EMvjkUPooXJ7a3qh9YAPjTGdjTFXA2ujvRhFUZS6YuTIkb5yAoJ/aL2U2YJz2MUYE3HC6bFjxxy9DDaRhl0iFR9u71c55GLjJe8juMGYTatWrTh58qRrm3W7A2xsbKzr69cWfsIujwMtgL8AjxpjwmezNCKMMc41WYqiKI2ciy66yNG7EIpg8eEn56Ny2KW4uJjY2FjXZFU38ZGamuq6RqewS2lpKcXFxcTHO2cVhBMfoYSWm+cjnPiYPn16qI/hmHAqIuV5H506dXK081q9VFv4CbuMALYYY26vDeEhIn1E5Oci8qaIbBWRMhExInK1B9sfi8hnInJcRPJFZI2I3CEimlCrKIpSTVJSUrjlllt8nR8sPiINu4TzeoCz+CgtLQ05VM5pjcHYDcZClZ2GEh/husBGKj7s2TpOnDhxgqNHj5Kenl7lWLt27VyTTrOysqIqPvx4PgT4prYWAvwM+LlfIxF5DpgBFAGLgVPABcCzwAUicrV6LRRFUeqOSMIuKSkp5OXlVUiwDJdsCs4Jp8ePHyc5Odk1UTMlJSWi6ppQ4iMnJ6e8CVmo9wuV4BrcYCyYIUOGsH379pBr2r17N127dnUMnYRLOrVbwUcLP56BDUBkLfK8sRGYBVwL9ASWhjMQkauwhMdB4CxjzKXGmCuBXsAW4ErgLge7FBHp62FzzjhSFEVRQhKc3+A17BIbG0tSUlIF70A4IQDOno9wIRd7jU5iwK3SBUKLj3CfM5znw8lL06JFCwYNGsRXX33laOeU72ETrty2IYVd/gcYKyKDa2MhxpiXjTEPGGPeMcZ869Hs4cDjg8aYHUGvdQjLkwLwkEP45UoscRJuGxHRh1EURWnCRBJ2ASv0Epz34cXz4VTt4kV8hBIDbpUuEFp8hAtjRBJ2AfekU6dKFxsvno8GIT6MMW8DTwALReRnItKl9pYVHhHpBAwDioG/VT5ujFkK7Mfy1oysdGy2MUY8bEvq4KMoiqI0KuwfWmOMawVIZSqXiNam58NNfETi+cjLy6N169a+3w+qJz4qJ5vahPN8RDvnw0+pbSnwCHAGVj7FLhEpDbGFbuNWcwwJPG4yxjinHsPqSucqiqIotYyd35Cbm0tcXJyrJyGY9PT0Ct1DvXo+8vLyKkyaPXbsmKsQgJoPu4SahBv8fpGKjy+//NLxWPBAuco0ppwP8bHVRZWJfcX3uJxjd1l1/q/jAxFJFJGrA9U3XYFW9nMR6RrC5qeByps1XrrNKYqiNAbsv/L9hFzAEh/ff/99+fNwDcbAyosQEU6ePFm+Lxphl8LCQhISEny/H7iLj4yMjJBzWo4cORJSQIRrNBbtsIvnahdjTH0rW7XvyAKXc/IDj8k18H7tqRresZ9PB2ZXNjDGvAS8BDB8+HBT+biiKEpjpKbEh5dSWzhd8WL35ohG2CWc5yNS8REfH09paSknT56sUkkTKlEVwpfaRlt81DdBUW8xxux2yQ2ZHe31KYqi1BfsH1qvZbY2HTt2rCI+wnk+oGreR05OTp1Xu3gRH6FKbd3Eh4iUlyH7savvno+GLD5sr4abLLbv2qr/1RRFUZRaIdjz4SevwCns4sXzUbnixYvno2XLlpw8eZJTp05V2F+dsEtteD7A8uw4dZgN1R8E3D0fJSUl5OTkuM6+qW0asvjYHXh0zLcI0LnSuXWOiEwTkZdC3XSKoiiNjeqEXfwmnEJVz4cX8SEijj/q0Qi7uIkIsMRHZduysjLy8/NJTnbOKmjTpg3Z2dmUlVXtsXn06FFSU1OjNtcFXMSHiGSKyLci0j3oudfNa5+O6vB14HGAiITK8jmn0rl1jjHmQ2PMT93a/CqKojQmIg27VMfz4Vd8gHMFSm2GXfw2GbMJJZISEhJCCoi4uDiSkpIcQz3RDrmAu+ejW2CLq/Tc61arGGP2Yk2XbQ78sPJxERkPdMLqfrqqttejKIqiWNg/6n7DLm3atCEvL6+8csWr56Nyi3Wv4sMpDyPSsMuJEydc7ZKSkhzDPBBZ2CWcYIHQ5bb1XXx0B84EMoOee92cW67VPE8GHp8SkZ72ThFpDzwfePp7ne2iKIpSdyQnJ1NQUMD333/vy/MRExNDWlpaeejFS6mt/X6Rio/K3ohw3pbmzZtTUlJCaWlphf3hPB+hwjwQXnykpKQ4ig83GwjdaMxP47faImSprTFmj9vzmkZEhnJaMAD0Dzz+p4jcF7SOkUH/fldE/ozVSn2DiCzi9GC5VsA/sBqiKYqiKHVETEwMSUlJ7Ny505f4gNOhl27dunkuta1J8REu7CIi5d6PYGEUTnwEv19womdpaWnY93QSLeHyRKB+ez78TLWtbVoB5zrs7+VmZIyZISLLgTuA8UAssBV4Ffizej0URVHqnpSUFPbu3ev7L+zgvA8/Caf2j3NZWRm5ublhO5yCc7ltuLALEFJ8uDUZA+cwj/0Z3SbwOiWcevV8qPgIQ2COikRo+xbwVo0uqIYQkWnAtJ49e4Y9V1EUpbGQkpLCoUOHwuYlVCa414efhFO7C2hubi4tW7b0VMkRSdgFnPM+/Hg+gvEiIkLlfHjxfDiFXQ4fPkz//v0dLOqOhlxq2yDQahdFUZoiKSkpdOjQARF/f1MGl9tGUmrrNeRir9Fv2AXqj/gI97tSnz0fKj4URVGUGiclJSWipMbgsItXz0dwtYsf8VHdsEswtSk+nBJOveZ81NeEUxUfiqIoSo1jez78EmnOR015Pmoz7OLUV8SLiKhO2KW+ej7qTc6HoiiK0nhISUkpH/Tmh0g8H8EJpw0x7BIufBIq4bRjx46udqFKbeuD+FDPh6IoilLjpKamVsvzUVxcjDGG5s2bh7WJ1PPhlBMRadglXJMxqPucDyfPR2lpKceOHYvqXBfw4fkQkfeBg8aYGbW4nkaHVrsoitIUufvuu30nm4IlWk6cOMHhw4dJSkry9BqRio9OnTqxf//+CvsiCbsYYzyX2m7btq3CvtqsdnESV9nZ2bRu3ZpmzaIb+PDj+bgEiK5UaoBotYuiKE2RtLS0iDwfIkJ6ejo7d+70FHKByBNOMzIy2L9/P8YYwPIKFBcXhw0XVRYfxcXFNGvWLOwPel0nnCYlJZU3MbPJysqKesgF/ImP/Zye86IoiqIotULHjh3Zvn27p2RTiNzzkZiYSGJiIkePHgVO522E87ZUFh9evB5Q930+RKRK3kd9yPcAf+LjX8BYEXEPaimKoihKNUhPT2fHjh2ePR8tW7akqKioPJ/Bq/gAK/Syb98+wHuCq5P4CJfvAZGLj/j4eEpKSiguLvZlB1XLbRui+PgNkAu8KyKda2c5iqIoSlMnPT3dl+dDRGjZsiV5eXnVEh9eKl0gcvHhVGrr1YNR2fvhJeEUqiadHj58OOo9PsBfqe1/AZuAS4EdIrIW2ANUnS0MxhhzSw2sT1EURWlipKens2jRIrp27erZxg695OTkVMvz4UVE1LXnA06HXtq2bQt4y/mAquW29SXnw4/4uAkwgX83B0YGNicMoOIDrXZRFEXxi51wOmDAAM82tvg4duyYp6FyNpGGXew8EfAnPip3VPUqIoKTTsvKysjPzyc5OTmsnZPno2/fvmHtahs/4mN6ra2iEWOM+RD4cPjw4bdFey2KoigNgfT0dIqLiz2HXeB0xUskYZelS5cCkYddvPT4ACvB9dSpUxQXF5f3L/EaPgkOuxQUFJCQkOBpeJ5TwunYsWPD2tU2nsWHMeb12lyIoiiKooAlPgDPCadwustpTk5OtTwftRl2EZHy0Isd+vATdrFDNl5twPJ8fP311+XP60vOh3Y4VRRFUeoVdttwP56P5ORkvv/+exISEoiL894VIiMjo86qXaBq3offnA/bxmvvqMqNxhpitUs5ItJcREaJyNWBbZSIhO+BqyiKoihhSElJISEhwbfn47vvvvMVcoHTng+7S2ldig87d8OLyAoWH17zRMBq9rZ27VpWrFiBMaZBJpwiInFYJbd3AJUzXfJF5BngcWPMqZpZnqIoitLUsLuc+vV8RCI+WrVqRUxMDMePH69W2MVLkzGwxM7OnTsZNmxY+VjXun0AABphSURBVPt5yd0ITjj1E3YZPXo0DzzwADfeeCNt27YlOzs76nNdwIfnQ0RisRqNPQS0Ag4CKwPbQSwx8jDwr8C5iqIoihIR6enpvjwfrVq1ikh8wGnvR12EXaZNm8Y//vEPwJ+IqBx28WoXExPDjBkz2LZtGw8++CB33323r7BUbeEn7PJT4EJgBzDVGJNhjBkb2DKAqcB2YBKglR2KoihKxAwaNIhOnTp5Pj9SzwecFh91EXa5/PLLmTt3LkVFRb7FR3DCqd95YbGxsVx55ZU8/fTTvuxqCz/i4wagALjAGDO/8sHAvklAIXBjzSyv4SMi00TkpcqNZRRFUZTQPPfcc0ydOtXz+TUhPryGXRITEyMWHx06dOCss85i8eLFdeL5qK/4ER/9gU+NMftDnRA49mngXAWdaqsoilIXJCcnU1hYGJWwi9c+HzY/+MEP+Pvf/+4rcTTShNP6ih/xEYfl1QhHITr9VlEURalD7G6f9T3sAnDllVfywQcfkJ2d7Tl8EmnCaX3Fj/jYgzXVNmRJbeDY2MC5iqIoilIn1IT48FPtUlh4+m9xv+Kja9eudO3alY8//ljDLh74J9AReF1EqrSPE5EU4FUgDfigZpanKIqiKOGxf4zre7WLzQ9+8APee++9Oks4rW/4ER8zgX3ANcBuEXlDRH4rIo+LyBtY3o7rAufMrPmlKoqiKIozdRl2iY+P5+TJkxhjzVqNRHxceeWVFBYWNtmcDz+zXY6KyPnAW8Bw4HpOT7mVwONq4MfGmOwaXaWiKIqiuFAd8ZGamkpxcTGHDh3yJCJiYmJo3rw5RUVF5SEYr03GbPr160ffvn2bbNjFV4dTY8xOYISIjAHGAxmBQ/uBpcaY5TW8PkVRFEUJS3XEh4jQqVMnMjMzPTc2s0Mvtvjw6/kAeOSRR+jevbvn9yspKaG4uLhpiQ8RaQUYY0xeQGSo0FAURVHqBdURH2CFXnbs2OFZRATnfUQqPq6//nrP54oIrVq1Ii8vr1GIDz85HznAotpaiKIoiqJESlxcHJdddlm1xAfg2/MBkYsPv9hJp00t4TQPq7W64gPtcKooilI3fPDBBxHPLamO+PDbZCxSWrVqRU5ODnl5eeWenoaKH/GxBfDeaF8BtMOpoihKQ6BTp06ICPHx8Z7Oj5bn48CBAyQkJHiahFuf8SM+/gKMEZFhtbUYRVEURYkGnTp1IjExEREJfzKnxYcxJqJql0hISUlh3759DT7fA3yID2PMK8DzwEIReVBEeotIi9pbmqIoiqLUDZ06dfIccoHT4uPkyZM0b968TjwRrVq1Yt++fQ0+3wP8VbuUBj39z8AWSiUaY4yvMl5FURRFiRZ9+/blF7/4hefzbfFRVyEXsMTH3r17m5bnA6uRmNfNz+sqiqIoSlRJTEzk4Ycf9nx+sPioi5ALNFHxYYyJ8bPV5qIVRVEUJZpEy/PR5HI+FEVRFEWxiIb4aJIJpyKSLSLLanMxiqIoitIQsMVHXfX4AMvzUVhY2CgSTv14PpoDe2trIYqiKIrSUIhW2CX4sSHjR3zsBNrW1kIURVEUpaGg4qN6+BEfbwLjRMTbCD5FURRFaaSo+KgefsTHH4D5wCcicq02GFMURVGaKtFKOIXGIT78NALbgdXDoyvwFoCIZAEnHM41xpge1V9ew0dEpgHTevbsGe2lKIqiKDVEtPp8AI0i4dSP+OgW9G+7rWmHEOeaiFbTCDHGfAh8OHz48NuivRZFURSlZtCwS/XwIz4010NRFEVRiI74sKfZNinxYYzZU5sLURRFUZSGQrD4SE1NrZP3FBFatWrVKMSHdjhVFEVRFJ9Eo8kYwAcffECXLl3q7P1qi5DiQ0TGiUhvvy8oIpNE5O7qLUtRFEVR6i/RCLsAjB07NtQ0+QaFm+djCfCg04FAq/VnQthdj1WWqyiKoiiNkmiJj8ZCuLBLKHnVGmhZw2tRFEVRlAaBio/qoTkfiqIoiuITFR/VQ8WHoiiKovgkGk3GGhMqPhRFURTFJ+r5qB4qPhRFURTFJ3FxcQDk5uaq+IgAFR+KoiiKEgEJCQkcPXpUxUcEhOtwmiYi43weS6vmmhRFURSl3pOQkMDhw4dVfERAOPExObBVxrgcUxRFUZRGj51oquLDP27i4zt0Oq2iKIqiOGKLD6128U9I8WGM6VaH61AURVGUBkVCQgLx8fHExGj6pF/0iimKoihKBCQkJGjIJUJUfNQyIjJNRF46fvx4tJeiKIqi1CAJCQkacokQFR+1jDHmQ2PMT1NSUqK9FEVRFKUGUc9H5Kj4UBRFUZQIUPEROSo+FEVRFCUCVHxEjooPRVEURYkAFR+Ro+JDURRFUSIgMTFRxUeEqPhQFEVRlAhQz0fkqPhQFEVRlAhQ8RE5Kj4URVEUJQK0z0fkhBsspyiKoiiKA1dffTW5ubnRXkaDRMWHoiiKokRAt27dor2EBouGXRRFURRFqVNUfCiKoiiKUqeo+FAURVEUpU5R8aEoiqIoSp2i4kNRFEVRlDpFxYeiKIqiKHWKig9FURRFUeoUFR+KoiiKotQpKj4URVEURalTVHwoiqIoilKnqPhQFEVRFKVOUfGhKIqiKEqdouJDURRFUZQ6RYwx0V5Dk0BEDgN7or2OekRb4Ei0F9FA0WsXOXrtIkevXfVoitevqzGmndMBFR9KVBCRNcaY4dFeR0NEr13k6LWLHL121UOvX0U07KIoiqIoSp2i4kNRFEVRlDpFxYcSLV6K9gIaMHrtIkevXeTotaseev2C0JwPRVEURVHqFPV8KIqiKIpSp6j4UKqNiMSJyAUi8t8iskZEckWkWET2i8i7IjIhhN1sETEu29Y6/ihRIdLrICIxInJH4Jrni8hxEflMRK6r688QLURkQphrF7x1CbJrMveeiPQRkZ+LyJsislVEygKf8WoPtj8O3FPHA/fYmsA95/rbISJTRGSBiGSLSKGIbBSR/yciLWruk9U+fq9dpN+FAdsmc08CNIv2ApRGwXhgYeDfB4FlQAHQH7gKuEpE/sMY81gI+xXATof9B2p6ofUcz9dBRGKB94HLgFxgAdACuAB4S0RGGmN+XotrrS8cBF53OT4C6Ad8C+x1ON4U7r2fAb7vBRF5DpgBFAGLgVNY99ezwAUicrUxpszB7gHgKaAUWAIcw/qO+B1wqYhcYIwpjOyj1Dl+r111vwuhadyTYIzRTbdqbcD5wLvAWIdj1wIlgAEmVjo2O7D/pmh/hihfP9/XAbg3YLMJ6BC0vxfWl54BLo/2Z4v2BmwOXItfVfeaN9QNuBWYCVwD9MASBAa42sXmqsA5B4BeQfs7BF3TnzvYDQfKsH5wzw3anwQsDdj9IdrXpLauXaTfhU3tnjTGaNhFqT7GmE+MMVcbYz5zOPY21v9UAP9WpwtrpAS8Hg8Env7MGHPIPmaM2QE8GHj6/+p6bfUJERmF5fUo5fQ92OQwxrxsjHnAGPOOMeZbj2YPBx4fDNxT9msdwvIGADzkEH55CBDgKWPMF0F2+cB0LGEyQ0RaR/JZ6hq/106/C72j4kOpC74OPHaK6ioaD6OA9sA+Y8wyh+N/w3KRnyMiGXW6svrFzYHHecaY76O6kgaEiHQChgHFWPdSBYwxS4H9QBowMsiuOTA18PR/HewygVVAc+DiGl94w0C/CwNozodSF/QKPIaKWU4UkbOwXLOHgOXAQuMQT27keL0OQwKPq51exBhTKCKbgMGBbX8trbfeIiKJWG5ugFdcTtV7ryr2/bXJGHMixDmrgYzAuSsD+/oAiUC2i5dgNXBewO6tmllugyLcdyE0kXtSxYdSq4hIGnBT4Ol7IU67wWHfZhH5kTFmQ60srH7i9Tp0Dzy6DSr8Dkt4dHc5pzHzQyAZyAL+5XKe3ntV8Xp/BZ8b/O/vCI2TXZPA43chNJF7UsMuSq0hIs2AN4EUYLEx5sNKp6wD7sbKBE8C0oFLgfWBfYuaSNjA73VICjwWuLxmfuAxuWaX2mCwQy5zjDGnHI7rvReaSO8vvS9D4OG7EJrYPameD6U2eQGrNG8vDglWxpg/VtpVAHwkIguxMuNHYiW+3VnL64wqeh1qFhHpCYwLPH3V6Ry95kod4/pdCE3vnlTPh1IriMj/ALdglX1eYIw56NXWGFMMPBl42lQT09yug/3XY0sXc/uv0LyaXlcDwPZ6rDLGbPFjqPceEPn9pfelA9X5LoTGe0+q+FBqHBH5byz34WGs/9l2hDFxwu7m12jcjBHidB12Bx67uth1rnRukyBQhmzHzN0STd1o6vfe7sCj3/vL/ncXQtOk7ssa+i6ERnhPqvhQahQRmQn8EjgKTDLGbI7wpdoEHvNdz2r8OF2HtYHHc5wMApUeAwNPv3Y6pxEzGesLOh94O8LXaOr3nn3PDBCRhBDnnFPpXLB+IE8AZ4hIjxB2IxzsGiU1+F0IjfCeVPGh1Bgi8nvgfqx2yhcaY76pxstdE3h0LCdtQjhdh1VYf0l1EpFxVU34IRAHrDbGNLUy21sCj+8EGltFQpO+94wxe7EEbnOse6kCIjIeq0/FQax70bYrBuYGnl7vYHcmVo+aYuCjGl94PaKGvwuhMd6T0W6xqlvj2LDmNhis/9mGeTh/MFYmd2yl/c2wWoeXBl5vcrQ/Wy1ft4iuA3Afp9urtw/a3wurh0CTa68OtMX6YTPA6Jq+5o1lw1t79as53V69Z9D+9oF7LlR79XM43V59RND+pKD3bTDt1SO8dr6+CwM2Te6elMAHVJSIEZHLgA8CT9dgfTk5sdUY8/uAzRXA34FsrL+ysrBci4OwSszKgIeMMbNqcelRJ9LrEMht+DswDWuw3GIsb8ckIB54xhhzdx19jHqBiNwDPI11n/VzOa9J3XsiMhR4PmhXf6xS1x1Y1wAAY8zISnbPY7VSLwIWcXqwXCvgH1g/wKUO7xc8WO4TIAdr4Fp74AvgfNNABsv5vXaRfBcG7JrUPQmo50O36m9YjXOMh21JkE134I9Y3RH3Y33BncD6n/pVPP7F0NC36lwHrLDpncBXWH9p5mJ1Q/xxtD9XlK7lN4H77P7auuYNcQMmePn/M4Ttj7GmrOYG7rGvgDuAmDDvOQVruuuxwLXdhDVrqEW0r0dtXrtIvgub4j1pjHo+FEVRFEWpYzThVFEURVGUOkXFh6IoiqIodYqKD0VRFEVR6hQVH4qiKIqi1CkqPhRFURRFqVNUfCiKoiiKUqeo+FAURVEUpU5R8aEoNYCI9BWRF0Rkm4gUisgJEflORFaKyH+LyIUONrtFxIhIt7pfce0gIreKyFciUhD4bEZEWoexmRB0rtu2u44+RqNCREaKyPMislFEjonIKRHJFpHVIvKMiJxfjdeeHfhvc5NPu98E7H4T6XsrDZtm0V6AojR0RORaYA7WIK79WPMfjgHtgKFYw7TGY3V8bLSIyKXAX7C6My7kdPvpYo8vUQC863L8SOSra3qISDLwCqeHw+3D6oCbC7TGat19J3CniCw3xoyNykKVJomKD0WpBiKShtX+uDlwD9ZMldKg4zHAmMBWmQuw5rE0lsmz9o/c3caYv0Rgf8QYc1MNrqfJIiItsATgucBmYIYxZqnDeWdjjX2fGuFbPQz8HmsAnaJ4RsWHolSPS4FEYJUx5o+VDxpjyoBlga3ysW9rf3l1SufA446orkIBeBxLeOzEmvB73OkkY8x64EYRGRHJmxhjDqDCQ4kAzflQlOrRPvCY5dfQKecjKBbuK/dBRNqIyO9EZIOI5AdyLtaKyD0iEhfB2uJE5E4R+UJEcgM5LFtE5Pci0qbSubNFxAATA7s+DVrrb/y+t481lucNiEgHEXlRRPaJyEkR2RVYa7yL/bki8teATbGIHBaRf4qIk5cK+zMF/n1L0LWpkNciIt1F5E0RyQpct00icp+IxFb+by4iSSJyXERKRKSTy1q/Cthd7OG6pGANfwO4J5TwCMYY86XD65SvVUSuEJFPAzkjRkQGB84JmfMRuIfuE5HNIlIkIgdF5A35/+2dfczVZRnHP18Qg+RlERRC5oMDG06sDNNwJKKRQAm4XrQi2JhNWFZLTOemsNK12CIJ3zLNR2Oa2ZxNELFEbAamppkvqBQh4DNXxnhL2ECv/rjuHxwOv995ec7h4APXZ/vt3nO//e7f79zPua9z3dd13dLx1cYTHP6E5iMIGmNDSs+RdLKZvdhgf38D7iwo+wTwcfyo8r1IGgk8jB+9vQm3OemG//JdAEySNNHMarK9SAv2MvxEz7eBx1I6BrgCuFDSODNbl5o8kdLzgA8Dy4E3S57nYHMcftqq8FNB++LbXFfgR6CfX95A0mVAdjz5s8Bq4CPAJPx9XVK0dSRpETAbP+11CXAiflIpkk4GHgf643NjBW5fcS1wgHbBzHZIugP4LvAt4Jqc+52B2w6twz/napwN9MZtbh6qoX41LsNtQ57C58Vx+BHvhaTtxvtxzeAu/D1sx7caJwBLmzCuoCtzqI/VjSuurnwBfXCbDQN241+qPwDOBfpVabs+tWur4T4nAVtwwWNKSX4vfFEy4ErgqJKy/vi+vwHz6nim+anNGmBI2b1+l8pW57RbmcrG1vkOx6Z26+tsN499R5T/Eji6pGwEvtgZcGZZuwkp/w3g9LKyM4GtuJHsiWVl2b22AJ/OGY+A51Kd24EeJWUfAzpK+mgrKRuOL+YdpW1Kyu9KbebU+F5+lOr/scG5nc3P3cCkgjrtqc6MsvxLU/4mYFhJfs+SOVTXvIzr8LoO+QDiiqurX2mhe7rkCzW73sF/HX+1oF1NwgcwqKTud8rKZqX8ewvaDk4L6X8A1fAsvUoW7c/llA+osKg3KnxUu64vazcv5W8AeuX0e1Mqv6Ys/y8pf0LBeOak8p+W5WfjuKqg3WdT+WagT075rJI+2srKHkr5X8l537uAnUD/Gt/nzamvewrKT01CQ/k1qmB+3lrhXu3kCx//zMtPZR/CNWkhfBzBV2y7BEGDmNka4DRJo3G1/en4F/wHgNHAaEkTrBOeHJKOwVX7xwMLzeznZVUyG4D7CsbWIWktrjkZDrxW5ZafwlX2HWZ2gGuwmb0l6UHgIlxo+HONj1IL1VxtD7BLSKwws505+a+kdHCWIWkAvv2xDXikoL/MK+QzBeX3F+SfldIlZrY9p/xuXCDKYxGukZkN/LYkfybwPqDdzDbnNewEHwWm5+QvAZ7JyS963lyS7coJuDbn7vJyM/u3pEeAyfX0GxxehPARBE3CzFbhNgfZnvcZwFxgPO5RsNTMcoWEPCR1B+7BBYIHcJfIck5I6X2SqnU5kOrCx5CU/qtCnczWY0iFOp2hs662Gwryt6W01Oh0aEr7AnuqvLOBBfmvF+QPqVRuZlslbQX65RQ/jHsJnSXpJDN7Oc2hS1L5jZUGWkYWDyV3/Gb2AL5FBICklewTnPIoet4iMsPZDiu2M1pfZ5/BYUYIH0FwEDB3sV2VvBOewjUhUyjQUBRwPfBFfJvga6nPcrqndCnVg3D9t457Wx11DzUVjR/LyN7XVlygq0Tu+yzQsuxXpUJZ7ljNzCTdACzEtR/fxrVabcDTZpankSji2ZSeKqlbwbyph2rPGwR1E8JHEBxEzOwdSStw4aPol/QBSPo+vgCtA86vsOBtxI0ZbzazZngQZAHPhlaok2lbumJwtI0p3d1JLUslOlKa60oqqS++FVdEO3AdME3SlbgQAvVpPcC9k/6X7jUR305pJdm8GCzp6ALtR1sLxxO8B4k4H0HQAKphrwPfYwe3/K+lzwtwN9DNwEQzqxRDZFlKv1yhTj38FdgBDJF0Ts7YPohrY8ANTLsUZvYG8AIwQNLYJnefBZL7gqTeOeUXVRnbNtzNui/ucvt5XFt1bz2DMLMt7LMtWZDifrQMM9uIb9t1Ay4sL5c0EDjgrKPgyCKEjyBojNmS7lBOhEhJR0m6GPhSyqq6iKSYDotx98YpZvZqlSa34r/mp6dgW+/P6XOopG9Uuzfs3VK4Jf25UNKxJf30xD0pegNPmlkzjU1bydUpXSxpfHlhCgY2Ln0W9fA4Ltj0xxf9vZplScPJieGRww34ts3l+Pfzr8xsV53jIN3rGdzIeJWkXJsOSUMpMchtIplh9LWSMk1ZFvb9RjwqcHAEE9suQdAYPYAZwAxJb+JBtTbjC9Ap7Ptin29my2vo7zrc3fUfwExJM3PqvGVmc2BvkKpJuGp9LnCppL/jWwB9cDfgYbjdyOIan+lqYBTuzbI2bRvtxIOMHYsbeH69xr7qYYCk9ip1ZpvZ243cxMx+n4KMzQeWS3oNeBXX+AwCPokHBpsFPFlHvyZpGq4RuhgYL2l16uts/DM6DdeE5Rpimtkrkv6AGym/iwt7nXnGXUlz1Q5MBVZK2oTPzy34HBuOHy4n3E7k+c7cq4BF+DNMAF5Kc2gHHvytJx675JtNvF/QxQjhIwga43bccv9c3IVzJB7HYDe+zXIncJuZPVHUQRmZQeSwdOXxOh6LAgAze0HSKbiNwGTcvmQ0HttjI+4xU8mFdT/SwjUe97SYhi+cPfDn/DUuSNVjvForx5DvAlrK9/AYEQ1hZgskPYoHwxqLbwPswc8p+RPwIHW6mKZ+n5c0CvghvvhOxbcg5gE/wz1w3mXfib95ZMLHMjOr5HVUbSzbgAuSC/h0XHgcg7/n7Wlcv8CNoB8zs6YZGSdbp8m4h9YM/P9jK/AocBXVP+fgMEdNnG9BEARBAZLG4ILNi2Y2skK95/BQ+hPNbFlRvSDoyoTNRxAEQZNIB8WNyMkfgdvngG+FFLWfigsea6jtHJcg6JLEtksQBEHzGAS8nKLKrsXtHNrwQHHd8QPW9otSmzyIfoLbCWURay9v5jZIELzXiG2XIAiCJpFiecwFxuGnv/bDY268BPwGuMXMdpe1acPtL/bghsY/NrO7WjfqIGg9IXwEQRAEQdBSwuYjCIIgCIKWEsJHEARBEAQtJYSPIAiCIAhaSggfQRAEQRC0lBA+giAIgiBoKSF8BEEQBEHQUv4PDKwaw8blwn4AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_enum), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_enum_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_num_vs_N_grid_RT_Fermi_function_integrated.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the two DOS definitions \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(n_egrids, np.abs(ra_eband), linestyle='-', linewidth=1, color='red', label='Gaussian DOS')\n", - "ax.plot(n_egrids, np.abs(ra_eband_M1), linestyle='-', linewidth=1, color='black', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_band_vs_N_grid_RT_Fermi_function_integrated.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*0.79255\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth = dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "print(ewidth)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "10e-3/Ry2eV" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth*Ry2eV" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dos_qe[: , 0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe[: , 0][1]-dos_qe[: , 0][0])*0.5\n", - "print(ewidth)\n", - "ra_sigma = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum = np.zeros(len(ra_sigma))\n", - "ra_eband = np.zeros(len(ra_sigma))\n", - "ra_en = np.linspace(dos_qe[0, 0], dos_qe[-1, 0], int((dos_qe[-1, 0]-dos_qe[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum[i] = gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[i])\n", - " # Generate band energy\n", - " ra_eband[i] = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=ra_sigma[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum)\n", - "print(ra_eband)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.plot(ra_sigma, ra_enum, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref/Ry2eV, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.scatter(ra_sigma, ra_eband, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(np.min(abs(ra_eband-eband_ref/Ry2eV))/256)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(4*ra_sigma[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate electron number \n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*0.79255\n", - "gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Error in band energy compared to QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By adjusting the width of the Gaussian smearing we achieved the desired accuracy in the band energy, here < 1 meV.\n", - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, we can also increase the smearing width and also obtain an accurate band energy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]\n", - "emax = dos_qe[: , 0][-1]\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*29.177\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also generate a different energy grid. However, it the integral quickly converges with respect to the number of grid points. We can increase the range of the enegy grid to make sure the DOS decays to zero at the limits." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*29.908\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check for another snapshot.\n", - "The band energy from the QE output of snapshot 1 is:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe_01 = 739.08601067+4.18224128-553.98606038\n", - "print(eband_qe_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth_01=dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0]\n", - "print(ewidth_01)\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "ra_en_01 = np.linspace(emin, emax, int(len(dos_qe_01[: , 0])))\n", - "ra_sigma_01 = np.linspace(20*ewidth_01, ewidth_01, 101)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "for i in range(len(ra_sigma)):\n", - " ra_en_01 = dos_qe[: , 0]\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enum(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_eband(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(768, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_enum_01, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(eband_qe_01, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_eband_01, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, 2*int(len(dos_qe_01[: , 0])))\n", - "sigma_mod = sigma_qe*22.90#22.882\n", - "eband_01 = gen_eband(k_weights_qe_01, ra_en , eigs_qe_01, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband_01))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error_01 = eband_01-eband_qe_01\n", - "print(\"Error in Rydberg\", eband_error_01)\n", - "print(\"Error in eV\", eband_error_01*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_01[: , 0], dos_qe_01[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Perform search over smearing width using sp.optimize library. But this requires adapting the definitions of the functions above.\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm11.ipynb b/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm11.ipynb deleted file mode 100644 index 5c849709d..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm11.ipynb +++ /dev/null @@ -1,2406 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Attila Cangi, 14.02.2020 \\\n", - "Normand Modine, 01.04.2020" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "from scipy.optimize import root_scalar\n", - "from scipy.optimize import bisect\n", - "from scipy.optimize import toms748\n", - "from scipy.special import spence\n", - "import mpmath as mp\n", - "import matplotlib.pyplot as plt\n", - "from ase import Atoms\n", - "from ase.io import read\n", - "from functools import partial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Boltzmann's constant\n", - "kB = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Conversion factor from Bohr to Angstroms\n", - "Br2AA = 0.52917721\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032\n", - "\n", - "# Read and analyze QE calculated LDOS for snapshot 2\n", - "read_QE_LDOS = True\n", - "\n", - "# Read and analyze Machine Learned LDOS for snapshot 2\n", - "read_ML_LDOS = False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the relevant results of each Density-Functional-Theory calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the relevant results of a DFT calculation read from a file\n", - "class DFT_results:\n", - " def __init__(self, out_file):\n", - " # input:\n", - " ## out_file: path to the output file from a DFT run using a code that ase.io.read can read\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## out_file: the DFT output file used to construct the object\n", - " ## eigs: the Kohn-Sham eigenvalues\n", - " ### eigs rows: band index, row i: eigs[i , :]\n", - " ### eigs cols: k points, col j: eigs[: , j]\n", - " ## kpoints: the kpoints used in the calculation\n", - " ## kweights: the kweights for the kpoints used in the calculation\n", - " ## fermi_energy: the Fermi energy printed in the output file\n", - " ### note that the Fermi energy is not printed to enought digits to give an accurate number of electrons\n", - " \n", - " atoms = read(filename=out_file)\n", - " self.out_file = out_file\n", - " self.eigs = np.transpose(atoms.get_calculator().band_structure().energies[0,:,:])\n", - " self.kpoints = atoms.get_calculator().get_ibz_k_points()\n", - " self.kweights = atoms.get_calculator().get_k_point_weights()\n", - " self.fermi_energy = atoms.get_calculator().get_fermi_level()\n", - " self.volume = atoms.get_volume()\n", - " # I'd rather not do the following \"grep\" type search, but I can't find a ASE command to get n_electrons\n", - " with open(out_file) as out:\n", - " for line in out:\n", - " if \"number of electrons =\" in line:\n", - " self.n_electrons = np.float64(line.split('=')[1])\n", - " break" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the results of a Density-of-State calculation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the DOS on a grid of E values using its naive definition\n", - "$$ D(E) = \\sum_i \\sum_k w_k\\, \\delta(E-\\epsilon_{ik})$$\n", - "where $i$ labels the band and $k$ the k point. The $\\delta$-functions appearing in this definition are represented on a grid by the function parameter delta_f." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the results of a Density-of-States calculation\n", - "class DOS:\n", - " def __init__(self, dft, e_grid, dos):\n", - " # You probably should not call this constructer directly.\n", - " # Instead you should call one of the factory methods:\n", - " ## DOS.from_calculation(dft, e_grid, delta_f)\n", - " ## DOS.from_dos_file(dft, file)\n", - " ## DOS.from_ldos_file(dft,file)\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## dft: the DFT_results instance used to generate the DOS\n", - " ## e_grid: the array of energy values at which the DOS is evauated\n", - " ## dos: the DOS evaluated at the energies in e_grid\n", - " \n", - " self.dft = dft\n", - " self.e_grid = e_grid\n", - " self.dos = dos\n", - " \n", - " @classmethod\n", - " def from_calculation(cls, dft, e_grid, delta_f):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which to evaluate the DOS\n", - " ## delta_f: a function that represents a delta function on a grid\n", - " \n", - " dos_per_band = delta_f(e_grid,dft.eigs)\n", - " dos_per_band = dft.kweights[np.newaxis,:,np.newaxis]*dos_per_band\n", - " dos = np.sum(dos_per_band,axis=(0,1))\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_dos_file(cls, dft, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## file: a file containing an energy grid and a dos as columns\n", - " ## The first line of this file is considered a comment and skipped.\n", - " \n", - " data = np.loadtxt(file, skiprows=1)\n", - " e_grid = data[:,0]\n", - " dos = data[:,1]\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_ldos_file(cls, dft, e_grid, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which the LDOS has been evaluated\n", - " ## file: a file containing LDOS results in numpy format\n", - " \n", - " ldos = np.load(file)\n", - " ldos = ldos / Ry2eV # Quantum Espresso calculates LDOS per Ry. We use per eV units.\n", - " if ldos.shape[3] != e_grid.shape[0]:\n", - " raise ValueError('Size of e_grid does not match length of 4th axis of LDOS')\n", - " cell_volume = dft.volume/(ldos.shape[0]*ldos.shape[1]*ldos.shape[2]*Br2AA**3)\n", - " dos = np.sum(ldos, axis=(0,1,2))*cell_volume\n", - " return cls(dft, e_grid, dos) " - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Load results of DFT runs snapshots 0 and 1 using various k-point grids" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "dft_0_444 = DFT_results('snap_0/slurm-1006575.out')\n", - "dft_0_555 = DFT_results('snap_0_555/slurm-1001448.out')\n", - "dft_0_666 = DFT_results('snap_0_666/200327132835.out')\n", - "dft_0_888 = DFT_results('snap_0_888/200409131941.out')\n", - "dft_1_444 = DFT_results('snap_1/slurm-1006846.out')\n", - "dft_1_888 = DFT_results('snap_1_888/200409131805.out')\n", - "dft_2_888 = DFT_results('snap_2_888/200413195430.out')\n", - "\n", - "eigs_qe = dft_0_888.eigs\n", - "kpoints_qe = dft_0_888.kpoints\n", - "k_weights_qe = dft_0_888.kweights\n", - "fermi_energy = dft_0_888.fermi_energy\n", - "\n", - "eigs_qe_01 = dft_1_444.eigs\n", - "k_weights_qe_01 = dft_1_444.kweights" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Load some DOS values calculated by QE's postprocessor for comparison" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "dos_qe_0_888_g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_g')\n", - "dos_qe_0_888_2g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_2g')\n", - "dos_qe_1_888_2g = DOS.from_dos_file(dft_1_888, 'snap_1_888/Al.dos_2g')\n", - "dos_qe_2_888_2g = DOS.from_dos_file(dft_2_888, 'snap_2_888/Al.dos_2g')\n", - "\n", - "if read_QE_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " dos_from_ldos_2_888_2g = DOS.from_ldos_file(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/ldos_200x200x200grid_250elvls_snapshot2.npy')\n", - "\n", - "if read_ML_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " dos_ml_2_888_2g = DOS.from_ldos_file(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/FeedForward_fp_ldos_predictions_may5.npy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions\n", - "\n", - "The Fermi-Dirac distribution function is needed to evaluate the occupations of the Kohn-Sham states as a function of energy" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energies, e_fermi, temperature): \n", - " return 1.0 / (1.0 + np.exp((energies - e_fermi) / (kB * temperature)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A Gaussian is one possible representation of the $\\delta$-functions occuring in DOS definition\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "with a width $\\sigma$." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function\n", - "def fermi_integral_0(energies, e_fermi, temperature):\n", - " x = (energies - e_fermi) / (kB * temperature)\n", - " return kB * temperature * (0.5*x - np.log(2.0*np.cosh(x/2.0)))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy)\n", - "def fermi_integral_1(energies, e_fermi, temperature):\n", - " #x = (energies - e_fermi) / (kB * temperature)\n", - " #return (kB * temperature)**2 * (-x*np.log(2.0*np.cosh(x/2.0)) - spence(1.0 + np.exp(x)))\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**2 * \n", - " (-x*mp.log(2.0*mp.cosh(x/2.0)) - mp.polylog(2,-mp.exp(x))) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy) squared\n", - "def fermi_integral_2(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**3 *\n", - " ( - x**3/6.0 - x**2*mp.log(2.0*mp.cosh(x/2.0))\n", - " - 2.0*x*mp.polylog(2,-mp.exp(x))\n", - " + 2.0*mp.polylog(3,-mp.exp(x)) ) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.1696824228988496\n", - "0.16968242289884924\n", - "3.608224830031759e-16\n", - "-0.013419715723285694\n", - "-0.01341971572328568\n", - "-1.3877787807814457e-17\n", - "0.0016322822031528132\n", - "0.0016322822031528126\n", - "6.505213034913027e-19\n" - ] - } - ], - "source": [ - "# Test the Fermi integral functions\n", - "energies = np.array([6.83,7.11])\n", - "e_fermi = 7.0\n", - "fi_0 = fermi_integral_0(energies, e_fermi, temp)\n", - "aint_0 = fi_0[1] - fi_0[0]\n", - "qint_0, abserr = sp.integrate.quad(\n", - " lambda e: fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_0)\n", - "print(qint_0)\n", - "print(aint_0 - qint_0)\n", - "fi_1 = fermi_integral_1(energies, e_fermi, temp)\n", - "aint_1 = fi_1[1] - fi_1[0]\n", - "qint_1, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_1)\n", - "print(qint_1)\n", - "print(aint_1 - qint_1)\n", - "fi_2 = fermi_integral_2(energies, e_fermi, temp)\n", - "aint_2 = fi_2[1] - fi_2[0]\n", - "qint_2, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)**2*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_2)\n", - "print(qint_2)\n", - "print(aint_2 - qint_2)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos\n", - "def analytic_enum(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept + (fi_1[1:] - fi_1[:-1])*slope)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos times the energy\n", - "def analytic_eband(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_2 = fermi_integral_2(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept*e_fermi\n", - " + (fi_1[1:] - fi_1[:-1])*(fermi_intercept + slope*e_fermi)\n", - " + (fi_2[1:] - fi_2[:-1])*slope)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(e_grid, centers, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((e_grid[np.newaxis]-centers[...,np.newaxis])/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# Define a discretized delta function that maintains 0th and 1st moments\n", - "def delta_M1(e_grid, centers):\n", - " de = e_grid[np.newaxis]-centers[...,np.newaxis]\n", - " de_above = np.min(de,axis=-1,initial=np.max(de),where=np.greater(de,0.0))\n", - " de_below = np.max(de,axis=-1,initial=np.min(de),where=np.less_equal(de,0.0))\n", - " e_spacing = de_above - de_below\n", - " result = 1.0 - np.abs(de)/e_spacing[...,np.newaxis]\n", - " result = result*np.greater_equal(result,0.0)*np.less_equal(result,1.0)\n", - " result = result/e_spacing[...,np.newaxis]\n", - " return result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The total number of electrons is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ by summing the occupations over all of the states\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik})\\ ,$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$. The weights $w_k$ arise from an implicit integral over the Brillouin zone, which is evaluated as a simple sum over a regular grid of k points. This simple approach to evaluating the integral often gives reasonable results since $\\epsilon_{ik}$ is periodic in $k$, but it becomes less accurate when the Fermi level lies within a band due to the non-analytic behavior of the Fermi-Dirac function at the Fermi level. The sum over a regular grid of k-points is additionally reduced by symmetry, which results in different $w_k$ values for different $k$ values." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating the number of electrons from DFT results\n", - "def dft_2_enum(dft, e_fermi = None, temperature = temp):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## enum: number of electrons\n", - "\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " enum_per_band = fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " enum_per_band = dft.kweights[np.newaxis,:]*enum_per_band\n", - " enum = np.sum(enum_per_band)\n", - " return enum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy,\" which is also called the \"single-particle energy\" or the \"one-electron energy,\" is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ ,$$\n", - "\n", - "where the various terms are defined above." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DFT results\n", - "def dft_2_eband(dft, e_fermi = None, temperature = temp):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## eband: band energy\n", - "\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = toms748(lambda e_fermi: dft_2_enum(dft, e_fermi, temperature) - dft.n_electrons, a = np.min(dft.eigs), b = np.max(dft.eigs))\n", - " eband_per_band = dft.eigs*fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " eband_per_band = dft.kweights[np.newaxis,:]*eband_per_band\n", - " eband = np.sum(eband_per_band)\n", - " return eband" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3654808767733\n" - ] - } - ], - "source": [ - "eband_0_888_ref=dft_2_eband(dft_0_888)\n", - "print(eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3470902759054\n" - ] - } - ], - "source": [ - "eband_0_888_sc_ref=dft_2_eband(dft_0_888, e_fermi = 'sc')\n", - "print(eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.146096688316\n" - ] - } - ], - "source": [ - "eband_1_888_ref=dft_2_eband(dft_1_888)\n", - "print(eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.1203692340027\n" - ] - } - ], - "source": [ - "eband_1_888_sc_ref=dft_2_eband(dft_1_888, e_fermi = 'sc')\n", - "print(eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.8711214367395\n" - ] - } - ], - "source": [ - "eband_2_888_ref=dft_2_eband(dft_2_888)\n", - "print(eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.876315137265\n" - ] - } - ], - "source": [ - "eband_2_888_sc_ref=dft_2_eband(dft_2_888, e_fermi = 'sc')\n", - "print(eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0023586003111\n" - ] - } - ], - "source": [ - "enum_0_888_ref=dft_2_enum(dft_0_888)\n", - "print(enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0032983385398\n" - ] - } - ], - "source": [ - "enum_1_888_ref=dft_2_enum(dft_1_888)\n", - "print(enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9993338972209\n" - ] - } - ], - "source": [ - "enum_2_888_ref=dft_2_enum(dft_2_888)\n", - "print(enum_2_888_ref)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, the total number of electrons can be obtained from the DOS\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} dE\\ D(E)\\, f(E)\\,$$\n", - "\n", - "where $E$ denotes the energy, $D(E)$ the DOS, and $f(E)$ the Fermi-Dirac distribution function." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def dos_2_enum(dos, e_fermi = None, temperature = temp, integration = 'trapz'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " # output:\n", - " ## enum: number of electrons\n", - " \n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.trapz(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.simps(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " enum, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " enum = analytic_enum(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return enum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similarly, the band energy can be obtained from the DOS\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} dE\\ D(E)\\, f(E)\\, E .$$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate E*DOS*FD to obtain band energy\n", - "def dos_2_eband(dos, e_fermi = None, temperature = temp, integration = 'trapz'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " # output:\n", - " ## eband: calculated band energy in eV\n", - " \n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = toms748(lambda e_fermi: dos_2_enum(dos, e_fermi, temperature, integration) - dos.dft.n_electrons,\n", - " a = dos.e_grid[0], b = dos.e_grid[-1])\n", - " #print(dos_2_enum(dos, e_fermi, temperature, integration))\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.trapz(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.simps(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " eband, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*e*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " eband = analytic_eband(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return eband" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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pQuBgYHMnj2bZ555hhTThquZpKam0rNnT/r160dkZCT16tWjS5culCpVioULF9K0aVOioqJstrXll19+AaB37944OzvnuV1mffr0YcWKFZQqVYq2bdvSrl077t69y1dffUXTpk05fvx4gfu2dPv2bR5//HEmT55MXFwcbdu25fnnnycgIICjR48yYcIEq/qLFy+mQ4cOrF+/noCAAHr27Mnjjz+Oq6srixcvZuPGjXl63wMHDvDGG2+wc+dOKlWqRJcuXWjdujWnTp3i448/Jjg4mOTk7GfS/vWvf/HCCy/g7OxMaGgofn5+bNmyhWeeeYadO3fe089EFC9376axdm3GrHGvXhdwdHRIvyoD7MQ4O70smx4yB9NdgKwfYI3hRZrFdR1AX4ARFw8GQ8Ykws2bssxDZKKUsttXs2bNlBAlzezZsxWgRo4caZUfGBioKlSooMqXL68aNmxoVTZy5EgFqC+//NIqv1q1agpQ0dHRVvndu3dXgGrbtq26ceOGOf/ChQuqdu3aClCA2rp1q1W79957TwHqySefVOfPn7c5bn9/f5Wampqne/Xz81OAWrp0aZ7qZ+eHH35Qt27dsspLTU1VH3/8sQJUx44ds7TJ7mdj8tRTT2X5GSxZskQBKjQ0NMs9pqWlqYiICKu8GjVqKEBt3749S//nz59XR44cscobOHCgAtS3336bpW5ERITS6/VW+devX1cdO3ZUgPrss8+yvIfp/2O5cuVUVFSUOV+v16vXXnvN/GdAPDwmTNivQClQStOuqdjYW7k3snJKZfwa9lZKGXKo28CibtcCjbe4ePnlbeafW0DAIqVUzaIekigCQJSyEY8WeUB8Ly8Jpksm0z9o9vi6H44dO6YAFRgYaM67fPmyAlS/fv1U3759laZpKiYmxlxev359Bahjx45Z9WUrYDx79qzSNE05ODiokydPZnn/NWvW2Aymr127ptzc3JSHh4fVe1sKDQ1VgFqzZk2e7tXV1VUBav369TbLZ82apQYOHGj1euONN/LUt0mlSpWUTqez+tCgVMGC6alTpypAzZgxI0/v7e7urry8vPI81uyC6ZwcP35cASooKChLmen/4+zZs7OUXblyRQHKxcVFpaSk5Pn9RPHWu3fGv0ft2u0rQA96pVRplfGr+GIOdZcrpTSllI9S6lwB3qv4GDo00vxzq1p1g1JqVVEP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ffp+UlNND6wlMm3avRwfLooDJycwrZ3X651ISdEhwbQACaaFEELYmQEDtnPnTt30qzuMGpVUaO/14ostmD37jPl64cJXWLNmMbAsx3ZffJFiTjdqtJgKFToWzgDFA2NcRpRxuuaNG7LXtDCSYFoIIYSdSOHYsf+xYkVDc87TT++mYcPShfquw4bVpU+fjID91VcXcPXqZLILpM6fh8uXW5ivP/10PVDwLftE8aFpGcF0YqIrEkwLkGBaCCGEXZhHWpov7drpUMoLAEfHaH78sWmhv7OmwVdflaZSJePDZrGx5Xn22U8xGCJs1v/Xv8BgMP56ffrpCEJDAwt9jOLBsA6m9wJVim4wotiQYFoIIUQxth/YgcFQ5v/Zu+8wqar7j+OfM20rHZQmCogFxRLR2Cg2bLHGhsQWjTGaYjSixpqosUYTTfJLsGs0doMxxIpiAQsiKiAgKIoUWTpbZ2bn/P6Y2XsX3F1h2Z0zM/f9ep59OOfOvbvfZNyZz5459xztuedVWrToh94jV155vjp33i1zTvvq2lW67z7/BsJp047VWWdN/dZ5b78tPfCA37/00psljfrWechPxvjTdyorYyJGQeK/AgBATrtB0n466qiZmj79Qu/okCF36pprXpC0RtKArFRy6KHSbru96PUfeuiXeu21L71+XV29LrjAX/Hh+OOf1qhRb0galpX60P7C4YTXXrs23sKZCBLCNAAgR62R9B/dc89emjDheu9onz5PaurUX2d6l0vqmLWKXnllmGKx+ZleBx199FrNnr1cyWRKBxzwmj76KL3WdUmJdMcd+0saL6kka/WhfYVCfphety7RwpkIEsI0ACBHPaNkMq4LL/yzd6Rjxzc1Y8ZpisVSknpLuiCrFXXrVqq7746r4cazysohGjw4pM6dZ2nKlIO98044YY769dtS0qFZrQ/tq/HIdGXlQjUsm4hgI0wDAHLUf/TLX56qqqq9M/06PffcRercueEmsKvkYtT39NN31JFHvu31re2qqqqdvX5Z2Uf6y1+2yXpdaH+RiL96R1XVDZJmuCsGOYMwDQDISVVVn2r8+Ju8/t57T9GIEVdK6inpZElnuypNzz8/Qtdc874ikYWNjia0//7XafHiGerYsajZa5G/GofpykqWxkMaYRoAkINW6o9/PFGLF/eVJHXvntRTT+0h6RhJSyQ9JinqsL6U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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Use the same grid as used by the Quantum Espresso postprocessor\n", - "e_grid = dos_qe_0_888_g.e_grid\n", - "#e_grid = np.arange(-5.0,15.0,0.1)\n", - "\n", - "# Determine the smearing for the Gaussian representation of the delta function\n", - "sigma = e_grid[1] - e_grid[0]\n", - "narrow_gaussian = partial(gaussian, sigma = sigma)\n", - "wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - "# Compute the DOS for snap_0 with 888 k-points using each representation of the delta function\n", - "dos_0_888_g = DOS.from_calculation(dft_0_888, e_grid, narrow_gaussian )\n", - "dos_0_888_2g = DOS.from_calculation(dft_0_888, e_grid, wide_gaussian )\n", - "dos_0_888_M1 = DOS.from_calculation(dft_0_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_1 with 888 k-points using each representation of the delta function\n", - "dos_1_888_g = DOS.from_calculation(dft_1_888, e_grid, narrow_gaussian )\n", - "dos_1_888_2g = DOS.from_calculation(dft_1_888, e_grid, wide_gaussian )\n", - "dos_1_888_M1 = DOS.from_calculation(dft_1_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_2 with 888 k-points using each representation of the delta function\n", - "dos_2_888_g = DOS.from_calculation(dft_2_888, e_grid, narrow_gaussian )\n", - "dos_2_888_2g = DOS.from_calculation(dft_2_888, e_grid, wide_gaussian )\n", - "dos_2_888_M1 = DOS.from_calculation(dft_2_888, e_grid, delta_M1)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_0_888_g.e_grid, dos_qe_0_888_g.dos, linestyle='--', linewidth=3, color='yellow', label='QE-DOS G')\n", - "ax.plot(dos_qe_0_888_2g.e_grid, dos_qe_0_888_2g.dos, linestyle='--', linewidth=3, color='black', label='QE-DOS 2G')\n", - "ax.plot(dos_0_888_2g.e_grid, dos_0_888_2g.dos, linestyle='-', linewidth=3, color='blue', label='wide Gaussian')\n", - "#ax.plot(dos_0_888_g.e_grid, dos_0_888_g.dos, linestyle='-', linewidth=3, color='green', label='narrow Gaussian')\n", - "#ax.plot(dos_0_888_M1.e_grid, dos_0_888_M1.dos, linestyle='-', linewidth=3, color='red', label='M1 delta representation')\n", - "\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(0.55, 1.0))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can recover the QE-DOS result by using the same parameters as in the input for computing the DOS. In this case, the QE-DOS is evaluated using 4x4x4 k-point sampling, while the calculated DOS is evaluated using 8x8x8 k-point sampling, so they will not match exactly.\n", - "\n", - "Now we can go ahead and investigate different energy grids and smearing values in order to improve upon the band energy and achieve better agreement with the band-energy output of QE." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":25: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28304728577404603\n", - "0.10647239198749503\n", - "0.04538864728692715\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'quad') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28310624238531545\n", - "0.10668622714081266\n", - "0.04539697333041204\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'analytic') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.2832576592146552\n", - "0.10654533739250382\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_0_888_2g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_qe_0_888_g, integration = 'analytic') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":25: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28533298020636266\n", - "0.10744953331345641\n", - "0.052445261101411234\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'quad') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.2856521550982052\n", - "0.10731624971276688\n", - "0.052275393387503755\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'analytic') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28996261895235875\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_1_888_2g, integration = 'analytic') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":25: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24194209412007694\n", - "0.07849218150795423\n", - "0.027242952126243836\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'quad') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.242208420970087\n", - "0.07857100610192447\n", - "0.027246274673075277\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'analytic') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24870929593282654\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_2_888_2g, integration = 'analytic') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":29: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " eband, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0630292256505527\n", - "0.4771164300154851\n", - "0.17639036704667888\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'quad') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'quad') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'quad') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0640137830100684\n", - "0.47773027019366054\n", - "0.17632259172978593\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'analytic') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0764587860849133\n", - "0.5076685364392688\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_0_888_2g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_qe_0_888_g, integration = 'analytic') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1429938325936746\n", - "-0.3540806182554661\n", - "-0.1776480946614356\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_0_888_g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_0_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1317269716214469\n", - "-0.32304349480136807\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_qe_0_888_g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0844960764575262\n", - "0.4831471591801346\n", - "0.22979756721179\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_1_888_2g, integration = 'analytic') - eband_1_888_ref)\n", - "print(dos_2_eband(dos_1_888_g, integration = 'analytic') - eband_1_888_ref)\n", - "print(dos_2_eband(dos_1_888_M1, integration = 'analytic') - eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.079419705624332\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_1_888_2g, integration = 'analytic') - eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1431815692749296\n", - "-0.35388643114720253\n", - "-0.17795321962739763\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)\n", - "print(dos_2_eband(dos_1_888_g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)\n", - "print(dos_2_eband(dos_1_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1818663040244246\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.7459952235367382\n", - "0.2597264144997098\n", - "0.034636043579666875\n", - "0.7456178884153815\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_2_888_2g, integration = 'analytic') - eband_2_888_ref)\n", - "print(dos_2_eband(dos_2_888_g, integration = 'analytic') - eband_2_888_ref)\n", - "print(dos_2_eband(dos_2_888_M1, integration = 'analytic') - eband_2_888_ref)\n", - "if read_QE_LDOS:\n", - " print(dos_2_eband(dos_from_ldos_2_888_2g, integration = 'analytic') - eband_2_888_ref)\n", - "if read_ML_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(dos_2_eband(dos_ml_2_888_2g, integration = 'simps'),\n", - " dos_2_eband(dos_ml_2_888_2g, integration = 'simps') - dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(\"Changing energy grid!\")\n", - " dos_ml_2_888_2g.e_grid = np.linspace(-10.0,15.0,250)\n", - " print(dos_2_eband(dos_ml_2_888_2g, integration = 'simps'))\n", - " print(dos_2_eband(dos_ml_2_888_2g, e_fermi = 7.7967, integration = 'simps'))\n", - " cell_volume = dos_ml_2_888_2g.dft.volume/(200.0*Br2AA)**3\n", - " print(cell_volume, cell_volume**(1.0/3.0))\n", - " print(dos_2_eband(dos_ml_2_888_2g, e_fermi = 7.7967, integration = 'simps')*0.153049**3/cell_volume)\n", - " print(\"Resetting energy grid!\")\n", - " dos_ml_2_888_2g.e_grid = np.linspace(-10.0,14.9,250)\n", - " print(dos_2_eband(dos_ml_2_888_2g, integration = 'analytic'),\n", - " dos_2_eband(dos_ml_2_888_2g, integration = 'analytic') - eband_2_888_ref)\n", - " print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic'))\n", - " print(dos_2_eband(dos_ml_2_888_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_ml_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print (eband_2_888_sc_ref)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.8088733359650178\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_2_888_2g, integration = 'analytic') - eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.142285266507315\n", - "-0.35289876827846456\n", - "-0.17781404765173647\n", - "-1.1414499490047092\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - "print(dos_2_eband(dos_2_888_g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - "print(dos_2_eband(dos_2_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - "if read_QE_LDOS:\n", - " print(dos_2_eband(dos_from_ldos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1300799679156626\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "241\n", - "242\n", - "243\n", - "244\n", - "245\n", - "246\n", - "247\n", - "248\n", - "249\n", - "250\n", - "251\n" - ] - } - ], - "source": [ - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_g = []\n", - "dosn_0_888_2g = []\n", - "dosn_0_888_M1 = []\n", - "\n", - "for n_egrid in n_egrids:\n", - " \n", - " print(n_egrid)\n", - " \n", - " e_grid_n = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = e_grid_n[1] - e_grid_n[0]\n", - " narrow_gaussian = partial(gaussian, sigma = sigma)\n", - " wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - " dosn_0_888_g.append(DOS.from_calculation(dft_0_888, e_grid_n, narrow_gaussian ))\n", - " dosn_0_888_2g.append(DOS.from_calculation(dft_0_888, e_grid_n, wide_gaussian ))\n", - " dosn_0_888_M1.append(DOS.from_calculation(dft_0_888, e_grid_n, delta_M1))" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_g = []\n", - "eband_error_0_888_g = []\n", - "for dos in dosn_0_888_g:\n", - " enum_error_0_888_g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_g)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_g)\n", - "\n", - "enum_error_0_888_2g = []\n", - "eband_error_0_888_2g = []\n", - "for dos in dosn_0_888_2g:\n", - " enum_error_0_888_2g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_2g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_2g = np.array(enum_error_0_888_2g)\n", - "eband_error_0_888_2g = np.array(eband_error_0_888_2g)\n", - "\n", - "enum_error_0_888_M1 = []\n", - "eband_error_0_888_M1 = []\n", - "for dos in dosn_0_888_M1:\n", - " enum_error_0_888_M1.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_M1.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_M1 = np.array(enum_error_0_888_M1)\n", - "eband_error_0_888_M1 = np.array(eband_error_0_888_M1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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6iJFihiP+eyzz+qzZ89abWfXrl3a19dXA9rBwUE3btxYP//887pFixba2dlZA9rd3d3s2S9aa71jxw7jcZydnXWjRo10165ddbt27XTlypWNeU2aNNHXrl2z+dzuBVaeU5LrN8Tyyv2XBCVCCCFyUnZByc2bN4031pZugtPS0vT333+vAwMDdaFChXSRIkV0s2bN9IoVK6wGHw8rKNFa66tXr+qRI0fqatWqaScnJ+3k5KSrV6+uR40aleWN2+LFi43ntHz5crP82rVra0AHBQVlefzsJCcn68mTJ+u2bdtqLy8v7ejoqAsUKKA9PT11WFiYHjVqlNWb5507d+rw8HBdvHhx7ejoqCtVqqQ//PBDnZycbPEhiAbHjx/XL7zwgnZ3d9cODg66XLlyesSIEfrWrVsW6+3YsUO/++67un79+trT01M7ODhoDw8PHRwcrL/44guTB1empKToCRMm6C5duugKFSrowoULaycnJ+3v76+ff/55iw/StBaUaK31/Pnzdd26dXXhwoW1i4uLDgkJ0bNmzdJa61wJSgwvpZR2dnbWXl5eulmzZvq9997Te/bssamt5ORk/e233+pmzZppDw8PbW9vr4sWLarr1aunP/nkE3358mWL9VJSUnRcXJweNmyYbtSokfbz89NOTk66QIEC2svLS7dp00b/+OOPZg+bfJisBSUqI088yWrVqqUTEhJyuxtCCCGEEOIxp5TaprWudXe6rCkRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQgghRK6SoEQIIYQQQgiRqyQoEUIIIYQQQuQqCUqEEEIIIYQQuUqCEiGEEEIIIUSukqBECCGEEEIIkaskKBFCCCGEEELkKglKhBBCCCGEELlKghIhhBBCCCFErpKgRAghhBBCCJGrJCgRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQuQoX19flFJZvhYtWmRS9ujRo7nb6WxERUUZ++7k5ERSUpLVsn///bfJucbFxT26jj7GRowYYfY5cnR0xMPDg6CgIHr16sWCBQtISUmxqb34+Hh69OhB2bJlKVSoEC4uLlSsWJF+/fqxe/fubOv//PPPhIeHU6JECRwcHHBzc6N8+fK0bduWMWPG5PnPdG7Ln9sdEEIIIcSToUWLFpQoUcJino+PzyPuDSilANBaP1A7ycnJ/PTTT/Tt29diflRU1AO1/7g6evQofn5+lC5d+oFu2MuWLUuDBg0ASE1NJSkpiX379jF16lSmTp2Kl5cXU6ZMoXnz5hbr37p1iz59+jBz5kwAKlWqxDPPPENaWhq7du1i4sSJfP/997z99tuMHj3a+LkxSE1NpWvXrixYsACAoKAgGjRoQL58+Th8+DC//fYbS5YsoVChQrz22mv3fZ6POwlKhBBCCPFIDBkyhMaNG2dZJiYmhpSUFEqVKvVoOvWAAgMD2b17N1FRURaDkvT0dGbMmIGbmxtPPfUUBw8ezIVePt4aNGhgMfD766+/GD58OHPnzqVVq1b88ssvtGvXzqSM1prOnTvz66+/4uPjw4wZMwgNDTUps2TJEiIjIxk7diw3b95k/PjxJvkTJkxgwYIFeHp6smLFCqpXr26Sf/nyZRYsWEDJkiUfzgk/pmT6lhBCCCHyjLJly1KxYkXs7e1zuys28fT05Omnn2bz5s3s37/fLH/16tWcPHmSrl27UqBAgVzo4ZOrQoUK/PTTTwwaNIj09HQiIiLMptl9//33/Prrr7i6uhIXF2cWkAC0adOGlStXYm9vz9dff010dLRJ/ty5cwEYPny4WUAC4OrqSs+ePWnVqtVDPLvHjwQlQgghhMgzrK0pady4sXE9xtq1awkPD8fd3R07OzvjepTk5GRGjx5NUFAQzs7OFChQgJIlSxISEsKwYcNITk4G/l2LYHD3uoR71aNHD8DyNK1p06aZlLEmJSWFb775hjp16lC4cGGcnJyoVKkSQ4YM4cKFC2bljx49ilIKX19f0tPTGTduHFWqVMHJyQkvLy8GDRrEjRs3ALh06RJvvvkmvr6+FChQgHLlyjFu3DirfdFa89NPP9G8eXPc3d0pUKAAPj4+9OnTx+I0q7i4OJRSNG7cmJSUFEaNGkXFihWN6zu6d+/O8ePHTepERkbi5+cHwLFjx0yuv6+vb5bX6l6NHj0aT09PLl++zA8//GBynqNHjwZg2LBhxv5YUqtWLV5++WUAPv74Y5O8c+fOAeDh4fFQ+/2kkaBECCGEEP8ZP//8M02aNOH48eM8/fTTNGvWDHt7e9LT0wkPD+e9997j8OHDhIaG0qFDBypXrsyJEycYNWqU8VvygIAAIiIijG1GRESYvO5Vu3btcHNzY+bMmaSlpRnTk5KSWLRoEVWqVKF27dpW6ycnJ9O8eXNef/119u7dS6NGjWjTpg1JSUmMGTOGmjVrcvjwYav1n3/+eT744AP8/Pxo3rw5169f54svvqBDhw5cvHiROnXqMHfuXGrXrk3Dhg05evQob731ltnNNWQERx07dqRbt27Ex8dTuXJl2rZtS6FChfjhhx8ICgoiISHBYj9SUlJo1aoVo0ePxt/fn1atWmFnZ8ePP/5IgwYNTEYpGjRoQIcOHQAoVKiQyfXv2LFjttf8Xtjb29O5c2cAVq1aZUzfvXu3Mciy5e8eGRkJwLp160zOxbAeauLEidy6desh9foJpLWW1xP+qlmzphZCCCFySunSpTWgY2NjbS575MgRk/TQ0FANaEBPmjTJrN7vv/+uAR0UFKSvXbtmkpeenq7j4+P19evXTdIN7d2PadOmaUCHh4drrbV+9dVXNaCXL19uLDNhwgQN6E8//VRrrXWVKlUsXofBgwdrQFesWFGfPHnSmH7jxg3doUMHDei6deua1Dly5Iix/xUqVNCnTp0y5h0/flw/9dRTGtBVq1bVHTt21Ddv3jTmL126VAPaxcXF7Jq8++67GtCNGjXSJ06cMMn7+uuvNaDLli2rU1JSjOmxsbHGvtSqVUufPXvWmJeUlKSDgoI0oD/66COL51C6dGmr1zkrw4cP14COiIjItuysWbM0oEuVKmVMmzJliga0n5+fTcdLSUnR9vb2GtBr1qwxpi9YsMB4/sWLF9d9+vTRU6ZM0du3b9epqan3fF6POyBBW7gflZESIYQQQjwSTZo0sbgdsOEbaFs8/fTTxmk0mZ09exaAhg0bUqhQIZM8pRT169enYMGCD9T/rFiawjVt2jTy58/Piy++aLXezZs3mTBhAgDjx483WeDv5OTExIkTcXZ2ZtOmTaxfv95iG+PHj8fT09P4u7e3N927dwcypkZNmDABR0dHY354eDjVq1fn6tWrJqMeFy9eZPz48Tg7O/Pzzz/j5eVlcpzXXnuN8PBwDh06xIoVK8z6oZRi6tSpJtOYXF1deffdd4GMTQxyi7u7O4DJVLjz588DULx4cZvayJ8/P0WLFjWpC/Dcc8/x/fff4+bmxtmzZ5k8eTK9evUiKCgINzc3IiIi+Ouvvx7WqTy2JCgRQgghxCPRokULs6lSERERxu1cbfHcc89ZTA8KCiJfvnxMmTKF7777zhikPCq1atWiatWqLF68mEuXLrFv3z62bNlCy5Yts7zp3bZtG9euXTMumL+bu7s7bdq0AbD4fBN7e3uaNWtmlu7v72/sl+GGPLNy5coBcPr0aWNabGwsN2/eJDQ01Or6CMNC8I0bN5rl+fj4UK1aNbP0ihUrmh3rUUtPTwfAzu7Bbn0zvug316dPH44fP87s2bPp06cPgYGB5M+fn6tXrzJjxgwCAwNZvnz5Ax37cSdbAj9GlFL+wNtAXaAqsF9rXTV3eyWEEIL7WDyd66zcfD0IW7YEzk7p0qUtppctW5YvvviCt99+m/79+9O/f3/KlClDvXr1aNeuHe3btydfvnwPdOzsREZG8vbbbzNnzhzjWoXsFrifOnUKIMtF1mXKlDEpm1mJEiUsnpezszOA2WjH3fmGxf+Acd3KsmXLsl3wn3mkwMDas2YKFy5sdqxHLTExEcA40gH/jp7YGsCmpKRw6dIlAIoVK2aW7+zsTLdu3ejWrRuQsRXwwoULef/99zlz5gwREREcO3YsR0fs/sskKHm8VAHCgc1kjILJSJgQQuQFOXCD/6RycnKymvf666/TqVMnFi1aRHx8PPHx8cyaNYtZs2YREBDA77//brxBzgndu3dnyJAhTJ06ldOnT5uMcmTnfnb9guy/+b+XkQHDIv0KFSpQt27dLMvWqVPngY71qG3btg3AZCSnZs2aABw5coRz585lu3vWzp07SUlJwc7OjsDAwGyP6erqSmRkJDVq1CAoKIjExETWr19vcURMSFDyuFmitV4MoJSKAmrlbneEEEKIR6tEiRL07dvX+CDDXbt28eKLL7Jz505Gjx5tcceph6V48eK0atWKJUuWAPDGG29k+7wVwxqSI0eOWC1jGMHI6QdKent7Axk37o/TU+hv377NvHnzAEwCgurVq1O6dGmOHTvG9OnTGTx4cJbtTJ8+HcjYOaxIkSI2Hz8wMBB3d3cSExMtjjCJDHk3pBX3TGudntt9EEIIIfKSGjVqMGDAACAjQMnMEDCkpqY+tOP17t2bp556iqeeeirbqVuQ8W29s7Mzp06dsrgQ/MKFC8Yg50GnvmUnLCwMe3t7Vq9ebfaQwZzg4OAAPNzrb8l7773HmTNncHNzo1evXsZ0Ozs74yL8UaNGZRkYJiQkMGnSJGN7mVlbZ2Jw+fJlrly5AlifTifySFCilLJXSjVTSn2ulEpQSl1RSt1WSp1SSs1XSjXO7T4CKKUqKKUGKKVmKaX2K6XSlVJaKWXThtpKqeeVUuuUUpeVUtfunGt/pVSe+DsIIYQQ/1Vr1qxh+fLlZje4aWlpxgXGd69HMYw87Nu376H1o23btiQmJpKYmEhAQEC25Z2cnIyjOgMGDODMmTPGvOTkZPr168e1a9eoW7cu9evXf2j9tKR48eL079+fpKQk2rZta/EJ9devX2f27NkPZSOBYsWK4eDgwNmzZ41rNR6mAwcO0K1bN8aNG0e+fPmYMWOG2fS9vn37Eh4ezuXLl2nSpAlr1641a2fJkiW0bNmS1NRUXn31VVq2bGmS37p1az777DOL1+Ts2bNERkZy+/ZtfHx8CAkJebgn+RjJK9O3QgHD02z+AdYC14HKQAegg1JqpNb6g1zqn0E/YMD9VFRKfQu8CiQDMUAK0Az4BmimlOooIx1CCCHE/dm9ezcDBw7E1dWVoKAgSpYsyY0bN9i8eTNnzpyhRIkSxm/FDdq3b88XX3xBs2bNaNq0qXHxd+anfj8KI0eOJCEhgbi4OMqVK0fTpk1xcnJi3bp1nDlzBh8fH3788cdH0pexY8dy+vRp5s2bR9WqVQkICKBMmTIopTh69Ci7du3i1q1b7Nu3z+atdK2xt7cnPDychQsXEhgYSP369XFycsLd3d34pHVbxMfHG7eVTktLIykpiX379nHo0CEgYwH+lClTCAsLM6urlGL+/Pn06tWL2bNnExoaSuXKlalSpQrp6ens2LGDw4cPo5Ri0KBBfPrpp2ZtnDp1isGDB/Puu+9SuXJlypcvj729PadPn2bLli3cunULNzc35syZk+10vidZXglK0oEFwFda63WZM5RSXYAfgf8ppWK11rG50cE79gKfAgnANmAKGQFVlpRSHcgISP4BGmmt/76TXhyIBdoDrwNfZarjCpS0oU/HtdY37u00hBBCiMeL4Qnoa9eu5eDBg2zYsAFnZ2d8fHzo27cv/fr1M9sxadSoUSilWLhwIb/88gspKSnAow9KHB0diY6OZuLEicycOZPY2FhSUlLw9fXlxRdf5J133uGpp556JH2xt7dn7ty5dO/enSlTprBlyxZ2796Ni4sLJUuWpFu3brRr146yZcs+lONNnjyZokWLsnLlSubNm0dqaiqlS5e+p6Dk0KFDxgDEwcEBV1dXvLy86NWrF8888wxt2rTJMhhwdHTkxx9/5JVXXmHKlCmsW7eOpUuXopSiVKlSvPzyy/Tr18/qyNeCBQtYuXIlMTEx7N+/n9jYWK5evYqLiwsBAQG0aNGC/v37Z7uQ/kmnspsHlxcopX4AegFTtda9bCjvA7ygtf4km3KBQG2t9ff32a84MoKSTlrr+VmUSwBqAhFa6xl35YUCcWQELKUMoyVKqUhgmg3daKK1jrNwzCigli1bAteqVUtnfniSEEIIIYQQOUEptU1rbbYZ039lLcOOO++2rg6aAnyslPpaWdljTykVDKwBJiqlzJ/085AopbzICEhuAz/fna+1/h04BZQg4/kihvQorbWy4RWXU30XQgghhBDiUfivBCXl7ryfybLUv3oAfwOvAZPuDkyUUvXJWMPiCvTTWu95WB21wLCR9R9a65tWymy9q6wQQgghhBBPjLyypsQqpVQJIPLOrwtsqaO1PnlnWtQaoA/goJTqQMWD3wAAIABJREFUqbVOv7OT11LACeittZ768HttwvCI1mNZlDl+V9n7opQqCDxz59fSQOFMO4Nt1Vpn1QchhBBCCCFyRZ4OSpRS+YFZZIxoxGitl9haV2t95k4AEgNEkBGYzCQjsHEAIrXWMx9+r80433m/nkWZa3feXR7wWB6YTxEz/N4DiMqcoZRqA7Tx9/d/wMMKIYQQQghx//L69K2JZGybewLofq+VtdZngcbALqAbsBywB7o/ooDkkdJaH81i7UmUhfJLtNYvu7q65kJvhRBCCCGEyJBngxKl1Fdk7Lj1D9BMa/3P/bSjtU4EvsyUtB345cF7aDPDKEihLMoYRlOu5nBfhBBCCCGEyHPyZFCilPoceAM4T0ZA8vcDtNUJmAzcAnYDwcAipZTjw+irDY7eeS+dRRnvu8oKIYQQQgjxxMhzQYlSaiwwCLjA/7N333FyVXUfxz8nvScEElqoApHyUBNA6dKkBOklSlOKdJSOiHQCD1JCU0BARAREqqAgEnqRAIrIE5qEQISAAUL6brLn+ePMJpvNlpndmb2zM5/36zWv2Z179+5vU3b3e885vwPbxRjfbMe1vgv8jrR7+m7AZqTd4ncC/phbGF5q9e2M1w4h9G7mnJGNzpUkSZKqRlmFkhDCGOAU4Atg+xjj6+241iHAbcAcYJcY42MxxhmkQPI4aa3KIyGEfs1fpf1ijB+Spoz1APZpos6tSPuvfAK8UMpaJEmSpHJUNqEkhHABcBrwJSmQtHnUIIRwOHAzqePVjjHGcfXHYoyzgFHAn0i7sf85hDCgPbXnoX5n+UtCCAtaXYUQhgLX5d4dU7+buyRJklRN8m4JHEL4HHgjxrhlsYsIIewG/CT37rvAcc1sxD4hxjgmj0uuCUwjBZK/NT4YY5wTQtgduBtYHxgEfJVHnRuyMEQArJV7viiEcHKD62/a8ONijPeEEK4HjgL+GUJ4nDSlbFtgAHA/cE0eX5ckSZJUcQrZp6QHqTVvKQxu8PaI3KMpTwGthpIY449DCFfGGCe1cE5NbmPBITHGfHeKHwBs0sTrqzfxWuPPd3QI4VngGNIITVdgAmlE53pHSSRJklStCgkl7wJLlaKI3B4atxb5ms0GkgbnzAPyDSTEGJ8EmhzCyfPj7wDuaOvHS5IkSZWokDUltwNbhhBWKVUxkiRJkqpPIaHkCuBR4IkQwn4hhJ4lqkmSJElSFSlk+tY7pKlLK5GbghRC+BSY3cS5Mcb4tfaXJ0mSJKnSFRJKVm7wdv26iqWbOTe2qRpJkiRJVaeQUOJaEkmSJElFl3coiTF+UMpCJEmSJFWnstnRXZIkSVJ1KmT6FgAhhIHA94BvAEOAv8YYL80dW4O09uSZGGNTC+AlSZIkaREFhZIQwreB3wKDSIvdIzC5wSnDgfuB0cBdRapRkiRJUgXLe/pWCGEd4F6gP3AdsB+L727+Z2AW8J1iFShJkiSpshUyUnIm0BPYI8b4IEAIYZHRkBhjbQjhNWC94pUoSZIkqZIVstB9a+C1+kDSgsnAsm2uSJIkSVJVKSSULAm8m8d5PYDebStHkiRJUrUpJJR8AQzL47yvAVPaVo4kSZKkalNIKPkbMDKEsHpzJ4QQRgLrAs+1tzBJkiRJ1aGQUHIt0B24J4QwvPHBEMKqwM2kNsHXF6c8SZIkSZUu71ASY3wUuBr4H+DNEMLrpACyXQjhJWACsDZwRYzx2VIUK0mSJKnyFDJSQozxBOBo0pqRdUj7lAwDRgLTgBNjjCcXu0hJkiRJlaugHd0BYoy/CCHcAKwPrAp0BT4E/hZjnFfk+iRJkiRVuIJDCUCMsQ54NfeQJEmSpDZrUygBCCF0Ie1dAjA1F1QkSZIkqSAFrSkBCCF8O4TwKDAd+CT3mB5CeDSEsHOxC5QkSZJU2QoKJSGEK4GHge1Ju7bH3KN37rWHQghji12kJEmSpMqVdygJIRwCHA/MAM4DVieFkd65t88ljZ4cE0I4tOiVSpIkSapIhYyUHAvMA7aLMZ4TY3wvxlibe7wXYzyXNFoyn9Q2WJIkSZJaVUgoWQt4Ksb4cnMn5I49lTtXkiRJklpVSCiZCXyax3mfAbPbVo4kSZKkalNIKHkOGBlCCM2dkDs2IneuJEmSJLWqkFDyM2AY8PMQQvfGB0MI3YDLcuf8rDjlSZIkSap0zW6eGEI4qImXbwVOAPYOIdwDvJ97fWVgb1Ig+QWwLvD3YhYqSZIkqTKFGGPTB0KoI+1Bstih3HPjY4u8HmPsWowCVXojRoyI48ePz7oMSZIkVbgQwisxxhGNX292pAS4jaZDiSRJkiQVTbOhJMZ4SAfWIUmSJKlKFbLQXZIkSZKKzlAiSZIkKVMtrSlpUghhBWArYDmgVzOnxRjj+e0pTJIkSVJ1yDuU5PYhuQY4jIWdthpvpBhzr0XAUCJJkiSpVYWMlJwDHAHMAx4B3gFmlKAmSZIkSVWkkFByIDAT2CzG+HqJ6pEkSZJUZQpZ6D4UeMpAIkmSJKmYCgklk4C5pSpEkiRJUnUqJJTcCWwVQuhXqmIkSZIkVZ9CQslFwFvAwyGENUpUjyRJkqQqk/dC9xjj3BDCDsALwL9CCB8AHwF1TZ8ety1SjZIkSZIqWCH7lCwF/AVYm7QXyaq5R1Ni+0uTJEmSVA0KaQk8BliPNIXrF8C7uE+JJEmSpHYqJJTsAnwMbBpjnFaieiRJkiRVmUIWuvcHnjeQSJIkSSqmQkLJ/5GCiSRJkiQVTSGh5Fpga9sBS5IkSSqmvENJjPFW4ErgyRDCD0IIw0pWlSRJkqSqUUhL4PkN3r0h91pzp8cYYyGL6CVJkiRVqUKCQ7MJpJ3nSpIkSapihezoXsj6E0mSJEnKi0FDkiRJUqYMJZIkSZIyZSiRJEmSlKm2dt9qjd23JEmSJOXF7luSJEmSMlXI5oldmnoAXYFVgeOAz4Hz7dQlSZIkKV/tnmIVY4zARODaEMI/gHEhhP+LMd7Z3mtLkiRJqnxFHdGIMT4LvAqcWMzrSpIkSapcpZhm9QGwdgmuK0mSJKkClSKUrA3UleC6kiRJkipQ0UJJCGHJEMI1wNeBl4p1XUmSJEmVrZB9Sv7dwuF+wJKkVsA1wDntK0uSJElStSik+9bKrRyvAZ4Bzo4xvtDmiiRJkiRVlUJCySotHKsBPosxzmtnPZIkSZKqTN6hJMb4QSkLkSRJklSd3HldkiRJUqYMJZIkSZIy1ez0rVa6bbUmxhi/1o6PlyRJklQlWlpTsnI7rhvb8bGSJEmSqkhLoWRkgdfaEzgB6NP2ciRJkiRVm2ZDSYzxlXwuEELYEhgDbELaPPEN4IyiVCdJkiSp4hWyT8kiQgjrARcDO5LCyETgZ8DtMUanb0mSJEnKS8GhJISwCnABsB+pe9dnwIXA9THG2uKWJ0mSJKnS5R1KQghDgbOBw4AewHTgcuDnMcYZpSlPkiRJUqVrNZSEEPoDpwInkhax1wJjgQtijP8tbXmSJEmSKl1L+5T0AI4lLVpfEqgDbgfOjjF+0DHlSZIkSap0LY2UvAMMIy1ifwg4M8b4rw6pSpIkSVLVaCmUrEDaBHEWsArwuxBCvteNMcb12lmbJEmSpCrQ2pqSQFpHsk6B17UlsCRJkqS8tBRKtumwKiRJkiRVrZZ2dH+qIwuRJEmSVJ26ZF2AJEmSpOpmKJEkSZKUKUOJJEmSpEwZSiRJkiRlylAiSZIkKVOGEkmSJEmZMpRIkiRJypShRJIkSVKmDCWSJEmSMtXsju5NCSF0BfYFtgWWA3o1c2qMMW7bztokSZIkVYG8Q0kIYQngMWBDILRyemxPUZIkSZKqRyEjJRcCGwEfAtcAE4CvSlGUJEmSpOpRSCjZDfgC2CTG+EmJ6pEkSZJUZQpZ6L4U8KyBRJIkSVIxFRJK/gPMK1UhkiRJkqpTIaHkD8CWIYTepSpGkiRJUvUpJJScSxotuSuEMLRE9UiSJEmqMoUsdB8LvAvsAbwTQngFmATUNXFujDH+oAj1SZIkSapwhYSSQ1i4/0h/YOsWzo2AoUSSJElSqwoJJYeWrApJkiRJVSvvUBJj/HUpC5EkSZJUnQpZ6C5JkiRJRVfI9K0FQgg9gI2A5XMvTQZeiTHWFKswSZIkSdWhoFASQugOnAMcQ1rs3tCMEMLVwLkxxtrilCdJkiSp0uUdSkIIXYE/AtsBAfgY+Hfu8KrAssAZwMgQws4xxvlFrlWSJElSBSpkTckRwPbAO8BOMcblY4xb5B7LAzsBb5NCy+HFL1WSJElSJSoklBwEzAS2jTE+2vhg7rXtgFnAwcUpT5IkSVKlKySUrAWMizFObu6E3LFxuXMlSZIkqVWFhJLupFGQ1szKnStJkiRJrSoklHwAbJFrB9yk3LEtcudKkiRJUqsKCSUPkjps/TqEMKjxwRDCQOBmYBnggeKUJ0mSJKnSFbJPyaXAAcC+wE4hhIeA94FIagk8irR3yUe5cyVJkiSpVXmHkhjj1BDCt4A7gBHAd0mBBNK+JQAvA6NjjJ8XtUpJkiRJFaugHd1jjO8CG4cQNge2ApbPHZoMPBVjfLbI9UmSJEmqcIXs6H458GWM8bxc+DCASJIkSWq3Qha6HwesV6pCJEmSJFWnQqZvfQLMK1UhkjqX2vm1fDnnSz6f/Xmzjy/mfMGceXMY2ncoS/ddmqX7Lc3SfZdmmX7LLHi7b4++WX8pkiQpY4WEkseB7UMI3WKMhhOpQsyund1iqGju2KzaWSzRewkG9x7M4N6DWaLXwrcH9x7M6kuuzuDeg+nRtQefzvyUKTOm8OrHrzJl5hQ+mfEJU2ZMYcrMKXQNXRcJKY1Dy9L9cu8bYCRJqliFhJKfAbsBvwghnBBjnFmimiQVKMbIV3O/KihU1B+PMS4SJho/Vhy4YpOho3/P/nQJhcwAbbru6TXTFwkpU2ak0FIfYOpf/2TGJ3QNXRcdbWlm9GXpfkvTr0e/Iv3pqlrNrp3NpzM/XfCYMnPKgoD96axPqYt19Ovej349Fn/07dG3ydf79ehHn+592v1/R5IqTYgxtn4WEEI4G1iDtFfJVNLIyQfA7CZOjzHG84tVpEprxIgRcfz48VmXIWBe3Ty+mP1FXoGi4TlfzP6CPt37NBssGgeKho/e3Xtn/WXnpT7ANAwpiwSZmYu+3yV0WSSktBRkDDDVIcbIF3O+WBgsGgSNxULHzE+pmV/D0L5D0/TDfksvmIZY/1qX0IUZNTOYWTOTGTUzFj5qZyzyfuPjs2pn0bt772ZDS9/uzQealo716NqDEELrfxCSlKEQwisxxhGLvV5AKKkj7UvS0ne8+uMxxti1LYWq42UVSv70zp+oi3UARCL1/xbb+zakXz5K8XZ765tXN29hkGgidMysmcmgXoMWDRS9l2Bwr+ZHMgb3HsygXoPo3rV7Ef5WKkPjAFM/+tJ45KX+/RDC4qMtjaaO1b/er0c/f/ErIzXzaxaGihlNBIwGoeOzmZ/Rt0ffRYJF/dv1oaPhawN6DijJ33VdrGNW7axmQ8sigaa2+WONj8+vm998mOnRt02jOn2796VrF3+cq3zNr5vP3PlzmTNvDrNrZzNn3py8H7PnpfPrYh1L9l6SIX2HMLTvUIb0GcKQvkMY0mdIp7lx15kUI5Scw8LNElsVYzw37+qUqaxCyajfjWJ+3fwFP/QDoWhvA4QQ2v52ia7dtUvXxUYtGq7LGNBzgNM6OliMkRk1M5oefakPLg3erw8wLY2+DO49mJ7detKrWy96detFz67pbX+5a139VMRFRjBaGNWYWTNzwS8SrYWNoX2H0qNrj6y/xJKpmV+zWMBpKdTMrJm52KhOUyM8Pbv1XBBSBvYcyKBegxY8lui1xCLvL3i998LX+/Xo5/e1ChZjXBAKWg0B+YSG+YWdP69uHr269aJ3994Lvue2+Oi6+GtdQhemzp7KZ7M+W3ADo/7tHl17LAgpCwJLn9zbueDS8JghpnXtDiWqXE7fkvLTMMA0NfpSH2y+mP3FIj+k585Lb3ft0nVBQOnVrVeTwaXh64u81taPa3RuFlN8aufX8t9Z/21yitSnsxYd4aj/JaC5KVONw8agXoP8hbeEYozMnjebGTUzmD53Ol/N/Yov53y54PHFnC8Web+p12fXzmZAzwGLB5aezQeZho++3fs6OtkG9SF1Zu3MJp9n1c5q+ljtzPxHGmpnUzO/hh5deyz2i36LIaGJYJDXxzXx6N6le8n+fdSPujcMKYu8PeuzxY5169Jt8cDSp+kAM6TvEPp071OS2suZoUTNMpRIpRdjZF7dvIVBpYnQ0tzreZ2be7u1a82rm0fPbj0LDjOthaM58+Yssgi8YfCYNncaS/ZectH1GX2anjI1tO9Q7zRWmHl185g2Z1qrQaa5YzXza5oMK4N6Nh9kGo7i9OrWqyxDTX3gayk4NPXcbJho9AzQt3tf+vbo2/Jzo9f6dO9D72698w4JPbr28MZATv2Nq+YCS+Mw8+nMT+nWpVvTgaWZ0ZhKCDHFmL41H7g1xviDVs67ETg0xlhIZy9lyFAiVY+6WFdY2Mnj3NnzZtOza89m12cM7j3YqWtqs5r5Nc2GmC/nfMkXs3NBZm7TxyIxrylnTR0b0HMAtXW1BQeHhqMOzY1KzJ43mx5de7QpODT33Kd7nwVvV/JUxUpRH2IahpTF3m70fpfQZfHA0uj9hm+XYyv95kJJIcEh0PIi98bnSpLKTJfQhd7dezsaoU6jfjrf0L5D2/Txc+bNaT7I5N5+/4v3F4SahsemzZ3WenBo8Hb/nv1Zpt8yeQWHPt37GNarXAiB/j37079nf1ZdYtVWz48xMrN25iIjL/WBZcrMKbzx2RuLjcoEQpPTydZdel0OXO/ADvgq81eK0Yx+QG0JritJklSQXt16sUy/ZVim3zJZlyK1SwhhQdOJQkJMU9PI5s6f2wEVF6ZooSSE0AVYE/gW8FGxritJkiSpMA1DzCpLrJJ1Oa1qMZTk1pE0dHAI4eA8rntb20uSJEmSVE1aGylpuDaktY0Ta4HJwH3AT9tZlyRJkqQq0WIoiTEu6PGW29H91hjj90telQoWQlgNOBnYFFgHmBBjXCfbqiRJkqTWFbKm5Fzg76UqRO22NrAL8BLQJfeQJEmSyl7eoSTGeG4pC1G7PRRjfAAghHArsFj/Z0mSJKkc5X03PYSwVgjh7BDCBi2cs2HunK8XpzzlK8ZYl3UNkiRJUlsUMsXnGNIC9s9aOOdT4GzgqPYUVY5CCMNDCCeEEG4PIUwIIdSFEGIIYe88PnZ0COGZEMK0EMKMEML4EMIxuTbKkiRJUlUrZE3JNsA/YozN7kESY/wohPB30l4lleYo4IRCPyiEcC1wNDAH+CupS9m2wDXAtiGEvR3lkCRJUjUrJJQsDzyax3nvA9u1rZyy9gbwv8B44BXgV8BWLX1ACGEvUiD5BNgyxvhO7vWlgXHAHsBxwFWNPm4gsGweNU2KMc4q7MuQJEmSykshoaQr+U33CkDPtpVTvmKMNzV8P4SWtmxZ4Izc82n1gSR3rSkhhKOAJ4HTQwhXNxot2QO4JY/rb5O7hiRJktRpFbKm4QNgk5bWQeSObQJ82N7COrsQwjBgI6AG+H3j4zHGp0ibTS5D2luk4bFbY4whj8eTHfClSJIkSSVVSCh5FFgOOK2Fc04l/2lela6+S9m/Yoyzmznn5UbnSpIkSVWnkOlblwPfBy4IIaxDWlMxIXdsOHAYsD8wHfh5MYvspFbJPX/QwjmTGp3bZiGEPsDOuXdXAgY06Az2coyxpTokSZKkzBSyeeJHIYR9gXuAA0gBpKEAzAD28xdgAPrlnme2cM6M3HP/Iny+oSw+Taz+/UOBWxseCCEcARwBsOKKKxbh00uSJEltU9A+GTHGx4C1gbHA28BcUqvbt3OvrRNj/HOxi1TrYowTW1h7cmsT598QYxwRYxwxZMiQDCqWJEmSkkKmbwEQY/wQOLEEtVSa+lGQvi2cUz+aMr3EtUiSJEllyx3FS2di7nmlFs5ZodG5kiRJUtUpeKQk1/Z3J+AbwBDgpRjjzbljQ4AlgPdijPOLWWgn9Fruee0QQu9mOnCNbHSuJEmSVHUKGikJIWxI6rj1IHAmqePW5g1O2Q74PxZ2gapauWlurwI9gH0aHw8hbAUMI+32/kLHVidJkiSVj7xDSQhhJeAvwGrAI6Q9SRpva/4AabPA3YtVYCd3ce75khDCavUvhhCGAtfl3h3TaDd3SZIkqaoUMn3rJ6SpWcfGGK8DCCFc2vCEGOOsEMI/WDgtqWLkRomua/DSWrnni0IIJ9e/GGPctMHb94QQrgeOAv4ZQngcqAW2BQYA9wPXlLp2SZIkqZwVEkp2BP6vPpC0YCLpl+5KMwDYpInXV2/pg2KMR4cQngWOAbYCupKmwN0MXO8oiSRJkqpdIaFkaeDFPM4LFGczwLISY3ySxaer5fuxdwB3FLUgSZIkqUIUstB9OimYtGZV4L9tK0eSJElStSkklLwGjAghLNvcCSGE4cD6wN/aW5gkSZKk6lBIKLkZ6AP8NoSwZOODIYQBwA25a/6qOOVJkiRJqnR5h5IY453AfcDWwL9DCA/mDm0aQrgLeB/YArg7xvhwsQuVJEmSVJkK2jwR2A+4lLRAftfca18nbQ7YD7gSOLBo1UmSJEmqeIV03yLGOA84PYRwCbANaVF7V+BD4PEY46fFL1GSJElSJSsolNSLMX4B3FvkWiRJkiRVoUKnb0mSJElSUTU7UhJCWLE9F44xTmrPx0uSJEmqDi1N35oIxDZeN7ZybUmSJEkCWg4Ok2h7KJEkSZKkvDQbSmKMK3dgHZIkSZKqlAvdJUmSJGXKUFLFQgijQgg3TJs2LetSJEmSVMWaDSUhhINCCN9s5tiAEEKvZo4dEEK4vFgFqnRijA/FGI8YOHBg1qVIkiSpirU0UnIrcFgzx74Arm3m2A7ACe2oSZIkSVIVaev0rZB7SJIkSVK7uKZEkiRJUqYMJZIkSZIyZSiRJEmSlClDiSRJkqRMGUokSZIkZapbK8dXCyEcVOCx1dpZkyRJkqQq0loo2Sz3KORYAGJ7ipIkSZJUPVoKJU9juJAkSZJUYs2Gkhjj1h1YhyRJkqQq5UJ3SZIkSZkylEiSJEnKlKFEkiRJUqYMJZIkSZIyZSiRJEmSlClDiSRJkqRMGUokSZIkZcpQIkmSJClThhJJkiRJmWp2R/eWhBCGAcsBvZo7J8b4dFuLkiRJklQ9CgolIYQ9gYuB1Vo5NRZ6bUmSJEnVKe/gEEIYBdxNmvI1Dfg38FWJ6pIkSZJUJQoZzTgTCMBZwP/GGGtLU5IkSZKkalJIKFkXeC3GeFGpipEkSZJUfQrpvlULvFWqQtTxQgijQgg3TJs2LetSJEmSVMUKCSWvAKuWqhB1vBjjQzHGIwYOHJh1KZIkSapihYSSMcDGIYTtS1WMJEmSpOpTyJqSt4ALgQdDCGOBh4FJQF1TJ8cYJ7W/PEmSJEmVrpBQMpG0/0gATs49muM+JZIkSZLyUkhwmEQKG5IkSZJUNHmHkhjjyiWsQ5IkSVKVKmShuyRJkiQVnaFEkiRJUqYMJZIkSZIy1eyakhDCfNLC9rVijG/n3s9XjDHafUuSJElSq1oKDiH3aPh+vgo5V5IkSVIVazaUxBi7tPS+JEmSJBWDQUOSJElSpgwlkiRJkjJlKJEkSZKUKUOJJEmSpEwZSiRJkiRlylAiSZIkKVOGEkmSJEmZMpRIkiRJylTeoSSE8GoI4Z5SFiNJkiSp+hQyUvJ1oLZUhUiSJEmqToWEkg+AfqUqRJIkSVJ1KiSU/AHYMoSwVKmKkSRJklR9CgklFwITgEdDCJuUqB5JkiRJVaZbAec+DMwHRgLPhxCmkKZ0zW7i3Bhj3LYI9UmSJEmqcIWEkq0bvB2AZXKPpsS2FiRJkiSpuhQSSrYpWRWSJEmSqlbeoSTG+FQpC5EkSZJUndzRvYqFEEaFEG6YNm1a1qVIkiSpihUyfWuBEMLywJbA8rmXJgNPxxgnF6swlV6M8SHgoREjRhyedS2SJEmqXgWFkhDCIOBaYF8WH2WpCyHcBRwbY/yySPVJkiRJqnB5h5IQQm/gCWA9UnetF4F/5w6vCmwCHACsGULYPMbYVKtgSZIkSVpEISMlJwLrA88Dh8cY/6/hwRDCmsAvgc2A44FLilWkJEmSpMpVyEL3fYEvgF0aBxKA3Gu7AV8C+xenPEmSJEmVrpBQsjowLsbYbKum3FqScblzJUmSJKlVtgSWJEmSlKlCQsm7wNYhhP7NnRBCGABsnTtXkiRJklpVSCj5PTAYeDCEsFrjg7nX7gOWAO4uTnmSJEmSKl0h3beuAPYDtgL+L4TwIvA+qT3wqsCmQFfgn8CVRa5TkiRJUoXKO5TEGGeFELYBrgf2IrX+3azhKcA9wFExxllFrVKSJElSxSpoR/cY41Rg3xDCisAWwPK5Q5OBZ2KMk4pcn6TOaN48ePdd+Ne/oF8/2HHHrCuSiuu++9Lz7rtDCNnWIkkVoJAd3e8FPokxHp0LH78tXVmSOoXaWnjvvRQ+/vUvePPN9Pzuu7D88rD22vDKK3DZZbC/2xepQjz3HBx5ZPo3fuGFcP758O1vG04kqR0KGSnZBbi/VIVIKmO1tSlo1IeOpsLH2mvDrrvCaafB8OHQp0/62H/+E7bdFoYMSc9SZ/bxx7DvvnDrrSmI3HcfnHRSCicXXABbb511hZLUKYUYY34nhvBv4O8xxj1LW5I62ogRI+L48eOzLkPloHH4qA8gjcPHWmul569/HXr3bv26Tz0F++wDjz4KG2xQ+q9DKoWaGvjWt2CHHeDssxe+Pn8+/O53cM45sMoqaeRk000zK1OSylkI4ZUY44jFXi8glIwFDgBWciF7ZTGUVKH68NFw1ONf/0pTsYYNWxg66gNIvuGjJffcAyecAM8+m36eR4uDAAAgAElEQVRxkzqb446DiRPhgQegSxMd9Wtr0wjK+efDeuul5/XX7+gqJamsFSOUDAZeBt4CjowxfljcEpUVQ0kFay18NBz1WHvtNO2qveGjJddcA2PHpjn5Q4aU7vNIxXbbbSlkvPwyDBrU8rlz5sCNN8LFF8Pmm8O558Kaa3ZMnZJU5ooRSm4GlgJ2BWqAV4EPgNlNnB5jjD9oe7nqSIaSCtAwfDQMIA3DR8MAUurw0ZKf/AT+8hd44onUmUsqd6+9lqZsjRsH66yT/8fNnAnXXpsaPXz722l616qrlqxMSeoMihFK6kh7keTTXiTGGLsWVqKyYijpRGpr4Z13Fl/z8d57sMIKC0NHOYSP5sQI3/8+TJmSpsF07551RVLzpk6FESNgzBjYb7+2XWPaNLjySrj6athrL/jpT9PNAkmqQsUIJYeQQkleYoy/zrs6ZcpQUobyDR/1AaQcw0dLamvhO9+BoUPhlltsparyNH8+7Lwz/M//pNGO9po6NV3nhhvgwAPhjDNg6aXbf11J6kTaHUpUuQwlGaoPH43XfPz73yl8NF7zscYanSt8tGTmTNhmG9h++9ROVSo3Z54JL74Ijz0G3Qraa7hln3ySRl5+8xs4/HA49VQYPLh415ekMlaMkZLPgTdijFsWuzhly1DSQerq4KGH4O9/bzp8NJ521atX1hWX3mefwWabwfHHw7HHZl2NtNC998KPfgTjx5euKcOHH6a9Tf7wh9TZ60c/ggEDSvO5JKlMNBdKCrn10wOw45bUVtdemx577w27754WfFdL+GjOkCFp75LNN4dllkl/NlLWJkxIO7Y/8khpu8StsAL88pdppOTcc2G11eDkk+GYY6Bv39J9XkkqQ4WEkndJ3bdUpkII+wDfBTYCBgPvAdcDv4wx1mVZW9V7++30S8fzz6cpWFpolVXgj3+EHXeEpZZyR2xl66uvYI890vSqkSM75nN+7Wup5fCbb6YOXauvntabHHEE9OzZMTVIUsaa2P2pWbcDW4YQ3PWsfJ0EzAVOIbVuvh8YC1ySZVFVb948OOig9MuGgaRpG2yQdsTed194/fWsq1G1ihEOOQS23BJ+kEFX+7XWgrvvTiM0jz2WwsmNN6a1Z5JU4QoJJVcAjwJPhBD2CyF4+6b8jIox7hdjvDPGOC7GeDZwNXCsf18ZuvTStB/H0UdnXUl523bbtLHizjvDBx9kXY2q0SWXwOTJ6d9hltZfP60/u/vu9FhzTbj99tQNTJIqVCHTt94h7VGyEnAHQAjhU5rfPPFr7S9PhYgxftbEy68BvUjTuT7u2IrE3/8OV1wBr74KXQq5B1Cl9t8/dSb69rfh2WdhySWzrkjV4rHH4Kqr0o7t5TJlatNN00ajTz6Z1qBdfDGcd16aXub3E0kVppDvaiuTAgmkcBKApXOvN/VokxBC7xDCqSGEl0MIX4YQZoUQ3g8h/D6EsFlbr1sMIYThIYQTQgi3hxAmhBDqQggxhJDX6twQwugQwjMhhGkhhBkhhPEhhGNCCKX86bIF8DnwaQk/h5oyd27ai+DnP08LWpWfE0+EUaPSY9asrKtRNZg4Mf1f/d3vynNTw623TiH9ssvgoovSZo4PP5ymm0lShSikJfBKrZ+1UIyx4PkXufUqjwGrke7qvwTMI4WhDYBzY4wXFHrdYgkhXAmc0MShfWKM97TysdcCRwNzgL8CtcC2QH/gPmDvYi9GDyGMAF6glT83WwKXyOmnw1tvpdaibg5YmLo6OPjgtBP2vfcWd48IqaHZs1Nb6gMPTC15y12McP/9aVf4AQNSS+FvfSvrqqTOq64urdsqlxHSKlD2myeGEPoC/wBWBc4ALosxzm9wfElgyRjj2xmVSAjhMGANYDzwCvArYCtaCSUhhL2Ae4BPgC1jjO/kXl8aGAesCZwYY7yqwccMBJbNo6xJMcbFbieHEJYhhbqPgK1jjM2ulDSUlMDzz8Nee8E//pF2LVfhamrSaMlKK6W2qQY7FVv9wvaaGrjjjs71b2z+fLjrLvjZz9JI7AUXwDe/mXVVUvmpqUl7Ak2alNYrNn589FFqwf3Xv6b1XCq5zhBKLgZOB66JMR7XzmutCHw3xnhxK+dtAIyMMd7Qxs/zJPmFkvGkNr0Hxxhva3RsK+BJUmBZvn60JIRwCHBLHmVsE2N8stE1B+au2QvYPMY4taULGEqKbMaM9I3tf/83zf1W202fnnZ933XX1L1MKqZrr02B94UXOu++IPPmpXbC554L66wD558PG26YdVVSx5kxo+mwUf/47DNYdtl0g6v+seKKi7798MNp6vDTT6cW3SqpgkNJCGFL4JNCRyZCCNsBa8UY825fEkLoAfwHWBJYNcb4fiGfs4nr/QXYDrgGOD428UWGEDYmdRMbCKwXY/xnGz7Pk7QSSkIIw0ibTtYAg2KMizUGCCF8BCwPbBZjfL7QOhpdqxfp61oN+GY+0+gMJUV29NEwcyb8+tdZV1IZpkxJ02tOOSVtaCcVw3PPpZsGL7xQGb+EzJ0LN92U1px84xsppKy9dtZVSe0TI/z3vy2HjjlzFg0ZjUPH8svnNwX4+uvTuq3nnkub+apk2rKj+5OkO/WLNWsPIXwO/LaZEY3vAgeR9sfI10akQDI5xvh+CGFDYA9gKDAFeCzG+GwB1zsUeAI4FugZQjiyYTDJLZh/hLSe46i2BJICbJB7/ldTgSTnZVIo2QBocygJIXQD7gbWBbZqy7oetdNjj6WNAN1ro3iWXjrt+r7FFunt3XfPuiJ1dh9/nPbEufXWyggkkObDH3MMHHooXHddWmey/fZphHG11bKuTmravHnwn/8sHjTqp1pNmpT+bTcOHFtssfD9IUOKM/XyqKPSqMq3vw1PPQUDB7b/mipIa9Gxub/lQUAxx7r/J/c8OYRwGWkTwIZ+GkK4H/hejHFmaxeLMX6Umxb1BHA40COE8P0YY10IYWvgj0Bv4LAY481F+yqaVr/ZZEsBYVKjc9vqWmAUcCrQJ4SwaYNjb8YYv2p4cghhFDBqNX9gFccXX6QN1265BQYNyrqayvK1r8GDD8JOO6Vd3zffPOuK1FnV1MA++6RRt513zrqa4uvTB04+OX19V12V2grvsUdaGL/iillXp2oze/aiazkar+v4z39SqGgYONZfH77znYWv9e/fcfX+9Kfw6aew227pZlivXh33uVXQPiWlNDj3vAGwMXAlaerVVGBL4Dpg99zzwflcMMb4cS6A/DX3MT1CCL8B/gD0AA6JMf6miF9Dc/rlnlsKUzNyz+39n7dj7vnSJo5tQxr9WiDG+BDw0IgRIw5v5+cVwPHHp2+k222XdSWVacSItIHcXnvBE084NUVtc9JJsMQScNZZWVdSWv37p6/x6KNTW/INNoDRo+HMM9P8eqm9YoQvv2w6bNQ/pk1LbbYbho5ttln4/rBh5dX1KoS0eero0XDAAfD739v9sQOVy590/T4d3YHbY4wN+zI+GEL4D/A34MAQwnkxxvfyuWiMcUoumDwOHJB7zCONuNxZtOrLRIxx5axrqFp/+AO89BK89lrWlVS2HXdMc3532il1OCvHPSVUvm67Df7857RBYrVsPjh4MFx4IZxwAowZk8L8YYfBaae5OalaVleX1vS1tJ4DFl/HMWLEwteWWabz/V/r0iV9r9h1V/jhD+HGGztXZ75OrFxCyfQGb9/Y+GCMcXwI4RVgBGlheV6hJPex/83tL1LfyepV4N521Fqo+lGQlqa71Y+mTG/hHJWrKVPSXO777++8HXw6kwMPXLjr+zPPpLveUmteey2NkowbV53TK4cOhcsvT38GF1wAa6wBxx4LP/6xc+e10PTpcNBB8M9/pla5AwcuGjqGD4cddlj42qBBlfkLe48e6WbjttvCT36SGkio5MollLzfzNuNzxkBFNQSIYSwDynozAXeIk0Puz+EsGeMcU4bai3UxNxzS5tP1m/3PbGFc1SOYoQjjoDvfz/N3VbHOPnkNBf5O99J83579866IpWzqVNhzz3hmmtS29xqtvzyqcvQqafCeefB6qunYHLccd5UURpB6907tchdccXq/t7av3/6c9hii7TupTNsrtrJlcuYWsM5L82NJy+Ve57RzPHFhBC+C/yOtHv6bsBmwNPATsAfQwh9Ci+1YPVf29ohhOb+d49sdK46i1//GiZOTBuYqeOEkObJL7ccfPe7aSM5qSnz56f54XvtBfvtl3U15WOVVVJTjmeegb//PTWTuPLK1F5V1WncOHjoodS9bfjw6g4k9YYMSTe+Lr88rWlUSbUWSpYJIWzZ+NHKsYKbO8cYJ5N2HwfYtvHxEMISQP1uUHltqJHbfPA2YA6wS4zxsRjjDFIgeTz3eR4JIfRr/irtF2P8kDRlrAewTxN1bgUMI22e+EIpa1GRffBB2jvjN78pr4V61aJLlxQKp01LTQbKZCNYlZmzz4ba2rSeQosbPhzuvDO1Mx83Lo2c/PKXqUuZqseMGal75C9+UZ3TG1uy0kppLdpJJ8Ejj2RdTUVrLZTsCIxr4hFbOLZDG2u5MPd8ZghhwYYquc0ArydtcvgKefziHkI4HLiZ1PFqxxjjuPpjMcZZpLa5fyKtT/lzCGFAG2vOV/3O8peEEBb03w0hDCV1FAMYU7+buzqBurq0H8BJJ8G662ZdTfXq2RPuuy9tduWcXzV2333p7uZdd9lBpzXrrgsPPJDm0d97L3z962mxr6OQ1eGMM9I0pV12ybqS8rT22mnd6MEHpyYrKomWdnSfSAofbRJjLHjPjQZ7lNQCL5JaAm8MLAdMBraJMb6Tx3UuJ22guGOM8W/NnNODtNHg+sCWMcZJTZ3X6GM2ZGGIAFiL1Mb3HeDz+hdjjIstLgghXAccRRq5eTz3NW4LDADuB/aOMWby3d8d3dtg7Nh0d/GZZ6Br16yr0ccfp13fzzorre+RJkyALbdMc8JHjmz9fC3q6afTAt///jftDr/33p2vi5Ly89RTaYrjG2/YOKQ1f/oTHHII/PWvrk9rh+Z2dG82lGQlhLAnaSf2DYA+pI0FHySNJHxWwHVWbC1o5HZAHxJj/DjPa25NGg1qUYyxyVYUIYTRwDGkzSK7AhNIIzrXZzlKYigp0IQJafO+F15IUx1UHt5+G7baKrVv3HXXrKtRlr76CjbZJDVE+MEPsq6m84oR/vKXFPZrauD889P/rUrstlStZs5Mo2RXXgmjRmVdTefw29/C6afDs8+mqV0qWKcJJep4hpICzJuX7sgfdFBqA6zy8tJL6Zemhx6yG1q1ijEtah8yJK2NUPvFCA8+mDp2HXlk6talynDiiWk0zEXchbnqqtQQ4Nln0/caFaS5UOIkW6kQY8akvu1HHZV1JWrKJpukxe+77w5PPpnmxau6XHIJTJ4Mv/td1pVUjhBS++11103/x771LVh//ayrUns98wzcfXfak0SFOeEE+PRT2HlneOKJ1D5Y7eYEUSlfr72W1pLcfLNzq8vZzjun8LjTTmkvE1WPxx5LdzD/8Ac74pXCKqvAFVfAAQfArFlZV6P2mDUrrb+77jpYsrmdGNSiCy5I4XyPPWDu3KyrqQj+ZiXlY+7cNGXr5z+HYcOyrkatOeQQOPzwFEymTcu6GnWEiRPhwAPTCIn/R0vnu9+FjTZKnQfVeZ11VmoAsfvuWVfSeYWQNiIdMCB977FTXbsZSqR8nH12WtT+ve9lXYnyVd/icvfdvYtV6WbPTju2n346bL111tVUvmuvTRvKPfBA1pWoLZ5/PoX3sWOzrqTz69YN7rgjTeVyv6x2M5RIrXn22dSv/5e/tOtMZxJCmsqz5JJplKvObYAqUozwwx+mTQBPPDHraqrDwIFpYfSRRzpFsrOZPTvtsXXNNbDUUllXUxl69UoB/fnn4bzzsq6mUzOUSC2ZMSNtlvSLX9hhozPq2jX98vTJJ/CjH3kXqxJdfz28+ircdJM3DTrSN7+ZGn4cfLCBvzM5++y0DmKvvbKupLIMHJh2fb/99rROR21iKJFacsopaQrQd76TdSVqq/q7WE88Af/7v1lXo2J6/nk455y0c3vfvllXU31+8pN05/2KK7KuRPl48UX4zW/SKImKb+ml07TGiy5KXc1UMFsCS8159FF45BF4/fWsK1F7DRqU7mJtthkss0yazqXO7eOPYd994dZbYbXVsq6mOnXrlu4Mb7xxahO8wQZZV6TmzJmTpm1dfbWj/qW06qrp94bttoMlloDtt8+6ok7FkRKpKV98kXaCvvnmNCyrzm/55eFPf0obwP35z1lXo/aoqYF99oEjjkgtoJWdlVdOu4GPHm2b4HJ2zjmw9trp/41Ka911U1vy0aPh5ZezrqZTMZRITTn22NTNZ9tts65ExbTmmnDvval9oz8sOq+TTkp3Ic86K+tKBOmXrxEj3Om9XP3tb3DLLalrmjrGFlvAr34Fo0bBhAlZV9NpOH1Lauyee2D8+LRZoirPN7+Zfljsths8/XRq9azO47bb0kjXyy+7iWk5ufbatID6/vvd+6KczJ2bpm1ddVVa86COs9tuMHUqfPvbqYun+ye1ylAiNfTJJ2mU5P77oU+frKtRqey2G0yZkn5YPPdcWmei8vfaa2mUZNy4tE5I5WPAAPjtb9Pu1htvDMstl3VFgtSidvhw2G+/rCupToceCp99BjvuCM88A4MHZ11RWfM2k1QvxrQL+GGHwaabZl2NSu3ww1M70513hunTs65GrZk6NU2pvOYaWGedrKtRU77xDTj6aPcFKhfjx6dW2dddZ7vsLJ1yCuy0E+y6K8ycmXU1Zc1QItW75Rb46KPUx13V4ac/TXd199wzLZ5WeZo/P61b2Gsv7/iWuzPPTJ2eLr8860qqW/20rcsvdyQ4ayHApZemqcL77AO1tVlXVLYMJRLAxIlw2mlpvnqPHllXo44SQpoL368ffP/73t0tV2efnULjmDFZV6LW1LcJvuSStKmlsnHBBak97ejRWVciSOvfbropbejrz5pmGUqkurp0R+nkk+F//ifratTRunaFO+5YGExVXu67L234dtdd6Rdelb+VV04Lq0ePdrpKFl59FX75S/jFL5y2VU66d0/fx95/P62NizHrisqOoUQaOzbdhT355KwrUVZ694YHH4SHH3baSTmZMAGOPDJ1xBs6NOtqVIjRo2HkSNsEd7SamnST7bLLYNlls65GjfXpAw89BI8/7shvE7ztpOo2YUIa5n7xxXTHXNVr8OCFu74vuywccEDWFVW36dNTJ6eLL07rftT51LcJvu++9Hep0rvoIlhhhbQXk8rTEkvAo4+mnzVDhqTmOgIMJapm8+alLjHnnw+rrZZ1NSoHK66Ydn3fdtv0w2K77bKuqDrFCIccAltuCT/4QdbVqK3q2wTvvnsKlssvn3VFle3vf0+dtl57zWlb5W655VIw2WorWHJJQ3uO07dUvS6+ON2x+OEPs65E5WSddeD3v0/TT9xAMxuXXpo64Y0dm3Ulaq9vfAOOOSa133Zxb+nU1qZpW5deavjrLNZYA/74RzjiCHjyyayrKQuGElWnV16Bq69OO3t7R0mNbbllWiS6667w739nXU11+ctf0iLpP/wBevbMuhoVQ32b4J//POtKKteYMWna6cEHZ12JCrHRRmnx+777ehMMp2+pGs2Zk6ZtXXEFDBuWdTUqV3vumXZ933HHtOu7C61Lb+LENBf+zjv9v1lJ6tsEb7xxmhq54YZZV1RZXn89jSo6batz+ta30rS7XXaBp5+u6unkjpSo+vz0p7DmmvZvV+uOOgr23z+NmMyYkXU1lW327BQETzsNtt4662pUbPVtgg84wDbBxVQ/bWvMGIN8Z7b33vCzn6WbYB9/nHU1mTGUqLo880xaeHn99d5RUn7OOy/tX7Pvvu7EWyoxprVdw4fDiSdmXY1K5YADYJNN4Ec/yrqSynHppbDUUmlDPnVuRx6ZAuZOO8GXX2ZdTSYMJaoe06enjj6/+EXqrCTlI4S0EVnXrnD44W54VQrXX582fLvpJm8WVLprroG//jW1CVb7vPEGXHkl3Hij/28qxU9+ktY0fuc7afS4yhhKVD1OPjm139ttt6wrUWfTrVtajPjWW+mHhorn+efhnHPSL6l9+2ZdjUqtvk3wD38IkydnXU3nNW9euqt+4YWplbkqQwgpaC6/fBpZnDcv64o6lKFE1eFPf0o9wa+8MutK1FnV78R7772pc5va7+OP07S4W26p6sWdVWfTTeHYY1PDEdsEt81ll8GgQWn0VpWlSxe49dY0UnLkkVU1Om8oUeX7/PP0jfuWW9JdOqmtlloq7fp+ySVpLxO1XU0N7LNP6tG/yy5ZV6OOduaZ6d/AZZdlXUnn8+ab6c/NaVuVq0eP1Bb9jTfgjDOyrqbD2BJYle/YY2GvvWCbbbKuRJVg5ZXh4Ydh++3T2iQ7RbXNySenzUvPOivrSpSFrl1Tm+CRI1Ob4I02yrqizqF+2tYFF6TvRapc/fqlnzVbbJF+1px0UtYVlZyhRJXt7rvTAtpXX826ElWS9dZbuOHV44/DuutmXVHn8pvfpCmVL7+cpiqoOq20UtpfY/To9D3aNUWtu+KK9Od0xBFZV6KOsNRSaer55punYHLQQVlXVFIhVtFcNS0qhDAKGLXaaqsd/s4772RdTvF9/DGsv35aB7DxxllXo0p0993w4x+nzRVXWinrajqH116DHXaAceNgnXWyrkbl4OCD03SVG2/MupLyNmFC+uX05ZdhlVWyrkYd6c0302yPm2+uiOmuIYRXYowjGr/uLaoqFmN8KMZ4xMCBA7MupfhiTOtIjjjCQKLS2XdfOPXUtOHV1KlZV1P+Pv88TaW85hoDiRa65hp44ok0h15Nmz8/Tds691wDSTVaay144IG0rcFzz2VdTckYSlSZbr4Z/vOftHu7VErHHw+77552fZ81K+tqytf8+anF5Z57wn77ZV2Nykn//nDHHXD00fDRR1lXU56uugp69oSjjsq6EmVl003TOqw990wL4CuQoUSV5/334fTT4bbb0pQAqdQuvhjWWAP237/q+srn7eyzU7elMWOyrkTlaJNN4Ljj0pz5+fOzrqa8vP02XHQR/OpXrsGqdjvumLY22GknmDgx62qKzn/dqix1dWmI+9RTnR6ijhNC2o28pibdyXSt3qLuuy8tbr/rrrQRpdSUM85Iod42wQvNnw/f/34K9V/7WtbVqBwccACcckpam/fpp1lXU1T+dFBlueqq9E38xz/OuhJVm+7d4Z570mLEPfaAb3wDhg9PIyhf+1qaelGNJkxIa7sefhiGDs26GpWz+jbBI0akNsEjFlsHW32uvjqNjhx7bNaVqJwcfzx89hnsvHNqGtK/f9YVFYXdt8SIESPi+PHjsy6j/d58E7baCl580TtKys7nn6dw8vbb8NZb6TFpEgwbtjCkDB++8O3llqvcDdCmT0+NJk46CQ47LOtq1FncdVdaD/jqq2mvhmr17rtpHcELL8Dqq2ddjcpNjPDDH6Z/J4880qlufDXXfctQosoIJbW16c704YfDkUdmXY20qNpa+Pe/F4aUhoFl1qwUThqHlTXW6Nx3v2KEvfeGJZeEG27Iuhp1Nocckqb63XRT1pVko64ubcy6555w4olZV6NyNX9+6gLZpQvceWcabewEDCVqVkWEknPPTSMkjzxSuXedVZm+/HLRkFL/9jvvpB3PG4aV+sCy8srlvzbjkkvg3nvh6ac71R08lYnp02GDDdK/o732yrqajnf11emXzKef7jS/aCojc+akaVxrrAHXX98pfgcylKhZnT6UvPJK6kTx2muw/PJZVyMVR11dao9aH1YaBpZPPoFVV118dGX48LQDcNY/lP7yl7Qh3t/+lqatSW3x0kuw224wfjyssELW1XSc995L3cieey79n5Za89VXaWRt1Kh0k7bMGUrUrE4dSmbPho02grPOgtGjs65G6hizZ6d5xE1NBwuh6bCy+urQq1fpa5s4Mc2Dv/PO9ENSao8LL4THH0+PahgxqKtLi/x33TWtxZLyNWUKbL45nHBC2TdGMJSoWZ06lJx0UlpEfPfd2d8dlrIWY+rI0tR0sPffh2WXbTqwDBtWnP0PZs9OPxS/9z340Y/afz1p/nz41rfSaPjpp2ddTeldd11qn/3ss9URwlRc778PW2yR2mrvv3/W1TTLUKJmddpQ8tRTqV/366+nKSuSmjdvXhrFaGo62LRpsNpqi4eV4cNh4MD8rh9j2iNo7ty0O7c3CVQskyal9sAPPwwjR2ZdTem8/376+p59Fr7+9ayrUWf1z3/CdtulcLvDDllX0yRDiZrVKUPJ9Omw3nowdmwa5pbUdl99lRbWNw4sb78NffsuvtB++PC0pqV794XXuP76dJf3xRfTx0jFdPfdaZpupbYJjjH9IrnjjmnzX6k9nn02dW774x9TW/YyYyhRszplKDniiDSs/6tfZV2JVLlihMmTF50OVh9YJk+GFVdMAWXlldPeEs8/n0ZcpFI49NA0zbASv+//8pdw881pcXu5d9ZT5/DQQ2mbhCefLLuRt+ZCif/y1fk88gg89liatiWpdEJI602GDUvz+huaOzcttq8PLA88YCBRaY0dCxtumDYn3XvvrKspng8+SKNATz1lIFHxjBqVWmrvuGMKu52gE6L/+tW5TJ2akv9vfwsDBmRdjVS9evaEtddOD6kj9O+fvvePGpVa5lZCm+AY4bDDUtOWtdbKuhpVmoMPTs1PdtgBnnkmbWZbxorQbkXqQMcck3YvtdWoJFWfjTdOLU8PPDBN4e3sbropbaB68slZV6JKdfLJae3tLrvAzJlZV9MiQ4k6j7vugn/8Ay66KOtKJElZOe209HzppdnW0V6TJsGZZ8IttzhtS6V1ySWw5pqw115QU5N1Nc0ylKhz+M9/4Pjj4bbboHfvrKuRJGWla9fU7iGPxREAAB5PSURBVPSKK+Dll7Oupm1iTA1bTjwR1lkn62pU6UKAG2+EHj1Sw4i6uqwrapKhROWvfs7tD39Y2T3qJUn5WWEFuPZaGD0aZszIuprC3XJLmutv+191lG7d0oyTSZPS5rZl2H3XUKLyd9NNMGVK6k4iSRLAPvuk3auPPz7rSgrz0UdpCtottyy6149Uar17p1bB48bBxRdnXc1iDCUqb++/n+bc3nab37wlSYu66qrUVej3v8+6kvzUT9s67jhYd92sq1E1GjQIHn0UhgzJupLFGEpUvubPT+3sTjvNtqOSpMXVtwk+5hj48MOsq2ndbbfBxx/DGWdkXYmq2bLLpu0VyoyhROXryivT849+lG0dkqTytfHGacF4ubcJnjwZTjnFaVtSMwwlKk//+heMGQO33po6rUiS1JxybxMcIxx5JBx1FKy/ftbVSGXJxtgqP7W1cNBBcOGFsOqqWVcjSSp39W2CN9oIttuu/Do13n576np0771ZVyKVLUdKVH4uvBCWXros5ztKkspUubYJ/vhjOOmkNPLfo0fW1Uhly1Ci8vLyy3D99akNcAhZVyNJ6kzKrU1wjGmPrSOPhA03zLoaqawZSlQ+Zs9O07auugqWWy7raiRJndHYseXTJvh3v4P33nOfLSkPhhKVj5/8JPVt33//rCuRJHVW/frBHXekNsGTJmVXxyefpO6Rt94KPXtmV4fUSRhKVB6efBLuuguuuy7rSiRJnd3IkSkQZNUmOEY4+mj4wQ9gxIiO//xSJ2QoUfa++goOPRRuuAGWXDLraiRJleDUU9PaxEsu6fjPfffd8NZb8LOfdfznljopWwIrez/+cWrhuMsuWVciSaoU9W2CR4xIP2M23rhjPu+nn8IJJ8CDDzptSyqAoUTZevhh+Otf4fXXs65EklRpGrYJfu016N+/9J/zmGPg4IM7LgRJFcLpW8rO1KlwxBFpEWBH/KCQJFWfvfeGrbbqmDbBv/89vPEGnHtu6T+XVGEMJcpGjHDUUbDffumHhSRJpXLVVfDcc2mtR6l89lkKPrfcAr16le7zSBXKUKJszJkDQ4ak3dslSSqlfv3gt7+FY48tXZvg446D730PNt20NNeXKpyhRNno3TvN8+3dO+tKJEnVYOTI1Fjle98rfpvge+9Na1bOO6+415WqiKFEkiRVh1NOSV25xowp3jWnTk0jMDff7I02qR0MJRUkhLBPCOH+EMKHIYSZIYTXQwhHhRD8e5Ykqb5N8Nix8NJLxbnm8cfD/vvDZpsV53pSlbIlcGU5CfgAOAWYAmwDjAVWzb0mSVJ1GzYMrrsOvvvd9rcJvv9++Nvf4B//KF59UpUKMcasa1CRhBCGxBg/a/Ta5cBRwKAY49ymPm7EiBFx/PjxHVGiJP1/e/cdbldVp3H8+wKhS5EiCBpQQAFhIAlFGIbQpEMioDDABBQdIBSBBGZGHRkRRFAMIkWQzqAIKopIUZEaRBKKdGGkhFAEgUBoCfCbP9Y6ycnh9H7vfT/Ps599z15777XOWefee35nNbP+cMAB8M47aVr6Zrz0EnzqU3DZZbDZZm0tmtlgJmlqRIwqPe5uPYNIaUCS3Q0sDHywy8UxMzPrX5MmweTJKahoxuGHwx57OCAxa5O+DkoknSAp8jahD8rzCUmHS7pE0sOS3stl273O6/9V0i2SZkiaKWmKpPEdHvOxGfAS8PcO5mFmZjawLL44XHppmsr3yScbu/aqq1JAc8IJnSmb2RDUt0GJpA2Ao4F+6l92EDAJ2Bv4BKB6L5R0OvC/wCjgFuB3wBrAD4ErOhGYSBoF7A98PyLaPP+hmZnZADdqFBx1FOy7b/3TBL/8clr897zzYLHFOls+syGkL4MSSQsBF5IGa/+qx8Updj9wMvB5YDXgpnoukrQbcDDwHLBuROwUEWOB1YGHgLHAoSXXLCnpk3Vsi1bIcwXg58Cfge8093TNzMwGuYkTYYEF4Nvfru/8I46AsWNh8807Wy6zIaZfZ9/6JrAmsAuwW6MXS/oosHdEVP0LI2l9YIOIOLue+0bEj0uur7dI/5n3x0TEo0X3e17SQcCNwH9IOi0i3svJY4Hz67j3Fvn64nItCVwDvAHsEhGz6y2omZnZkDLffHDRRTByJGy9dfUV2a++Gm6+Gf7yl+6Vz2yI6LuWEkkbkaa2vTQirmryNucCJ0g6TRUiB0kbAjcAZ0lap8l8apK0MjASmAVcXpoeETcB04EVgI2Ljl8QEapju7Ekv4WBXwPLA9tFxD869dzMzMwGhZVXhjPPTNMEv/pq+XNeeQUOPBB+/OM0HsXM2qqvgpL8gfpC0sDsw1u41f7Ao8AhwI9KAxNJm5LGdCwJHBQR97WQVy3r5/0DEfFmhXPuLDm3KZIWAH4GrAtsHxENjtwzMzMboj77WdhyyzTwvZyjjoKdd07nmFnb9Vv3reNJA8j3jIgXm71JRDwtaXNSS8iXgAUlfSEi3pM0GvgNsAhwQESc14ZyV7Nq3lcLEJ4qObdZpwM7kyYIWFRScRv0gxExz9c/knYGdl5ttdVazNbMzGwQmDQJRoyAn/40rdJecO21cMMN7rZl1kF901IiaRPgK8CVEdHkpOFzRcSzwGjgAWAccImk7YHfktbt2K8LAQlAoY339SrnzMz7FpaVBWDbvD8JuL1kG1F6ckRcFRFfXnLJJVvM1szMbBBYbLE0TfBhh82dJnjGDPjyl+Gcc1pb/d3MquqLoETSIsAFwKukWaraIiKeJwUm9wJ7kQKSYcA+EXFxu/LpFxGxSr1jT8zMzKyMkSNhwgTYZ5+04vvEibD99mkQvJl1TF8EJcAJpOlxj8wtHG2Tu4FNKjp0F/CLduZRQ6EVpNpk5oXWlNc6XBYzMzOrZcIEWHBB2H13uO46OPnkXpfIbNDrlzElY4H3gHGSxpWkfTLvD5K0E/BYRBxQ740l7QGcA7wNPAJsCFwp6bMR8VbrRa/pibwfXuWcj5Sca2ZmZr1SmCZ4ww3h/PNhiSV6XSKzQa9fghJIrTbVViL6WN6WqveGkvYmzeY1CxgDTAauBrYHfiNpl4h4o+kS1+fuvF9b0iIVZuDaoORcMzMz66WVVoJp01KAYmYd1xe/adXGQpCCCoCJ+dh69dxT0n7ARcBbwI4RcX1EzCQFJL8HtgJ+K6mjk41HxDRSl7EFgT3KlHNzYGXSau+3d7IsZmZm1gAHJGZdMyh/2yR9CTiPNOPVthHxx0JabhnZmbTi+ebAtZI63S5bWFn+O5LmzL8raXngjPzwxKLV3M3MzMzMhox+6r7VTmsCM0gByZ9LEyPiLUljSAsNrkfqElZhCde5JI1gbhABsFbenyBpQtH9i9cHISKukHQmcBBwn6TfA7NJrTVLAFcCP6z/6ZmZmZmZDR6DMiiJiCMlTYqIp6qcM0vS7sByDcz4tQSwUZnjq9dRpoMl3QqMJ7XQzA88TGrROdOtJGZmZmY2VCkiel0G67FRo0bFlClTel0MMzMzMxvkJE2NiFGlxwflmBIzMzMzMxs4HJSYmZmZmVlPOSgxMzMzM7OeclBiZmZmZmY95aDEzMzMzMx6ykGJmZmZmZn1lIMSMzMzMzPrKQclZmZmZmbWUw5KzMzMzMyspxyUmJmZmZlZTzkoMTMzMzOznnJQYmZmZmZmPeWgxMzMzMzMespBiZmZmZmZ9ZSDEjMzMzMz6ykHJWZmZmZm1lOKiF6XwXpM0gvAk70uxxCxLPBirwthHed6Hhpcz0OD63nwcx131/CIWK70oIMSsy6SNCUiRvW6HNZZruehwfU8NLieBz/XcX9w9y0zMzMzM+spByVmZmZmZtZTDkrMuuvsXhfAusL1PDS4nocG1/Pg5zruAx5TYmZmZmZmPeWWEjMzMzMz6ykHJWY1SBomaStJ35M0RdKrkmZJmi7pCkmjG7jXCZIibxM6mZc1ppv13O7rrH69qmdJi0g6WtKdkl6R9IakxyVdLmnTlp+YzdGLOpa0sqTTJD0i6U1Jb0l6VNJZkj7Wlidm82i2niVdUFSn5baHq+Q5n6TxOb+ZkmZIukXSXh17okPIAr0ugNkAsDnwu/zzc8DNwOvAWsBuwG6SjouI/652E0kbAEcDAaiTeVlTulnPbbvOGtb1epa0KnA9sBrwLPBH4B1gODAGuBe4rcnnY+/X1TqWtD5wA7AU8DRwXU4aBfw7sLekbSNictPPyMpptZ5vAx4rc/zZcidLmh/4BbAL8Crpd3ohYCvgUkkbR8ThTT4XA4gIb968VdmALYErgM3KpH2e9OEigC2q3GMh4EFgOvDLfP6ETuTlrf/ruV3Xeev/egYWI33weQ84Bpi/JH0ZYI1evy6DaetBHU/O6WcDw4qODwPOzWn39vp1GWxbs/UMXJCP79dgfkfl6x4APlR0fHVSUBTArr1+XQby5u5bZjVExA0RsXtE3FIm7TLSHziAfarc5pvAmsCBwIwO52VN6GY9t/E6a1AP6vlrwMeB0yPiOxHxbkme/4iIv9Zbfqutm3UsaWHg0/nhNyJidlFes0n1D7CupEXrfhJWUzf/X+ZWkqPzw4Mi4vmivB4lfeEA8NVW8xrKHJSYte7uvF+5XKKkjUjfsFwaEVd1Mi/rqI7Uc5vfH9a6ttWzpAWBL+WHp7SthNaqdv4uv0v6Rr6W14E36y6htUM7/19+GlgeeDoibi6TfjkwG9hA0kptyG9I8pgSs9atnvfv64eav0W7EHgJaEdf04p5Wce1vZ478P6w1rWznkeSumdNj4jHJY0AxpI+3DwPXB8Rt7al1NaIttVxRMyW9AdgW+B/JI0vtJZIGgYcl089N3JfH+uaWv8vt5C0LrA46ffxVuB3EfFemXPXz/s7y90oIt6Q9ACwXt6mN13qIcxBiVkLJK0A7Jcf/rzMKccDnwD2jIgXO5yXdUgH67lt7w9rXQfqeZ28ny7pu6Rv34t9XdKVwD4R8XoTRbYGdeh3+WDgWlKr2PaSpuTjGwBLA5OY2/XHuqDO/5f/VubYg5L2jIj7So6vmvdPVsn2KVJAsmqVc6wKd98ya5KkBYBLgCWBP5Q280vaBPgKcGXu39qxvKxzOlXP7Xx/WOs6VM8fzPv1SQHJJNIMXEsDu5K+TR0DnNHyE7CaOvW7HBF/AzYBriF1FRqTt5VIg+VvKR5rYp1Vx//Le4DDSLN0LQ58GNiJNAveWsDvy3TBWjzvq315MDPvP9B86Yc2ByVmzTuLNBXgNEoG0klahDTI7lXSt2gdy8s6ru313IH3h7WuE7/Phf+xw4BLIuKIiPi/iHglIn5N+uAawL6SPt5i+a22jvzNzsHM/aSAc1dgubyNIQWgP5fkady7p+r/y4iYFBGnRcRDEfF6RDwbEVcDGwJ/InWv/M+ultgAByVmTZF0KvBF0jSAW0XEcyWnnEDqz3pkRLQ0/qOOvKxDOljPbXt/WOs6WM+vFf18TmliREwBppLWwNi8oUJbQzpVx5KWAq4kfTu+XUT8OiJezNuvgO1IA9y/Lmn1avey1rXy/zIiZgHfzg93KEkutIIsVuUWhdaU16qcY1V4TIlZgyR9j9T0+wLpj96jZU4bS1qXYJykcSVpn8z7gyTtBDwWEQe0kJd1QIfruS3vD2tdh+v58aLzHqe8x0mL7K3QTPmttg7X8Y6kVpEbcjeueUTEY5LuAEbnzX/DO6RN/y8Lq7mXdt96Iu+HV7n2IyXnWoMclJg1QNJJwJHAP4CtI+LBKqfPR/VvPz+Wt6XakJe1UZfquaX3h7WuC/V8d9HPy5C6k5RaNu9nlkmzFnWhjj+a99XWq3kl7z9Y5RxrQRv/Xy6T96W/j3fl/QYV8l8U+FR+eHe5c6w2d98yq5OkE4GJwMvANhHxl0rnRsQqEaFyG2m6SYCJ+dh6reRl7dWNem71/WGt61I9TwfuyA+3KlOGpYER+eGU0nRrTZf+Zj+T9yPzFMClZRhGmhoaKreWWQva/P/yc3lfOvXv7aQWmJUl/UuZ6/YgjR27M//eWxMclJjVQdK3SCu2vkL6o9exb0K6mZfNy6/90NDlej4+7/9L0qiiMiwMnEmaIWgq6UOPtUkX6/ga4A1Si8n3JS1UVIaFgB+QuvW8DFzXoTIMWY3Ws6T1JO2UV2gvPr6ApKNI3b8Avl+cHhHvAiflh2dKWr7o2tWBE/PD47GmufuWWQ2SdgG+mh8+BhwqqdypD0fEieUS+jEvm5df+6Gh2/UcEVflvu5HAZMl/YnUxWRD0lSk04G9IrywXrt0s44j4u+SDgbOBcYDYyUVuvqMBFYE3ga+EBHVunhZg5qs51WAXwIv5Xr6O6nL1jqk38f3gKMjolwA+X3gX4CdgUfzopnDgK2BhYHT8uQG1iQHJWa1FfcDHpW3cm5i7rclAyEvm5df+6Gh6/UcERMkTQYOIa1ZsihpobVTgBMj4oV25GNzdLWOI+JCSfeR1jjZDNgmJ00nBSuneExgRzRTz/cCp5K+FFiLVF8BPA2cD5weEVPL3SQi3pU0hjRl9P7AtsC7pJbOMyLi0paejSF/OWNmZmZmZr3kMSVmZmZmZtZTDkrMzMzMzKynHJSYmZmZmVlPOSgxMzMzM7OeclBiZmZmZmY95aDEzMzMzMx6ykGJmZmZmZn1lIMSM7M+JumTks6S9IikNyS9KekpSZMlfU/SNmWueUJSSFql+yXuDEkHSJoq6fX83ELSUjWuGV10brXtiS49jUFD0oKSviDpl/n9WHhvPi3pOknHSBrewv1DUsMLqQ3G977ZUOEV3c3M+pSkzwMXAQuSVoe+EXgZWA4YAXwa2Bz4XY+K2BWSdgLOAd4iPdeXctKsOm/xOnBFlfQXmy/d0CNpI+AyYDhpRet7gD8D7wArAP8MfAb4lqRDIuJHvSqrmQ0cDkrMzPqQpBWA80gByRHAaRHxblH6fKQPf/9c5vKtgGGkQGYw2CPvD4uIc5q4/sWI2K+N5RmyckByE7AQcC7w9Yh4tuScBYGxwFeB1ZvMas1WymlmA4+DEjOz/rQTsChwe0RMKk2MiPeAm/NWmvZ/nS9eV30k7x/taSmGOEkLAT8jBSQnR8TR5c6LiFnAZZJ+AazdTF4R8XDTBTWzAcljSszM+tPyef/3Ri8s169e0rHNjK2QtIykb0m6T9LMPKbjLklHSBrWRNmGSTpE0h2SXs3jEB6SdKKkZUrOvSCPK9giH/pjUVmPbTTvBspYeK2OlfQhST/KYyXelvR4LuvCVa7fSNJP8zWzJL0g6deSyrVqzTN+QtIXi16becbNSNotjyWaKellSddL2qxo7MyNRefum49dW6Wc6+Rzpkuq50vKfYCPAs8CX6t1ckTMjoh7SvKcU1ZJi+b31sP5fXBP0XkVx5RIGi7pIknP5+selHS0pPnreA5m1qfcUmJm1p+eyvutJH0qIu5v8X73ABdWSFsP+CfS+IA5JK0DXAt8GHiaNKZlPmAj4BRgR0k75G/Ga8of5K8BRgNvAH/M+82AY4A9JW0ZEX/Ll9ya99sBHwKuA54rej6d9hFgKiBgMrAEqbvcMcBawC6lF0g6Cjg5P7wLuB1YGdiR9HodWKkLmqTTgIOB24DfAGsAhWDlv4Dj8+PJpPfH2qTX8Adlbvcz4LvAZyR9vELr2fi8Pzsi3qn4Ksy1c+He9dZ5FQuT3k9rklr77iV1VaxK0lqk7mPLAtOAXwFLA8eR3pdmNlBFhDdv3rx567MN+ABpTEgAs4GrgaOBrYEla1z7RL5ulTryWQt4hRSQjCk6vgjwt3yf/wAWKEr7IGnAeQDHNvCcTsrXPASsVJLXFTnt9jLX3ZjTRjf4Go7O1z3R4HXH5uuCNMB+waK0NYHXctqmJddtn49PBzYqSdsUmEEanL9GSVohr1eADcuUZ2Sun1nAdiVphxVdf2NJ2nH5+HfL3HOJ/DxmASvW+bpMy/fbp4X39eii8t4NfKjCeZE+orzv+NScdlFJvaxNalUs3Lvme9+bN2/9tbn7lplZH4qI10gByBRSq/YOwHfIs09Jui3PztW0PJj+t8CSwBERcWVR8n7AqqRvxU+Mom/SI+IlYBwpWBovSXXktQhwUH54WETMGYQfEW8CBwIzgY0lbdrK8ypjeI1ua+8bs5NNy2Wd0yoQEQ8BF+eHW5Wcf2zeHxARdxQnRMRtpCBhGPDvFfI7KSL+XOb4eFIL1UURMU93rIj4AXBHmWsAziLNiLV/me5m44DFgSujZKB6Fcvm/QvlEiUdlrvcFW9nVbnf+Ih4vs68kbQZada5GcChJfXyAOn1NbMByt23zMz6VP4AvIGkTUjdfzYifShbGtgE2ETS9tHEzFKSFiN1ERoOnJo/3BbbIe8vr1C2ZyQ9SmppWR34a40sR5I+BD8TEe+bwjgiXpR0FbAX6dv02+p8KvWoNSVwuUAA4IYcMJUqDML+cOGApGWBDYFXgesr3O+mvP90hfRfVDi+ed5fWiH9J5TpuhQR05UGm38O2BO4oCi5ECCeXuGezdgS2LXk2OukgLPU8xExucH7F16H30TEjDLpF1O+K5uZDQAOSszM+lz+8DYZ5kwFvDHwDdJaEOMkXR0RZYOHcvKA4J+QAoUrgSPLnPaxvL+8joaQ5agdlKyU949XOacwlmSlKuc0o9kpgZ+qcPzVvC9ufVg175cA3qnxmi1X4fiTFY6vVCO90nFIH9I/RxqrcgGApC1I3dAeiIibKl/6Pi+SxseULX9EjCn8rDTJQrW6rlbmSlbO+7L3jYhXJM0gtfyZ2QDjoMTMbACJNBXwZEk7kL7hHwGMoUKLRgWTSIOW7wD+Nd+zVGEmo6upvbjgPxrIu+FVunuo3OtSSeH1mkEK9Kop+3pWaJWZ55QKxyuWMyJuk3Q3qcVtZERMZe4A9zNq5FfqLlJgMAq4pMFrS9V6rmY2xDgoMTMbgCLiXUk3kIKSSt+8v4+kI4FDSK0Su1T5IDwN+ARwZkRc3Wp5mbuQ46pVzim0zgzERR+n5f3sJltlqnmG9LoNZ25rUrFValx/GmkhzvGSvkbqYvUac8fG1Osq0oxjn5M0MSJmN3h9qwrvi1XKJebpk91KYjZAeaC7mVkfqmfwOGnNCEjT9dZzz8+Spqt9CdghIqqtgXJN3u9R5ZxGTCUNZF9JUukAcfIaJYUpZ29sU55dkwfu3wcsK2l0m29fWCBzrwrpe9a4/iek1qw9yTOpkQbNv9ZgOS4mvddWJE1P3G2FrmY7SVqiTPre3SyMmbWXgxIzs/50sKTzJW1YmiBpAUlfAnbPhy6rdTNJG5O63MwmTf37SI1LziZ9+z8uLyK4aJl7rippn1p5w5yuSYWZmE6VtGLRfRYGziQNhP9TnqlqIPp63l8i6TOliZLml7RlrotGnE7qujVO0jYl9xxP5YHzAETEW6SpjRcBDs2HG+26RUS8DXyeNI3wREnnFNdjUZlEmoih3W4hrU+zFOk9NGfxTklrMvf1N7MByN23zMz60zDStLz7SXqO9GHsJdIaIesyd+ankyLiujrudzzpQ+ljwBclfbHMOS9GxASAiJgpaUfSDF3fAA6V9BdSV6IPkAZKr0Yal1Lv+IKvk8YjjAYezd3P3iQtnrgiaWB5J77tXlbSBTXOOTgi3mglk4j4VV488STgOkl/BR4htRCtAKxP+kB9EPCnBu57p6RvAN/M972NuYsnrgOcChxOChYqOQOYSBr7cmNEPNjg0yuUZXIeKH8ZcABpuuF7SGvjvAksQ3qeK5DWVmm0i1i1vEPSvqQWk/2ALSXdTnpNtyC9V0eSurmZ2QDjoMTMrD+dS/qgtzVpqtl1gOVJLR1Pk1Zn/3FE3FrpBiUKA7FXy1s5TwITCg8i4j5J65JmbtqVNH5lE9I6FdNI3YKqTbU7j4h4K7cgHAjsS/ogOYz0PC8mBViNDJqv12KkdTmq+QppdfmWRMQpkv5AapEYDWxDWivkWVI3rKuoPPVvtfseJ+lh0kxpI0jvhymktVIKs1JVnJAgIqbl69emxWmAc2CyGqkOd87lWRsQqZvY/aRxLJdGxBOt5FUm7/sljSIFaNuSJnl4AvgfUjD4WDvzM7PuUcRAmgjFzMzMikk6F/gCMCEivlfhnH8itbY9AwwvXgzTzKwfeEyJmZlZn5O0Rp5dqviYJO0P7A+8TWq5quSbef8DByRm1o/cfcvMzKz//RtpcPndpK5ziwBrkaYKfg84NCKeKb5A0i6kbnfrABuQujn9sItlNjOrm4MSMzOz/vdb4OPARqTxGwuRxvZcAUyqMGPZCFK3rteAa4GvRMTr3SmumVljPKbEzMzMzMx6ymNKzMzMzMyspxyUmJmZmZlZTzkoMTMzMzOznnJQYmZmZmZmPeWgxMzMzMzMespBiZmZmZmZ9dT/A83ufLM7eME1AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_band_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5\n", - "0.6\n", - "0.7\n", - "0.8\n", - "0.9\n", - "1.0\n", - "1.1\n", - "1.2\n", - "1.5\n", - "1.7\n", - "2.0\n", - "2.5\n", - "3.0\n", - "3.5\n", - "4.0\n" - ] - } - ], - "source": [ - "n_egrid = 250\n", - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_vg = []\n", - "\n", - "sigma = e_grid[1] - e_grid[0]\n", - "sigma_multipliers = np.array([0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.5,1.7,2.0,2.5,3.0,3.5,4.0])\n", - "\n", - "for sigma_multiplier in sigma_multipliers:\n", - " \n", - " print(sigma_multiplier)\n", - " delta_f = partial(gaussian, sigma = sigma*sigma_multiplier)\n", - " dosn_0_888_vg.append(DOS.from_calculation(dft_0_888, e_grid, delta_f ))" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_vg = []\n", - "eband_error_0_888_vg = []\n", - "for dos in dosn_0_888_vg:\n", - " enum_error_0_888_vg.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_vg.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_vg)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_vg)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwAAAAIqCAYAAACTwS1qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdeZyN5f/H8ddlS5aoEMlOiMiapaiEhErWb/y+X0v1tYak9JVCWgiRnaylVJQWWbOnYuxr9iVF9n0Z5vr9cZ2RZWbMmTkz98w57+fjcR7HnPs69/mc0fL53Pd1fS5jrUVEREREREJDCq8DEBERERGRxKMCQEREREQkhKgAEBEREREJISoARERERERCiAoAEREREZEQogJARERERCSEpPI6gFCTJUsWmzdvXq/DEBEREZEgtnLlysPW2qxRHVMBkMjy5s1LWFiY12GIiIiISBAzxuyJ7pimAImIiIiIhBAVACIiIiIiIUQFgIiIiIhICFEBICIiIiISQlQAiIiIiIiEEBUAIiIiIiIhRAWAiIiIiEgIUQEgIiIiIhJCVACIiIiIiIQQFQAiIiIiIiFEBYCIiIiISAhRASAiIiIiEkJUAIiIiIiIhBAVACIiIiIiIUQFgIiIiIhICFEBICIiIiISQlQAiIiIiIiEEBUAIiIiIiIhRAWAiIiISCzNmTOHFi1aULhwYTJlykSaNGnImjUrlStXpmvXrixfvtzrEBPUhAkTMMbQvHlzr0OJVvPmzTHGXPNIly4d2bNn58EHH6Rt27bMnj2biIiIWJ3vhx9+oEmTJuTJk4e0adOSKVMmSpQoQZcuXdi1a1eM7718+TJjxozhscceI0uWLKROnZosWbJQtGhRGjZsyODBgzl06FAgvrZfUiX6J4qIiIgkMwcPHqRJkyYsXLgQgAIFCvDII4+QIUMGjhw5wurVq1m2bBn9+/enWbNmfPLJJ94GLJQsWZIHHngAgPDwcI4ePcr69etZvnw5I0aM4L777mPixImULVs2yvefOHGCRo0aMWfOHABKlSpFhQoVOH/+PCtWrGDgwIEMHTqUfv360bFjxxvev337KapUeZK//lpKypQpKV++PLly5SIiIoKtW7fy9ddfM3XqVAoUKECdOnUS7hcRBRUAIiIiIjE4evQolSpVYufOnVSuXJmhQ4deSSwjWWtZtmwZffv2ZfPmzR5FmvDq1atHhQoVyJQpk9eh3NQzzzxDz549b3h95cqVdOvWjXnz5lG1alUWLFhA+fLlrxlz4cIFHn/8ccLCwihRogSTJk2iZMmSV45baxk/fjzt2rWjU6dOXL58mZdffhmAY8egXz8YNKgn588vpUiRYsyaNYM8efJc8xl///03n3/+OXfddVfgv/xNaAqQiIiISAzatm17JfmfP3/+Dck/gDGGypUr89133zF8+HAPokwcmTJlokiRIuTIkcPrUOKsTJkyzJ49mwYNGnD27Fmee+45Ll26dM2Ynj17EhYWRp48eViwYME1yT+4v++WLVsyZcoUALp160ZY2CbefRfuvReOHoXMmb8AYPDggTck/wDZsmWjY8eOlCtXLoG+afRUAIiIiIhEY9u2bXz11VcAjBgxgjRp0tz0PddfTQb47bff6Nq1K2XLluWuu+4iTZo03H333TRo0IBff/01yvNEzmWfMGFClMd79uyJMeaGq9yXL19m5MiRVKpU6co6hbvuuovSpUvTpUuXG+ac//777/znP/8hT548pEmThowZM5I3b17q1avHtGnTrhkb0xqAadOm0bJlS4oVK0bmzJlJmzYtBQsWpF27duzbty/K7/DII49gjGHhwoWsXLmSp556ijvvvJO0adNSsmRJxo4dG+X74itFihSMGDGCtGnTsmPHDqZPn37l2MmTJxk2bBgA/fv354477oj2PE8//TS1atUmPDychx/ux4YNsGwZjBoFR478DbhEP6lRASAiIiISjRkzZhAREUHJkiW5//7743ye7t278+GHHxIeHk758uWvJLrTpk3joYceulJkBEKrVq1o06YNa9as4cEHH6RBgwaULFmSEydOMHDgQHbs2HFl7Pr16ylXrhyTJk0iXbp01K1bl5o1a5IjRw5mz57NmDFjYv25jRs35ssvvyR9+vQ8/vjjVK9enQsXLjB8+HBKly7N1q1bo33vrFmzqFixIrt27aJGjRqUKVOGdevW8fzzzzNgwIB4/T6ikyVLFp544gkA5s6de+X1BQsWcOrUKTJlysQzzzwT7fsvXYLx42HFiuYApE37A5MnWwoVcsdz584NwJAhQ2K94DixaA2AiIiISDRWrlwJEO1C0dh65ZVXmDx58g3zvb///nvq169P69atqV27NunSpYvX5+zZs4eJEyeSK1cuVqxYccPnrVmzhrvvvvvKzx9++CGnTp3i3Xff5fXXX79m7OnTp1m/fn2sP/uzzz6jTp0613yHS5cu0atXL/r06UPHjh2ZOXNmlO/t27cvY8eOpWXLllde+/TTT/m///s/evfuTZs2beL9u4lK2bJlmT59Ohs3brzyWuTfeenSpUmV6sZUOSICpk2DHj0ge3YYNaoc9evD8eNH2L17N/ny5QPc1LEuXbowbtw45s+fT926dSlfvjylS5emaNGiGGMC/n1iS3cARERERKJx+PBhALJmzRrl8Tlz5tC8efMbHrt3775m3BNPPBHlYs+6devSsGFDjh49yoIFC+Id799/u2knpUuXjvLzHnjggWumpBw8eBCAWrVq3TA2Q4YMVKxYMdaf3ahRoxuS9FSpUvH2229z9913M2fOHE6dOhXle+vXr39N8g/QrFkzihYtysmTJwkLC4t1HP7IkiULAEeOHLnyWuQUqet/f9bCrFlQrhz07QsffQQLFsCTT951w3sBOnfuTO/evbn11lvZvXs3Q4YM4f/+7/8oVqwY2bJlo3379uzfvz9BvtfN6A6AiIiIxMjDC5VxZm3ifM6mTZuYOHHiDa+3b9+evHnzXvPa4cOH+eGHH9iwYQPHjx+/svB0w4YNAGzdupXatWvHK54iRYqQMWNGZsyYwbvvvkvTpk2jXIAaqXz58vz444+0bt2at99+mypVqnDLLbfE+fO3bt3KrFmz2L59O6dPn74y9eXSpUtERESwfft2SpUqdcP7omuDWaRIETZv3syff/4Z55hiEhlfihQxXxNfuhT+9z84dAj69IFnn/3n3wsbzT9sxhh69OhBu3bt+Oabb1i8eDErV65k06ZNHD58mGHDhvH5558zZ84cypQpE9DvdTMqAERERCRGiZVMJ0WRV4ij26ypU6dOdOrU6crPefPmZc+ePTeMGzVqFC+//DJnz56N9rNOnjwZz2ghY8aMjBs3jpYtW9K9e3e6d+9Ozpw5qVixIrVr16ZJkyakTZv2yviuXbuyZMkSfvrpJ2rUqMEtt9zCAw88QNWqVWnWrFms1z1cunSJtm3b8vHHH0ebEMf0HSPny1/vtttuA+D8+fOxisNfkXd4rl7oG/l3fvDgQVavhjfegI0boVcvaNYMUqa89hyRd10g6jtFd9xxB61ataJVq1aA+2fps88+46233uLo0aP8+9//vmYKUmLQFCARERGRaJQuXRogXlNQVqxYQZs2bQgPD+eDDz5gy5YtV66OW2uvzL2PKXGOSnQLSxs0aMDevXuZMGECLVu2JEOGDEydOpUWLVpQpEiRazrypEuXjnnz5vHrr7/Ss2dPqlSpwsaNG+nXrx8lSpSgd+/esYpl8ODBjBkzhhw5cjBlyhT27t3L+fPnsdZirb0ylSi673izK/AJJXK+/9WFTuTV+KVLV1KrVji1asHvv8N//nNj8g9c2f35zjvvvOGuT1SyZs1Kx44dGT9+PODuIm3bti2e38Q/KgBEREREolG7dm2MMaxdu/bKVB1/TZs2DWstL730Eq+88gqFCxcmffr0VxaBbt++Pcr3RbYcPX36dJTHo7rTEClz5sz85z//YezYsWzZsoXt27fz6KOPsmfPHl577bUbxj/44IO89dZbzJkzhyNHjjB+/HhSpUpFz549+f3332/6HSO7GI0aNYrGjRuTK1eua6YSRfcdvXTo0CFmz54NQPXq1QHYuxe+/vpRjMlAePhJPvhgOu3bQ0yzoiKngEX+sxJbNWrUuCaWxKQCQERERCQa9957Lw0aNACgdevWXLx40e9zHD16FIBcuXLdcOzQoUPXtKC8Ws6cOQHYsmXLDcfOnTvHwoULYx1DgQIF6N69OwBr166NcWyaNGlo3rw5FSpUwFrLunXrbnr+mL7j3LlzEz3BvZmIiAjatm3L+fPnuffee6lQ4Sk6d4ZSpSBXrkx06NAWgB49ul75blH59ttvmTFjBqlSpaJr167XHLvZHZ29e/de+XPk33ViUQEgIiIiEoPhw4eTN29efv75Z6pVq8aaNWuiHLd+/foo57gXKVIEgEmTJl1zNf/UqVO0bNmS48ePR3m+atWqAfDJJ59ccxX+3LlztGnT5poEMtLq1av54osvOHfu3A3Hvv/+e4BrFgUPHz48yiv8O3fuvDIvPaZFxNd/xxEjRlwzNWnHjh20bt36pu9PTKtWraJmzZpMnTqV9OnT8/DDn1G8eEoiImDTJnjnHejbtxelSpViz549PProozcUQdZaxo8fT5MmTQB49913KV68+DVjHnzwQUaNGhXl3++uXbt4/vnnAahQoUKsfseBpEXAIiIiIjHIkiULy5Yto1GjRixdupRSpUpRsGBBihUrRsaMGTl9+jSbN2++kkg/9thj1yR0LVq0YNCgQaxatYr8+fPz0EMPYa1l8eLFpEmThpYtWzJu3LgbPvehhx6iTp06/PDDD5QuXZqHH36YVKlSERYWRooUKWjRosWVeeSR9uzZQ5MmTUiXLh2lS5cmV65cXLx4kdWrV7Nz504yZsx4zbz+0aNH065dO/Lnz0/x4sXJkCEDBw4cYOnSpVy8eJEmTZpEubPx9V5//XVmzZrFqFGjWLBgAaVKleLo0aMsWrSIihUrkj17dpYtWxbXv4I4mT59+pV2rOHh4Rw/fpx169bxxx9/AJA9e3HOn59IRERpVq2Cq3PwtGnT8tNPP9GwYUN++uknSpYsSenSpSlUqBDnz59nxYoV/Pnnn6ROnZr+/fvTpUuXGz5/69attG7dmg4dOlCiRAny5cuHMYZ9+/axfPlyIiIiyJUrV5RdpBKaCgARERGRm8iRIwdLlixh5syZTJkyhWXLlvHTTz9x4cIFMmXKRMGCBencuXOUCfPtt99OWFgYPXr0YO7cucyYMYNs2bLx7LPP0rt3b0aNGhXt53711Vf06tWLKVOmMH/+fLJkyULt2rV55513GDly5A3jK1SowHvvvceiRYvYsmULK1euJE2aNOTKlYsuXbrQoUOHa4qTPn368MMPP/Dbb7+xbNkyTp48yV133UXVqlV54YUXqF+/fqx+PxUrVmTFihV0796dsLAwvv32W/Lly0f37t157bXXqFmzZix/04Gzdu3aK9Od0qZNy2233UbevPnIl68uGzc+Q+XK1enTx+C7eXGD22+/nXnz5vHdd9/x6aef8ssvv7Bx40bSpElD7ty5adSoEe3bt6dAgQJRvn/JkiXMnTuX+fPns337dubMmcPZs2fJnDnzleKudevWZMyYMaF+BdEy/q44l/gpW7asTajNLERERETkRpcvw2efwVtvQeHCrpd/IrfeT3TGmJXW2ii3sNYdABEREREJStbCt9+6Xv6ZM8OECVClitdReU8FgIiIiIgEnXnz3O69Fy9Cv35Qq1by3NU6IagAEBEREZGg8euv0L077NsHb78NDRuCR/uMJVn6dYiIiIhIsrd+PTz9NDRqBM8951p6Nm6s5D8q+pWIiIiISLK1Ywc0awbVq8Ojj8LWrdCqFaTSPJdoqQAQERERkWRn/35o3RoefNB19tm2DTp1grRpvY4s6QvaAsAY85wxZokx5oQx5rQxJswY084YE6fvbIxJaYxpbYxZbIw5Yow5b4zZZ4z53hhTN9Dxi4iIiMiNDh+Grl2hRAnIlAl+/x169AAP2uknW0F5c8QYMwxoC5wHfgLCgWrAUKCaMaaBtTYihlNcf747gZlAOeAo8AtwBsgFPA4cBL4P5HcQERERkX+cOgUDB8KQIW6e//r1cPfdXkeVPAVdAWCMqY9L/g8AVay123yv3wUsAOoBHYDBsTxfCuA7XPI/GOhmrT1/1fGMQN4AfgURERER8Tl3DkaMgL59oUYN+O03iGbzXYmlYJwC9Lrv+bXI5B/AWnsQaOP7sZsfU4FeACoBP1hrO12d/PvOe8pauz6+QYuIiIjIP8LDYcwYuPdeWLIEfvoJPvlEyX8gBNUdAGPMPUAZ4CLw1fXHrbWLjDH7gZxABWBZLE7b3vc8MFBxioiIiEjUIiLgiy/gzTchTx6YOtUt9JXACaoCACjle95orT0XzZgVuAKgFDcpAIwxOYDiwGXgF2PMvUBj4B7cWoBFwGxrrQ1A7CIiIiIhy1qYMcNt4pU2LYwcCdWqeR1VcAq2AiCf73lPDGP2Xjc2Jvf7no/gpg/149rfWTdgmTGmnrX2b38CFRERERFn4UL43//g5El45x146ikwxuuoglewrQHI4Hs+E8OY077n2DSLuuOq54G4aUX3AbcBjwGbcesDbphudDVjzIu+NqRhhw4disXHioiIiAS/sDCoWdNt3NWuHaxd63bzVfKfsIKtAAi0yN9PKmCptfY5a+1m38LfBUAN4BxQxRjzaHQnsdaOttaWtdaWzZo1ayKELSIiIpJ0bd4MDRq4ZL9ePfdz06aQMqXXkYWGYCsAIq/up49hTORdglOxON/VY8Zcf9Ba+wcww/djtAWAiIiIiMDu3dC8OVSt6hb2btvmdvNNk8bryEJLsBUAu33PeWIYk+u6sTHZFc2foxqTPRbnExEREQk5Bw5Ahw5Qpozr7LNtm9vNN106ryMLTcFWAKz2PRczxtwazZhy142Nye/8s57gzmjGZPE9n47muIiIiEhIOnbMLe4tVgxSp4YtW6BXL8iUyevIQltQFQDW2n3AKiAN0PD648aYqrgWngeAX2JxvnDgB9+PNzSiMsakBqr4fgyLW9QiIiIiweX0aXj3XbeJ1+HDsGYNDBwIWgqZNARVAeDznu+5rzGmYOSLxphswHDfj+9bayOuOtbeGLPFGDMpmvNFAC8aY2pe9Z6UQF+gALAf+CawX0NEREQkeblwAYYMgUKFYP16+PlnGD0acuW6+Xsl8QTbPgBYa6caY0bg+vavN8bMA8JxV/BvA6YDQ697WxagMO7OwPXnW2uM6QQMBmYaY5YDf+A2EssPnAAaxrDxmIiIiEhQu3QJPvnETe8pXhxmzoQHHvA6KolO0BUAANbatsaYpUA7oCqQEtgCjANGXH31P5bnG2KMWQ+8AlQASgN/AaOB96y1uwMYvoiIiEiyEBEBX38NPXpAtmwweTJUrux1VHIzxlrrdQwhpWzZsjYsTMsFREREJPmyFubMcQt8jXHz/atX1wZeSYkxZqW1tmxUx4LyDoCIiIiIJIyff3aJ/99/Q58+8OyzSvyTGxUAIiIiInJTa9ZA9+6wcSP07AnNmkEqZZLJUjB2ARIRERGRANm6FZo0gVq13OP3391uvkr+ky8VACIiIiJyg3374IUX3KLekiVh+3Zo3x5uucXryCS+VACIiIiIyBV//w2dO7s2nlmzujsAr78O6dN7HZkEigoAEREREeHECXjzTSha1PX137jRdfe5/XavI5NAUwEgIiIiEsLOnoV+/dzuvfv2wcqVbjff7Nm9jkwSipZviIiIiISgs2dh1CiX/FeuDIsWuav/EvxUAIiIiIiEkDNnYORI6N8fKlWCWbPcIl8JHSoARERERELAmTMwYgQMGAAPPQSzZ0OJEl5HJV5QASAiIiISxE6fhuHDYeBAqFIF5syB++/3OirxkgoAERERkSB0+jQMG+YS/0cegXnzoHhxr6OSpEAFgIiIiEgQOXXqn8S/WjWYPx+KFfM6KklKVACIiIiIBIGTJ2HoUBg0CB5/HBYuhPvu8zoqSYpUAIiIiIgkYydPur79gwdDjRqweDEUKeJ1VJKUqQAQERERSYZOnICPPnKPJ56AJUugcGGvo5LkQAWAiIiISDJy/LhL+ocMgVq14Oef4d57vY5KkpMUXgcgIiIiIjd3/Dj07AkFC8LOnbBsGUyapORf/KcCQERERCQJO3YM3nrLJf579sCvv8KECVCokNeRSXKlAkBEREQkCTp6FN580yX6f/wBv/0G48e7QkAkPlQAiIiIiCQhR4/CG2+4qT1//gnLl8PYsVCggNeRSbBQASAiIiKSBBw5At27uyv+Bw/CihXw8ceQP7/XkUmwUQEgIiIi4qHDh+H1190V/8OHYeVKGDMG8uXzOjIJVioARERERDxw6BB06+Z69x87BqtWwahRkDev15FJsFMBICIiIpKIDh2C115zif/Jk7B6NYwcCXnyeB2ZhAoVACIiIiKJ4O+/oWtXKFIETp+GtWth+HDIndvryCTUqAAQERERSUAHD8Irr7jE/9w5l/gPGwa5cnkdmYQqFQAiIiIiCeDAAXj5ZShaFC5cgHXrYOhQuOceryOTUKcCQERERCSA/voLOneG++6Dy5dhwwYYMkSJvyQdKgBEREREAuCvv6BTJyhWDKx1if/gwXD33V5HJnItFQAiIiIi8bB/P7z0kkv8U6SAjRth0CAl/pJ0qQAQERERiYP9+6FDB7j/fkidGjZtgoEDIUcOryMTiZkKABERERE/7NsH7dq5xD9tWti8GQYMgOzZvY5MJHZUAIiIiIjEwr590LYtPPAApE8PW7bABx/AXXd5HZmIf1QAiIiIiMRg715o0wZKloSMGV3i368fZMvmdWQicaMCQERERCQKe/bAf/8LpUpB5sywdSv07QtZs3odmUj8qAAQERERucru3fDii1C6NNx5J/z+O7z3HmTJ4nVkIoGhAkBEREQE2LULXngBypRx03u2boV331XiL8FHBYCIiIiEtJ07oVUrKFfOdfLZtg369HFX/0WCkQoAERERCUk7dkDLllC+POTM6a74v/023HGH15GJJCwVACIiIhJStm+H5s3hwQchd253xb93byX+EjpSeR2AiIiISGKInNrz44/Qvr0rBDJn9joqkcSnAkBERESC2tatLvGfORNeeskl/pkyeR2ViHc0BUhERESC0pYt0KwZVK4M997rEv8ePZT8i6gAEBERkaCyeTM0bQpVqkDRom6x7xtvKPEXiaQCQERERILCpk3wr39B1apQvLhL/Lt3h9tu8zoykaRFBYCIiIgkaxs3QpMm8OijULKkS/xffx0yZvQ6MpGkSQWAiIiIJEsbNkDjxvDYY1C6tEv8u3VT4i9yMyoAREREJFlZvx4aNoTHH4eyZV3i/+qrkCGD15GJJA+xLgCMMUeNMYsTMhgRERGR6KxbBw0aQPXqUKGCS/y7dlXiL+Ivf+4ApAH2JVQgIiIiIlFZvhzq1YOaNaFSJdi5E7p0gfTpvY5MJHnyZyOw7UCWhApEREREJJK1MG8evPfeP1f6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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, enum_error_0_888_vg, linestyle='-', linewidth=1, color='blue', label='Gaussian DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAusAAAIqCAYAAACdTQQsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdd5RUVfa38eeQZAgCCmJCUBBwDAi0JBNmR8yC8jOLCcSAIoZRR0Z9DaijjhFzGDMqBhxRAQOiSIMBEQUT5sioMCOSzvvH7UZCd9PV6VZXP5+1arVd91bVt9G13JzeZ58QY0SSJElS9qmVdgBJkiRJRbNYlyRJkrKUxbokSZKUpSzWJUmSpCxlsS5JkiRlKYt1SZIkKUvVSTtANmvevHls06ZN2jEkSZKUw6ZOnfpjjLFFUdcs1kvQpk0b8vPz044hSZKkHBZCmFPcNdtgJEmSpCxlsS5JkiRlKYt1SZIkKUtZrEuSJElZymJdkiRJylIW65IkSVKWsliXJEmSspTFuiRJkpSlLNYlSZKkLGWxLkmSJGUpi3VJkiQpS1msS5IkSVnKYl2SJEnKUhbrkiRJUpayWJckSZKylMW6JEmSlKUs1iVJkqQsZbEuSZIkZSmLdUmSlJOef/55jjnmGDp06ECTJk2oV68eLVq0YNttt2XYsGG8+eabaUesVHfffTchBI4++ui0oxTr6KOPJoSwwqNBgwasu+66dO/enZNOOomxY8eydOnSUr3fM888Q//+/WndujX169enSZMmbLXVVgwdOpRPP/20xNcuWbKE2267jZ133pnmzZtTt25dmjdvzmabbUa/fv247rrr+OGHHyrix85InSr/RJXooYdg4UI48si0k0iSVD1999139O/fn5deegmAtm3b0rt3bxo1asRPP/3EW2+9xaRJk7jqqqs4/PDDue+++9INLDp16sTWW28NwKJFi5g7dy7Tp0/nzTff5Oabb+bPf/4z99xzD3l5eUW+/pdffuHggw/m+eefB6Bz58706NGDBQsWMGXKFP7xj39www03MGLECE477bRVXj9v3jz22msvJk6cSO3atenWrRutWrVi6dKlzJo1i8cff5xRo0bRtm1b9t5778r7gyiCxXqWiRFGj7ZYlySpLObOnUuvXr345JNP2HbbbbnhhhuWFYGFYoxMmjSJK664gpkzZ6aUtPIdcMAB9OjRgyZNmqQdZbX2339/hg8fvsrzU6dO5ZxzzuHFF19kxx13ZMKECXTr1m2Fe37//Xd23XVX8vPz2Wqrrbj33nvp1KnTsusxRu666y4GDx7MkCFDWLJkCWecccYK7zF8+HAmTpzI5ptvzpgxY2jduvUK17///nsefPBBWrZsWXE/dGnFGH0U8+jatWusap9+GmPLljEuXVrlHy1JUrV3yCGHRCBuu+228ffff1/t/ZMnT66CVCrOUUcdFYF44YUXFnvPkiVLYt++fSMQ27ZtGxctWrTC9XPOOScCsXXr1vGnn34q9n1Gjx4dgVi3bt04Y8aMFa5tsMEGEYhjx44t189TVkB+LKYetWc9y7RuDbVqwWefpZ1EkqTqZfbs2Tz66KMA3HzzzdSrV2+1r1l5lRZg8uTJDBs2jLy8PFq2bEm9evVYf/316du3L2+88UaR71PYe3333XcXeX348OGEEFZZPV6yZAm33HILvXr1WtZX37JlS7p06cLQoUNX6ZH+8MMPOeqoo2jdujX16tWjcePGtGnThgMOOIDHHntshXtL6ll/7LHHGDBgAJtvvjlNmzalfv36tGvXjsGDB/PFF18U+TP07t2bEAIvvfQSU6dOZd9992Xttdemfv36dOrUiTvuuKPI15VXrVq1uPnmm6lfvz4ff/wxo0ePXnbt119/5cYbbwTgqquuYq211ir2ffbbbz/69OnDokWLGDFixArXvv/+ewDWWWedSvgJysdiPcuEAD17wuuvp51EkqTqZcyYMSxdupROnTqx5ZZblvl9zjvvPK655hoWLVpEt27dlhWljz32GNttt92yvxBUhGOPPZZBgwbx9ttv0717d/r27UunTp345Zdf+Mc//sHHH3+87N7p06ezzTbbcO+999KgQQP22Wcf9thjD9Zbbz3Gjh3LbbfdVurPPeSQQ3jkkUdo2LAhu+66K7vtthu///47N910E126dGHWrFnFvva5556jZ8+efPrpp+y+++507dqVd999l+OOO46rr766XH8exWnevDl77rknAC+88MKy5ydMmMC8efNo0qQJ+++//2rfp/AvLs888wzJgnZio402AuD6668v9WbWqmLPehYqLNYPPTTtJJIkVR9Tp04FKHYTYmmdeeaZ3H///av0Jz/99NMcdNBBDBw4kD59+tCgQYNyfc6cOXO45557aNWqFVOmTFnl895++23WX3/9Zd9fc801zJs3j0svvZRzzz13hXvnz5/P9OnTS/3ZDzzwAHvvvfcKP8PixYv5+9//ziWXXMJpp53Gv//97yJfe8UVV3DHHXcwYMCAZc/961//4ogjjuCiiy5i0KBB5f6zKUpeXh6jR49mxowZy54r/HfepUsX6tRZfVm7zTbbAPDTTz/x2WefsfHGGwNw0kknMXToUO68807Gjx/PPvvsQ7du3ejSpQubbbYZIYQK/3lKy5X1LNSzJ0yalHYKSZKqlx9//BGAFi1aFHn9+eef5+ijj17l8dlKvad77rlnkRsJ99lnH/r168fcuXOZMGFCufMWtl506dKlyM/beuutV2jL+O677wD4y1/+ssq9jRo1omfPnqX+7IMPPniVgrpOnTpcfPHFrL/++jz//PPMmzevyNcedNBBKxTqAIcffjibbbYZv/76K/n5+aXOkYnmzZsDSaFdqLBNqLQbP5e/b/kWo9NPP52LLrqIP/3pT3z22Wdcf/31HHHEEWy++eass846nHzyyXz11VcV8WNkzJX1LNS1K3zwAfz3v9CwYdppJEnVSYoLgGW2XDdCpXr//fe55557Vnn+5JNPpk2bNis89+OPP/LMM8/w3nvv8fPPP7N48WIA3nvvPQBmzZpFnz59ypWnY8eONG7cmDFjxnDppZdy2GGHrTKFZHndunXj2WefZeDAgVx88cXssMMOrLHGGmX+/FmzZvHcc8/x0UcfMX/+/GXtH4sXL2bp0qV89NFHdO7ceZXXFTe6sGPHjsycOZOvv/66zJlKUpivVq2yrzXHYv5jCyFwwQUXMHjwYJ544gleeeUVpk6dyvvvv8+PP/7IjTfeyIMPPsjzzz9P165dy/z5ZWGxnoXq14ctt4T8fNhxx7TTSJKqk6oqfLNR4cprcQfXDBkyhCFDhiz7vk2bNsyZM2eV+0aOHMkZZ5zB//73v2I/69dffy1nWmjcuDF33nknAwYM4LzzzuO8885jgw02oGfPnvTp04f+/ftTv379ZfcPGzaMV199lXHjxrH77ruzxhprsPXWW7Pjjjty+OGHl7pPf/HixZx00kncfvvtxRavJf2Mhf3dK1tzzTUBWLBgQalyZKrwNyfLbyIt/Hde+FuH1Sn8bQYU/RuYtdZai2OPPZZjjz0WSP5beuCBB7jwwguZO3cuRx555AptOFXBNpgs5SZTSZIy06VLF4BytWFMmTKFQYMGsWjRIq688ko++OCDZavOMcZlveIlFblFKW7TYt++ffn888+5++67GTBgAI0aNWLUqFEcc8wxdOzYcYXJLA0aNODFF1/kjTfeYPjw4eywww7MmDGDESNGsNVWW3HRRReVKst1113HbbfdxnrrrcdDDz3E559/zoIFC5aNCixspynuZyzPynZ5FPanL/+XksJV7qlTp7Jo0aLVvkfhqbVrr732Kr9NKUqLFi047bTTuOuuu4DktzOzZ8/ONHq5WKxnKfvWJUnKTJ8+fQgh8M477yxrV8nUY489RoyRU089lTPPPJMOHTrQsGHDZRsMP/rooyJfVzgmcv78+UVeL2oFv1DTpk056qijuOOOO/jggw/46KOP2GmnnZgzZw5nn332Kvd3796dCy+8kOeff56ffvqJu+66izp16jB8+HA+/PDD1f6MhdNsRo4cySGHHEKrVq1WaKcp7mdM0w8//MDYsWMB2G233ZY9v9NOO9GoUSN+/fXXFUY6FqewDarwv5XS2n333VfIUpUs1rNUr17JynpN/nWmJEmZaN++PX379gVg4MCBLFy4MOP3mDt3LgCtWrVa5doPP/ywwtjA5W2wwQYAfPDBB6tc++2333jppZdKnaFt27acd955ALzzzjsl3luvXj2OPvpoevToQYyRd999d7XvX9LP+MILL1R5Mbo6S5cu5aSTTmLBggW0b9+efffdd9m1Jk2acNJJJwFJm1Dhz1aUJ598kjFjxlCnTh2GDRu2wrXV/abk888/X/bPhf+uq4rFepbacMOkd3258aqSJGk1brrpJtq0acNrr73GLrvswttvv13kfdOnTy+yJ7tjx44A3HvvvSusks+bN48BAwbw888/F/l+u+yyCwD33XffCqvbv/32G4MGDVqh2Cv01ltv8fDDD/Pbb7+tcu3pp58GWGHD6U033VTkyvknn3yyrI+6pA2qK/+MN9988wrtOR9//DEDBw5c7eur0rRp09hjjz0YNWoUDRs25IEHHqB27dor3PP3v/+dzp07M2fOHHbaaadV/sISY+Suu+6if//+AFx66aVsscUWK9zTvXt3Ro4cWeS/308//ZTjjjsOgB49epTqz7giucE0ixX2rbdrl3YSSZKqh+bNmzNp0iQOPvhgJk6cSOfOnWnXrh2bb745jRs3Zv78+cycOXNZ0bvzzjuvUHwdc8wxXHvttUybNo1NNtmE7bbbjhgjr7zyCvXq1WPAgAHceeedq3zudtttx957780zzzxDly5d2H777alTpw75+fnUqlWLY445Zlnfc6E5c+bQv39/GjRoQJcuXWjVqhULFy7krbfe4pNPPqFx48Yr9KHfeuutDB48mE022YQtttiCRo0a8e233zJx4kQWLlxI//79izyRdWXnnnsuzz33HCNHjmTChAl07tyZuXPn8vLLL9OzZ0/WXXddJlVxL+7o0aOXjdBctGgRP//8M++++y5ffvklAFtssQX33HPPsn0Jy6tfvz7jxo2jX79+jBs3jk6dOtGlSxc23XRTFixYwJQpU/j666+pW7cuV111FUOHDl3lPWbNmsXAgQM55ZRT2Gqrrdh4440JIfDFF1/w5ptvsnTpUlq1alXkNKHKlnMr6yGEDiGE00II/wohfBBCWBpCiCGEvmlny5R965IkZW699dbj1Vdf5dlnn+XII48EYNy4cTz88MNMnDiRZs2acfrppzN58mTGjRu3wlSQZs2akZ+fzwknnECjRo0YM2YM+fn5HHjggUybNq3I1pFCjz76KOeccw7rrLMO48ePZ9q0afTp04dp06YVOUGlR48eXHbZZeywww58+eWXjB49mhdffJEGDRowdOhQpk+fvsIBT5dccgknnngia665JpMmTWLUqFHMnj2bHXfckUceeYT777+/VH8+PXv2ZMqUKfTp04dffvmFJ598ki+//JLzzjuPsWPHUrdu3dL+UVeYd955h3vuuYd77rmHxx9/nPz8fDbYYAMGDRrE2LFjeffdd4ss1As1a9aMF198kSeffJJ+/frx/fffM3r0aMaPH0+zZs0YMmQIM2fOLLJQB3j11Ve5+uqr2X333Zk/fz7PP/88TzzxBB999BHbbbcdI0aMYMaMGbRv376y/giKFTLdzZztQgjXAqcVcalfjHFUJu+Vl5cXK2uwf2lMngwnngjF/AZPkiRJOSCEMDXGWOTRuzm3sg68B1wJHAK0A15ON07Zde4Ms2dDMQeISZIkKcflXM96jPH25b/PZCxPtqlXD7beGqZMgZ13TjuNJEmSqlourqznFPvWJUmSai6L9SxXOG9dkiRJNY/Fepbr2RPeeMPDkSRJkmoii/WVhBBOCCHkhxDy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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, eband_error_0_888_vg, linestyle='-', linewidth=1, color='blue', label='Gaussian DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_band_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The cells below include various older calculations and ideas. Most of them would have to be updated to work with the current code structure." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe[: , 0][1]-dos_qe[: , 0][0])*0.5\n", - "print(ewidth)\n", - "ra_sigma = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum = np.zeros(len(ra_sigma))\n", - "ra_eband = np.zeros(len(ra_sigma))\n", - "ra_en = np.linspace(dos_qe[0, 0], dos_qe[-1, 0], int((dos_qe[-1, 0]-dos_qe[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum[i] = gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[i])\n", - " # Generate band energy\n", - " ra_eband[i] = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=ra_sigma[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum)\n", - "print(ra_eband)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.plot(ra_sigma, ra_enum, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref/Ry2eV, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.scatter(ra_sigma, ra_eband, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(np.min(abs(ra_eband-eband_ref/Ry2eV))/256)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(4*ra_sigma[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate electron number \n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*0.79255\n", - "gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy\" is also called the \"single-particle energy\" or the \"one-electron energy\" and is obtained from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ .$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$.\n", - "\n", - "For look at the particular values for a given snapshot (data from ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```). QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "737.82754675" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The correct band energy from QE output is" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(eband_qe)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Error in band energy compared to QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By adjusting the width of the Gaussian smearing we achieved the desired accuracy in the band energy, here < 1 meV.\n", - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, we can also increase the smearing width and also obtain an accurate band energy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]\n", - "emax = dos_qe[: , 0][-1]\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*29.177\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also generate a different energy grid. However, it the integral quickly converges with respect to the number of grid points. We can increase the range of the enegy grid to make sure the DOS decays to zero at the limits." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*29.908\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check for another snapshot.\n", - "The band energy from the QE output of snapshot 1 is:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe_01 = 739.08601067+4.18224128-553.98606038\n", - "print(eband_qe_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth_01=dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0]\n", - "print(ewidth_01)\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "ra_en_01 = np.linspace(emin, emax, int(len(dos_qe_01[: , 0])))\n", - "ra_sigma_01 = np.linspace(20*ewidth_01, ewidth_01, 101)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "for i in range(len(ra_sigma)):\n", - " ra_en_01 = dos_qe[: , 0]\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enum(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_eband(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(768, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_enum_01, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(eband_qe_01, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_eband_01, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, 2*int(len(dos_qe_01[: , 0])))\n", - "sigma_mod = sigma_qe*22.90#22.882\n", - "eband_01 = gen_eband(k_weights_qe_01, ra_en , eigs_qe_01, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband_01))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error_01 = eband_01-eband_qe_01\n", - "print(\"Error in Rydberg\", eband_error_01)\n", - "print(\"Error in eV\", eband_error_01*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_01[: , 0], dos_qe_01[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Perform search over smearing width using sp.optimize library. But this requires adapting the definitions of the functions above.\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm15.ipynb b/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm15.ipynb deleted file mode 100644 index f818d884a..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm15.ipynb +++ /dev/null @@ -1,2642 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Attila Cangi, 14.02.2020 \\\n", - "Normand Modine, 01.04.2020" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "from scipy.optimize import root_scalar\n", - "from scipy.optimize import bisect\n", - "from scipy.optimize import toms748\n", - "from scipy.special import spence\n", - "import mpmath as mp\n", - "import matplotlib.pyplot as plt\n", - "from ase import Atoms\n", - "from ase.io import read\n", - "from functools import partial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Boltzmann's constant\n", - "kB = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Conversion factor from Bohr to Angstroms\n", - "Br2AA = 0.52917721\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032\n", - "\n", - "# Read and analyze QE calculated LDOS for snapshot 2\n", - "read_QE_LDOS = False\n", - "\n", - "# Read and analyze Machine Learned LDOS for snapshot 2\n", - "read_ML_LDOS = False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the relevant results of each Density-Functional-Theory calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the relevant results of a DFT calculation read from a file\n", - "class DFT_results:\n", - " def __init__(self, out_file):\n", - " # input:\n", - " ## out_file: path to the output file from a DFT run using a code that ase.io.read can read\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## out_file: the DFT output file used to construct the object\n", - " ## eigs: the Kohn-Sham eigenvalues\n", - " ### eigs rows: band index, row i: eigs[i , :]\n", - " ### eigs cols: k points, col j: eigs[: , j]\n", - " ## kpoints: the kpoints used in the calculation\n", - " ## kweights: the kweights for the kpoints used in the calculation\n", - " ## fermi_energy: the Fermi energy printed in the output file\n", - " ### note that the Fermi energy is not printed to enought digits to give an accurate number of electrons\n", - " \n", - " atoms = read(filename=out_file)\n", - " self.out_file = out_file\n", - " self.eigs = np.transpose(atoms.get_calculator().band_structure().energies[0,:,:])\n", - " self.kpoints = atoms.get_calculator().get_ibz_k_points()\n", - " self.kweights = atoms.get_calculator().get_k_point_weights()\n", - " self.fermi_energy = atoms.get_calculator().get_fermi_level()\n", - " self.volume = atoms.get_volume()\n", - " # I'd rather not do the following \"grep\" type search, but I can't find a ASE command to get n_electrons\n", - " with open(out_file) as out:\n", - " for line in out:\n", - " if \"number of electrons =\" in line:\n", - " self.n_electrons = np.float64(line.split('=')[1])\n", - " break" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the results of a Density-of-State calculation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the DOS on a grid of E values using its naive definition\n", - "$$ D(E) = \\sum_i \\sum_k w_k\\, \\delta(E-\\epsilon_{ik})$$\n", - "where $i$ labels the band and $k$ the k point. The $\\delta$-functions appearing in this definition are represented on a grid by the function parameter delta_f." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the results of a Density-of-States calculation\n", - "class DOS:\n", - " def __init__(self, dft, e_grid, dos):\n", - " # You probably should not call this constructer directly.\n", - " # Instead you should call one of the factory methods:\n", - " ## DOS.from_calculation(dft, e_grid, delta_f)\n", - " ## DOS.from_dos_file(dft, file)\n", - " ## DOS.from_ldos_data(dft,e_grid,ldos_data)\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## dft: the DFT_results instance used to generate the DOS\n", - " ## e_grid: the array of energy values at which the DOS is evauated\n", - " ## dos: the DOS evaluated at the energies in e_grid\n", - " \n", - " self.dft = dft\n", - " self.e_grid = e_grid\n", - " self.dos = dos\n", - " \n", - " @classmethod\n", - " def from_calculation(cls, dft, e_grid, delta_f):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which to evaluate the DOS\n", - " ## delta_f: a function that represents a delta function on a grid\n", - " \n", - " dos_per_band = delta_f(e_grid,dft.eigs)\n", - " dos_per_band = dft.kweights[np.newaxis,:,np.newaxis]*dos_per_band\n", - " dos = np.sum(dos_per_band,axis=(0,1))\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_dos_file(cls, dft, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## file: a file containing an energy grid and a dos as columns\n", - " ## The first line of this file is considered a comment and skipped.\n", - " \n", - " data = np.loadtxt(file, skiprows=1)\n", - " e_grid = data[:,0]\n", - " dos = data[:,1]\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_ldos_data(cls, dft, e_grid, ldos_data):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which the LDOS has been evaluated\n", - " ## ldos_data: a 4-dimensional Numpy array containing LDOS results\n", - " \n", - " if ldos_data.shape[3] != e_grid.shape[0]:\n", - " raise ValueError('Size of e_grid does not match length of 4th axis of ldos_data')\n", - " cell_volume = dft.volume/(ldos_data.shape[0]*ldos_data.shape[1]*ldos_data.shape[2]*Br2AA**3)\n", - " dos = np.sum(ldos_data, axis=(0,1,2))*cell_volume\n", - " return cls(dft, e_grid, dos) " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the results of a Local-Density-of-States calculation\n", - "class LDOS:\n", - " def __init__(self, dft, e_grid, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which the LDOS has been evaluated\n", - " ## file: a file containing LDOS results in numpy format\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## dft: the DFT_results instance used to generate the DOS\n", - " ## e_grid: the array of energy values at which the DOS is evauated\n", - " ## ldos: the LDOS read from the file\n", - " ## dos: the DOS evaluated from the LDOS\n", - " \n", - " self.dft = dft\n", - " self.e_grid = e_grid\n", - " self.ldos = np.load(file)\n", - " self.ldos = self.ldos / Ry2eV # Quantum Espresso calculates LDOS per Ry. We use per eV units.\n", - " self.cell_volume = dft.volume/(self.ldos.shape[0]*self.ldos.shape[1]*self.ldos.shape[2]*Br2AA**3)\n", - " self.dos = DOS.from_ldos_data(dft,e_grid,self.ldos)\n", - " self.e_fermi = dos_2_efermi(self.dos)\n", - " self.eband = dos_2_eband(self.dos, e_fermi = self.e_fermi)\n", - " dw = get_density_weights(self.e_grid, self.e_fermi, temp)\n", - " self.density = np.sum(self.ldos*dw[np.newaxis,np.newaxis,np.newaxis,:], axis=(3))" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Load results of DFT runs snapshots 0 and 1 using various k-point grids" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "dft_0_444 = DFT_results('snap_0/slurm-1006575.out')\n", - "dft_0_555 = DFT_results('snap_0_555/slurm-1001448.out')\n", - "dft_0_666 = DFT_results('snap_0_666/200327132835.out')\n", - "dft_0_888 = DFT_results('snap_0_888/200409131941.out')\n", - "dft_1_444 = DFT_results('snap_1/slurm-1006846.out')\n", - "dft_1_888 = DFT_results('snap_1_888/200409131805.out')\n", - "dft_2_888 = DFT_results('snap_2_888/200413195430.out')\n", - "\n", - "eigs_qe = dft_0_888.eigs\n", - "kpoints_qe = dft_0_888.kpoints\n", - "k_weights_qe = dft_0_888.kweights\n", - "fermi_energy = dft_0_888.fermi_energy\n", - "\n", - "eigs_qe_01 = dft_1_444.eigs\n", - "k_weights_qe_01 = dft_1_444.kweights" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Load some DOS values calculated by QE's postprocessor for comparison" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions\n", - "\n", - "The Fermi-Dirac distribution function is needed to evaluate the occupations of the Kohn-Sham states as a function of energy" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "dos_qe_0_888_g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_g')\n", - "dos_qe_0_888_2g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_2g')\n", - "dos_qe_1_888_2g = DOS.from_dos_file(dft_1_888, 'snap_1_888/Al.dos_2g')\n", - "dos_qe_2_888_2g = DOS.from_dos_file(dft_2_888, 'snap_2_888/Al.dos_2g')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energies, e_fermi, temperature): \n", - " return 1.0 / (1.0 + np.exp((energies - e_fermi) / (kB * temperature)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A Gaussian is one possible representation of the $\\delta$-functions occuring in DOS definition\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "with a width $\\sigma$." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function\n", - "## Note that this could be written as an array operation in Numpy using ln(exp(2*cosh(x/2))),\n", - "## but I am using the mpmath polylog() function for consistency and to avoid over/underflow\n", - "def fermi_integral_0(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64(kB * temperature * (x + mp.polylog(1,-mp.exp(x)))))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy)\n", - "## Note that this could be written as an array operation in Numpy using ln(exp(2*cosh(x/2))) and np.spence()\n", - "## but I am using the mpmath polylog() function for consistency and to avoid over/underflow\n", - "def fermi_integral_1(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**2 *\n", - " (x**2/2.0 + x*mp.polylog(1,-mp.exp(x)) - mp.polylog(2,-mp.exp(x))) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy) squared\n", - "## As far as I can tell, there is no polylog(3,x) function for Numpy so I am using mpmath\n", - "## This also helps avoid over/underflow.\n", - "def fermi_integral_2(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**3 *\n", - " ( x**3/3.0 + x**2 * mp.polylog(1,-mp.exp(x))\n", - " - 2.0*x*mp.polylog(2,-mp.exp(x))\n", - " + 2.0*mp.polylog(3,-mp.exp(x)) ) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.1696824228988496\n", - "0.16968242289884924\n", - "3.608224830031759e-16\n", - "-0.013419715723285694\n", - "-0.01341971572328568\n", - "-1.3877787807814457e-17\n", - "0.0016322822031528137\n", - "0.0016322822031528126\n", - "1.0842021724855044e-18\n" - ] - } - ], - "source": [ - "# Test the Fermi integral functions against quadrature\n", - "energies = np.array([6.83,7.11])\n", - "e_fermi = 7.0\n", - "fi_0 = fermi_integral_0(energies, e_fermi, temp)\n", - "aint_0 = fi_0[1] - fi_0[0]\n", - "qint_0, abserr = sp.integrate.quad(\n", - " lambda e: fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_0)\n", - "print(qint_0)\n", - "print(aint_0 - qint_0)\n", - "fi_1 = fermi_integral_1(energies, e_fermi, temp)\n", - "aint_1 = fi_1[1] - fi_1[0]\n", - "qint_1, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_1)\n", - "print(qint_1)\n", - "print(aint_1 - qint_1)\n", - "fi_2 = fermi_integral_2(energies, e_fermi, temp)\n", - "aint_2 = fi_2[1] - fi_2[0]\n", - "qint_2, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)**2*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_2)\n", - "print(qint_2)\n", - "print(aint_2 - qint_2)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate weights that will compute the analytic integral of the Fermi function\n", - "# times an arbitrary linearly interpolated function\n", - "def get_density_weights(energies, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_0 = fi_0[1:] - fi_0[:-1]\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_1 = fi_1[1:] - fi_1[:-1]\n", - " weights = np.zeros(energies.size)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " weights[1:] = weights[1:] + fi_1/delta_e\n", - " weights[1:] = weights[1:] + fi_0 * (1.0 + (e_fermi - energies[1:])/delta_e)\n", - " weights[:-1] = weights[:-1] - fi_1/delta_e\n", - " weights[:-1] = weights[:-1] + fi_0 * (1.0 - (e_fermi - energies[:-1])/delta_e)\n", - " return weights" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate weights that will compute the analytic integral of the Fermi function\n", - "# times the energy times an arbitrary linearly interpolated function\n", - "def get_energy_weights(energies, e_fermi, temperature):\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_1 = fi_1[1:] - fi_1[:-1]\n", - " fi_2 = fermi_integral_2(energies, e_fermi, temperature)\n", - " fi_2 = fi_2[1:] - fi_2[:-1]\n", - " weights = np.zeros(energies.size)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " weights[1:] = weights[1:] + fi_2/delta_e\n", - " weights[1:] = weights[1:] + fi_1 * (1.0 + (e_fermi - energies[1:])/delta_e)\n", - " weights[:-1] = weights[:-1] - fi_2/delta_e\n", - " weights[:-1] = weights[:-1] + fi_1 * (1.0 - (e_fermi - energies[:-1])/delta_e)\n", - " weights = weights + e_fermi*get_density_weights(energies, e_fermi, temperature)\n", - " return weights" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos\n", - "def analytic_enum(energies, dos, e_fermi, temperature):\n", - " return np.sum(dos*get_density_weights(energies, e_fermi, temperature))" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos\n", - "def analytic_enum2(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept + (fi_1[1:] - fi_1[:-1])*slope)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos times the energy\n", - "def analytic_eband(energies, dos, e_fermi, temperature):\n", - " return np.sum(dos*get_energy_weights(energies, e_fermi, temperature))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos times the energy\n", - "def analytic_eband2(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_2 = fermi_integral_2(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept*e_fermi\n", - " + (fi_1[1:] - fi_1[:-1])*(fermi_intercept + slope*e_fermi)\n", - " + (fi_2[1:] - fi_2[:-1])*slope)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(e_grid, centers, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((e_grid[np.newaxis]-centers[...,np.newaxis])/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "# Define a discretized delta function that maintains 0th and 1st moments\n", - "def delta_M1(e_grid, centers):\n", - " de = e_grid[np.newaxis]-centers[...,np.newaxis]\n", - " de_above = np.min(de,axis=-1,initial=np.max(de),where=np.greater(de,0.0))\n", - " de_below = np.max(de,axis=-1,initial=np.min(de),where=np.less_equal(de,0.0))\n", - " e_spacing = de_above - de_below\n", - " result = 1.0 - np.abs(de)/e_spacing[...,np.newaxis]\n", - " result = result*np.greater_equal(result,0.0)*np.less_equal(result,1.0)\n", - " result = result/e_spacing[...,np.newaxis]\n", - " return result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The total number of electrons is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ by summing the occupations over all of the states\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik})\\ ,$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$. The weights $w_k$ arise from an implicit integral over the Brillouin zone, which is evaluated as a simple sum over a regular grid of k points. This simple approach to evaluating the integral often gives reasonable results since $\\epsilon_{ik}$ is periodic in $k$, but it becomes less accurate when the Fermi level lies within a band due to the non-analytic behavior of the Fermi-Dirac function at the Fermi level. The sum over a regular grid of k-points is additionally reduced by symmetry, which results in different $w_k$ values for different $k$ values." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating the number of electrons from DFT results\n", - "def dft_2_enum(dft, e_fermi = None, temperature = temp):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## enum: number of electrons\n", - "\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " enum_per_band = fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " enum_per_band = dft.kweights[np.newaxis,:]*enum_per_band\n", - " enum = np.sum(enum_per_band)\n", - " return enum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy,\" which is also called the \"single-particle energy\" or the \"one-electron energy,\" is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ ,$$\n", - "\n", - "where the various terms are defined above." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DFT results\n", - "def dft_2_eband(dft, e_fermi = None, temperature = temp):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## eband: band energy\n", - "\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = toms748(lambda e_fermi: dft_2_enum(dft, e_fermi, temperature) - dft.n_electrons, a = np.min(dft.eigs), b = np.max(dft.eigs))\n", - " eband_per_band = dft.eigs*fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " eband_per_band = dft.kweights[np.newaxis,:]*eband_per_band\n", - " eband = np.sum(eband_per_band)\n", - " return eband" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3654808767733\n" - ] - } - ], - "source": [ - "eband_0_888_ref=dft_2_eband(dft_0_888)\n", - "print(eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3470902759054\n" - ] - } - ], - "source": [ - "eband_0_888_sc_ref=dft_2_eband(dft_0_888, e_fermi = 'sc')\n", - "print(eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.146096688316\n" - ] - } - ], - "source": [ - "eband_1_888_ref=dft_2_eband(dft_1_888)\n", - "print(eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.1203692340027\n" - ] - } - ], - "source": [ - "eband_1_888_sc_ref=dft_2_eband(dft_1_888, e_fermi = 'sc')\n", - "print(eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.8711214367395\n" - ] - } - ], - "source": [ - "eband_2_888_ref=dft_2_eband(dft_2_888)\n", - "print(eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.876315137265\n" - ] - } - ], - "source": [ - "eband_2_888_sc_ref=dft_2_eband(dft_2_888, e_fermi = 'sc')\n", - "print(eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0023586003111\n" - ] - } - ], - "source": [ - "enum_0_888_ref=dft_2_enum(dft_0_888)\n", - "print(enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0032983385398\n" - ] - } - ], - "source": [ - "enum_1_888_ref=dft_2_enum(dft_1_888)\n", - "print(enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9993338972209\n" - ] - } - ], - "source": [ - "enum_2_888_ref=dft_2_enum(dft_2_888)\n", - "print(enum_2_888_ref)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, the total number of electrons can be obtained from the DOS\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} dE\\ D(E)\\, f(E)\\,$$\n", - "\n", - "where $E$ denotes the energy, $D(E)$ the DOS, and $f(E)$ the Fermi-Dirac distribution function." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def dos_2_enum(dos, e_fermi = None, temperature = temp, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the linearly interpolated dos\n", - " # output:\n", - " ## enum: number of electrons\n", - " \n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.trapz(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.simps(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " enum, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " enum = analytic_enum(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the self-consistent Fermi energy such that dos_2_enum(...) = dos.dft.n_electrons\n", - "def dos_2_efermi(dos, temperature = temp, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the linearly interpolated dos\n", - " # output:\n", - " ## e_fermi: the self-consistent Fermi energy\n", - " \n", - " e_fermi = toms748(lambda e_fermi: dos_2_enum(dos, e_fermi, temperature, integration) - dos.dft.n_electrons,\n", - " a = dos.e_grid[0], b = dos.e_grid[-1])\n", - " return e_fermi" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similarly, the band energy can be obtained from the DOS\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} dE\\ D(E)\\, f(E)\\, E .$$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate E*DOS*FD to obtain band energy\n", - "def dos_2_eband(dos, e_fermi = None, temperature = temp, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the energy times the linearly interpolated dos\n", - " # output:\n", - " ## eband: calculated band energy in eV\n", - " \n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = dos_2_efermi(dos, temperature, integration)\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.trapz(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.simps(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " eband, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*e*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " eband = analytic_eband(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return eband" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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pQuBgYHMnj2bZ555hhTThquZpKam0rNnT/r160dkZCT16tWjS5culCpVioULF9K0aVOioqJstrXll19+AaB37944OzvnuV1mffr0YcWKFZQqVYq2bdvSrl077t69y1dffUXTpk05fvx4gfu2dPv2bR5//HEmT55MXFwcbdu25fnnnycgIICjR48yYcIEq/qLFy+mQ4cOrF+/noCAAHr27Mnjjz+Oq6srixcvZuPGjXl63wMHDvDGG2+wc+dOKlWqRJcuXWjdujWnTp3i448/Jjg4mOTk7GfS/vWvf/HCCy/g7OxMaGgofn5+bNmyhWeeeYadO3fe089EFC9376axdm3GrHGvXhdwdHRIvyoD7MQ4O70smx4yB9NdgKwfYI3hRZrFdR1AX4ARFw8GQ8Ykws2bssxDZKKUsttXs2bNlBAlzezZsxWgRo4caZUfGBioKlSooMqXL68aNmxoVTZy5EgFqC+//NIqv1q1agpQ0dHRVvndu3dXgGrbtq26ceOGOf/ChQuqdu3aClCA2rp1q1W79957TwHqySefVOfPn7c5bn9/f5Wampqne/Xz81OAWrp0aZ7qZ+eHH35Qt27dsspLTU1VH3/8sQJUx44ds7TJ7mdj8tRTT2X5GSxZskQBKjQ0NMs9pqWlqYiICKu8GjVqKEBt3749S//nz59XR44cscobOHCgAtS3336bpW5ERITS6/VW+devX1cdO3ZUgPrss8+yvIfp/2O5cuVUVFSUOV+v16vXXnvN/GdAPDwmTNivQClQStOuqdjYW7k3snJKZfwa9lZKGXKo28CibtcCjbe4ePnlbeafW0DAIqVUzaIekigCQJSyEY8WeUB8Ly8Jpksm0z9o9vi6H44dO6YAFRgYaM67fPmyAlS/fv1U3759laZpKiYmxlxev359Bahjx45Z9WUrYDx79qzSNE05ODiokydPZnn/NWvW2Aymr127ptzc3JSHh4fVe1sKDQ1VgFqzZk2e7tXV1VUBav369TbLZ82apQYOHGj1euONN/LUt0mlSpWUTqez+tCgVMGC6alTpypAzZgxI0/v7e7urry8vPI81uyC6ZwcP35cASooKChLmen/4+zZs7OUXblyRQHKxcVFpaSk5Pn9RPHWu3fGv0ft2u0rQA96pVRplfGr+GIOdZcrpTSllI9S6lwB3qv4GDo00vxzq1p1g1JqVVEP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ffp+UlNND6wlMm3avRwfLooDJycwrZ3X651ISdEhwbQACaaFEELYmQEDtnPnTt30qzuMGpVUaO/14ostmD37jPl64cJXWLNmMbAsx3ZffJFiTjdqtJgKFToWzgDFA2NcRpRxuuaNG7LXtDCSYFoIIYSdSOHYsf+xYkVDc87TT++mYcPShfquw4bVpU+fjID91VcXcPXqZLILpM6fh8uXW5ivP/10PVDwLftE8aFpGcF0YqIrEkwLkGBaCCGEXZhHWpov7drpUMoLAEfHaH78sWmhv7OmwVdflaZSJePDZrGx5Xn22U8xGCJs1v/Xv8BgMP56ffrpCEJDAwt9jOLBsA6m9wJVim4wotiQYFoIIUQxth/YgcFQ5v/Zu+8wqar7j+OfM20rHZQmCogFxRLR2Cg2bLHGhsQWjTGaYjSixpqosUYTTfJLsGs0doMxxIpiAQsiKiAgKIoUWTpbZ2bn/P6Y2XsX3F1h2Z0zM/f9ep59OOfOvbvfZNyZz5459xztuedVWrToh94jV155vjp33i1zTvvq2lW67z7/BsJp047VWWdN/dZ5b78tPfCA37/00psljfrWechPxvjTdyorYyJGQeK/AgBATrtB0n466qiZmj79Qu/okCF36pprXpC0RtKArFRy6KHSbru96PUfeuiXeu21L71+XV29LrjAX/Hh+OOf1qhRb0galpX60P7C4YTXXrs23sKZCBLCNAAgR62R9B/dc89emjDheu9onz5PaurUX2d6l0vqmLWKXnllmGKx+ZleBx199FrNnr1cyWRKBxzwmj76KL3WdUmJdMcd+0saL6kka/WhfYVCfphety7RwpkIEsI0ACBHPaNkMq4LL/yzd6Rjxzc1Y8ZpisVSknpLuiCrFXXrVqq7746r4cazysohGjw4pM6dZ2nKlIO98044YY769dtS0qFZrQ/tq/HIdGXlQjUsm4hgI0wDAHLUf/TLX56qqqq9M/06PffcRercueEmsKvkYtT39NN31JFHvu31re2qqqqdvX5Z2Uf6y1+2yXpdaH+RiL96R1XVDZJmuCsGOYMwDQDISVVVn2r8+Ju8/t57T9GIEVdK6inpZElnuypNzz8/Qtdc874ikYWNjia0//7XafHiGerYsajZa5G/GofpykqWxkMaYRoAkINW6o9/PFGLF/eVJHXvntRTT+0h6RhJSyQ9JinqsL6Urr12gZYsOU6jRl2tQYPu02OP7ak337xOHTv+wGFdaE9Fjf5GSiaLJdU7qwW5I+K6AAAANrRmzSe6/faLvP5NN0XUp0/7bs6yaeoljVX37gv04osfNDp+mKROjmpCe9t//6F64ol0e8cd2QERaYxMAwAcSUha2eQjf/lLWGvWpDdnGTRoqc48M3tVbZyopN82cfy4bBeCLGo8Ml1byzQPpBGmAQCOvCupm6RtJV3mHV26tFLXX+/vGnj55TMVDn/r4hxwhtbfAc9IOtpRLciG4mK/TZhGA8I0AMCR9zP/zpe01Dt6zjlTVVvbRZLUufMX+tGPSrNf2kaJqfEfAdI+St8ciULVOEzX1RWJOdOQCNMAAGfea9TeS5I0ZcoiTZjgj0ofeeTtikaHZLmuTXGOpB9J2lnSbY5rQXurqVnttb/6ipFppBGmAQCOvN+o/S999tnhGjmyVtb2kCSFw4v1t7/dKqncSXUbJybpYUmfKD0yjUI2e/Z0rz1tGmEaaazmAQBwYIXS0zvS5s+fqe9977+KxwdmjsR1883fqGPH3k6qA5ry7TnTTPMAI9MAACemSpKSSaOzzvqxBg2aq8rKhpHdlC68cKouvnh3d+UBTWgcpuPxEqVvOkXQMTINAHDgPaVS0oABj2nhwpPWe+SHP3xTd9wxwlFdQPOKi/3wXFf3PUn8dwpGpgEATrynU065YL0gHQ4v0G9/O1pPPfUrSb+W9JAk66pA4FtKS/3YVFdHhEIaI9MAgCyzmjlzrZ591l/9YuDABzRlyvnq0aMmc+QjSdtJOt1FgUCTGofpRIIwjTTCNAAgq2prF+rUU+9UMpmegNqp0xeaNu0+dexY0+isYkl3OakPaA5hGk3hvwQAQFbdcYfRxx/vKkkqLq7T5Mn91bHj/o3O6CnpDUmjXJQHNKu01N+KM5FISVrorhjkDMI0ACBrKiqkG2/0t+C++ea1GjxYki6WdIykk5XezGVPJ/UBLSkr88N0Mlkj6Wl3xSBnMM0DAJA1p5/+mdatGyRJ2nFH6fzze2Qe6Sbp387qAjZGebkfm5LJIrFpCyRGpgEAWfLyywv0wgvbeP0//KFeEYZ0kEe6dCn12rEYOyAijTANAGh3yWRKp55aISkqSerYcbqOPpq3IOSXIUMGee2ePQnTSOOVDADQ7g44YJKWL/fnQf/pTxUKhdg9DvmF7cTRFMI0AKAdzJF0pKSLNHbsJL311gHeI3vtdYvOOusXYkMW5JuiIr9dV8ecaaQxWw0A0A5+Juk1XXWV0a237uEd7dbtJb355uWSrpTEyDTyS+MwnR6ZJkyDMA0AaHNfKJV6TUceOVYvvHCjGj4EjUTm6913T1EsllJ6CTwg38QlxSRJVVVRMc0DEmEaANDG4vFV2nXXhzV79o+8Y+HwAo0f/wMNHFgt6U5Jg53VB7SeH6arq2NiZBoSYRoA0IYSCemoo/pp9uzvecc6dXpL77wzWjvscJSkVyT1cVYfsDnKy2ONelERpiERpgEAbSKp2lqrU06J6qWXuntHBwx4Sx99tKfKyxdICjd7NZAPSkujjXoxpVLdFGIph8DjPwEAwGZ6U1VVfXT00ZM0frx/9NhjF2vOnH1VXl4kgjQKQXo5x4TXr6n5rbtikDMI0wCAzVCvr776tQ488Gm9/PLB3tGxY6VnnumtSIS3GRSauNeqqoq3cB6CgmkeAIBWmzv3n9p993+outpf/u766yv129+Wy7DyHQqSP0+6qirRwnkICoYMAADfwUp6ROlNWO71jk6fvki77LLnekH6ttum6IorCNIoXMY0HpkmTIMwDQBo0UxJIyX9SNIESecomZyms856U9/7Xkx1dQ1L3KV0+umv6uKL93FVKJAVxvgBurr6fYeVIFcQpgEAzfhc0l6S3pAkJZNGl1/+M3XqFNUDDwyTtT0y5yX185/fpQcfPMhVoUDWhEKNw/QTDitBrnASpo0xvzbGzDTGzDDG/MsYU2yM6W+MedcYM88Y87gxJvbd3wkA0H5ekFQtSbrzzv1VVjZTN930N1VXD/HOCIe/0vXXn6i77vqxoxqB7DLGnzNdXe2wEOSMrIdpY0wfSb+UNNRau7PS6yWdIulmSXdYa7eVtErS2dmuDQDQ2IeSpKef3lm/+tUExeM7NnqsTvvtd72WLt1BV1wxWlIHJxUC2VZe7kencDjawpkIClfTPCKSSowxEUmlkpZIOlDSU5nHH5R0rKPaAACSpA9VUdFd55zznPywvFbf//4L+uCDQ/XWW1epe/cxkk5yWCOQXf37d/Xa3bsXO6wEuSLrS+NZaxcZY26T9JWkGkkvSfpA0mprbcNnJ1+L/WYBwKGEEolPdeKJ/9Xq1f0zx9bp2WeX6dhjD1P6psRbJV3krELAhWjUeu14nGVr4GaaRxdJx0jqL6m3pDJJh23C9ecaY6YaY6ZWVFS0U5UAEHSf6t57T9OkSSMlScZIjzxidOyx22YeL5Z0ldIv4UBwxBrd0RWPs44D3EzzOFjSF9baCmttQtIzkvaT1Dkz7UOS+kpa1NTF1tpx1tqh1tqhPXr0aOoUAMBmqqn5WL///dVe/8orpVNPLXdYEZAbYjFGprE+F2H6K0l7G2NKjTFG0kGSZkl6TdIJmXPOkDTeQW0AAEnXXttdS5b0liT17LlOl13muCAgR6xYsdxrz5/Ppi1wEKatte8qfaPhNEmfZGoYJ+lSSRcZY+ZJ6qbG22wBALLm66/X6tZb9/T6V15Zr9JShwUBOWTp0m+89pdf1jusBLki6zcgSpK19hpJ12xwuGF3AACAQ6NHT5O1IyVJkchCnXHGlm4LAnJIOOwH6NrasMNKkCuYOQ8A8Dz88Cy99dZ+Xv/HP/5K5eXsoQU0iET8OdO1tb0cVoJcQZgGAEiSli+v1jnnFElKb0RRXv6J7rprb7dFATkmEvE/1K+rG+6wEuQKwjQABNqLkn6iZHKmRox4X/H4wMzxSo0fv0KxWMplcUDOiUb934m6OtvCmQgKwjQABNrtevXVierefZlmzRrhHT399At14IEHSHrSXWlADlp/0xaHhSBnOLkBEQCQC+brV7/qrDvv/ESSv1xH797P6P7771X6LWJEcxcDgbR+mOaTGzAyDQCBdfXVnXTnnY/LD9JJ7bPPjZo161SFQpJ0g6Q+zuoDclEk4q/mUVf3lcNKkCsI0wAQKFbSs7r22kpdd11372gsNlv//Of3NXnyb9WpU52kAyX9xlWRQM6KxfwwHY8TpkGYBoCAmatJk/6k3/3O3xp84MBlmjlzvMaMmZY50k3Sw+ItAvi2WKOVIuPxqLtCkDOYMw0AAVJX97Z++tN/eP2DD5bGj99CpaVjJdVJelPSdZJ6O6oQyG39+vmbGG25JWEahGkACJQLLohqzpwdJEkdOtTpgQeKMluFG0lXuywNyAtDhmzvtfv1Y0Mj8BkeAATG//73ue699ySv/4c/LFYf7i8ENkks5keneJwxSRCmASAQamuTOvHESklFkqTy8nd13nlM5QA2VeMwnUgQpkGYBoBAOOqoN1VVtUumF9f999+lSKTIaU1APopGGZnG+gjTAFDgHn98tl55ZT+vP2rUtTrhhO0cVgTkr6+/XuC1Z86MSWLjlqAjTANAQUlJmihpniTp7rtn6tRTO0lK3yhVXj5Fzz13h6SzXBUI5LVVq77x2kuWxCQl3RWDnMDnEwBQUM6Q9E9ZK40e/R89/vihkhqW76rW00+foaKin0rayl2JQB4rKjJeu74+Kqm++ZMRCIRpACgYEyT9U4sXd9A++zyor776gfeIMSt0442naNSoRZIuc1YhkO+Ki8NeO5nsoPSykggywjQAFIQaSb/QnDnb6aCDntOiRf5auCUln+iFF9Zp+PBekn4lqaerIoG8V1Lih+n6+s6Sit0Vg5xAmAaAgnCT1q6t0BFHfKhFiwZ6R7ff/hVNnryPunYtk7SvJOusQqAQrB+mwy2ciaDgBkQAyHtLZO1N+tnP/k+ff54O0qWlVhde+J5mzz44E6Qb8JE0sDmKivzoRJiGxMg0ABSAF/TQQ6fo0UfHeEfuucdo9Oi9HNYEFKbSUj86pVKEaTAyDQB574033tVPfvJXr3/WWdLo0Q4LAgpY42keqZQkrXBWC3IDYRoA8lgqZfXDHx6nRKJckjRgwDrddZfjooACtv7IdEjSKnfFICcQpgEgL9RIulrSzWq849qvf/2Sli8/NNNL6YorvlBZWROXA2gTJSV+mLY2JtaZBnOmASAv/FnSdZl2maSfa8GCNfrLX3b3zhgy5GH9+MdnuCgOCIwePTp57bKymKRqd8UgJzAyDQB54YZG7V9o9eoa7bnnZ0qltpAkhUJL9N//9nBTGhAgjcN0LBYV24mDMA0AOc9KOs7rrV5dpEGDpmv58qHesYsuWqCttjrCQW1AsESjfjseZ5oHCNMAkAeMpIeU3uGwm/r3/6+WL9/He3TYsNd06637NHs1gLYTi/ntdJhmZDroCNMAkCfuvfcH2mmnaVq9+iDv2IgRr+qNNw5wWBUQLIRpbIgwDQB54KWXpJ/+9EDV1/fzjh1yyI16/XWj9EofALIh0mjphvr6iJLJhLtikBMI0wCQ4xYulE49Nf3GLUnGrNZVVx2ll176raSDJHWV9KXLEoHAMEaS4l6/urrOWS3IDSyNBwA5LJF4Taec0lMrVuwoSdpyy6Qef/zHGjHieUndJP1A0tmStnZYJRA0cUnp+R6VlQl17Oi2GrhFmAaAHPbb3xpNnpwO0uFwvZ58MqJhwx6T9I2kXuJlHMg+Y+KyNt2uqdnSbTFwjmkeAJCjbrttum67baTXv+GGORo2TEqPiG0lgjTgir8cXlVVvxbOQxAQpgEgB82fv0qXXuqPeB1yyARdckkfhxUBaBAK+TcdVlVxA2LQEaYBIMekUlYjRsxWKtVLkmTMMv3xjw8qFOr0HVcCyAZj/ABdXc3SeEFHmAaAHJJKWQ0bNkmLFvmbsFx++TkaMuQch1UBaCwU8gN0TQ1hOugI0wCQI1Ipqz32eEOTJ4/0ju2wwzjdcMNcpZfAA5ALQqHGS+N94rAS5ALCNADkgJqapHbc8S1Nnz7CO7bFFs9rypRfSjpfvFwDuSMU8teWrqn5xmElyAW8OgOAY0uXVqlfv480d+4w71ifPk9q/vzj1blzRNIZ7ooD8C2Nb0Csqalv4UwEAWEaAJyx+vrrUzRw4HwtX76Hd3TgwIc1b95olZcnlA7S3HgI5JJ+/Yq89hZbdHVYCXIBYRoAHEkm39SJJ56h6updvGP77z9Rc+f+QMXFl0q6QNKNzuoD0LTevaNeu7y8zGElyAWs+A8AjlxyyXK9887xXv/kkyfqsccOzPRucFMUgO8Ui6W8djxuHVaCXMDINAA4cP/9C/SnP/lB+pJLvmkUpAHkssZhOsGeLYFHmAaALJs1q0IXXODvbnjcce/pppu2bOEKALkkGm08Mu2wEOQEwjQAZNHKlXO1zz7LVFNTIkkaPHimHnqoVCFejYG8MXv2Uq89Zcoih5UgF/DyDQBZU63hw9/Q2rU7SZKi0Ro9/vgClZfv7LguAJuitrbGa69Zw9J4QUeYBoAsOe+8hzRzpr8t+EknPaOddz7SYUUAWiMS8QN0XV0LJyIQCNMAkAWPPDJD//iHv/lK374v6aGHTnVYEYDWikRKvHZdXW+HlSAXEKYBoJ3Nnr1CZ5zRWVL6DbioaKbefXc3hULGbWEAWiUWK/XadXVs2hJ0hGkAaEdLl1Zq6NClqq/vmzmyWs89N029e2/htC4ArRf192xhaTywaQsAtC0r6SFJs1VV1V8777yLqqr2zjyW0lVXzdGoUac5rA/A5mocplkaD4RpAGhTz0o6U6mUtMsu92vFir29R0455S39/vfD3ZUGoE3EYn6bMI2NCtPGmH0k/UjSMEm9JNVImiHpv5L+aa1d024VAkBe+Z8k6YILztPnn5/pHR0x4nX9618j3ZQEoE3FYsu8djy+xGElyAXfOWfaGPM/SedIelHSYUqH6cGSrpRULGm8Mebo9iwSAPLHNL3//lDdd9+fvCPbbfeKJk4c4bAmAG2pqMhfZzqZTDqsBLlgY0amT7PWLt/gWKWkaZmvPxpjurd5ZQCQd+JaufJrnXjiu4rHiyRJ221XpXff3Z+VO4AC0niaRyIRdlcIcsLGrObhBWVjTFHjB4wxe0tSE2EbAALH2hn66U//oi+/3EaS1KmTNGFCmTp3LnZaF4C2tdtuvbz2Djswnhh0GxOmH23UnrLBY39rw1oAIK9dd90CPfXUiV7/vvukgQMdFgSgXfTu3cFrl5Xxx3LQbUyYNs20m+oDQECsP0/ylVcW6JprDvH6P/3phzr++GzXBCAbolE//sTjTPMIuo0J07aZdlN9AAiAJyV1kfR9SZ9qxoxl+sEPEpLSo1XFxbN1220rHNYHoD2tvzQe+98F3cbcgNjXGHOn0qPQDW1l+n3arTIAyFnXKX0f9nuaPv1Iff/7Lyge3y7zWEL33DNG5eUvOqwPQHuKxRiZhm9jwvQljdpTN3hswz4AFLhVSi+zL02d2lv77vs/JRINQbpeP//5+xoz5lk1uncbQIGZPXuB0p9MSe+9V+m0Frj3nWHaWvtgNgoBgPwwRZLVlClbafjwiUomt80cT+rCC5/UHXeMdlkcgCwwpt5rx+NsJh10G7Npy93GmJ2beazMGPNjY8yYTfmhxpjOxpinjDGzjTGfGmP2McZ0Nca8bIz5LPNvl035ngCQHW/rrbe21vDhkxoF6YTGjj1Jd9zxM0lzXRYHIAtKSvwAXV8fdVgJcsHGzJr/q6SrM6H3SWPM34wx9xlj3pQ0Wek7bp7axJ/7Z0kvWGt3kLSrpE8lXSbpVWvtIEmvZvoAkFPWru2tUaPGK5nsnzlSpyuuOFM339wwtYPd0IBCV1Li3zKWSpU6rAS5YGOmeUyXdJIxplzSUKW3E6+R9Km1ds6m/kBjTCdJwyWdmfn+cUlxY8wxkkZmTntQ0uuSLt3U7w8A7enQQ3dVTc2umV6dfve7j3X11RdJWifpAUldndUGIDtKSrp57VSqqIUzEQQbPdHHWltpjJkpaaa1tmIzfmZ/SRWS7jfG7CrpA0m/krSltXZJ5pylkrbcjJ8BAG3ulVekd97Z3+sfd9wUXX31yEzvOSc1Aci+khJ/BY9UijnTQbcxc6aNMeZaY8xySXMkzTXGVBhjrm7lz4xI+p6k/7PW7i6pShtM6bDWWjWzhrUx5lxjzFRjzNSKis3J9ACw8SoqpDPO8Pu77bZETz453F1BAJwpLfUDNGEaGzNn+teS9pO0p7W2q7W2YaeC/Ywxv27Fz/xa0tfW2ncz/aeUDtffGGN6SVLm32VNXWytHWetHWqtHdqjR49W/HgA2DT19dKYMdLixel+jx7S//7XS+EwmzUAQVRW5t90mEqxznTQbcw7wWmSRltrv2g4YK39XNKPJJ2+qT/QWrtU0kJjzPaZQwdJmqX0Z6QN4z5nSBq/qd8bANrDRRet0ssv+/0HH3xfPXvWN38BgIJWUrLYa1tLmA66jflsImqtXb7hQWtthTGmtevB/ELSI8aYmKTPJZ2ldLB/whhztqQvJZ3Uyu8NAG3m6qvf15137uH1r7zyOh1++J+VvvUDQBCVlfkzUa2NtXAmgmBjwnS8lY81K7NCyNAmHjqoNd8PANreJF155STdcMNlavgQr1+/V3XttddK+pkk08K1AApZaakfoK1lnemg25gwvasxZm0Tx42k4jauBwAcS0m6TpdeOl233PKEpPQbZSTyuf7zn1MVDp8g6VaXBQJwrEuXDl67qIil8YJuY9aZZjIQgICok3SSbr99rW655UX5QXqe3njjAO2yy3mSrtHG3W4CoFCVlPgj04kEI9NBx3ouAOC5Q//+93xdfPFbktJvltHofE2e/D8NHfq80hu2Agi6cDgiY1KyNqRUKqz6einM0GNgEaYBIOPDDwfrhBNekNRZkhQKLdXrrxdr6NBfuC0MQE4xJqxYLK66uvRs10SCMB1kfFYJAJLi8XodeGA/1df3zRxZp0cfXaN99+3jtC4AuSiiaDTh9erqmtxnDgFBmAYASUce+ZZWr94t00vp+uvn6OSTt2/xGgBBFVFVlb+g2dKlKx3WAtcI0wAC7+23pYkTh3n9YcMm6Yormlq9EwAkKSJj/DBdU5N0WAtcI0wDCLRVq6RTT61XKpV+Oezde55eemnYd1wFINjCMsaf5lFVlWjhXBQ6wjSAwLJW+slPpK++St851KVLld55J6biYu7NBtCSmEKheq9XXc3IdJARpgEEzLuSDpY0Vn//e42eftp/5L77xmirrSpdFQYgb4RkTMrrEaaDjTANIGB+KelVjR8/QRdc4B89//y/6thjo5IGuyoMQB4JhfwAXVtb38KZKHR8lgkgQKolfaAVK0p08smPydoSSVLfvh/rttsekfSy0+oA5A+meaABI9MAAuQDSfUaPvx21dXtnDlWrb/+9ecqKXlKUpnD2gDkk3DYD9A1NYxMBxlhGkCA9NTYsbdo1qzzvCM/+tHNOvrocZJ6uysLQN4Jh1d57dpa7rUIMqZ5AAiMefO667bbzvT6ffu+rQcfvFaScVUSgDwVDtd5bUamg42RaQCBccQRM2VtD0lSOLxIb765k0IhgjSATdd4mkdtLXOmg4wwDSAQbr99uj77bH+vf9llX2ubbTo7rAhAPttzT+u1hwzZuYUzUegI0wAK3ooVNbrssk5ev0+fybr++u87rAhAvisv96d21NfzCVeQEaYBFLwRI95XItE/01ut//ynrsXzAeC7xGL+1I543LZwJgodYRpAQRs/Xpo5c7jXP+OMi7T77isdVgSgEKwfplMtnIlCR5gGULAWL16os89e5/W32+4p3Xff/ZKY4gFg8xiT8NqrVlU5rASuEaYBFKTa2k91wgnfaMWKDpKkvn0XasqUcxUK9ZHU121xAPLeBx+s9dpvvz3TYSVwjTAMWhHyAAAgAElEQVQNoOCkUh/ozDM/0ZQpQyWlt/19+OHT1LXrKknHuy0OQEGIRv1pHnV1zJkOMjZtAVBg5ujww8frpZd+7x354x+naOTIEyWdI+k4Z5UBKBxFRY3nTDssBM4RpgEUlNtue04vvXSt1//hD+fpV7/aX9L+zV4DAJsqFtvea9fVlTusBK4xzQNAwZg58xtdeumP1PDS1qnTVD3wQD8ZloAF0MZisVKvHY8Tp4KMZx9AQUgm6zVy5HylUr0kScYs16RJ/VReHnNcGYBCVFTk/5WeSPAXe5ARpgEUhOOOe0XLl+/r9a+7bqF23XULhxUBKGTFxY3DtMNC4BxhGkDee+SRj/X88yO8/p57vq0rrtjdYUUACl1Rkb9RCyPTwUaYBpDXli2r1FlnxSQVS5JKS+fotdfYlAVA+youftlrJxJ1DiuBa4RpAHltxIgPlEjskOlV6d///kRlZSxUBKB9lZTUe+1kkjgVZDz7APLUB7ryyic0e7Y/vePssy/RIYcc47AmAEFRXOyHaWujDiuBawzfAMhDE/XVV2frr3+d5h3p1+8xjRuXksSbGoD2t//+nb32kCGDHFYC1wjTAPJOMnmdxox5SKtXd5Ek9ey5QG+8cZ5Cof84rgxAUBQV+e14nBsQg4xpHgDyzDv6wx+G6a23hkmSwuGknn76VG299Q6S9nNbGoDAKCqyXpswHWyMTAPIK//73xP6/e9v8frXXrtO++57raQ9xfgAgGyJNdoPqq6OMB1khGkAeWPZsmodc8wvVV+ffukaNqxKl1/eRdIot4UBCJz6ev8GxNWrkw4rgWsM4wDIGyNHTlcisY0kyZi1uueeqMJhtzUBCKblyyu99pdfVrZwJgodYRpAXrjiiqn69FN/u/Af/3iattsu1sIVANB+ysr8CJVK8UF/kBGmAeS8jz6q0I03DvD6ffu+qXHjRrRwBQC0r9JSf560tfxhH2SEaQA5rb7e6uCDv5C1XSVJ4fAiTZq0k0IhbvgB4E55+fleO5UqauFMFDrCNIActlQnn/ysli/fK9NP6eabx2vAgK5OqwKA8vKOXpsdEIONMA0gR92rZ589RE8/fYR3ZM89b9HFF+/hsCYASCsraxygmeYRZIRpADmoTqtX/06nnvqIpGJJUknJNL366nuSvu+0MgCQpA4dGk/tIEwHGWEaQA56TEcccb5qa3fJ9Gv0+OPj1aHDPU6rAoAGRUWVklKZXkTxeH1Lp6OAEaYB5BirGTP+o/ffv9g7cvLJ7+moo34nibnSAHJDKPSQpLjXr6qKN38yChphGkBOsXaSzj//l0om0/MRd999lR59dLjjqgBgQ1E1DtPr1hGmg4owDSCnPPzwdL35Zjo8RyL1evjhLiyDByAHRRQO+wG6tjbVwrkoZIRpADljzZp6/eY3Z3n9X/96tXbayWFBANCsqLbcss7rlZV1cVgLXCJMA8gZo0a9rYqKTpKkvn2rdfXV3RxXBADNiSoW80em48zyCCzCNICc8PLLC/Tee3t7/bFjK1Ve7rAgAGjR+mG6rq6FU1HQCNMAcsLpp3+jhrVaO3b8WBdc0MNtQQDQooiKivwEzch0cBGmATh3660faulSfzOWu+6KcNMhgBwXVV2dn6C/+WaVw1rgEmEagFMrV9boiis6e/2BA1/V6acPdlgRAGyMqBYv9sP0vHkLHdYClwjTAJw64oiJSiT6Z3qr9eSTf3FaDwBsnPWXxqupYQfEoCJMA3Dm0Ufv0LvvHur1TzvtN9p99584rAgANlaRIhHCNAjTABypqZmtc84ZKSkiSerceaLuv38vSUe4LAsANtIwhcP+FDXCdHARpgE4cfzxr6qmZvdMr0ZPPlmqcPhcpzUBwKaIRPxdD2tq2AExqAjTALJu7txleumls73+4YdP0MEH793CFQCQe6JRfzSa7cSDizANIKtSKenccyuVShVLkjp0mK5nnjnacVUAsOkiEeu16+psC2eikBGmAWTVPfdUatKkAZKkcDipSZOWq7g46rgqANhUNYpGq7weI9PBRZgGkDWLFkmXXFLs9S+55D7tvvuBDisCgNZarGj0M69XW8vIdFARpgFkRSpldeyxX2vt2vTqHYMGzdXVV3cRL0MA8lNEsZi/nTjTPILL2buYMSZsjPnQGPN8pt/fGPOuMWaeMeZxY0zMVW0A2t4ll7yjqVP7ev27706qpOREhxUBwOaIqmtXf53psrIuDmuBSy6HhH4l6dNG/Zsl3WGt3VbSKklnN3kVgLyzbFmV/vSnbbz+jju+oREj2DIcQD6Lap99/DC9ww67OqwFLjkJ08aYvpKOlHRPpm8kHSjpqcwpD0o61kVtANraMo0e/U+lUr0kSaHQN3rhBd50AOS7iIqK/Gke8XgLp6KguRqZ/pOksZIabn3tJmm1tTaZ6X8tqY+LwgC0rY8/vl4TJ47x+qedNlf9+nVyWBEAtIWoYjE/QROmgyvrYdoY8wNJy6y1H7Ty+nONMVONMVMrKirauDoAbWuOTj55J0nlkqSiotkaN25ftyUBQJsgTCPNxcj0fpKONsYskPSY0tM7/iypszEmkjmnr6RFTV1srR1nrR1qrR3ao0ePbNQLoJX+/e9/avbsc7z+VVdVKhYLO6wIANpKRCtW+Al63ryvHNYCl7Iepq21l1tr+1prt5F0iqSJ1toxkl6TdELmtDMkjc92bQDaUkrnnruvpHR47tZtiq64YqjbkgCgzYS1cKE/Z3ru3C8d1gKXcmmB10slXWSMmaf0HOp7HdcDYDPcfPMzqqg4PNNL6e9/Z540gMJSXJz02smkcVgJXIp89yntx1r7uqTXM+3PJe3lsh4AbSMer9e11+7g9QcNekYnnHBCC1cAQP4pLi732slkLo1PIpt45gG0uQceqFNt7c6ZXpUefbTUaT0A0B5KSs702skk94MEFWEaQJuqrpZ+9zv/484TT/ybhg49zGFFANA+Skr8AE2YDi7CNIA2dfvt9Vq8uESS1LPnEt133zrxUgOgEDUO0/X1vM4FFc88gDazdKl0003+m8t1112j8vLRDisCgPazfph2ehsaHCJMA2gzo0fPVlVVur3zzl/qrLMOkrSj05oAoL2Ulc3w2vX1TPMIKsI0gDbx3HPz9Prrg7z+TTf1VTh8ssOKAKB9lZQ87LVTKcJ0UBGmAbSJc85ZKX+Dlg90xBG8sQAobKWl1munUkzzCCrCNIDNdsstz6uiomGZ+JT+7/86yLB/AYAC17273y4p6eiuEDhFmAawWeLxel1zzTZef9CgZ3Tiidu5KwgAsqRvX380ury8s8NK4BJhGsBmOf/8yY02aKnWv/5V77QeAMiWWMyf5hGPOywEThGmAbTa8uXVuv/+gV5/+PA7tMceRzusCACyJxbz23V1RKqg4pkH0GqnnPI/pVK9JUmh0FI99thsSSVuiwKALCkqajwyzY0iQUWYBtAqn3wyVq++OsrrjxlztXr1+pHDigAgu6JRv11X564OuEWYBtAK03Xyyf0ldZAkFRXN0N13D5Z0qNOqACCbIpGIpPR9ItaGFY9zz0gQEaYBbLJZs8ZrzpyfeP0rrqhQUdGFDisCABcikvwh6bVrGZ4OIsI0gE20Tpdeupe3QcFuu32hK688wHFNAODCEEn+Mh5VVQl3pcAZwjSATTJxYkLPP3+4JMmYlO6/fxs2aAEQUL+TMX6ArqxkfbwgIkwD2GiplHTxxV29/hlnrNZuu5GkAQRXKJT02pWVjEwHEWEawEa7+OIPNH16ul1SIl13XdeWLwCAAmcM0zyCjjANYKPE4/X661+7eP2zzlqlvn0dFgQAOaDxyHR1dbKFM1GoCNMANsrFF/9JicSATG+txo7l5QNA0L2uUKjW6zEyHUy8GwL4Tsnkoxo37jCvP3z4NG29dSeHFQFALviPQqEqr1ddzTrTQUSYBvAdkrr00hcVj++U6a/T/ffv6rQiAMgNEYXD/pzpmhrCdBARpgG0KJV6SX/7m78hy777vqcBA7q0cAUABEVUPXv6Ybpjx+4Oa4ErhGkALbrzzldUW7t7plele+/dzWk9AJA7ohowwA/T3bv3dlgLXCFMA2hBpW69dT+vN3jwZO2wQzeH9QBALomoqMjfQryO3cQDiTANoFmTJz+uxYuP9fo33tjfYTUAkGuiisX8kek4GyAGEmEaQLMuuqhOUliS1KXLZB199LZuCwKAnEKYBmEaQDNqapbqo49O8vo/+1lVC2cDQBBF9OWX/tyODz+c5bAWuEKYBtCkJ56Yrtra9J3pXbos1DXXHOi4IgDINVGtXOkPRy9evNxhLXCFMA2gSePG+fOjL7tsiWKxsMNqACAXRRWN+mG6rs46rAWuEKYBfMvMmdLkydtLkqLRpM48c7DjigAgF22raLTc6xGmgyniugAAuWfcOCvJSJKOOSaiLbYob/kCAAikESoqSnk9lsYLJkamAaxn9epa/eUva7z+T37isBgAyHGxmPHarOYRTIRpAOu58sppSqU6S5IikYU66CA+tgSA5sRifjse5/UyiAjTANbzyCN+e8SI+QqHTfMnA0DAFRX57Xic18sgIkwD8Dz//HtavXrfTC+pG2/s7bQeAMhtc1RU9LHXSyQI00FEmAbgufLKr7x2r14vas89t3NYDQDkuq9VVDTD6zEyHUyEaQCSpIqKan300cFe/xe/WOiwGgDIB1EVF/t3HSaThOkgIkwDkCSNHfuapPSNh9HoZ7rkkpNavgAAAi+i7bbz18PbaqttHdYCVwjTACRJTzzR12sfeui/FYl0dVgNAOSDqAYO9Eemu3bt5bAWuEKYBqAHH5yl6updM71a3X47bwgA8N2iisX8MM0608FEmAagG2742msPGPCkBg063mE1AJAvIioq8qd5EKaDiTANBNyqVVZffjnM61922XRJpe4KAoC8sf7INNuJBxNhGgi4Bx+cpXi8RJK0/fYf6uyzz3dcEQDki6iWLPET9KxZ8x3WAlcI00CAWSv9/e/beP2LLpqtUGigu4IAIK9EFA5Xe71165IOa4ErhGkgwF5/XZozp0yS1KFDXKeeepDbggAgr0TVpYsfpuvri1o4F4WKMA0E2G23rfPap50WU3n5Fg6rAYB800Fduhzn9errix3WAlcI00BAzZmzQhMm+KMo556bclgNAOSjcnXvfoXXS6VKHNYCVwjTQECNHTtZUkySVF7+iXbdlZcDANhU3bs3DtCE6SDi3RMIoFRqql54wb/R8Ic/XO2wGgDIX6WlUUkNNx7GVF2dcFkOHCBMAwE0btxDiscHZ3rrdNNNuzutBwDyVShkJPk3Ia5YUd38yShIhGkgcJbqttv88LzDDu+oZ89yh/UAQD47TaFQ4zBd67AWuECYBgJm8eKnNX/+SV7/ssv6OqwGAPLdUwqFqrzeypWE6aAhTAMBc8MNX0lKry1dVPSpTjttB7cFAUBeW3/jllWr2FM8aAjTQKCs0DPP7OP1Roz4KjPfDwDQOlH16+eH6c6dezusBS4QpoEA+frrZ7R06eFe/5JLGJUGgM0TVZ8+fpg2hntQgoYwDQTIDTcskJTeqKWk5BMdfPDWTusBgPwXUVmZP2e6msU8AocwDQTGWs2Z40/xGD58ocNaAKBQRFVa6idownTwEKaBgFi9+iW9/fYhXv/22w9yWA0AFArCdNARpoGAeO653RWPp6d47LHHYg0eXOS4IgAoBBF9+qmfoF95ZbLDWuACYRoIiPHj/e3DTzxxC4eVAEAhiSqVarw0XtxhLXCBMA0EQE1NUi+/bL3+UUdFHFYDAIUkqtJSbkAMsqyHaWPMVsaY14wxs4wxM40xv8oc72qMedkY81nm3y7Zrg0oVP/4xwytW5deT7pbt3XacUfHBQFAwbhIpaX+ykjV1baFc1GIXIxMJyVdbK0dLGlvSRcYYwZLukzSq9baQZJezfQBtIHHHlvltbfc8kMZ9mkBgDYyRmVl/b1eTQ0f+gdN1p9xa+0Sa+20THudpE8l9ZF0jKQHM6c9KOnYbNcGFKaVmj69u9c7/vhih7UAQOEpL/fjVG0tYTponD7jxphtJO0u6V1JW1prl2QeWippS0dlAQXl3Xf/o7q6IZlenX7xi52c1gMAhaZjx7DXrq0Nt3AmCpGzMG3S+20+LelCa+3axo9Za62kJicdGWPONcZMNcZMraioyEKlQH67666lXrtr1/e0xRZlDqsBgMLToYMfoONxwnTQOAnTxpio0kH6EWvtM5nD3xhjemUe7yVpWVPXWmvHWWuHWmuH9ujRIzsFA3nLauLEHbzesGErHNYCAIXoCnXqdLfXi8ejDmuBCy5W8zCS7pX0qbX29kYPPSfpjEz7DEnjs10bUGiqqz/WkiUHev3zzhvSwtkAgE03W506zfJ6iQRhOmhcjEzvJ+k0SQcaY6Znvo6QdJOkQ4wxn0k6ONMHsBn+9a/XJXWQJIXDCzVq1ACn9QBA4Ymqc2d/nelkMuawFriQ9Z0brLVvSWpuYa6DslkLUOieeqrea2+zzccKhbZyWA0AFKKItt/e36llyy37t3AuChHrtwAFK6WpUwd7veHDUw5rAYBCFVWPHn6YTiQYmQ4awjRQoJLJj7R69X5e/8wzd3VYDQAUqqhKS/0wzXbiwUOYBgrUtGmzlEym50v37LlM++/PFA8AaHuR9cJ0VVULp6IgEaaBAvX661299iGHrFEoxB7iAND2oorF4gqHk5KkREKKx5vcKgMFijANFKjXXz/ca48cyYaiANA+ojJGSqX80elly9Y5rAfZRpgGClAyKb35pt8fObKju2IAoKClF0Yzxg/TK1fWuioGDhCmgQL0xBOfqbIy3e7VK6n+rNQEAO0kvUlLKOSH6eXLa1wVAwcI00ABevzxRV67qOhdGaZLA0A7OUnS4wqH496RVavq3JWDrCNMAwUnpQ8/9EdF9t67voVzAQCbZ4ikkxSJJL0jq1fHmz8dBYcwDRSc2VqyZAevd+SR3R3WAgDBEI0mvDZhOlgI00CBmTVrkpLJhknStTr22G2d1gMAQRCN+iPTa9YkWzgThYYwDRSYJ5742muXl89SeTlb2wJAe4vF/AC9bh1hOkgI00CBee21Tl57222XOKwEAILgcUkDVVw83zuybl3KXTnIOsI0UFC+0axZQ7zevvt2cFgLAARBlaTPVVS01juybh03fgcJYRooIKnUW1qxYi+vf/zxWzusBgCCIL1pS0mJv850VRXbiQcJYRooIK+//r6s7SZJMmalDjign+OKAKDQpTdtGTHCD9O7776fq2LgAGEaKCDPPutvFNC162yFQuzWAgDtKx2mt9iiyjsSj0ddFQMHCNNAwahXXd0Ar7fPPvx6A0D7S0/zKC31R6arq5s7F4WId1ugYHymmTO/5/XOO29vh7UAQFCkR6EJ08EVcV0AgLaRSnXVRx/5I9N77OGwGAAIjHSYLiryE/Ty5TWSShzVg2xjZBooEF98sYWqqtIbtPToIfXs6bggAAiEdJj+9FN/zvS7737sqhg4QJgGCsS0aQmvPWRICycCANpQOkx37OiPTHMDYrAQpoEC8fe/v+21i4s/c1gJAARJmSSpUyc/TCcShOkgYc40UCDmzi3y2ltssUTSIHfFAEBgDJL0orp0iXtHksmYu3KQdYRpoCC8pmXL/EnSI0d2d1gLAARJuaRR6tz5C+9IfX1R86ej4DDNAygAq1dPUzy+XaaX0pFHbuOyHAAInK5d/QBNmA4WwjRQACZMWCgpLEmKRheoe/dStwUBQMB06+YvhWcty+IFCWEaKACvveb/Knfv/rXDSgAgmLp3J0wHFWEayHsJffhhH683aFCdw1oAIIj2U3l5uaT6TL9INTWJli5AASFMA3lvthYs2Nnr7bVXucNaACCIUgqF6iX5G7esWFHjrhxkFWEayHtztGqVv0vLwQez9SEAZFcnSVIo5K81vWoVnxIGBWEayHNz5nyuVKp3pletAw7o57QeAAiezpKkfv38MF1W1sNVMcgywjSQ5yZO9F+8S0vnKRYLO6wGAIIoPTJdVua/HldVNXcuCg1hGshziUQvr33ggcZhJQAQVOkw3aHDOu/ImjWuakG2EaaBPPfJJ9289oEHdnFYCQAEVTpM9+y51DuyZImrWpBthGkgz33yydFee8iQbi2cCQBoH+kw3bWrH6Y/+ugbV8UgywjTQB5LpaQZM2Jef8gQNgoAgOxLh+kvvvCHoydO/NRVMcgywjSQx6ZNW+nd5NKjh9WWW7qtBwCCKb2aR9++fpiuqOBm8KAgTAN57OmnP/Pa9fXTHVYCAEGWHpneZhs/TK9axSeFQRFxXQCA1nvvvbVeu1+/tS2cCQBoP0MlfabttlvhHamq6uCuHGQVI9NAHps7N+G1d9ttvsNKACDISiVtq8GDt/aO1NV1dVcOsoowDeSxZcsGeu2RI/mgCQBcGjy4u6SUJMnaHqquTrR8AQoCYRrIU6tX1yoebwjTKR155CCn9QBA0BUXRxQK+VM9Zs5c7rAaZAthGshTEyZ8robbHqLR+erefXu3BQFAoK2TtFCxmB+gZ81a5a4cZA1hGshTr7++yGt37z5DErsfAoA7gyX1U3n5Au/IvHmVzqpB9hCmgTw1bVrcaw8aNF+ScVcMAAReenm8Ll385fG++KLWVTHIIsI0kKe++MK/U3zPPSscVgIAaNi4pWdPP0zX1vKJYRAQpoE8lEymtHLlYK9/7LH1DqsBADSMTJ90kh+mu3cf4qoYZBFhGshD06fXqOGFOxRaqn337eW2IAAIvPRrcq9efphesqS5c1FICNNAHvroozKvfdRRUxQK9XdYDQCgIUz37LnUO0KYDgbCNJCH3nnHb++zzzuStnNWCwBAapgzzch08LBlGpCHGofpvfc+T1JfZ7UAACR/ZNpP0IsX1yuZNIpEGLssZDy7QJ5Zu1aaOTPdDoWkoUP7S4o6rQkAkA7TpaW1klZLklKpsD77bKXDmpANhGkgz9xzz8eyNt0eMGCdyspaPh8AkA2dvFYs9o3XnjWLMF3oCNNAnpkwwX9hLir60GElAABf58y/ZSot9df+nzt3nZtykDWEaSDPfPJJqdfed99KSSl3xQAAMkZJSkiqVKdO/o60n39e46wiZAdhGsgjqZRVRcVAr//DH14o6Qt3BQEAMiJqWNehe/eEd3ThwqSjepAthGkgjzz55FxZ202SZMwKHXLIQkmsMQ0AuaRnT7+9dKlp/kQUBMI0kEeuv97fDKBfvxcVCu0sfo0BILcMGhTz2vPmdXdYCbKBd2EgTyxbVqUZM3bz+hdeOE7Szu4KAgBs4GNJb+jnP18kKS5JqqraSS+/vMBlUWhnhGkgT4wdO00NSy/FYrP1y19OEmEaAHLJcEkjNHDgSerZ8wPv6A03LHBWEdofYRrIE0891dVrH3bYOIVCEmEaAHJJZ681evRqrz158jZKpayLgpAFhGkgDzz11HxVVe2U6dXpllseyrQJ0wCQO/wwfeWVqxUOV0mSEoltNHUqNyIWqpwL08aYw4wxc4wx84wxl7muB3Dts8+ksWMHeP2tt35K22+/QukX7d7O6gIAbGiE1+ra9WKddlrE6//zny7qQTZEvvuU7DHGhCX9VdIhkr6W9L4x5jlr7Sy3laFw2MzX+pr/+M2o8d+c1qZkbbJRv+Hfpq8PhYrW/+m2XvX1dU1cu/71qZTV3LkJffJJV/3mN9Ly5ekRDWOSuv762zNnHZqpDwCQG66R9ISkpZKWaMyYP+uBB8ZKku6+W4pG63TSSRXaddeeKi7OqQiGzWCaCwEuGGP2kXSttfbQTP9ySbLW3tjU+UOHDrVTp07NYoXSbrtJc+fWqKYm3sSj3w42kYhRSUkHNf6/OZGoUV3dhou4Nx2KIhGjWKxsvWOJRI0SiYZd71oOU5FIWJHI+oEukahVfb39zmslo3A4pHA4usH1dbK2pWv9x8LhkNJ/I/mSyZYWsF//+4ZCfpj1w2dzO/7l3ActbaqkJKXHHz9TRx31sKTBkiZJYsklAMgt4yUdK0mqrw9p223nacGCpvYDqFJLO9iWlEjhsGRMQ4CIqrIy2czgzbePlZcrc29NmjExrVmzYXZpPgN26iQ1fk9OpWJat27jrjdG6thx/ffz+vqYKis37vpwWCovX//6RCKm6uq4SktLNGhQTNOnN1t6uzHGfGCtHbrh8Vz7s6iPpIWN+l9L+r6jWpq0bp1UU1MiqWSjzk8m09esb+Oubbj+29lzc68v3ujr6+vTX+sraurUZq//to3/zy7V5OtMYYfmpnTrJj3/fEh7732NpCWSHhJBGgBy0TGSRkv6l8LhlMaPP0ZjxjyiGTOGbHBeWRPX+mo2cxfyysqmjm58flizpvXXW7t519fXN399dXVTucqtvEslxphzjTFTjTFTKyoqXJeDgDCm4csqPZLQ+Ku+2a9QKP0XdsNXKJSSlGz0lWj2KxT6RqNG1euaa6Tp06W995akgZJeltQra//bAQCb6i5J+0ky2mWXT/TRR7vq9tsvUVnZDElr1NKINPIP0zw20dq1Ul1dpWpqVjX5eCi0/t8n4XBMZWU9JKXDmCTV1a1TPF71rWvTYW39jzUikSIVF3dW48N1deuUTNZ+57Xp64tVVFS+3rF4vFKpVHK9mjLf5VvXR6NFikTWH8lOJKplrVUTP269eqT0//4Np4kkk7VN1rrhtenrozJm/f9PU6nEt4411L/htzXGeD/LGGXqZp4xACBbGgZRUmr4ZDiZTGn58mqlUnWSmh6CLikpUTjceJpkVGvXbvhxb61SqVo1pby8XOFwwzRJI2sjWrt2w4+qq5UewPm2jh07rvd+WV8fUWXlhtdXKj149G2d0vNEPMlkVFVVG/6stWpqqocxRh07dlzvWDweUU1NUiUlJSoujmmDh7OiuWkeuRamI5LmSjpI0iJJ70s61Vo7s4UmbcwAAAX6SURBVKnzXYRpAAAABE9ezJm21iaNMT+X9KKksKT7mgvSAAAAgGs5FaYlyVo7QdIE13UAAAAA3yXvbkAEAAAAcgVhGgAAAGglwjQAAADQSoRpAAAAoJUI0wAAAEArEaYBAACAViJMAwAAAK1EmAYAAABaiTANAAAAtBJhGgAAAGglwjQAAADQSoRpAAAAoJUI0wAAAEArEaYBAACAViJMAwAAAK1EmAYAAABaiTANAAAAtJKx1rquodWMMRWSvnT047tLWu7oZyM7eI6Dgec5GHieg4HnufC5fI63ttb22PBgXodpl4wxU621Q13XgfbDcxwMPM/BwPMcDDzPhS8Xn2OmeQAAAACtRJgGAAAAWokw3XrjXBeAdsdzHAw8z8HA8xwMPM+FL+eeY+ZMAwAAAK3EyDQAAADQSoTpTWCMOdEYM9MYkzLGDN3gscuNMfOMMXOMMYe6qhFtyxhzrTFmkTFmeubrCNc1oe0YYw7L/M7OM8Zc5roetD1jzAJjzCeZ39+prutB2zDG3GeMWWaMmdHoWFdjzMvGmM8y/3ZxWSM2XzPPc869LxOmN80MScdLeqPxQWPMYEmnSNpJ0mGS/maMCWe/PLSTO6y1u2W+JrguBm0j8zv6V0mHSxosaXTmdxmF54DM729OLaeFzfKA0u+3jV0m6VVr7SBJr2b6yG8P6NvPs5Rj78uE6U1grf3UWjuniYeOkfSYtbbOWvuFpHmS9spudQA20V6S5llrP7fWxiU9pvTvMoAcZ619Q9LKDQ4fI+nBTPtBScdmtSi0uWae55xDmG4bfSQtbNT/OnMMheHnxpiPMx838bFh4eD3NhispJeMMR8YY851XQza1ZbW2iWZ9lJJW7osBu0qp96XCdMbMMa8YoyZ0cQXI1YF6jue8/+TNFDSbpKWSPqj02IBbKr9rbXfU3o6zwXGmOGuC0L7s+mlyliurDDl3PtyxHUBucZae3ArLlskaatG/b6ZY8gDG/ucG2PulvR8O5eD7OH3NgCstYsy/y4zxjyr9PSeN1q+CnnqG2NML2vtEmNML0nLXBeEtmet/aahnSvvy4xMt43nJJ1ijCkyxvSXNEjSe45rQhvIvCA3OE7pm1BRGN6XNMgY098YE1P6JuLnHNeENmSMKTPGdGhoSxolfocL2XOSzsi0z5A03mEtaCe5+L7MyPQmMMYcJ+kuST0k/dcYM91ae6i1dqYx5glJsyQlJV1gra13WSvazC3GmN2U/rhwgaSfui0HbcVamzTG/FzSi5LCku6z1s50XBba1paSnjXGSOn3u0ettS+4LQltwRjzL0kjJXU3xnwt6RpJN0l6whhztqQvJZ3krkK0hWae55G59r7MDogAAABAKzHNAwAAAGglwjQAAADQSoRpAAAAoJUI0wAAAEArEaYBAACAViJMAwAAAK1EmAaAPGWMqTfGTG/0dVkT57xujJljjDm6he8zwhgzZYNjEWPMN8aY3saYW40xS40xv2mP/x0AkM/YtAUA8leNtXa3jThvjLV2aguPvymprzFma2vtl5ljB0uaaf+/vTtkjSOMojD8nlYshf0XFe2qiLrIqlJTVVJoXHRc+x8K8RFRcQstFXVVNVWBRESEynWRIQRicyt2B8KKzTBtWGb2feQ388GVh8thpuoS+Jzk9l+HlaQhcjMtSRskyfMkP5OcJfmd5GVV3QFfmf9SvfEBmK5nSknqD8O0JPXXs6Wax06LO0fAflW9Aj4Bh4vzKYswnWQEvAW+P8bQkjQk1jwkqb/a1jwASDIGtoFvSZrjEUBVnSYZJ3kBTICTqrr63wNL0tAYpiVpczwBrlcE8GY7PcGKhyS1Ys1DkjZEVd0AsyTvATK3de+VKbALvAZ+rGFESeodw7Qk9ddyZ/pLizsfgb0k58AF8K55UFV/gFvgV1X59Q5JasGahyT1VFU97XBnBrxZ8bx1B1uS5GZakobuCjhe9dOWhyQ5YF7/cFstSUtSVeueQZIkSeolN9OSJElSR4ZpSZIkqSPDtCRJktSRYVqSJEnqyDAtSZIkdfQXQ8x5/ndP9pMAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Use the same grid as used by the Quantum Espresso postprocessor\n", - "e_grid = dos_qe_0_888_g.e_grid\n", - "#e_grid = np.arange(-5.0,15.0,0.1)\n", - "\n", - "# Determine the smearing for the Gaussian representation of the delta function\n", - "sigma = e_grid[1] - e_grid[0]\n", - "narrow_gaussian = partial(gaussian, sigma = sigma)\n", - "wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - "# Compute the DOS for snap_0 with 888 k-points using each representation of the delta function\n", - "dos_0_888_g = DOS.from_calculation(dft_0_888, e_grid, narrow_gaussian )\n", - "dos_0_888_2g = DOS.from_calculation(dft_0_888, e_grid, wide_gaussian )\n", - "dos_0_888_M1 = DOS.from_calculation(dft_0_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_1 with 888 k-points using each representation of the delta function\n", - "dos_1_888_g = DOS.from_calculation(dft_1_888, e_grid, narrow_gaussian )\n", - "dos_1_888_2g = DOS.from_calculation(dft_1_888, e_grid, wide_gaussian )\n", - "dos_1_888_M1 = DOS.from_calculation(dft_1_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_2 with 888 k-points using each representation of the delta function\n", - "dos_2_888_g = DOS.from_calculation(dft_2_888, e_grid, narrow_gaussian )\n", - "dos_2_888_2g = DOS.from_calculation(dft_2_888, e_grid, wide_gaussian )\n", - "dos_2_888_M1 = DOS.from_calculation(dft_2_888, e_grid, delta_M1)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_0_888_g.e_grid, dos_qe_0_888_g.dos, linestyle='--', linewidth=3, color='yellow', label='QE-DOS G')\n", - "ax.plot(dos_qe_0_888_2g.e_grid, dos_qe_0_888_2g.dos, linestyle='--', linewidth=3, color='black', label='QE-DOS 2G')\n", - "ax.plot(dos_0_888_2g.e_grid, dos_0_888_2g.dos, linestyle='-', linewidth=3, color='blue', label='wide Gaussian')\n", - "#ax.plot(dos_0_888_g.e_grid, dos_0_888_g.dos, linestyle='-', linewidth=3, color='green', label='narrow Gaussian')\n", - "#ax.plot(dos_0_888_M1.e_grid, dos_0_888_M1.dos, linestyle='-', linewidth=3, color='red', label='M1 delta representation')\n", - "\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(0.55, 1.0))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can recover the QE-DOS result by using the same parameters as in the input for computing the DOS.\n", - "\n", - "Now we can go ahead and investigate different energy grids and smearing values in order to improve upon the band energy and achieve better agreement with the band-energy output of QE." - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":26: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28304728577404603\n", - "0.10647239198749503\n", - "0.04538864728692715\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'quad') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28310624238542914\n", - "0.10668622714081266\n", - "0.04539697333029835\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'analytic') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28325765921397306\n", - "0.1065453373927312\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_0_888_2g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_qe_0_888_g, integration = 'analytic') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":26: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28533298020636266\n", - "0.10744953331345641\n", - "0.052445261101411234\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'quad') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.2856521550979778\n", - "0.10731624971231213\n", - "0.052275393386821634\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'analytic') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28996261895224507\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_1_888_2g, integration = 'analytic') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":26: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24194209412007694\n", - "0.07849218150795423\n", - "0.027242952126243836\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'quad') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24220842096963224\n", - "0.07857100610215184\n", - "0.027246274673416337\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'analytic') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.2487092959330539\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_qe_2_888_2g, integration = 'analytic') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":28: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " eband, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0630292256505527\n", - "0.4771164300154851\n", - "0.17639036704667888\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'quad') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'quad') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'quad') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.064013783009159\n", - "0.47773027019775327\n", - "0.17632259174706633\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'analytic') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.7286718881982779\n", - "0.06695301014724464\n", - "-0.27639639720928244\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'trapz') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'trapz') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'trapz') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.276224426794215\n", - "0.44716557464926154\n", - "0.16444612119903468\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, integration = 'simps') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_g, integration = 'simps') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_0_888_M1, integration = 'simps') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.076458786079911\n", - "0.50766853644609\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_0_888_2g, integration = 'analytic') - eband_0_888_ref)\n", - "print(dos_2_eband(dos_qe_0_888_g, integration = 'analytic') - eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.142993832596403\n", - "-0.35408061825773984\n", - "-0.17764809464233622\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_0_888_g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_0_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1317269716278133\n", - "-0.32304349481273675\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "print(dos_2_eband(dos_qe_0_888_g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0844960764566167\n", - "0.4831471591865011\n", - "0.22979756722861566\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_1_888_2g, integration = 'analytic') - eband_1_888_ref)\n", - "print(dos_2_eband(dos_1_888_g, integration = 'analytic') - eband_1_888_ref)\n", - "print(dos_2_eband(dos_1_888_M1, integration = 'analytic') - eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.0794197056247867\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_1_888_2g, integration = 'analytic') - eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1431815692762939\n", - "-0.35388643115402374\n", - "-0.1779532195914726\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)\n", - "print(dos_2_eband(dos_1_888_g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)\n", - "print(dos_2_eband(dos_1_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.181866304027153\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.745995223531736\n", - "0.2597264144933433\n", - "0.03463604357057193\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_2_888_2g, integration = 'analytic') - eband_2_888_ref)\n", - "print(dos_2_eband(dos_2_888_g, integration = 'analytic') - eband_2_888_ref)\n", - "print(dos_2_eband(dos_2_888_M1, integration = 'analytic') - eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.8088733359654725\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_2_888_2g, integration = 'analytic') - eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1422852665114078\n", - "-0.3528987682757361\n", - "-0.17781404766901687\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - "print(dos_2_eband(dos_2_888_g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - "print(dos_2_eband(dos_2_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-1.1300799679197553\n" - ] - } - ], - "source": [ - "print(dos_2_eband(dos_qe_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can go also investigate how quantities evaluated from the LDOS calculated either by Quantum Espresso\n", - "or by machine learning compare with the results evaluated from the DOS that we calculate from eigenvalues." - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [], - "source": [ - "if read_QE_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " ldos_2_888_2g = LDOS(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/ldos_200x200x200grid_250elvls_snapshot2.npy')\n", - "\n", - "if read_ML_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " ldos_ml_2_888_2g = LDOS(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/FeedForward_fp_ldos_predictions_may5.npy')" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [], - "source": [ - "# This checks how well the eband and electron density computed in various ways from the LDOS agree\n", - "if read_QE_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(dos_2_eband(ldos_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(ldos_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(ldos_2_888_2g.eband, ldos_2_888_2g.eband - eband_2_888_sc_ref)\n", - " print(np.sum(ldos_2_888_2g.density)*ldos_2_888_2g.cell_volume,\n", - " np.sum(ldos_2_888_2g.density)*ldos_2_888_2g.cell_volume - ldos_2_888_2g.dft.n_electrons)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [], - "source": [ - "# This shows that I can get agreement with Austin's band energy for the ML predicted LDOS by altering parameters\n", - "if read_ML_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps'),\n", - " dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps') - dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(\"Changing energy grid!\")\n", - " ldos_ml_2_888_2g.dos.e_grid = np.linspace(-10.0,15.0,250)\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps'))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 7.7967, integration = 'simps'))\n", - " cell_volume = ldos_ml_2_888_2g.dft.volume/(200.0*Br2AA)**3\n", - " print(cell_volume, cell_volume**(1.0/3.0))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 7.7967, integration = 'simps')*0.153049**3/cell_volume)\n", - " print(\"Resetting energy grid!\")\n", - " ldos_ml_2_888_2g.dos.e_grid = np.linspace(-10.0,14.9,250)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [], - "source": [ - "# This checks how well the eband and electron density computed in various ways from the LDOS agree\n", - "if read_ML_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(ldos_ml_2_888_2g.eband, ldos_ml_2_888_2g.eband - eband_2_888_sc_ref)\n", - " print(np.sum(ldos_ml_2_888_2g.density)*ldos_ml_2_888_2g.cell_volume,\n", - " np.sum(ldos_ml_2_888_2g.density)*ldos_ml_2_888_2g.cell_volume - ldos_ml_2_888_2g.dft.n_electrons)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we will investigate how quantities calculated from various definitions of the DOS change as the energy grid is varied. This both gives us an idea of the error associated with various definitions of the DOS and how much the error varies with details of the calculation (e.g., grid spacing)." - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "241\n", - "242\n", - "243\n", - "244\n", - "245\n", - "246\n", - "247\n", - "248\n", - "249\n", - "250\n", - "251\n" - ] - } - ], - "source": [ - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_g = []\n", - "dosn_0_888_2g = []\n", - "dosn_0_888_M1 = []\n", - "\n", - "for n_egrid in n_egrids:\n", - " \n", - " print(n_egrid)\n", - " \n", - " e_grid_n = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = e_grid_n[1] - e_grid_n[0]\n", - " narrow_gaussian = partial(gaussian, sigma = sigma)\n", - " wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - " dosn_0_888_g.append(DOS.from_calculation(dft_0_888, e_grid_n, narrow_gaussian ))\n", - " dosn_0_888_2g.append(DOS.from_calculation(dft_0_888, e_grid_n, wide_gaussian ))\n", - " dosn_0_888_M1.append(DOS.from_calculation(dft_0_888, e_grid_n, delta_M1))" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_g = []\n", - "eband_error_0_888_g = []\n", - "for dos in dosn_0_888_g:\n", - " enum_error_0_888_g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_g)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_g)\n", - "\n", - "enum_error_0_888_2g = []\n", - "eband_error_0_888_2g = []\n", - "for dos in dosn_0_888_2g:\n", - " enum_error_0_888_2g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_2g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_2g = np.array(enum_error_0_888_2g)\n", - "eband_error_0_888_2g = np.array(eband_error_0_888_2g)\n", - "\n", - "enum_error_0_888_M1 = []\n", - "eband_error_0_888_M1 = []\n", - "for dos in dosn_0_888_M1:\n", - " enum_error_0_888_M1.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_M1.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_M1 = np.array(enum_error_0_888_M1)\n", - "eband_error_0_888_M1 = np.array(eband_error_0_888_M1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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6iJFihiP+eyzz+qzZ89abWfXrl3a19dXA9rBwUE3btxYP//887pFixba2dlZA9rd3d3s2S9aa71jxw7jcZydnXWjRo10165ddbt27XTlypWNeU2aNNHXrl2z+dzuBVaeU5LrN8Tyyv2XBCVCCCFyUnZByc2bN4031pZugtPS0vT333+vAwMDdaFChXSRIkV0s2bN9IoVK6wGHw8rKNFa66tXr+qRI0fqatWqaScnJ+3k5KSrV6+uR40aleWN2+LFi43ntHz5crP82rVra0AHBQVlefzsJCcn68mTJ+u2bdtqLy8v7ejoqAsUKKA9PT11WFiYHjVqlNWb5507d+rw8HBdvHhx7ejoqCtVqqQ//PBDnZycbPEhiAbHjx/XL7zwgnZ3d9cODg66XLlyesSIEfrWrVsW6+3YsUO/++67un79+trT01M7ODhoDw8PHRwcrL/44guTB1empKToCRMm6C5duugKFSrowoULaycnJ+3v76+ff/55iw/StBaUaK31/Pnzdd26dXXhwoW1i4uLDgkJ0bNmzdJa61wJSgwvpZR2dnbWXl5eulmzZvq9997Te/bssamt5ORk/e233+pmzZppDw8PbW9vr4sWLarr1aunP/nkE3358mWL9VJSUnRcXJweNmyYbtSokfbz89NOTk66QIEC2svLS7dp00b/+OOPZg+bfJisBSUqI088yWrVqqUTEhJyuxtCCCGEEOIxp5TaprWudXe6rCkRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQgghRK6SoEQIIYQQQgiRqyQoEUIIIYQQQuQqCUqEEEIIIYQQuUqCEiGEEEIIIUSukqBECCGEEEIIkaskKBFCCCGEEELkKglKhBBCCCGEELlKghIhhBBCCCFErpKgRAghhBBCCJGrJCgRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQuQoX19flFJZvhYtWmRS9ujRo7nb6WxERUUZ++7k5ERSUpLVsn///bfJucbFxT26jj7GRowYYfY5cnR0xMPDg6CgIHr16sWCBQtISUmxqb34+Hh69OhB2bJlKVSoEC4uLlSsWJF+/fqxe/fubOv//PPPhIeHU6JECRwcHHBzc6N8+fK0bduWMWPG5PnPdG7Ln9sdEEIIIcSToUWLFpQoUcJino+PzyPuDSilANBaP1A7ycnJ/PTTT/Tt29diflRU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cCrQJ4SwaYNjb8YYv2p4cghhFDBqNX9gFccXX6QN1265BQYNyrqayvK1r8GDD8JOO6Vd3zffPOuK1FnV1MA++6RRt513zrqa4uvTB04+OX19V12V2grvsUdaGL/iillXp2oze/aiazkar+v4z39SqGgYONZfH77znYWv9e/fcfX+9Kfw6aew227pZlivXh33uVXQPiWlNDj3vAGwMXAlaerVVGBL4Dpg99zzwflcMMb4cS6A/DX3MT1CCL8B/gD0AA6JMf6miF9Dc/rlnlsKUzNyz+39n7dj7vnSJo5tQxr9WiDG+BDw0IgRIw5v5+cVwPHHp2+k222XdSWVacSItIHcXnvBE084NUVtc9JJsMQScNZZWVdSWv37p6/x6KNTW/INNoDRo+HMM9P8eqm9YoQvv2w6bNQ/pk1LbbYbho5ttln4/rBh5dX1KoS0eero0XDAAfD739v9sQOVy590/T4d3YHbY4wN+zI+GEL4D/A34MAQwnkxxvfyuWiMcUoumDwOHJB7zCONuNxZtOrLRIxx5axrqFp/+AO89BK89lrWlVS2HXdMc3532il1OCvHPSVUvm67Df7857RBYrVsPjh4MFx4IZxwAowZk8L8YYfBaae5OalaVleX1vS1tJ4DFl/HMWLEwteWWabz/V/r0iV9r9h1V/jhD+HGGztXZ75OrFxCyfQGb9/Y+GCMcXwI4RVgBGlheV6hJPex/83tL1LfyepV4N521Fqo+lGQlqa71Y+mTG/hHJWrKVPSXO777++8HXw6kwMPXLjr+zPPpLveUmteey2NkowbV53TK4cOhcsvT38GF1wAa6wBxx4LP/6xc+e10PTpcNBB8M9/pla5AwcuGjqGD4cddlj42qBBlfkLe48e6WbjttvCT36SGkio5MollLzfzNuNzxkBFNQSIYSwDynozAXeIk0Puz+EsGeMcU4bai3UxNxzS5tP1m/3PbGFc1SOYoQjjoDvfz/N3VbHOPnkNBf5O99J83579866IpWzqVNhzz3hmmtS29xqtvzyqcvQqafCeefB6qunYHLccd5UURpB6907tchdccXq/t7av3/6c9hii7TupTNsrtrJlcuYWsM5L82NJy+Ve57RzPHFhBC+C/yOtHv6bsBmwNPATsAfQwh9Ci+1YPVf29ohhOb+d49sdK46i1//GiZOTBuYqeOEkObJL7ccfPe7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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_band_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5\n", - "0.6\n", - "0.7\n", - "0.8\n", - "0.9\n", - "1.0\n", - "1.1\n", - "1.2\n", - "1.5\n", - "1.7\n", - "2.0\n", - "2.5\n", - "3.0\n", - "3.5\n", - "4.0\n" - ] - } - ], - "source": [ - "n_egrid = 250\n", - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_vg = []\n", - "\n", - "sigma = e_grid[1] - e_grid[0]\n", - "sigma_multipliers = np.array([0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.5,1.7,2.0,2.5,3.0,3.5,4.0])\n", - "\n", - "for sigma_multiplier in sigma_multipliers:\n", - " \n", - " print(sigma_multiplier)\n", - " delta_f = partial(gaussian, sigma = sigma*sigma_multiplier)\n", - " dosn_0_888_vg.append(DOS.from_calculation(dft_0_888, e_grid, delta_f ))" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_vg = []\n", - "eband_error_0_888_vg = []\n", - "for dos in dosn_0_888_vg:\n", - " enum_error_0_888_vg.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_vg.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_vg)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_vg)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwAAAAIqCAYAAACTwS1qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdeZyN5f/H8ddlS5aoEMlOiMiapaiEhErWb/y+X0v1tYak9JVCWgiRnaylVJQWWbOnYuxr9iVF9n0Z5vr9cZ2RZWbMmTkz98w57+fjcR7HnPs69/mc0fL53Pd1fS5jrUVEREREREJDCq8DEBERERGRxKMCQEREREQkhKgAEBEREREJISoARERERERCiAoAEREREZEQogJARERERCSEpPI6gFCTJUsWmzdvXq/DEBEREZEgtnLlysPW2qxRHVMBkMjy5s1LWFiY12GIiIiISBAzxuyJ7pimAImIiIiIhBAVACIiIiIiIUQFgIiIiIhICFEBICIiIiISQlQAiIiIiIiEEBUAIiIiIiIhRAWAiIiIiEgIUQEgIiIiIhJCVACIiIiIiIQQFQAiIiIiIiFEBYCIiIiISAhRASAiIiIiEkJUAIiIiIiIhBAVACIiIiIiIUQFgIiIiIhICFEBICIiIiISQlQAiIiIiIiEEBUAIiIiIiIhRAWAiIiISCzNmTOHFi1aULhwYTJlykSaNGnImjUrlStXpmvXrixfvtzrEBPUhAkTMMbQvHlzr0OJVvPmzTHGXPNIly4d2bNn58EHH6Rt27bMnj2biIiIWJ3vhx9+oEmTJuTJk4e0adOSKVMmSpQoQZcuXdi1a1eM7718+TJjxozhscceI0uWLKROnZosWbJQtGhRGjZsyODBgzl06FAgvrZfUiX6J4qIiIgkMwcPHqRJkyYsXLgQgAIFCvDII4+QIUMGjhw5wurVq1m2bBn9+/enWbNmfPLJJ94GLJQsWZIHHngAgPDwcI4ePcr69etZvnw5I0aM4L777mPixImULVs2yvefOHGCRo0aMWfOHABKlSpFhQoVOH/+PCtWrGDgwIEMHTqUfv360bFjxxvev337KapUeZK//lpKypQpKV++PLly5SIiIoKtW7fy9ddfM3XqVAoUKECdOnUS7hcRBRUAIiIiIjE4evQolSpVYufOnVSuXJmhQ4deSSwjWWtZtmwZffv2ZfPmzR5FmvDq1atHhQoVyJQpk9eh3NQzzzxDz549b3h95cqVdOvWjXnz5lG1alUWLFhA+fLlrxlz4cIFHn/8ccLCwihRogSTJk2iZMmSV45baxk/fjzt2rWjU6dOXL58mZdffhmAY8egXz8YNKgn588vpUiRYsyaNYM8efJc8xl///03n3/+OXfddVfgv/xNaAqQiIiISAzatm17JfmfP3/+Dck/gDGGypUr89133zF8+HAPokwcmTJlokiRIuTIkcPrUOKsTJkyzJ49mwYNGnD27Fmee+45Ll26dM2Ynj17EhYWRp48eViwYME1yT+4v++WLVsyZcoUALp160ZY2CbefRfuvReOHoXMmb8AYPDggTck/wDZsmWjY8eOlCtXLoG+afRUAIiIiIhEY9u2bXz11VcAjBgxgjRp0tz0PddfTQb47bff6Nq1K2XLluWuu+4iTZo03H333TRo0IBff/01yvNEzmWfMGFClMd79uyJMeaGq9yXL19m5MiRVKpU6co6hbvuuovSpUvTpUuXG+ac//777/znP/8hT548pEmThowZM5I3b17q1avHtGnTrhkb0xqAadOm0bJlS4oVK0bmzJlJmzYtBQsWpF27duzbty/K7/DII49gjGHhwoWsXLmSp556ijvvvJO0adNSsmRJxo4dG+X74itFihSMGDGCtGnTsmPHDqZPn37l2MmTJxk2bBgA/fv354477oj2PE8//TS1atUmPDychx/ux4YNsGwZjBoFR478DbhEP6lRASAiIiISjRkzZhAREUHJkiW5//7743ye7t278+GHHxIeHk758uWvJLrTpk3joYceulJkBEKrVq1o06YNa9as4cEHH6RBgwaULFmSEydOMHDgQHbs2HFl7Pr16ylXrhyTJk0iXbp01K1bl5o1a5IjRw5mz57NmDFjYv25jRs35ssvvyR9+vQ8/vjjVK9enQsXLjB8+HBKly7N1q1bo33vrFmzqFixIrt27aJGjRqUKVOGdevW8fzzzzNgwIB4/T6ikyVLFp544gkA5s6de+X1BQsWcOrUKTJlysQzzzwT7fsvXYLx42HFiuYApE37A5MnWwoVcsdz584NwJAhQ2K94DixaA2AiIiISDRWrlwJEO1C0dh65ZVXmDx58g3zvb///nvq169P69atqV27NunSpYvX5+zZs4eJEyeS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UQEgIiIi4qHDh+H1190V/8OHYeVKGDMG8uXzOjIJVioARERERDxw6BB06+Z69x87BqtWwahRkDev15FJsFMBICIiIpKIDh2C115zif/Jk7B6NYwcCXnyeB2ZhAoVACIiIiKJ4O+/oWtXKFIETp+GtWth+HDIndvryCTUqAAQERERSUAHD8Irr7jE/9w5l/gPGwa5cnkdmYQqFQAiIiIiCeDAAXj5ZShaFC5cgHXrYOhQuOceryOTUKcCQERERCSA/voLOneG++6Dy5dhwwYYMkSJvyQdKgBEREREAuCvv6BTJyhWDKx1if/gwXD33V5HJnItFQAiIiIi8bB/P7z0kkv8U6SAjRth0CAl/pJ0qQAQERERiYP9+6FDB7j/fkidGjZtgoEDIUcOryMTiZkKABERERE/7NsH7dq5xD9tWti8GQYMgOzZvY5MJHZUAIiIiIjEwr590LYtPPAApE8PW7bABx/AXXd5HZmIf1QAiIiIiMRg715o0wZKloSMGV3i368fZMvmdWQicaMCQERERCQKe/bAf/8LpUpB5sywdSv07QtZs3odmUj8qAAQERERucru3fDii1C6NNx5J/z+O7z3HmTJ4nVkIoGhAkBEREQE2LULXngBypRx03u2boV331XiL8FHBYCIiIiEtJ07oVUrKFfOdfLZtg369HFX/0WCkQoAERERCUk7dkDLllC+POTM6a74v/023HGH15GJJCwVACIiIhJStm+H5s3hwQchd253xb93byX+EjpSeR2AiIiISGKInNrz44/Qvr0rBDJn9joqkcSnAkBERESC2tatLvGfORNeeskl/pkyeR2ViHc0BUhERESC0pYt0KwZVK4M997rEv8ePZT8i6gAEBERkaCyeTM0bQpVqkDRom6x7xtvKPEXiaQCQERERILCpk3wr39B1apQvLhL/Lt3h9tu8zoykaRFBYCIiIgkaxs3QpMm8OijULKkS/xffx0yZvQ6MpGkSQWAiIiIJEsbNkDjxvDYY1C6tEv8u3VT4i9yMyoAREREJFlZvx4aNoTHH4eyZV3i/+qrkCGD15GJJA+xLgCMMUeNMYsTMhgRERGR6KxbBw0aQPXqUKGCS/y7dlXiL+Ivf+4ApAH2JVQgIiIiIlFZvhzq1YOaNaFSJdi5E7p0gfTpvY5MJHnyZyOw7UCWhApEREREJJK1MG8evPfeP1f6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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, enum_error_0_888_vg, linestyle='-', linewidth=1, color='blue', label='Gaussian DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAusAAAIqCAYAAACdTQQsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdd5RUVfa38eeQZAgCCmJCUBBwDAi0JBNmR8yC8jOLCcSAIoZRR0Z9DaijjhFzGDMqBhxRAQOiSIMBEQUT5sioMCOSzvvH7UZCd9PV6VZXP5+1arVd91bVt9G13JzeZ58QY0SSJElS9qmVdgBJkiRJRbNYlyRJkrKUxbokSZKUpSzWJUmSpCxlsS5JkiRlKYt1SZIkKUvVSTtANmvevHls06ZN2jEkSZKUw6ZOnfpjjLFFUdcs1kvQpk0b8vPz044hSZKkHBZCmFPcNdtgJEmSpCxlsS5JkiRlKYt1SZIkKUtZrEuSJElZymJdkiRJylIW65IkSVKWsliXJEmSspTFuiRJkpSlLNYlSZKkLGWxLkmSJGUpi3VJkiQpS1msS5IkSVnKYl2SJEnKUhbrkiRJUpayWJckSZKylMW6JEmSlKUs1iVJkqQsZbEuSZIkZSmLdUmSlJOef/55jjnmGDp06ECTJk2oV68eLVq0YNttt2XYsGG8+eabaUesVHfffTchBI4++ui0oxTr6KOPJoSwwqNBgwasu+66dO/enZNOOomxY8eydOnSUr3fM888Q//+/WndujX169enSZMmbLXVVgwdOpRPP/20xNcuWbKE2267jZ133pnmzZtTt25dmjdvzmabbUa/fv247rrr+OGHHyrix85InSr/RJXooYdg4UI48si0k0iSVD1999139O/fn5deegmAtm3b0rt3bxo1asRPP/3EW2+9xaRJk7jqqqs4/PDDue+++9INLDp16sTWW28NwKJFi5g7dy7Tp0/nzTff5Oabb+bPf/4z99xzD3l5eUW+/pdffuHggw/m+eefB6Bz58706NGDBQsWMGXKFP7xj39www03MGLECE477bRVXj9v3jz22msvJk6cSO3atenWrRutWrVi6dKlzJo1i8cff5xRo0bRtm1b9t5778r7gyiCxXqWiRFGj7ZYlySpLObOnUuvXr345JNP2HbbbbnhhhuWFYGFYoxMmjSJK664gpkzZ6aUtPIdcMAB9OjRgyZNmqQdZbX2339/hg8fvsrzU6dO5ZxzzuHFF19kxx13ZMKECXTr1m2Fe37//Xd23XVX8vPz2Wqrrbj33nvp1KnTsusxRu666y4GDx7MkCFDWLJkCWecccYK7zF8+HAmTpzI5ptvzpgxY2jduvUK17///nsefPBBWrZsWXE/dGnFGH0U8+jatWusap9+GmPLljEuXVrlHy1JUrV3yCGHRCBuu+228ffff1/t/ZMnT66CVCrOUUcdFYF44YUXFnvPkiVLYt++fSMQ27ZtGxctWrTC9XPOOScCsXXr1vGnn34q9n1Gjx4dgVi3bt04Y8aMFa5tsMEGEYhjx44t189TVkB+LKYetWc9y7RuDbVqwWefpZ1EkqTqZfbs2Tz66KMA3HzzzdSrV2+1r1l5lRZg8uTJDBs2jLy8PFq2bEm9evVYf/316du3L2+88UaR71PYe3333XcXeX348OGEEFZZPV6yZAm33HILvXr1WtZX37JlS7p06cLQoUNX6ZH+8MMPOeqoo2jdujX16tWjcePGtGnThgMOOIDHHntshXtL6ll/7LHHGDBgAJtvvjlNmzalfv36tGvXjsGDB/PFF18U+TP07t2bEAIvvfQSU6dOZd9992Xttdemfv36dOrUiTvuuKPI15VXrVq1uPnmm6lfvz4ff/wxo0ePXnbt119/5cYbbwTgqquuYq211ir2ffbbbz/69OnDokWLGDFixArXvv/+ewDWWWedSvgJysdiPcuEAD17wuuvp51EkqTqZcyYMSxdupROnTqx5ZZblvl9zjvvPK655hoWLVpEt27dlhWljz32GNttt92yvxBUhGOPPZZBgwbx9ttv0717d/r27UunTp345Zdf+Mc//sHHH3+87N7p06ezzTbbcO+999KgQQP22Wcf9thjD9Zbbz3Gjh3LbbfdVurPPeSQQ3jkkUdo2LAhu+66K7vtthu///47N910E126dGHWrFnFvva5556jZ8+efPrpp+y+++507dqVd999l+OOO46rr766XH8exWnevDl77rknAC+88MKy5ydMmMC8efNo0qQJ+++//2rfp/AvLs888wzJgnZio402AuD6668v9WbWqmLPehYqLNYPPTTtJJIkVR9Tp04FKHYTYmmdeeaZ3H///av0Jz/99NMcdNBBDBw4kD59+tCgQYNyfc6cOXO45557aNWqFVOmTFnl895++23WX3/9Zd9fc801zJs3j0svvZRzzz13hXvnz5/P9OnTS/3ZDzzwAHvvvfcKP8PixYv5+9//ziWXXMJpp53Gv//97yJfe8UVV3DHHXcwYMCAZc/961//4ogjjuCiiy5i0KBB5f6zKUpeXh6jR49mxowZy54r/HfepUsX6tRZfVm7zTbbAPDTTz/x2WefsfHGGwNw0kknMXToUO68807Gjx/PPvvsQ7du3ejSpQubbbYZIYQK/3lKy5X1LNSzJ0yalHYKSZKqlx9//BGAFi1aFHn9+eef5+ijj17l8dlKvad77rlnkRsJ99lnH/r168fcuXOZMGFCufMWtl506dKlyM/beuutV2jL+O677wD4y1/+ssq9jRo1omfPnqX+7IMPPniVgrpOnTpcfPHFrL/++jz//PPMmzevyNcedNBBKxTqAIcffjibbbYZv/76K/n5+aXOkYnmzZsDSaFdqLBNqLQbP5e/b/kWo9NPP52LLrqIP/3pT3z22Wdcf/31HHHEEWy++eass846nHzyyXz11VcV8WNkzJX1LNS1K3zwAfz3v9CwYdppJEnVSYoLgGW2XDdCpXr//fe55557Vnn+5JNPpk2bNis89+OPP/LMM8/w3nvv8fPPP7N48WIA3nvvPQBmzZpFnz59ypWnY8eONG7cmDFjxnDppZdy2GGHrTKFZHndunXj2WefZeDAgVx88cXssMMOrLHGGmX+/FmzZvHcc8/x0UcfMX/+/GXtH4sXL2bp0qV89NFHdO7ceZXXFTe6sGPHjsycOZOvv/66zJlKUpivVq2yrzXHYv5jCyFwwQUXMHjwYJ544gleeeUVpk6dyvvvv8+PP/7IjTfeyIMPPsjzzz9P165dy/z5ZWGxnoXq14ctt4T8fNhxx7TTSJKqk6oqfLNR4cprcQfXDBkyhCFDhiz7vk2bNsyZM2eV+0aOHMkZZ5zB//73v2I/69dffy1nWmjcuDF33nknAwYM4LzzzuO8885jgw02oGfPnvTp04f+/ftTv379ZfcPGzaMV199lXHjxrH77ruzxhprsPXWW7Pjjjty+OGHl7pPf/HixZx00kncfvvtxRavJf2Mhf3dK1tzzTUBWLBgQalyZKrwNyfLbyIt/Hde+FuH1Sn8bQYU/RuYtdZai2OPPZZjjz0WSP5beuCBB7jwwguZO3cuRx555AptOFXBNpgs5SZTSZIy06VLF4BytWFMmTKFQYMGsWjRIq688ko++OCDZavOMcZlveIlFblFKW7TYt++ffn888+5++67GTBgAI0aNWLUqFEcc8wxdOzYcYXJLA0aNODFF1/kjTfeYPjw4eywww7MmDGDESNGsNVWW3HRRReVKst1113HbbfdxnrrrcdDDz3E559/zoIFC5aNCixspynuZyzPynZ5FPanL/+XksJV7qlTp7Jo0aLVvkfhqbVrr732Kr9NKUqLFi047bTTuOuuu4DktzOzZ8/ONHq5WKxnKfvWJUnKTJ8+fQgh8M477yxrV8nUY489RoyRU089lTPPPJMOHTrQsGHDZRsMP/rooyJfVzgmcv78+UVeL2oFv1DTpk056qijuOOOO/jggw/46KOP2GmnnZgzZw5nn332Kvd3796dCy+8kOeff56ffvqJu+66izp16jB8+HA+/PDD1f6MhdNsRo4cySGHHEKrVq1WaKcp7mdM0w8//MDYsWMB2G233ZY9v9NOO9GoUSN+/fXXFUY6FqewDarwv5XS2n333VfIUpUs1rNUr17JynpN/nWmJEmZaN++PX379gVg4MCBLFy4MOP3mDt3LgCtWrVa5doPP/ywwtjA5W2wwQYAfPDBB6tc++2333jppZdKnaFt27acd955ALzzzjsl3luvXj2OPvpoevToQYyRd999d7XvX9LP+MILL1R5Mbo6S5cu5aSTTmLBggW0b9+efffdd9m1Jk2acNJJJwFJm1Dhz1aUJ598kjFjxlCnTh2GDRu2wrXV/abk888/X/bPhf+uq4rFepbacMOkd3258aqSJGk1brrpJtq0acNrr73GLrvswttvv13kfdOnTy+yJ7tjx44A3HvvvSusks+bN48BAwbw888/F/l+u+yyCwD33XffCqvbv/32G4MGDVqh2Cv01ltv8fDDD/Pbb7+tcu3pp58GWGHD6U033VTkyvknn3yyrI+6pA2qK/+MN9988wrtOR9//DEDBw5c7eur0rRp09hjjz0YNWoUDRs25IEHHqB27dor3PP3v/+dzp07M2fOHHbaaadV/sISY+Suu+6if//+AFx66aVsscUWK9zTvXt3Ro4cWeS/308//ZTjjjsOgB49epTqz7giucE0ixX2rbdrl3YSSZKqh+bNmzNp0iQOPvhgJk6cSOfOnWnXrh2bb745jRs3Zv78+cycOXNZ0bvzzjuvUHwdc8wxXHvttUybNo1NNtmE7bbbjhgjr7zyCvXq1WPAgAHceeedq3zudtttx957780zzzxDly5d2H777alTpw75+fnUqlWLY445Zlnfc6E5c+bQv39/GjRoQJcuXWjVqhULFy7krbfe4pNPPqFx48Yr9KHfeuutDB48mE022YQtttiCRo0a8e233zJx4kQWLlxI//79izyRdWXnnnsuzz33HCNHjmTChAl07tyZuXPn8vLLL9OzZ0/WXXddJlVxL+7o0aOXjdBctGgRP//8M++++y5ffvklAFtssQX33HPPsn0Jy6tfvz7jxo2jX79+jBs3jk6dOtGlSxc23XRTFixYwJQpU/j666+pW7cuV111FUOHDl3lPWbNmsXAgQM55ZRT2Gqrrdh4440JIfDFF1/w5ptvsnTpUlq1alXkNKHKlnMr6yGEDiGE00II/wohfBBCWBpCiCGEvmlny5R965IkZW699dbj1Vdf5dlnn+XII48EYNy4cTz88MNMnDiRZs2acfrppzN58mTGjRu3wlSQZs2akZ+fzwknnECjRo0YM2YM+fn5HHjggUybNq3I1pFCjz76KOeccw7rrLMO48ePZ9q0afTp04dp06YVOUGlR48eXHbZZeywww58+eWXjB49mhdffJEGDRowdOhQpk+fvsIBT5dccgknnngia665JpMmTWLUqFHMnj2bHXfckUceeYT777+/VH8+PXv2ZMqUKfTp04dffvmFJ598ki+//JLzzjuPsWPHUrdu3dL+UVeYd955h3vuuYd77rmHxx9/nPz8fDbYYAMGDRrE2LFjeffdd4ss1As1a9aMF198kSeffJJ+/frx/fffM3r0aMaPH0+zZs0YMmQIM2fOLLJQB3j11Ve5+uqr2X333Zk/fz7PP/88TzzxBB999BHbbbcdI0aMYMaMGbRv376y/giKFTLdzZztQgjXAqcVcalfjHFUJu+Vl5cXK2uwf2lMngwnngjF/AZPkiRJOSCEMDXGWOTRuzm3sg68B1wJHAK0A15ON07Zde4Ms2dDMQeISZIkKcflXM96jPH25b/PZCxPtqlXD7beGqZMgZ13TjuNJEmSqlourqznFPvWJUmSai6L9SxXOG9dkiRJNY/Fepbr2RPeeMPDkSRJkmoii/WVhBBOCCHkhxDy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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, eband_error_0_888_vg, linestyle='-', linewidth=1, color='blue', label='Gaussian DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_band_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The cells below include various older calculations and ideas. Most of them would have to be updated to work with the current code structure." - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'dos_qe' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mewidth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdos_qe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mdos_qe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mra_sigma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m11\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mra_enum\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mra_sigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'dos_qe' is not defined" - ] - } - ], - "source": [ - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe[: , 0][1]-dos_qe[: , 0][0])*0.5\n", - "print(ewidth)\n", - "ra_sigma = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum = np.zeros(len(ra_sigma))\n", - "ra_eband = np.zeros(len(ra_sigma))\n", - "ra_en = np.linspace(dos_qe[0, 0], dos_qe[-1, 0], int((dos_qe[-1, 0]-dos_qe[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum[i] = gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[i])\n", - " # Generate band energy\n", - " ra_eband[i] = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=ra_sigma[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum)\n", - "print(ra_eband)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.plot(ra_sigma, ra_enum, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref/Ry2eV, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.scatter(ra_sigma, ra_eband, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(np.min(abs(ra_eband-eband_ref/Ry2eV))/256)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(4*ra_sigma[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate electron number \n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*0.79255\n", - "gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy\" is also called the \"single-particle energy\" or the \"one-electron energy\" and is obtained from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ .$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$.\n", - "\n", - "For look at the particular values for a given snapshot (data from ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```). QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "737.82754675" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The correct band energy from QE output is" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(eband_qe)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Error in band energy compared to QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By adjusting the width of the Gaussian smearing we achieved the desired accuracy in the band energy, here < 1 meV.\n", - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, we can also increase the smearing width and also obtain an accurate band energy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]\n", - "emax = dos_qe[: , 0][-1]\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*29.177\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also generate a different energy grid. However, it the integral quickly converges with respect to the number of grid points. We can increase the range of the enegy grid to make sure the DOS decays to zero at the limits." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*29.908\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check for another snapshot.\n", - "The band energy from the QE output of snapshot 1 is:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe_01 = 739.08601067+4.18224128-553.98606038\n", - "print(eband_qe_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth_01=dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0]\n", - "print(ewidth_01)\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "ra_en_01 = np.linspace(emin, emax, int(len(dos_qe_01[: , 0])))\n", - "ra_sigma_01 = np.linspace(20*ewidth_01, ewidth_01, 101)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "for i in range(len(ra_sigma)):\n", - " ra_en_01 = dos_qe[: , 0]\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enum(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_eband(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(768, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_enum_01, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(eband_qe_01, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_eband_01, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, 2*int(len(dos_qe_01[: , 0])))\n", - "sigma_mod = sigma_qe*22.90#22.882\n", - "eband_01 = gen_eband(k_weights_qe_01, ra_en , eigs_qe_01, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband_01))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error_01 = eband_01-eband_qe_01\n", - "print(\"Error in Rydberg\", eband_error_01)\n", - "print(\"Error in eV\", eband_error_01*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_01[: , 0], dos_qe_01[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Perform search over smearing width using sp.optimize library. But this requires adapting the definitions of the functions above.\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm17.ipynb b/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm17.ipynb deleted file mode 100644 index 5520b5f83..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/dos2eband_nm17.ipynb +++ /dev/null @@ -1,3338 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Attila Cangi, 14.02.2020 \\\n", - "Normand Modine, 01.04.2020" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "import numpy as np\n", - "import scipy as sp\n", - "from scipy import integrate\n", - "from scipy import interpolate\n", - "from scipy.optimize import minimize\n", - "from scipy.optimize import root_scalar\n", - "from scipy.optimize import bisect\n", - "from scipy.optimize import toms748\n", - "from scipy.special import spence\n", - "import mpmath as mp\n", - "import matplotlib.pyplot as plt\n", - "from ase import Atoms\n", - "from ase.io import read\n", - "from functools import partial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature\n", - "temp = 298\n", - "\n", - "# Boltzmann's constant\n", - "kB = 8.617333262145e-5\n", - "\n", - "# Conversion factor from Rydberg to eV\n", - "Ry2eV = 13.6056980659\n", - "\n", - "# Conversion factor from Bohr to Angstroms\n", - "Br2AA = 0.52917721\n", - "\n", - "# Gaussian smearing in QE-DOS calculations\n", - "# taken from QE-DOS input file\n", - "sigma_qe = 0.032\n", - "\n", - "# Read and analyze QE calculated LDOS for snapshot 2\n", - "read_QE_LDOS = False\n", - "\n", - "# Read and analyze QE calculated LDOS for 933K snapshot 0\n", - "read_QE_933K_LDOS = False\n", - "\n", - "# Read and analyze Machine Learned LDOS for snapshot 2\n", - "read_ML_LDOS = False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the relevant results of each Density-Functional-Theory calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the relevant results of a DFT calculation read from a file\n", - "class DFT_results:\n", - " def __init__(self, out_file):\n", - " # input:\n", - " ## out_file: path to the output file from a DFT run using a code that ase.io.read can read\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## out_file: the DFT output file used to construct the object\n", - " ## eigs: the Kohn-Sham eigenvalues\n", - " ### eigs rows: band index, row i: eigs[i , :]\n", - " ### eigs cols: k points, col j: eigs[: , j]\n", - " ## kpoints: the kpoints used in the calculation\n", - " ## kweights: the kweights for the kpoints used in the calculation\n", - " ## fermi_energy: the Fermi energy printed in the output file\n", - " ### note that the Fermi energy is not printed to enought digits to give an accurate number of electrons\n", - " \n", - " atoms = read(filename=out_file)\n", - " self.out_file = out_file\n", - " self.eigs = np.transpose(atoms.get_calculator().band_structure().energies[0,:,:])\n", - " self.kpoints = atoms.get_calculator().get_ibz_k_points()\n", - " self.kweights = atoms.get_calculator().get_k_point_weights()\n", - " self.fermi_energy = atoms.get_calculator().get_fermi_level()\n", - " self.volume = atoms.get_volume()\n", - " # I'd rather not do the following \"grep\" type search, but I can't find a ASE command to get n_electrons\n", - " with open(out_file) as out:\n", - " for line in out:\n", - " if \"number of electrons =\" in line:\n", - " self.n_electrons = np.float64(line.split('=')[1])\n", - " if \"Fermi-Dirac smearing, width (Ry)=\" in line:\n", - " self.electronic_temperature = np.float64(line.split('=')[2])*Ry2eV/kB\n", - " # And this is a real kludge to account for the temperature only being printed to 2 significant figures\n", - " if (self.electronic_temperature > 295.0) and (self.electronic_temperature < 301.0):\n", - " self.electronic_temperature = 298.0\n", - " if (self.electronic_temperature > 923.0) and (self.electronic_temperature < 943.0):\n", - " self.electronic_temperature = 933.0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a structure to hold the results of a Density-of-State calculation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute the DOS on a grid of E values using its naive definition\n", - "$$ D(E) = \\sum_i \\sum_k w_k\\, \\delta(E-\\epsilon_{ik})$$\n", - "where $i$ labels the band and $k$ the k point. The $\\delta$-functions appearing in this definition are represented on a grid by the function parameter delta_f." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the results of a Density-of-States calculation\n", - "class DOS:\n", - " def __init__(self, dft, e_grid, dos):\n", - " # You probably should not call this constructer directly.\n", - " # Instead you should call one of the factory methods:\n", - " ## DOS.from_calculation(dft, e_grid, delta_f)\n", - " ## DOS.from_dos_file(dft, file)\n", - " ## DOS.from_ldos_data(dft,e_grid,ldos_data)\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## dft: the DFT_results instance used to generate the DOS\n", - " ## e_grid: the array of energy values at which the DOS is evauated\n", - " ## dos: the DOS evaluated at the energies in e_grid\n", - " \n", - " self.dft = dft\n", - " self.e_grid = e_grid\n", - " self.dos = dos\n", - " \n", - " @classmethod\n", - " def from_calculation(cls, dft, e_grid, delta_f):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which to evaluate the DOS\n", - " ## delta_f: a function that represents a delta function on a grid\n", - " \n", - " dos_per_band = delta_f(e_grid,dft.eigs)\n", - " dos_per_band = dft.kweights[np.newaxis,:,np.newaxis]*dos_per_band\n", - " dos = np.sum(dos_per_band,axis=(0,1))\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_dos_file(cls, dft, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## file: a file containing an energy grid and a dos as columns\n", - " ## The first line of this file is considered a comment and skipped.\n", - " \n", - " data = np.loadtxt(file, skiprows=1)\n", - " e_grid = data[:,0]\n", - " dos = data[:,1]\n", - " return cls(dft, e_grid, dos)\n", - " \n", - " @classmethod\n", - " def from_ldos_data(cls, dft, e_grid, ldos_data):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which the LDOS has been evaluated\n", - " ## ldos_data: a 4-dimensional Numpy array containing LDOS results\n", - " \n", - " if ldos_data.shape[3] != e_grid.shape[0]:\n", - " raise ValueError('Size of e_grid does not match length of 4th axis of ldos_data')\n", - " cell_volume = dft.volume/(ldos_data.shape[0]*ldos_data.shape[1]*ldos_data.shape[2]*Br2AA**3)\n", - " dos = np.sum(ldos_data, axis=(0,1,2))*cell_volume\n", - " return cls(dft, e_grid, dos) " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Class that encapsulates the results of a Local-Density-of-States calculation\n", - "class LDOS:\n", - " def __init__(self, dft, e_grid, file):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_grid: energy grid [eV] on which the LDOS has been evaluated\n", - " ## file: a file containing LDOS results in numpy format\n", - " # attributes (you probably should consider all of these to be read only):\n", - " ## dft: the DFT_results instance used to generate the DOS\n", - " ## e_grid: the array of energy values at which the DOS is evauated\n", - " ## ldos: the LDOS read from the file\n", - " ## dos: the DOS evaluated from the LDOS\n", - " \n", - " self.dft = dft\n", - " self.e_grid = e_grid\n", - " self.ldos = np.load(file)\n", - " self.ldos = self.ldos / Ry2eV # Quantum Espresso calculates LDOS per Ry. We use per eV units.\n", - " self.cell_volume = dft.volume/(self.ldos.shape[0]*self.ldos.shape[1]*self.ldos.shape[2]*Br2AA**3)\n", - " self.dos = DOS.from_ldos_data(dft,e_grid,self.ldos)\n", - " self.e_fermi = dos_2_efermi(self.dos)\n", - " self.eband = dos_2_eband(self.dos, e_fermi = self.e_fermi)\n", - " dw = get_density_weights(self.e_grid, self.e_fermi, dft.electronic_temperature)\n", - " self.density = np.sum(self.ldos*dw[np.newaxis,np.newaxis,np.newaxis,:], axis=(3))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load results of DFT runs for various snapshots using various k-point grids" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "298.0\n", - "933.0\n" - ] - } - ], - "source": [ - "dft_0_444 = DFT_results('snap_0/slurm-1006575.out')\n", - "dft_0_555 = DFT_results('snap_0_555/slurm-1001448.out')\n", - "dft_0_666 = DFT_results('snap_0_666/200327132835.out')\n", - "dft_0_888 = DFT_results('snap_0_888/200409131941.out')\n", - "dft_1_444 = DFT_results('snap_1/slurm-1006846.out')\n", - "dft_1_888 = DFT_results('snap_1_888/200409131805.out')\n", - "dft_2_888 = DFT_results('snap_2_888/200413195430.out')\n", - "dft_3_888 = DFT_results('snap_3_888/slurm-1011259.out')\n", - "dft_4_888 = DFT_results('snap_4_888/200510234842.out')\n", - "dft_5_888 = DFT_results('snap_5_888/200511213031.out')\n", - "dft_933K_0 = DFT_results('933K/2.699gcc/snapshot0/200520201637.out')\n", - "dft_933K_1 = DFT_results('933K/2.699gcc/snapshot1/200522121822.out')\n", - "dft_933K_2 = DFT_results('933K/2.699gcc/snapshot2/200523094828.out')\n", - "dft_933K_10 = DFT_results('933K/2.699gcc/snapshot10/200530100350.out')\n", - "dft_933K_11 = DFT_results('933K/2.699gcc/snapshot11/200530100638.out')\n", - "dft_933K_12 = DFT_results('933K/2.699gcc/snapshot12/200530100937.out')\n", - "print(dft_0_888.electronic_temperature)\n", - "print(dft_933K_0.electronic_temperature)\n", - "\n", - "eigs_qe = dft_0_888.eigs\n", - "kpoints_qe = dft_0_888.kpoints\n", - "k_weights_qe = dft_0_888.kweights\n", - "fermi_energy = dft_0_888.fermi_energy\n", - "\n", - "eigs_qe_01 = dft_1_444.eigs\n", - "k_weights_qe_01 = dft_1_444.kweights" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load some DOS values calculated by QE's postprocessor for comparison" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "dos_qe_0_888_g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_g')\n", - "dos_qe_0_888_2g = DOS.from_dos_file(dft_0_888, 'snap_0_888/Al.dos_2g')\n", - "dos_qe_1_888_2g = DOS.from_dos_file(dft_1_888, 'snap_1_888/Al.dos_2g')\n", - "dos_qe_2_888_2g = DOS.from_dos_file(dft_2_888, 'snap_2_888/Al.dos_2g')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define functions\n", - "\n", - "In order to evaluate the occupations of the Kohn-Sham states as a function of the energy, we need the Fermi-Dirac distribution function\n", - "\\begin{equation}\n", - "f(E) = \\frac{1}{1 + \\exp(\\beta\\, E)},\n", - "\\end{equation}\n", - "where $\\beta = \\frac{1}{k_B T}$, $k_B$ is the Boltmann constant, and $T$ is the electronic temperature." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Fermi-Dirac distribution function\n", - "def fd_function(energies, e_fermi, temperature): \n", - " return 1.0 / (1.0 + np.exp((energies - e_fermi) / (kB * temperature)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to calculate quantities of interest, we need to integrate various moments of $F(E)$ times $D(E)$. If we assume that $D(E)$ is a linear function between the grid of energy points where it evaluated, then we can perform these integrals analytically. This makes sense because $f(E)$ changes rapidly compared to $D(E)$ for many systems of interest. In particular, $f(E)$ changes from one to zero over a few $k_BT$, while the grid spacing that we use to tabulate $D(E)$ is several times $k_BT$ at room temperature. In order to evaluate these integrals analytically, we can use the representation of $f(E)$ in terms of the polylogarithm\n", - "\\begin{equation}\n", - "f(x) = 1 + \\operatorname{Li_0}(-\\exp(x))\n", - "\\end{equation}\n", - "A useful relationship for the polylogarithm function is\n", - "\\begin{equation}\n", - "\\frac{d\\operatorname{Li_n}(x)}{dx} = \\frac{1}{x}\\operatorname{Li_{n-1}}(x)\n", - "\\end{equation}\n", - "Thus,\n", - "\\begin{equation}\n", - "\\frac{d\\operatorname{Li_n}(-\\exp(x))}{dx} = \\operatorname{Li_{n-1}}((-\\exp(x)).\n", - "\\end{equation}" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function\n", - "## Note that this could be written as an array operation in Numpy using ln(exp(2*cosh(x/2))),\n", - "## but I am using the mpmath polylog() function for consistency and to avoid over/underflow\n", - "def fermi_integral_0(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64(kB * temperature * (x + mp.polylog(1,-mp.exp(x)))))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy)\n", - "## Note that this could be written as an array operation in Numpy using ln(exp(2*cosh(x/2))) and np.spence()\n", - "## but I am using the mpmath polylog() function for consistency and to avoid over/underflow\n", - "def fermi_integral_1(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**2 *\n", - " (x**2/2.0 + x*mp.polylog(1,-mp.exp(x)) - mp.polylog(2,-mp.exp(x))) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the integral of the Fermi Function times the energy (relative to the Fermi energy) squared\n", - "## As far as I can tell, there is no polylog(3,x) function for Numpy so I am using mpmath\n", - "## This also helps avoid over/underflow.\n", - "def fermi_integral_2(energies, e_fermi, temperature):\n", - " xa = (energies - e_fermi) / (kB * temperature)\n", - " results = np.array([])\n", - " for x in xa:\n", - " results = np.append(results, np.float64((kB * temperature)**3 *\n", - " ( x**3/3.0 + x**2 * mp.polylog(1,-mp.exp(x))\n", - " - 2.0*x*mp.polylog(2,-mp.exp(x))\n", - " + 2.0*mp.polylog(3,-mp.exp(x)) ) ))\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.1696824228988496\n", - "0.16968242289884924\n", - "3.608224830031759e-16\n", - "-0.013419715723285694\n", - "-0.01341971572328568\n", - "-1.3877787807814457e-17\n", - "0.0016322822031528137\n", - "0.0016322822031528126\n", - "1.0842021724855044e-18\n" - ] - } - ], - "source": [ - "# Test the Fermi integral functions against quadrature\n", - "energies = np.array([6.83,7.11])\n", - "e_fermi = 7.0\n", - "fi_0 = fermi_integral_0(energies, e_fermi, temp)\n", - "aint_0 = fi_0[1] - fi_0[0]\n", - "qint_0, abserr = sp.integrate.quad(\n", - " lambda e: fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_0)\n", - "print(qint_0)\n", - "print(aint_0 - qint_0)\n", - "fi_1 = fermi_integral_1(energies, e_fermi, temp)\n", - "aint_1 = fi_1[1] - fi_1[0]\n", - "qint_1, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_1)\n", - "print(qint_1)\n", - "print(aint_1 - qint_1)\n", - "fi_2 = fermi_integral_2(energies, e_fermi, temp)\n", - "aint_2 = fi_2[1] - fi_2[0]\n", - "qint_2, abserr = sp.integrate.quad(\n", - " lambda e: (e - e_fermi)**2*fd_function(e, e_fermi, temp),\n", - " energies[0],energies[-1])\n", - "print(aint_2)\n", - "print(qint_2)\n", - "print(aint_2 - qint_2)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate weights that will compute the analytic integral of the Fermi function\n", - "# times an arbitrary linearly interpolated function\n", - "def get_density_weights(energies, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_0 = fi_0[1:] - fi_0[:-1]\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_1 = fi_1[1:] - fi_1[:-1]\n", - " weights = np.zeros(energies.size)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " weights[1:] = weights[1:] + fi_1/delta_e\n", - " weights[1:] = weights[1:] + fi_0 * (1.0 + (e_fermi - energies[1:])/delta_e)\n", - " weights[:-1] = weights[:-1] - fi_1/delta_e\n", - " weights[:-1] = weights[:-1] + fi_0 * (1.0 - (e_fermi - energies[:-1])/delta_e)\n", - " return weights" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate weights that will compute the analytic integral of the Fermi function\n", - "# times the energy times an arbitrary linearly interpolated function\n", - "def get_energy_weights(energies, e_fermi, temperature):\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_1 = fi_1[1:] - fi_1[:-1]\n", - " fi_2 = fermi_integral_2(energies, e_fermi, temperature)\n", - " fi_2 = fi_2[1:] - fi_2[:-1]\n", - " weights = np.zeros(energies.size)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " weights[1:] = weights[1:] + fi_2/delta_e\n", - " weights[1:] = weights[1:] + fi_1 * (1.0 + (e_fermi - energies[1:])/delta_e)\n", - " weights[:-1] = weights[:-1] - fi_2/delta_e\n", - " weights[:-1] = weights[:-1] + fi_1 * (1.0 - (e_fermi - energies[:-1])/delta_e)\n", - " weights = weights + e_fermi*get_density_weights(energies, e_fermi, temperature)\n", - " return weights" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos\n", - "def analytic_enum(energies, dos, e_fermi, temperature):\n", - " return np.sum(dos*get_density_weights(energies, e_fermi, temperature))" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos\n", - "def analytic_enum2(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept + (fi_1[1:] - fi_1[:-1])*slope)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos times the energy\n", - "def analytic_eband(energies, dos, e_fermi, temperature):\n", - " return np.sum(dos*get_energy_weights(energies, e_fermi, temperature))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the analytic integral of the Fermi function times the linearly interpolated dos times the energy\n", - "def analytic_eband2(energies, dos, e_fermi, temperature):\n", - " fi_0 = fermi_integral_0(energies, e_fermi, temperature)\n", - " fi_1 = fermi_integral_1(energies, e_fermi, temperature)\n", - " fi_2 = fermi_integral_2(energies, e_fermi, temperature)\n", - " delta_e = energies[1:] - energies[:-1]\n", - " delta_dos = dos[1:] - dos[:-1]\n", - " slope = delta_dos / delta_e\n", - " fermi_intercept = (energies[1:]*dos[:-1] - energies[:-1]*dos[1:])/delta_e + slope*e_fermi\n", - " return np.sum((fi_0[1:] - fi_0[:-1])*fermi_intercept*e_fermi\n", - " + (fi_1[1:] - fi_1[:-1])*(fermi_intercept + slope*e_fermi)\n", - " + (fi_2[1:] - fi_2[:-1])*slope)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another quantity that we will need to evaluate the \"total-energy\" as defined by Quantum Espresso is the electronic entropy, which techically makes this a \"total free energy\" rather than a \"total energy\". In terms of the DOS, the electronic entropy is given by\n", - "\\begin{equation}\n", - "S = \\int D(E) s(E - \\mu) dE,\n", - "\\end{equation}\n", - "where we have defined\n", - "\\begin{equation}\n", - "s(E) = -[f(E)\\log(f(E)) + (1 - f(E))\\log(1 - f(E))],\n", - "\\end{equation}\n", - "For future use, note that\n", - "\\begin{align}\n", - "\\frac{ds}{dE} &= -[\\log(f(E)) - \\log(1 - f(E))]\\frac{df}{dE}\\\\\n", - " &= \\log((1 - f(E))/f(E))\\frac{df}{dE}\\\\\n", - " &= \\beta E \\frac{df}{dE}.\n", - "\\end{align}\n", - "Rather than directly calculating $S$, we will calculate the \"single particle energy\"\n", - "\\begin{equation}\n", - "E_{sp} = E_{band} - \\beta^{-1} S - \\mu \\int \\rho d^3r.\n", - "\\end{equation}\n", - "In terms of $E_{sp}$, the total energy is given by\n", - "\\begin{equation}\n", - "E_{TOT} = E_{sp}(P) - \\int V \\rho d^3r + E_{HXC}[\\rho] + \\mu \\int \\rho d^3r.\n", - "\\end{equation}\n", - "Using the definitions of the various terms in $E_{sp}$ in terms of $D(E)$, we get\n", - "\\begin{align}\n", - "E_{sp} &= \\int D(E) [(E - \\mu)f(E - \\mu) - \\beta^{-1} s(E - \\mu)] dE\\\\\n", - " &= \\int D(E) g(E - \\mu) dE,\n", - "\\end{align}\n", - "where we have defined the new quantity\n", - "\\begin{equation}\n", - "g(E) = E f(E) - \\beta^{-1} s(E).\n", - "\\end{equation}\n", - "Note that\n", - "\\begin{align}\n", - "\\frac{dg}{dE} &= f(E) + E \\frac{df}{dE} - E \\frac{df}{dE}\\\\\n", - " &= f(E).\n", - "\\end{align}\n", - "Thus, in order to evaluate $E_{sp}$ from $D(E)$ using analytic integration, we need to evaluate the integral of the linearly interpolated DOS times $g(E - \\mu)$, where\n", - "\\begin{equation}\n", - "g(E) = \\int f(E) dE.\n", - "\\end{equation}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A Gaussian is one possible representation of the $\\delta$-functions occuring in DOS definition\n", - "$$\\delta(\\epsilon-\\epsilon_{ik}) = \\frac{1}{\\sqrt{\\pi\\sigma^2}}\\exp{\\left[-\\left(\\frac{\\epsilon-\\epsilon_{ik}}{\\sigma}\\right)^2\\right]}$$ \n", - "with a width $\\sigma$." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Gaussian\n", - "## Note: Gaussian without factor of 1/sqrt(2)\n", - "def gaussian(e_grid, centers, sigma):\n", - " result = 1.0/np.sqrt(np.pi*sigma**2)*np.exp(-1.0*((e_grid[np.newaxis]-centers[...,np.newaxis])/sigma)**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "# Define a discretized delta function that maintains 0th and 1st moments\n", - "def delta_M1(e_grid, centers):\n", - " de = e_grid[np.newaxis]-centers[...,np.newaxis]\n", - " de_above = np.min(de,axis=-1,initial=np.max(de),where=np.greater(de,0.0))\n", - " de_below = np.max(de,axis=-1,initial=np.min(de),where=np.less_equal(de,0.0))\n", - " e_spacing = de_above - de_below\n", - " result = 1.0 - np.abs(de)/e_spacing[...,np.newaxis]\n", - " result = result*np.greater_equal(result,0.0)*np.less_equal(result,1.0)\n", - " result = result/e_spacing[...,np.newaxis]\n", - " return result" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The total number of electrons is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ by summing the occupations over all of the states\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik})\\ ,$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$. The weights $w_k$ arise from an implicit integral over the Brillouin zone, which is evaluated as a simple sum over a regular grid of k points. This simple approach to evaluating the integral often gives reasonable results since $\\epsilon_{ik}$ is periodic in $k$, but it becomes less accurate when the Fermi level lies within a band due to the non-analytic behavior of the Fermi-Dirac function at the Fermi level. The sum over a regular grid of k-points is additionally reduced by symmetry, which results in different $w_k$ values for different $k$ values." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating the number of electrons from DFT results\n", - "def dft_2_enum(dft, e_fermi = None, temperature = None):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## enum: number of electrons\n", - "\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " if temperature is None:\n", - " temperature = dft.electronic_temperature\n", - " enum_per_band = fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " enum_per_band = dft.kweights[np.newaxis,:]*enum_per_band\n", - " enum = np.sum(enum_per_band)\n", - " return enum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy,\" which is also called the \"single-particle energy\" or the \"one-electron energy,\" is obtained directly from the Kohn-Sham eigenvalues $\\epsilon_{ik}$ from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ ,$$\n", - "\n", - "where the various terms are defined above." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DFT results\n", - "def dft_2_eband(dft, e_fermi = None, temperature = None):\n", - " # input:\n", - " ## dft: a DFT_results instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " # output:\n", - " ## eband: band energy\n", - "\n", - " if temperature is None:\n", - " temperature = dft.electronic_temperature\n", - " if e_fermi is None:\n", - " e_fermi = dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = toms748(lambda e_fermi: dft_2_enum(dft, e_fermi, temperature) - dft.n_electrons, a = np.min(dft.eigs), b = np.max(dft.eigs))\n", - " eband_per_band = dft.eigs*fd_function(dft.eigs, e_fermi=e_fermi, temperature=temperature)\n", - " eband_per_band = dft.kweights[np.newaxis,:]*eband_per_band\n", - " eband = np.sum(eband_per_band)\n", - " return eband" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3654808767733\n" - ] - } - ], - "source": [ - "eband_0_888_ref=dft_2_eband(dft_0_888)\n", - "print(eband_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.3470902759054\n" - ] - } - ], - "source": [ - "eband_0_888_sc_ref=dft_2_eband(dft_0_888, e_fermi = 'sc')\n", - "print(eband_0_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.146096688316\n" - ] - } - ], - "source": [ - "eband_1_888_ref=dft_2_eband(dft_1_888)\n", - "print(eband_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2598.1203692340027\n" - ] - } - ], - "source": [ - "eband_1_888_sc_ref=dft_2_eband(dft_1_888, e_fermi = 'sc')\n", - "print(eband_1_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.8711214367395\n" - ] - } - ], - "source": [ - "eband_2_888_ref=dft_2_eband(dft_2_888)\n", - "print(eband_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.876315137265\n" - ] - } - ], - "source": [ - "eband_2_888_sc_ref=dft_2_eband(dft_2_888, e_fermi = 'sc')\n", - "print(eband_2_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2596.5716167851165\n" - ] - } - ], - "source": [ - "eband_3_888_ref=dft_2_eband(dft_3_888)\n", - "print(eband_3_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2596.580145546497\n" - ] - } - ], - "source": [ - "eband_3_888_sc_ref=dft_2_eband(dft_3_888, e_fermi = 'sc')\n", - "print(eband_3_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.920755644534\n" - ] - } - ], - "source": [ - "eband_4_888_ref=dft_2_eband(dft_4_888)\n", - "print(eband_4_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2595.9576941828914\n" - ] - } - ], - "source": [ - "eband_4_888_sc_ref=dft_2_eband(dft_4_888, e_fermi = 'sc')\n", - "print(eband_4_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2597.926529438901\n" - ] - } - ], - "source": [ - "eband_5_888_sc_ref=dft_2_eband(dft_5_888, e_fermi = 'sc')\n", - "print(eband_5_888_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2597.9345413595865\n" - ] - } - ], - "source": [ - "eband_5_888_ref=dft_2_eband(dft_5_888)\n", - "print(eband_5_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2522.1627902370897\n" - ] - } - ], - "source": [ - "eband_933K_0_sc_ref=dft_2_eband(dft_933K_0, e_fermi = 'sc')\n", - "print(eband_933K_0_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2526.186365968908\n" - ] - } - ], - "source": [ - "eband_933K_1_sc_ref=dft_2_eband(dft_933K_1, e_fermi = 'sc')\n", - "print(eband_933K_1_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2531.9859886821237\n" - ] - } - ], - "source": [ - "eband_933K_2_sc_ref=dft_2_eband(dft_933K_2, e_fermi = 'sc')\n", - "print(eband_933K_2_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2570.0078016632747\n" - ] - } - ], - "source": [ - "eband_933K_10_sc_ref=dft_2_eband(dft_933K_10, e_fermi = 'sc')\n", - "print(eband_933K_10_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2562.0712499151396\n" - ] - } - ], - "source": [ - "eband_933K_11_sc_ref=dft_2_eband(dft_933K_11, e_fermi = 'sc')\n", - "print(eband_933K_11_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2562.9801118510595\n" - ] - } - ], - "source": [ - "eband_933K_12_sc_ref=dft_2_eband(dft_933K_12, e_fermi = 'sc')\n", - "print(eband_933K_12_sc_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0023586003111\n" - ] - } - ], - "source": [ - "enum_0_888_ref=dft_2_enum(dft_0_888)\n", - "print(enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0032983385398\n" - ] - } - ], - "source": [ - "enum_1_888_ref=dft_2_enum(dft_1_888)\n", - "print(enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9993338972209\n" - ] - } - ], - "source": [ - "enum_2_888_ref=dft_2_enum(dft_2_888)\n", - "print(enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9989062624795\n" - ] - } - ], - "source": [ - "enum_3_888_ref=dft_2_enum(dft_3_888)\n", - "print(enum_3_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9952628516897\n" - ] - } - ], - "source": [ - "enum_4_888_ref=dft_2_enum(dft_4_888)\n", - "print(enum_4_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.001027091929\n" - ] - } - ], - "source": [ - "enum_5_888_ref=dft_2_enum(dft_5_888)\n", - "print(enum_5_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0001451617269\n" - ] - } - ], - "source": [ - "enum_933K_0_ref=dft_2_enum(dft_933K_0)\n", - "print(enum_933K_0_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0015998160123\n" - ] - } - ], - "source": [ - "enum_933K_1_ref=dft_2_enum(dft_933K_1)\n", - "print(enum_933K_1_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9953637109259\n" - ] - } - ], - "source": [ - "enum_933K_2_ref=dft_2_enum(dft_933K_2)\n", - "print(enum_933K_2_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.9996917469026\n" - ] - } - ], - "source": [ - "enum_933K_10_ref=dft_2_enum(dft_933K_10)\n", - "print(enum_933K_10_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "768.0004204822181\n" - ] - } - ], - "source": [ - "enum_933K_11_ref=dft_2_enum(dft_933K_11)\n", - "print(enum_933K_11_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "767.995471771574\n" - ] - } - ], - "source": [ - "enum_933K_12_ref=dft_2_enum(dft_933K_12)\n", - "print(enum_933K_12_ref)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, the total number of electrons can be obtained from the DOS\n", - "\n", - "$$N_e = \\int_{-\\infty}^{\\infty} D(E)\\, f(E)\\ dE\\,$$\n", - "\n", - "where $E$ denotes the energy, $D(E)$ the DOS, and $f(E)$ the Fermi-Dirac distribution function." - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating integrated density (electron number) from DOS\n", - "## Integrate DOS*FD to obtain band energy\n", - "def dos_2_enum(dos, e_fermi = None, temperature = None, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the linearly interpolated dos\n", - " # output:\n", - " ## enum: number of electrons\n", - " \n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " if temperature is None:\n", - " temperature = dos.dft.electronic_temperature\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.trapz(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " enum = sp.integrate.simps(dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " enum, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " enum = analytic_enum(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return enum" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate the self-consistent Fermi energy such that dos_2_enum(...) = dos.dft.n_electrons\n", - "def dos_2_efermi(dos, temperature = None, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the linearly interpolated dos\n", - " # output:\n", - " ## e_fermi: the self-consistent Fermi energy\n", - " \n", - " if temperature is None:\n", - " temperature = dos.dft.electronic_temperature\n", - " e_fermi = toms748(lambda e_fermi: dos_2_enum(dos, e_fermi, temperature, integration) - dos.dft.n_electrons,\n", - " a = dos.e_grid[0], b = dos.e_grid[-1])\n", - " return e_fermi" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similarly, the band energy can be obtained from the DOS\n", - "\n", - "$$E_{band} = \\int_{-\\infty}^{\\infty} E\\, D(E)\\, f(E)\\ dE .$$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate E*DOS*FD to obtain band energy\n", - "def dos_2_eband(dos, e_fermi = None, temperature = None, integration = 'analytic'):\n", - " # input:\n", - " ## dos: a DOS instance\n", - " ## e_fermi: Fermi energy used in generating the occupations, defaults to Fermi energy from dft\n", - " ## temperature: temperature used in generating the occupations\n", - " ## integration: method of integration, which can be one of the following strings:\n", - " ### 'trapz': sp.integrate.trapz\n", - " ### 'simps': sp.integrate.simps\n", - " ### 'quad': sp.integrate.quad with linear interpolation of dos using sp.interpolate.interp1d\n", - " ### 'analytic': analytic integration of the Fermi function times the energy times the linearly interpolated dos\n", - " # output:\n", - " ## eband: calculated band energy in eV\n", - " \n", - " if temperature is None:\n", - " temperature = dos.dft.electronic_temperature\n", - " if e_fermi is None:\n", - " e_fermi = dos.dft.fermi_energy\n", - " elif e_fermi == \"self-consistent\" or e_fermi == \"sc\":\n", - " e_fermi = dos_2_efermi(dos, temperature, integration)\n", - " if integration == 'trapz':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.trapz(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'simps':\n", - " occupations = fd_function(dos.e_grid, e_fermi, temperature)\n", - " eband = sp.integrate.simps(dos.e_grid * dos.dos * occupations, dos.e_grid)\n", - " elif integration == 'quad':\n", - " f_dos = sp.interpolate.interp1d(dos.e_grid,dos.dos)\n", - " eband, abserr = sp.integrate.quad(\n", - " lambda e: f_dos(e)*e*fd_function(e, e_fermi, temperature),\n", - " dos.e_grid[0], dos.e_grid[-1], limit=500, points=(e_fermi))\n", - " elif integration == 'analytic':\n", - " eband = analytic_eband(dos.e_grid, dos.dos, e_fermi, temperature)\n", - " else:\n", - " raise ValueError('argument \"integration\" does not match an implemented method')\n", - " return eband" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Compute total DOS" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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pQuBgYHMnj2bZ555hhTThquZpKam0rNnT/r160dkZCT16tWjS5culCpVioULF9K0aVOioqJstrXll19+AaB37944OzvnuV1mffr0YcWKFZQqVYq2bdvSrl077t69y1dffUXTpk05fvx4gfu2dPv2bR5//HEmT55MXFwcbdu25fnnnycgIICjR48yYcIEq/qLFy+mQ4cOrF+/noCAAHr27Mnjjz+Oq6srixcvZuPGjXl63wMHDvDGG2+wc+dOKlWqRJcuXWjdujWnTp3i448/Jjg4mOTk7GfS/vWvf/HCCy/g7OxMaGgofn5+bNmyhWeeeYadO3fe089EFC9376axdm3GrHGvXhdwdHRIvyoD7MQ4O70smx4yB9NdgKwfYI3hRZrFdR1AX4ARFw8GQ8Ykws2bssxDZKKUsttXs2bNlBAlzezZsxWgRo4caZUfGBioKlSooMqXL68aNmxoVTZy5EgFqC+//NIqv1q1agpQ0dHRVvndu3dXgGrbtq26ceOGOf/ChQuqdu3aClCA2rp1q1W79957TwHqySefVOfPn7c5bn9/f5Wampqne/Xz81OAWrp0aZ7qZ+eHH35Qt27dsspLTU1VH3/8sQJUx44ds7TJ7mdj8tRTT2X5GSxZskQBKjQ0NMs9pqWlqYiICKu8GjVqKEBt3749S//nz59XR44cscobOHCgAtS3336bpW5ERITS6/VW+devX1cdO3ZUgPrss8+yvIfp/2O5cuVUVFSUOV+v16vXXnvN/GdAPDwmTNivQClQStOuqdjYW7k3snJKZfwa9lZKGXKo28CibtcCjbe4ePnlbeafW0DAIqVUzaIekigCQJSyEY8WeUB8Ly8Jpksm0z9o9vi6H44dO6YAFRgYaM67fPmyAlS/fv1U3759laZpKiYmxlxev359Bahjx45Z9WUrYDx79qzSNE05ODiokydPZnn/NWvW2Aymr127ptzc3JSHh4fVe1sKDQ1VgFqzZk2e7tXV1VUBav369TbLZ82apQYOHGj1euONN/LUt0mlSpWUTqez+tCgVMGC6alTpypAzZgxI0/v7e7urry8vPI81uyC6ZwcP35cASooKChLmen/4+zZs7OUXblyRQHKxcVFpaSk5Pn9RPHWu3fGv0ft2u0rQA96pVRplfGr+GIOdZcrpTSllI9S6lwB3qv4GDo00vxzq1p1g1JqVVEP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ffp+UlNND6wlMm3avRwfLooDJycwrZ3X651ISdEhwbQACaaFEELYmQEDtnPnTt30qzuMGpVUaO/14ostmD37jPl64cJXWLNmMbAsx3ZffJFiTjdqtJgKFToWzgDFA2NcRpRxuuaNG7LXtDCSYFoIIYSdSOHYsf+xYkVDc87TT++mYcPShfquw4bVpU+fjID91VcXcPXqZLILpM6fh8uXW5ivP/10PVDwLftE8aFpGcF0YqIrEkwLkGBaCCGEXZhHWpov7drpUMoLAEfHaH78sWmhv7OmwVdflaZSJePDZrGx5Xn22U8xGCJs1v/Xv8BgMP56ffrpCEJDAwt9jOLBsA6m9wJVim4wotiQYFoIIUQxth/YgcFQ5v/Zu+8wqar7j+OfM20rHZQmCogFxRLR2Cg2bLHGhsQWjTGaYjSixpqosUYTTfJLsGs0doMxxIpiAQsiKiAgKIoUWTpbZ2bn/P6Y2XsX3F1h2Z0zM/f9ep59OOfOvbvfZNyZz5459xztuedVWrToh94jV155vjp33i1zTvvq2lW67z7/BsJp047VWWdN/dZ5b78tPfCA37/00psljfrWechPxvjTdyorYyJGQeK/AgBATrtB0n466qiZmj79Qu/okCF36pprXpC0RtKArFRy6KHSbru96PUfeuiXeu21L71+XV29LrjAX/Hh+OOf1qhRb0galpX60P7C4YTXXrs23sKZCBLCNAAgR62R9B/dc89emjDheu9onz5PaurUX2d6l0vqmLWKXnllmGKx+ZleBx199FrNnr1cyWRKBxzwmj76KL3WdUmJdMcd+0saL6kka/WhfYVCfphety7RwpkIEsI0ACBHPaNkMq4LL/yzd6Rjxzc1Y8ZpisVSknpLuiCrFXXrVqq7746r4cazysohGjw4pM6dZ2nKlIO98044YY769dtS0qFZrQ/tq/HIdGXlQjUsm4hgI0wDAHLUf/TLX56qqqq9M/06PffcRercueEmsKvkYtT39NN31JFHvu31re2qqqqdvX5Z2Uf6y1+2yXpdaH+RiL96R1XVDZJmuCsGOYMwDQDISVVVn2r8+Ju8/t57T9GIEVdK6inpZElnuypNzz8/Qtdc874ikYWNjia0//7XafHiGerYsajZa5G/GofpykqWxkMaYRoAkINW6o9/PFGLF/eVJHXvntRTT+0h6RhJSyQ9JinqsL6U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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Use the same grid as used by the Quantum Espresso postprocessor\n", - "e_grid = dos_qe_0_888_g.e_grid\n", - "#e_grid = np.arange(-5.0,15.0,0.1)\n", - "\n", - "# Determine the smearing for the Gaussian representation of the delta function\n", - "sigma = e_grid[1] - e_grid[0]\n", - "narrow_gaussian = partial(gaussian, sigma = sigma)\n", - "wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - "# Compute the DOS for snap_0 with 888 k-points using each representation of the delta function\n", - "dos_0_888_g = DOS.from_calculation(dft_0_888, e_grid, narrow_gaussian )\n", - "dos_0_888_2g = DOS.from_calculation(dft_0_888, e_grid, wide_gaussian )\n", - "dos_0_888_M1 = DOS.from_calculation(dft_0_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_1 with 888 k-points using each representation of the delta function\n", - "dos_1_888_g = DOS.from_calculation(dft_1_888, e_grid, narrow_gaussian )\n", - "dos_1_888_2g = DOS.from_calculation(dft_1_888, e_grid, wide_gaussian )\n", - "dos_1_888_M1 = DOS.from_calculation(dft_1_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_2 with 888 k-points using each representation of the delta function\n", - "dos_2_888_g = DOS.from_calculation(dft_2_888, e_grid, narrow_gaussian )\n", - "dos_2_888_2g = DOS.from_calculation(dft_2_888, e_grid, wide_gaussian )\n", - "dos_2_888_M1 = DOS.from_calculation(dft_2_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_3 with 888 k-points using each representation of the delta function\n", - "dos_3_888_g = DOS.from_calculation(dft_3_888, e_grid, narrow_gaussian )\n", - "dos_3_888_2g = DOS.from_calculation(dft_3_888, e_grid, wide_gaussian )\n", - "dos_3_888_M1 = DOS.from_calculation(dft_3_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_4 with 888 k-points using each representation of the delta function\n", - "dos_4_888_g = DOS.from_calculation(dft_4_888, e_grid, narrow_gaussian )\n", - "dos_4_888_2g = DOS.from_calculation(dft_4_888, e_grid, wide_gaussian )\n", - "dos_4_888_M1 = DOS.from_calculation(dft_4_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for snap_4 with 888 k-points using each representation of the delta function\n", - "dos_5_888_g = DOS.from_calculation(dft_5_888, e_grid, narrow_gaussian )\n", - "dos_5_888_2g = DOS.from_calculation(dft_5_888, e_grid, wide_gaussian )\n", - "dos_5_888_M1 = DOS.from_calculation(dft_5_888, e_grid, delta_M1)\n", - "\n", - "# Compute the DOS for the 933K snapshots using the wide Gaussian delta function\n", - "dos_933K_0_2g = DOS.from_calculation(dft_933K_0, e_grid, wide_gaussian )\n", - "dos_933K_1_2g = DOS.from_calculation(dft_933K_1, e_grid, wide_gaussian )\n", - "dos_933K_2_2g = DOS.from_calculation(dft_933K_2, e_grid, wide_gaussian )\n", - "dos_933K_10_2g = DOS.from_calculation(dft_933K_10, e_grid, wide_gaussian )\n", - "dos_933K_11_2g = DOS.from_calculation(dft_933K_11, e_grid, wide_gaussian )\n", - "dos_933K_12_2g = DOS.from_calculation(dft_933K_12, e_grid, wide_gaussian )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_0_888_g.e_grid, dos_qe_0_888_g.dos, linestyle='--', linewidth=3, color='yellow', label='QE-DOS G')\n", - "ax.plot(dos_qe_0_888_2g.e_grid, dos_qe_0_888_2g.dos, linestyle='--', linewidth=3, color='black', label='QE-DOS 2G')\n", - "ax.plot(dos_0_888_2g.e_grid, dos_0_888_2g.dos, linestyle='-', linewidth=3, color='blue', label='wide Gaussian')\n", - "#ax.plot(dos_0_888_g.e_grid, dos_0_888_g.dos, linestyle='-', linewidth=3, color='green', label='narrow Gaussian')\n", - "#ax.plot(dos_0_888_M1.e_grid, dos_0_888_M1.dos, linestyle='-', linewidth=3, color='red', label='M1 delta representation')\n", - "\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(0.55, 1.0))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.xlim(-4.0,10.0)\n", - "\n", - "ax.plot(dos_0_888_M1.e_grid, dos_0_888_M1.dos, linestyle='-', linewidth=2, color='red', label='M1 Delta Function')\n", - "ax.plot(dos_1_888_g.e_grid, dos_0_888_g.dos, linestyle='-', linewidth=2, color='green', label='1G Gaussian')\n", - "ax.plot(dos_0_888_2g.e_grid, dos_0_888_2g.dos, linestyle='-', linewidth=2, color='blue', label='2G Gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(0.55, 1.0))\n", - "plt.savefig('DOS_w_different_deltas.png')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To a visual level of detail, we can recover the QE-DOS result by using the same parameters as in the input for computing the DOS. Since the QE-DOS is only printed to 4 significant figures by Quantum Espresso, we can avoid these round off errors by using the DOS that we evaluate from the eigenvalues.\n", - "\n", - "Now we can go ahead and investigate different integration approaches to calculate the integrated electron number and band energy. Since we do not have the true Quantum Espresso band energy, we will use the band energy that we evaluate directly from the eigenvalues as a reference.\n", - "\n", - "First, let's convince ourselves that the 'analytical' integration gives essentially the same answers as 'quad' integration, but without all the warnings." - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":28: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Enum using numerical quadrature: 768.2854 768.2886 768.2413 768.2851 768.2743 768.2967\n", - "Enum using analytical integration: 768.2855 768.2890 768.2415 768.2852 768.2745 768.2967\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Enum using numerical quadrature: {0:12.4f}{1:12.4f}{2:12.4f}{3:12.4f}{4:12.4f}{5:12.4f}\".format(\n", - "dos_2_enum(dos_0_888_2g, integration = 'quad'),\n", - "dos_2_enum(dos_1_888_2g, integration = 'quad'),\n", - "dos_2_enum(dos_2_888_2g, integration = 'quad'),\n", - "dos_2_enum(dos_3_888_2g, integration = 'quad'),\n", - "dos_2_enum(dos_4_888_2g, integration = 'quad'),\n", - "dos_2_enum(dos_5_888_2g, integration = 'quad')))\n", - "print(\"Enum using analytical integration: {0:12.4f}{1:12.4f}{2:12.4f}{3:12.4f}{4:12.4f}{5:12.4f}\".format(\n", - "dos_2_enum(dos_0_888_2g, integration = 'analytic'),\n", - "dos_2_enum(dos_1_888_2g, integration = 'analytic'),\n", - "dos_2_enum(dos_2_888_2g, integration = 'analytic'),\n", - "dos_2_enum(dos_3_888_2g, integration = 'analytic'),\n", - "dos_2_enum(dos_4_888_2g, integration = 'analytic'),\n", - "dos_2_enum(dos_5_888_2g, integration = 'analytic')))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The 'analytical' and 'quad' integration techniques for electron number give the same answers up to a few 10,000ths of an electron. This is probably reasonable agreement given the warnings from the numerical quadrature routine. Notice above that the agreement is much better when we only integrate over one energy interval." - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":30: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " eband, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Eband using numerical quadrature: 2596.4285 2599.2285 2596.6170 2597.6608 2596.9518 2599.0965\n", - "Eband using analytical integration: 2596.4295 2599.2306 2596.6171 2597.6608 2596.9520 2599.0979\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Eband using numerical quadrature: {0:12.4f}{1:12.4f}{2:12.4f}{3:12.4f}{4:12.4f}{5:12.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, integration = 'quad'),\n", - "dos_2_eband(dos_1_888_2g, integration = 'quad'),\n", - "dos_2_eband(dos_2_888_2g, integration = 'quad'),\n", - "dos_2_eband(dos_3_888_2g, integration = 'quad'),\n", - "dos_2_eband(dos_4_888_2g, integration = 'quad'),\n", - "dos_2_eband(dos_5_888_2g, integration = 'quad')))\n", - "print(\"Eband using analytical integration: {0:12.4f}{1:12.4f}{2:12.4f}{3:12.4f}{4:12.4f}{5:12.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, integration = 'analytic'),\n", - "dos_2_eband(dos_1_888_2g, integration = 'analytic'),\n", - "dos_2_eband(dos_2_888_2g, integration = 'analytic'),\n", - "dos_2_eband(dos_3_888_2g, integration = 'analytic'),\n", - "dos_2_eband(dos_4_888_2g, integration = 'analytic'),\n", - "dos_2_eband(dos_5_888_2g, integration = 'analytic')))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The 'analytical' and 'quad' integration techniques for band energy give the same answers up to a few meV with the agreement often being better. This is probably reasonable agreement given the warnings from the numerical quadrature routine. Notice above that the agreement is much better when we only integrate over one energy interval. From now on, we will ignore the distinction between 'quad' and 'analytic' integration, and just use 'analytic' when we want to evaluate an accurate integral of the linearly interpolated DOS times the Fermi function (times the energy in the case of eband)." - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":28: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28304728577404603\n", - "0.10647239198749503\n", - "0.04538864728692715\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'quad') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'quad') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28310624238542914\n", - "0.10668622714081266\n", - "0.04539697333029835\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_0_888_2g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_g, integration = 'analytic') - enum_0_888_ref)\n", - "print(dos_2_enum(dos_0_888_M1, integration = 'analytic') - enum_0_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":28: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.28533298020636266\n", - "0.10744953331345641\n", - "0.052445261101411234\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'quad') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'quad') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.2856521550979778\n", - "0.10731624971231213\n", - "0.052275393386821634\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_1_888_2g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_g, integration = 'analytic') - enum_1_888_ref)\n", - "print(dos_2_enum(dos_1_888_M1, integration = 'analytic') - enum_1_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":28: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n", - " the requested tolerance from being achieved. The error may be \n", - " underestimated.\n", - " enum, abserr = sp.integrate.quad(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24194209412007694\n", - "0.07849218150795423\n", - "0.027242952126243836\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'quad') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'quad') - enum_2_888_ref)" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.24220842096963224\n", - "0.07857100610215184\n", - "0.027246274673416337\n" - ] - } - ], - "source": [ - "print(dos_2_enum(dos_2_888_2g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_g, integration = 'analytic') - enum_2_888_ref)\n", - "print(dos_2_enum(dos_2_888_M1, integration = 'analytic') - enum_2_888_ref)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When using analytic integration with a self-consistent Fermi energy, the errors are very consistent between different room temperature snapshots. Gaussian smearing with a width equal to the grid spacing reduces the errors by more than a factor of 3 relative to Gaussian smearing with a width equal to twice the grid spacing. The \"1st moment\" method of smearing reduces the errors by another factor of 2. However, as we saw above, the latter two methods produce a fairly noisy DOS even when applied to DFT calculations with 8x8x8 k-point sampling." - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n", - "Eband errors using 2g Gaussian smearing: -1.1430 -1.1432 -1.1423 -1.1432 -1.1458 -1.1429\n", - "Eband errors using 1g Gaussian smearing: -0.3541 -0.3539 -0.3529 -0.3541 -0.3552 -0.3531\n", - "Eband errors using 1st Moment smearing: -0.1776 -0.1780 -0.1778 -0.1781 -0.1790 -0.1781\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Eband errors using 2g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_g, e_fermi = 'sc', integration = 'analytic') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_g, e_fermi = 'sc', integration = 'analytic') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_g, e_fermi = 'sc', integration = 'analytic') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1st Moment smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_M1, e_fermi = 'sc', integration = 'analytic') - eband_5_888_sc_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Without a self-consistent Fermi energy, the errors are much less consistent between different room temperature snapshots even when comparing to a reference energy calculated directly from the eigenvalues using the same (non-self-consistent) Fermi energy from the Quantum Espresso output file. From now on, we will only consider calculations with a self-consistent Fermi energy." - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n", - "Eband errors using 2g Gaussian smearing: 1.0640 1.0845 0.7460 1.0891 1.0313 1.1633\n", - "Eband errors using 1g Gaussian smearing: 0.4777 0.4831 0.2597 0.5117 0.4885 0.4647\n", - "Eband errors using 1st Moment smearing: 0.1763 0.2298 0.0346 0.1630 0.2098 0.1390\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Eband errors using 2g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, integration = 'analytic') - eband_0_888_ref,\n", - "dos_2_eband(dos_1_888_2g, integration = 'analytic') - eband_1_888_ref,\n", - "dos_2_eband(dos_2_888_2g, integration = 'analytic') - eband_2_888_ref,\n", - "dos_2_eband(dos_3_888_2g, integration = 'analytic') - eband_3_888_ref,\n", - "dos_2_eband(dos_4_888_2g, integration = 'analytic') - eband_4_888_ref,\n", - "dos_2_eband(dos_5_888_2g, integration = 'analytic') - eband_5_888_ref))\n", - "print(\"Eband errors using 1g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_g, integration = 'analytic') - eband_0_888_ref,\n", - "dos_2_eband(dos_1_888_g, integration = 'analytic') - eband_1_888_ref,\n", - "dos_2_eband(dos_2_888_g, integration = 'analytic') - eband_2_888_ref,\n", - "dos_2_eband(dos_3_888_g, integration = 'analytic') - eband_3_888_ref,\n", - "dos_2_eband(dos_4_888_g, integration = 'analytic') - eband_4_888_ref,\n", - "dos_2_eband(dos_5_888_g, integration = 'analytic') - eband_5_888_ref))\n", - "print(\"Eband errors using 1st Moment smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_M1, integration = 'analytic') - eband_0_888_ref,\n", - "dos_2_eband(dos_1_888_M1, integration = 'analytic') - eband_1_888_ref,\n", - "dos_2_eband(dos_2_888_M1, integration = 'analytic') - eband_2_888_ref,\n", - "dos_2_eband(dos_3_888_M1, integration = 'analytic') - eband_3_888_ref,\n", - "dos_2_eband(dos_4_888_M1, integration = 'analytic') - eband_4_888_ref,\n", - "dos_2_eband(dos_5_888_M1, integration = 'analytic') - eband_5_888_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Simpson's rule integration with a self-consistent Fermi energy gives a reasonably consistent band energy error with the wider Gaussian smearing, but it becomes much less consistent for the narrower Gaussian and \"first-moment\" smearing. It also produces relatively large errors in the first-moment case. This suggests that Simpson's method is fairly sensitive to noise in the data that it is trying to integrate." - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n", - "Eband errors using 2g Gaussian smearing: -1.1122 -1.1124 -1.1115 -1.1126 -1.1152 -1.1122\n", - "Eband errors using 1g Gaussian smearing: 0.2135 0.2004 0.1684 0.0431 0.0414 0.1158\n", - "Eband errors using 1st Moment smearing: 2.4966 2.6293 2.4520 2.0538 1.9102 1.7458\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: RuntimeWarning: overflow encountered in exp\n", - " return 1.0 / (1.0 + np.exp((energies - e_fermi) / (kB * temperature)))\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Eband errors using 2g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'simps') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'simps') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'simps') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_2g, e_fermi = 'sc', integration = 'simps') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_2g, e_fermi = 'sc', integration = 'simps') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_2g, e_fermi = 'sc', integration = 'simps') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_g, e_fermi = 'sc', integration = 'simps') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_g, e_fermi = 'sc', integration = 'simps') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_g, e_fermi = 'sc', integration = 'simps') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_g, e_fermi = 'sc', integration = 'simps') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_g, e_fermi = 'sc', integration = 'simps') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_g, e_fermi = 'sc', integration = 'simps') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1st Moment smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_M1, e_fermi = 'sc', integration = 'simps') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_M1, e_fermi = 'sc', integration = 'simps') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_M1, e_fermi = 'sc', integration = 'simps') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_M1, e_fermi = 'sc', integration = 'simps') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_M1, e_fermi = 'sc', integration = 'simps') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_M1, e_fermi = 'sc', integration = 'simps') - eband_5_888_sc_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Trapezoidal rule integration with a self-consistent Fermi energy gives remarkably good results. The errors for each smearing method are as consistent as analytic integration across all five snapshots, and the absolute errors are actually somewhat smaller. I'm not sure why the Fermi surface, which is essentially a 50 meV wide step being integrated on a 100 meV wide grid, doesn't cause more trouble. You would thing that the answer would be significantly wrong whenever the Fermi energy isn't half way between two energy grid points. Maybe the self-consistent solution for the Fermi energy cancels out a large part of the error at the Fermi surface? I don't understand it, so I don't trust it." - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " snap0 snap1 snap2 snap3 snap4 snap5\n", - "Eband errors using 2g Gaussian smearing: -1.0392 -1.0388 -1.0384 -1.0393 -1.0418 -1.0384\n", - "Eband errors using 1g Gaussian smearing: -0.2488 -0.2482 -0.2476 -0.2486 -0.2495 -0.2475\n", - "Eband errors using 1st Moment smearing: -0.0711 -0.0709 -0.0713 -0.0711 -0.0717 -0.0715\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: RuntimeWarning: overflow encountered in exp\n", - " return 1.0 / (1.0 + np.exp((energies - e_fermi) / (kB * temperature)))\n" - ] - } - ], - "source": [ - "print(\" snap0 snap1 snap2 snap3 snap4 snap5\")\n", - "print(\"Eband errors using 2g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_2g, e_fermi = 'sc', integration = 'trapz') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_g, e_fermi = 'sc', integration = 'trapz') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_g, e_fermi = 'sc', integration = 'trapz') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_g, e_fermi = 'sc', integration = 'trapz') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_g, e_fermi = 'sc', integration = 'trapz') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_g, e_fermi = 'sc', integration = 'trapz') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_g, e_fermi = 'sc', integration = 'trapz') - eband_5_888_sc_ref))\n", - "print(\"Eband errors using 1st Moment smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_0_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_0_888_sc_ref,\n", - "dos_2_eband(dos_1_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_1_888_sc_ref,\n", - "dos_2_eband(dos_2_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_2_888_sc_ref,\n", - "dos_2_eband(dos_3_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_3_888_sc_ref,\n", - "dos_2_eband(dos_4_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_4_888_sc_ref,\n", - "dos_2_eband(dos_5_888_M1, e_fermi = 'sc', integration = 'trapz') - eband_5_888_sc_ref))" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 933K: snap0 snap1 snap2 snap10 snap11 snap12\n", - "Eband errors using 2g Gaussian smearing: -1.1485 -1.1452 -1.1502 -1.1546 -1.1545 -1.1555\n" - ] - } - ], - "source": [ - "print(\" 933K: snap0 snap1 snap2 snap10 snap11 snap12\")\n", - "print(\"Eband errors using 2g Gaussian smearing: {0:8.4f}{1:8.4f}{2:8.4f}{3:8.4f}{4:8.4f}{5:8.4f}\".format(\n", - "dos_2_eband(dos_933K_0_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_0_sc_ref,\n", - "dos_2_eband(dos_933K_1_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_1_sc_ref,\n", - "dos_2_eband(dos_933K_2_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_2_sc_ref,\n", - "dos_2_eband(dos_933K_10_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_10_sc_ref,\n", - "dos_2_eband(dos_933K_11_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_11_sc_ref,\n", - "dos_2_eband(dos_933K_12_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_12_sc_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also investigate how quantities evaluated from the LDOS calculated either by Quantum Espresso\n", - "or by machine learning compare with the results evaluated from the DOS that we calculate from eigenvalues." - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [], - "source": [ - "if read_QE_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " ldos_2_888_2g = LDOS(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/ldos_200x200x200grid_250elvls_snapshot2.npy')\n", - " \n", - "if read_QE_933K_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " ldos_933K_0_2g = LDOS(dft_933K_0, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/Al_ldos_200x200x200grid_250elvls_snapshot0.npy')\n", - "\n", - "if read_ML_LDOS:\n", - " ldos_e_grid = np.linspace(-10.0,14.9,250)\n", - " ldos_ml_2_888_2g = LDOS(dft_2_888, ldos_e_grid,\n", - " '/Users/namodin/Documents/Machine Learning/ldos_data/FeedForward_fp_ldos_predictions_may5.npy')" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [], - "source": [ - "# This checks how well the eband and electron density computed in various ways from the LDOS agree\n", - "if read_QE_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(dos_2_eband(ldos_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(ldos_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(ldos_2_888_2g.eband, ldos_2_888_2g.eband - eband_2_888_sc_ref)\n", - " print(np.sum(ldos_2_888_2g.density)*ldos_2_888_2g.cell_volume,\n", - " np.sum(ldos_2_888_2g.density)*ldos_2_888_2g.cell_volume - ldos_2_888_2g.dft.n_electrons)" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [], - "source": [ - "# This checks how well the eband and electron density computed in various ways from the LDOS agree\n", - "if read_QE_933K_LDOS:\n", - " print(dos_2_eband(dos_933K_0_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_933K_0_2g, e_fermi = 'sc', integration = 'analytic') - eband_933K_0_sc_ref)\n", - " print(dos_2_eband(ldos_933K_0_2g.dos, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(ldos_933K_0_2g.dos, e_fermi = 'sc', integration = 'analytic') - eband_933K_0_sc_ref)\n", - " print(ldos_933K_0_2g.eband, ldos_933K_0_2g.eband - eband_933K_0_sc_ref)\n", - " print(np.sum(ldos_933K_0_2g.density)*ldos_933K_0_2g.cell_volume,\n", - " np.sum(ldos_933K_0_2g.density)*ldos_933K_0_2g.cell_volume - ldos_933K_0_2g.dft.n_electrons)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [], - "source": [ - "# This shows that I can get agreement with Austin's band energy for the ML predicted LDOS by altering parameters\n", - "if read_ML_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps'),\n", - " dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps') - dos_2_eband(dos_2_888_2g, integration = 'simps'))\n", - " print(\"Changing energy grid!\")\n", - " ldos_ml_2_888_2g.dos.e_grid = np.linspace(-10.0,15.0,250)\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, integration = 'simps'))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 7.7967, integration = 'simps'))\n", - " cell_volume = ldos_ml_2_888_2g.dft.volume/(200.0*Br2AA)**3\n", - " print(cell_volume, cell_volume**(1.0/3.0))\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 7.7967, integration = 'simps')*0.153049**3/cell_volume)\n", - " print(\"Resetting energy grid!\")\n", - " ldos_ml_2_888_2g.dos.e_grid = np.linspace(-10.0,14.9,250)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [], - "source": [ - "# This checks how well the eband and electron density computed in various ways from the LDOS agree\n", - "if read_ML_LDOS:\n", - " print(dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic'),\n", - " dos_2_eband(ldos_ml_2_888_2g.dos, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)\n", - " print(ldos_ml_2_888_2g.eband, ldos_ml_2_888_2g.eband - eband_2_888_sc_ref)\n", - " print(np.sum(ldos_ml_2_888_2g.density)*ldos_ml_2_888_2g.cell_volume,\n", - " np.sum(ldos_ml_2_888_2g.density)*ldos_ml_2_888_2g.cell_volume - ldos_ml_2_888_2g.dft.n_electrons)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we will investigate how quantities evaluated from the DOS calculated by Quantum Espresso and saved to\n", - "a file compare with the results evaluated from the DOS that we calculate from eigenvalues. First, let's look at the integrated number of electrons:" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Enum errors using our DOS: 0.2831 0.2857 0.2422\n", - "Enum errors using Q-E DOS: 0.2833 0.2900 0.2487\n" - ] - } - ], - "source": [ - "print(\"Enum errors using our DOS: {0:8.4f}{1:8.4f}{2:8.4f}\".format(\n", - " dos_2_enum(dos_0_888_2g, integration = 'analytic') - enum_0_888_ref,\n", - " dos_2_enum(dos_1_888_2g, integration = 'analytic') - enum_1_888_ref,\n", - " dos_2_enum(dos_2_888_2g, integration = 'analytic') - enum_2_888_ref))\n", - "print(\"Enum errors using Q-E DOS: {0:8.4f}{1:8.4f}{2:8.4f}\".format(\n", - " dos_2_enum(dos_qe_0_888_2g, integration = 'analytic') - enum_0_888_ref,\n", - " dos_2_enum(dos_qe_1_888_2g, integration = 'analytic') - enum_1_888_ref,\n", - " dos_2_enum(dos_qe_2_888_2g, integration = 'analytic') - enum_2_888_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The integrated number of electrons from the QE DOS isn't great, but it isn't terrible either. This is presumably due to round off errors when Q-E prints the numbers to the file with only 4 digits of accuracy. Now, we can check the energies: " - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Eband errors using our DOS: -1.1430 -1.1432 -1.1423\n", - "Eband errors using Q-E DOS: -1.1317 -1.1819 -1.1301\n" - ] - } - ], - "source": [ - "print(\"Eband errors using our DOS: {0:8.4f}{1:8.4f}{2:8.4f}\".format(\n", - " dos_2_eband(dos_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref,\n", - " dos_2_eband(dos_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref,\n", - " dos_2_eband(dos_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref))\n", - "print(\"Eband errors using Q-E DOS: {0:8.4f}{1:8.4f}{2:8.4f}\".format(\n", - " dos_2_eband(dos_qe_0_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref,\n", - " dos_2_eband(dos_qe_1_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref,\n", - " dos_2_eband(dos_qe_2_888_2g, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The band energy errors using the Q-E DOS are much less consistent than the errors that we get with the DOS that we calculate from eigenvalues. This shows the importance of controlling round off errors when doing DFT-like calculations.\n", - "\n", - "Now we will investigate how quantities calculated from various definitions of the DOS change as the energy grid is varied. This both gives us an idea of the error associated with various definitions of the DOS and how much the error varies with details of the calculation (e.g., grid spacing)." - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "241\n", - "242\n", - "243\n", - "244\n", - "245\n", - "246\n", - "247\n", - "248\n", - "249\n", - "250\n", - "251\n" - ] - } - ], - "source": [ - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_g = []\n", - "dosn_0_888_2g = []\n", - "dosn_0_888_M1 = []\n", - "\n", - "for n_egrid in n_egrids:\n", - " \n", - " print(n_egrid)\n", - " \n", - " e_grid_n = np.linspace(emin, emax, n_egrid)\n", - " sigma_mod = e_grid_n[1] - e_grid_n[0]\n", - " narrow_gaussian = partial(gaussian, sigma = sigma)\n", - " wide_gaussian = partial(gaussian, sigma = 2.0*sigma)\n", - "\n", - " dosn_0_888_g.append(DOS.from_calculation(dft_0_888, e_grid_n, narrow_gaussian ))\n", - " dosn_0_888_2g.append(DOS.from_calculation(dft_0_888, e_grid_n, wide_gaussian ))\n", - " dosn_0_888_M1.append(DOS.from_calculation(dft_0_888, e_grid_n, delta_M1))" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_g = []\n", - "eband_error_0_888_g = []\n", - "for dos in dosn_0_888_g:\n", - " enum_error_0_888_g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_g)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_g)\n", - "\n", - "enum_error_0_888_2g = []\n", - "eband_error_0_888_2g = []\n", - "for dos in dosn_0_888_2g:\n", - " enum_error_0_888_2g.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_2g.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_2g = np.array(enum_error_0_888_2g)\n", - "eband_error_0_888_2g = np.array(eband_error_0_888_2g)\n", - "\n", - "enum_error_0_888_M1 = []\n", - "eband_error_0_888_M1 = []\n", - "for dos in dosn_0_888_M1:\n", - " enum_error_0_888_M1.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_M1.append(dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)\n", - "enum_error_0_888_M1 = np.array(enum_error_0_888_M1)\n", - "eband_error_0_888_M1 = np.array(eband_error_0_888_M1)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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6iJFihiP+eyzz+qzZ89abWfXrl3a19dXA9rBwUE3btxYP//887pFixba2dlZA9rd3d3s2S9aa71jxw7jcZydnXWjRo10165ddbt27XTlypWNeU2aNNHXrl2z+dzuBVaeU5LrN8Tyyv2XBCVCCCFyUnZByc2bN4031pZugtPS0vT333+vAwMDdaFChXSRIkV0s2bN9IoVK6wGHw8rKNFa66tXr+qRI0fqatWqaScnJ+3k5KSrV6+uR40aleWN2+LFi43ntHz5crP82rVra0AHBQVlefzsJCcn68mTJ+u2bdtqLy8v7ejoqAsUKKA9PT11WFiYHjVqlNWb5507d+rw8HBdvHhx7ejoqCtVqqQ//PBDnZycbPEhiAbHjx/XL7zwgnZ3d9cODg66XLlyesSIEfrWrVsW6+3YsUO/++67un79+trT01M7ODhoDw8PHRwcrL/44guTB1empKToCRMm6C5duugKFSrowoULaycnJ+3v76+ff/55iw/StBaUaK31/Pnzdd26dXXhwoW1i4uLDgkJ0bNmzdJa61wJSgwvpZR2dnbWXl5eulmzZvq9997Te/bssamt5ORk/e233+pmzZppDw8PbW9vr4sWLarr1aunP/nkE3358mWL9VJSUnRcXJweNmyYbtSokfbz89NOTk66QIEC2svLS7dp00b/+OOPZg+bfJisBSUqI088yWrVqqUTEhJyuxtCCCGEEOIxp5TaprWudXe6rCkRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQgghRK6SoEQIIYQQQgiRqyQoEUIIIYQQQuQqCUqEEEIIIYQQuUqCEiGEEEIIIUSukqBECCGEEEIIkaskKBFCCCGEEELkKglKhBBCCCGEELlKghIhhBBCCCFErpKgRAghhBBCCJGrJCgRQgghhBBC5CoJSoQQQgghhBC5SoISIYQQQuQoX19flFJZvhYtWmRS9ujRo7nb6WxERUUZ++7k5ERSUpLVsn///bfJucbFxT26jj7GRowYYfY5cnR0xMPDg6CgIHr16sWCBQtISUmxqb34+Hh69OhB2bJlKVSoEC4uLlSsWJF+/fqxe/fubOv//PPPhIeHU6JECRwcHHBzc6N8+fK0bduWMWPG5PnPdG7Ln9sdEEIIIcSToUWLFpQoUcJino+PzyPuDSilANBaP1A7ycnJ/PTTT/Tt29diflRU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cCrQJ4SwaYNjb8YYv2p4cghhFDBqNX9gFccXX6QN1265BQYNyrqayvK1r8GDD8JOO6Vd3zffPOuK1FnV1MA++6RRt513zrqa4uvTB04+OX19V12V2grvsUdaGL/iillXp2oze/aiazkar+v4z39SqGgYONZfH77znYWv9e/fcfX+9Kfw6aew227pZlivXh33uVXQPiWlNDj3vAGwMXAlaerVVGBL4Dpg99zzwflcMMb4cS6A/DX3MT1CCL8B/gD0AA6JMf6miF9Dc/rlnlsKUzNyz+39n7dj7vnSJo5tQxr9WiDG+BDw0IgRIw5v5+cVwPHHp2+k222XdSWVacSItIHcXnvBE084NUVtc9JJsMQScNZZWVdSWv37p6/x6KNTW/INNoDRo+HMM9P8eqm9YoQvv2w6bNQ/pk1LbbYbho5ttln4/rBh5dX1KoS0eero0XDAAfD739v9sQOVy590/T4d3YHbY4wN+zI+GEL4D/A34MAQwnkxxvfyuWiMcUoumDwOHJB7zCONuNxZtOrLRIxx5axrqFp/+AO89BK89lrWlVS2HXdMc3532il1OCvHPSVUvm67Df7857RBYrVsPjh4MFx4IZxwAowZk8L8YYfBaae5OalaVleX1vS1tJ4DFl/HMWLEwteWWabz/V/r0iV9r9h1V/jhD+HGGztXZ75OrFxCyfQGb9/Y+GCMcXwI4RVgBGlheV6hJPex/83tL1LfyepV4N521Fqo+lGQlqa71Y+mTG/hHJWrKVPSXO777++8HXw6kwMPXLjr+zPPpLveUmteey2NkowbV53TK4cOhcsvT38GF1wAa6wBxx4LP/6xc+e10PTpcNBB8M9/pla5AwcuGjqGD4cddlj42qBBlfkLe48e6WbjttvCT36SGkio5MollLzfzNuNzxkBFNQSIYSwDynozAXeIk0Puz+EsGeMcU4bai3UxNxzS5tP1m/3PbGFc1SOYoQjjoDvfz/N3VbHOPnkNBf5O99J83579866IpWzqVNhzz3hmmtS29xqtvzyqcvQqafCeefB6qunYHLccd5UURpB6907tchdccXq/t7av3/6c9hii7TupTNsrtrJlcuYWsM5L82NJy+Ve57RzPHFhBC+C/yOtHv6bsBmwNPATsAfQwh9Ci+1YPVf29ohhOb+d49sdK46i1//GiZOTBuYqeOEkObJL7ccfPe7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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(enum_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot band energy errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Size of Energy Grid')\n", - "ax.set_ylabel(r'Error in Band Energy (eV)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "plt.yscale(\"log\")\n", - "\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_2g), linestyle='-', linewidth=1, color='blue', label='Wide Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_g), linestyle='-', linewidth=1, color='green', label='Narrow Gaussian DOS')\n", - "ax.plot(np.array(n_egrids), np.abs(eband_error_0_888_M1), linestyle='-', linewidth=1, color='red', label='First Moment DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_band_vs_N_grid_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.5\n", - "0.6\n", - "0.7\n", - "0.8\n", - "0.9\n", - "1.0\n", - "1.1\n", - "1.2\n", - "1.5\n", - "1.7\n", - "2.0\n", - "2.5\n", - "3.0\n", - "3.5\n", - "4.0\n" - ] - } - ], - "source": [ - "n_egrid = 250\n", - "emin = e_grid[0]\n", - "emax = e_grid[-1]\n", - "n_egrid_max = len(e_grid)\n", - "n_egrids = np.arange(n_egrid_max - 10, n_egrid_max + 1)\n", - "\n", - "dosn_0_888_vg = []\n", - "dosn_1_888_vg = []\n", - "dosn_2_888_vg = []\n", - "\n", - "sigma = e_grid[1] - e_grid[0]\n", - "sigma_multipliers = np.array([0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.5,1.7,2.0,2.5,3.0,3.5,4.0])\n", - "\n", - "for sigma_multiplier in sigma_multipliers:\n", - " \n", - " print(sigma_multiplier)\n", - " delta_f = partial(gaussian, sigma = sigma*sigma_multiplier)\n", - " dosn_0_888_vg.append(DOS.from_calculation(dft_0_888, e_grid, delta_f ))\n", - " dosn_1_888_vg.append(DOS.from_calculation(dft_1_888, e_grid, delta_f ))\n", - " dosn_2_888_vg.append(DOS.from_calculation(dft_2_888, e_grid, delta_f ))" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_0_888_vg = []\n", - "eband_error_0_888_vg = []\n", - "for dos in dosn_0_888_vg:\n", - " enum_error_0_888_vg.append(dos_2_enum(dos, integration = 'analytic') - enum_0_888_ref)\n", - " eband_error_0_888_vg.append((dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_0_888_sc_ref)/256.0*1000.0)\n", - "enum_error_0_888_g = np.array(enum_error_0_888_vg)\n", - "eband_error_0_888_g = np.array(eband_error_0_888_vg)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_1_888_vg = []\n", - "eband_error_1_888_vg = []\n", - "for dos in dosn_1_888_vg:\n", - " enum_error_1_888_vg.append(dos_2_enum(dos, integration = 'analytic') - enum_1_888_ref)\n", - " eband_error_1_888_vg.append((dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_1_888_sc_ref)/256.0*1000.0)\n", - "enum_error_1_888_g = np.array(enum_error_1_888_vg)\n", - "eband_error_1_888_g = np.array(eband_error_1_888_vg)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [], - "source": [ - "enum_error_2_888_vg = []\n", - "eband_error_2_888_vg = []\n", - "for dos in dosn_2_888_vg:\n", - " enum_error_2_888_vg.append(dos_2_enum(dos, integration = 'analytic') - enum_2_888_ref)\n", - " eband_error_2_888_vg.append((dos_2_eband(dos, e_fermi = 'sc', integration = 'analytic') - eband_2_888_sc_ref)/256.0*1000.0)\n", - "enum_error_2_888_g = np.array(enum_error_2_888_vg)\n", - "eband_error_2_888_g = np.array(eband_error_2_888_vg)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Electron Number')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, enum_error_0_888_vg, linestyle='-', linewidth=1, color='blue', label='Snapshot 0')\n", - "ax.plot(sigma_multipliers, enum_error_1_888_vg, linestyle='-', linewidth=2, color='red', label='Snapshot 1')\n", - "ax.plot(sigma_multipliers, enum_error_2_888_vg, linestyle='-', linewidth=2, color='green', label='Snapshot 2')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "#plt.savefig('E_num_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot electron number errors using the three DOS definitions \n", - "plt.figure(figsize=[12,9])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Gaussian Width / Grid Spacing')\n", - "ax.set_ylabel(r'Error in Band Energy (meV/atom)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(sigma_multipliers, eband_error_0_888_vg, linestyle='-', linewidth=2, color='blue', label='Snapshot 0')\n", - "ax.plot(sigma_multipliers, eband_error_1_888_vg, linestyle='-', linewidth=2, color='red', label='Snapshot 1')\n", - "ax.plot(sigma_multipliers, eband_error_2_888_vg, linestyle='-', linewidth=2, color='green', label='Snapshot 2')\n", - "\n", - "used=np.array([[2.0,2.0],[-18.0,10]])\n", - "ax.plot(used[0], used[1], linestyle='--', linewidth=1, color='black', label='Width Used')\n", - "plt.ylim(-18.0,10.0) \n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1, 1))\n", - "plt.savefig('E_band_vs_G_width_all_states.png',dpi=100,bbox_inches='tight')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Scratchpad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The cells below include various older calculations and ideas. Most of them would have to be updated to work with the current code structure." - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'dos_qe' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mewidth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdos_qe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mdos_qe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mra_sigma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mewidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m11\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mra_enum\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mra_sigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'dos_qe' is not defined" - ] - } - ], - "source": [ - "#ewidth=dos_qe[: , 0][1]-dos_qe[: , 0][0]\n", - "ewidth = (dos_qe[: , 0][1]-dos_qe[: , 0][0])*0.5\n", - "print(ewidth)\n", - "ra_sigma = np.linspace(0.5*ewidth, 5*ewidth, 11)\n", - "ra_enum = np.zeros(len(ra_sigma))\n", - "ra_eband = np.zeros(len(ra_sigma))\n", - "ra_en = np.linspace(dos_qe[0, 0], dos_qe[-1, 0], int((dos_qe[-1, 0]-dos_qe[0, 0])/ewidth)) \n", - "for i in range(len(ra_sigma)):\n", - " print(\"i:\", i)\n", - " # Generate electron number \n", - " ra_enum[i] = gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[i])\n", - " # Generate band energy\n", - " ra_eband[i] = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=ra_sigma[i])\n", - "print(ra_en[1]-ra_en[0])\n", - "print(ra_enum)\n", - "print(ra_eband)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "#ax.set_ylim(767.95, 768.05)\n", - "\n", - "ax.hlines(enum_ref, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.plot(ra_sigma, ra_enum, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of smearing [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "\n", - "ax.hlines(eband_ref/Ry2eV, ra_sigma[0], ra_sigma[-1], linewidth=3)\n", - "ax.scatter(ra_sigma, ra_eband, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()\n", - "print(np.min(abs(ra_eband-eband_ref/Ry2eV))/256)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(4*ra_sigma[0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=ra_sigma[1] )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=1, color='red', label='computed (adjusted width)')\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=1, color='black', label='QE-DOS')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate electron number \n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*0.79255\n", - "gen_enum(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The \"band energy\" is also called the \"single-particle energy\" or the \"one-electron energy\" and is obtained from a weighted sum of the eigenvalues\n", - "\n", - "$$E_{band} = \\sum_i \\sum_k w_k\\, f(\\epsilon_{ik}) \\epsilon_{ik}\\ .$$\n", - "\n", - "where $i$ labels the band, $k$ labels the k point, $w_k$ is the weight of the k point, and $f(\\epsilon_{ik})$ is the occupation of the state, which is given by the Fermi-Dirac distribution function evaluated at energy $\\epsilon_{ik}$.\n", - "\n", - "For look at the particular values for a given snapshot (data from ```blake.sandia.gov:/home/acangi/q-e_calcs/Al/datasets/vasp_econ_snapshots/298K/2.699g/170726180545.0/100Ry_k333```). QE prints the one-electron energy in the standard output, together with all the other energy contributions, e.g., \n", - "```\n", - "The total energy is the sum of the following terms: \n", - "\n", - "\n", - " one-electron contribution = 737.82754675 Ry\n", - " hartree contribution = 4.77073244 Ry\n", - " xc contribution = -554.09988814 Ry\n", - " ewald contribution = -1375.56724973 Ry\n", - " smearing contrib. (-TS) = -0.02019845 Ry\n", - "```\n", - "However, what QE prints as the \"one-electron contribution\" is not the sum of the eigenvalues, but instead (see source code ```~/PW/src/electrons.f90``` lines 638-640)\n", - "\n", - "$$\\text{one-electron contribution} = \\sum_i \\epsilon_i - (E_h + E_{xc})$$\n", - "\n", - "In order to correctly compare the band energy obtained from integrating the DOS with the QE output we need to add the hartree and exchange-correlation contributions to the one-electron contribution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "737.82754675" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The correct band energy from QE output is" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe = 737.82754675+4.77073244-554.09988814\n", - "print(eband_qe)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Error in band energy compared to QE output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "By adjusting the width of the Gaussian smearing we achieved the desired accuracy in the band energy, here < 1 meV.\n", - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, we can also increase the smearing width and also obtain an accurate band energy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]\n", - "emax = dos_qe[: , 0][-1]\n", - "ra_en = dos_qe[: , 0]\n", - "sigma_mod = sigma_qe*29.177\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also generate a different energy grid. However, it the integral quickly converges with respect to the number of grid points. We can increase the range of the enegy grid to make sure the DOS decays to zero at the limits." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*29.908\n", - "eband = gen_eband(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check for another snapshot.\n", - "The band energy from the QE output of snapshot 1 is:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eband_qe_01 = 739.08601067+4.18224128-553.98606038\n", - "print(eband_qe_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ewidth_01=dos_qe_01[: , 0][1]-dos_qe_01[: , 0][0]\n", - "print(ewidth_01)\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "ra_en_01 = np.linspace(emin, emax, int(len(dos_qe_01[: , 0])))\n", - "ra_sigma_01 = np.linspace(20*ewidth_01, ewidth_01, 101)\n", - "ra_enum_01 = np.zeros(len(ra_sigma_01))\n", - "ra_eband_01 = np.zeros(len(ra_sigma_01))\n", - "for i in range(len(ra_sigma)):\n", - " ra_en_01 = dos_qe[: , 0]\n", - " # Generate electron number \n", - " ra_enum_01[i] = gen_enum(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - " # Generate band energy\n", - " ra_eband_01[i] = gen_eband(k_weights_qe_01, ra_en_01, eigs_qe_01, sigma=ra_sigma_01[i])\n", - "print(ra_enum_01)\n", - "print(ra_eband_01)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(768, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_enum_01, linestyle='-', linewidth=3, color='blue', label='Electron number')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'Width of energy bin [Ry]')\n", - "#ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.hlines(eband_qe_01, ra_sigma_01[0], ra_sigma_01[-1], linewidth=3)\n", - "ax.plot(ra_sigma_01, ra_eband_01, linestyle='-', linewidth=3, color='red', label='Band energy')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe_01[: , 0][0]-1\n", - "emax = dos_qe_01[: , 0][-1]+1\n", - "# Decrease the number of energy grid points\n", - "ra_en = np.linspace(emin, emax, 2*int(len(dos_qe_01[: , 0])))\n", - "sigma_mod = sigma_qe*22.90#22.882\n", - "eband_01 = gen_eband(k_weights_qe_01, ra_en , eigs_qe_01, sigma=sigma_mod )\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband_01))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error_01 = eband_01-eband_qe_01\n", - "print(\"Error in Rydberg\", eband_error_01)\n", - "print(\"Error in eV\", eband_error_01*Ry2eV)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The corresponding DOS looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS(k_weights_qe_01, ra_en, eigs_qe_01, sigma=sigma_mod )\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe_01[: , 0], dos_qe_01[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(ra_en , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This illustrates the issue with Gaussian smearing. The smearing width differs between the different snapshots. This means we cannot choose a fixed smearing width and obtain high accuracy in the band energy throughout a priori (i.e. without knowing the true value of the band energy). However, this might be fine, since we need to choose the smearing width only for the generation of training data. It might be somewhat inconvenient, but for each snapshot in the training data we can find the corresponding smearing width which will yield a band energy up to a target accuracy." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do\n", - "* Perform search over smearing width using sp.optimize library. But this requires adapting the definitions of the functions above.\n", - "* Different representation of the $\\delta$ function, for example Marzari-Vanderbilt (MV)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define MV representation of delta function\n", - "def MV(en, mu, sigma):\n", - " x = (mu-en)/sigma\n", - " result = 1.0/np.sqrt(np.pi)*(2.0-np.sqrt(2)*x)*np.exp(-1.0*(x-(1.0/np.sqrt(2)))**2)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check of smearing functions\n", - "# Generate data\n", - "ra_en = np.linspace(7.,9.,601)\n", - "ra_gaussian = gaussian(ra_en, eF=fermi_energy, sigma=sigma_qe)\n", - "ra_MV = MV(ra_en, mu=fermi_energy, sigma=sigma_qe*2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(ra_en, ra_MV, linestyle='-', linewidth=3, color='red', label='MV')\n", - "#ax.plot(ra_en, ra_gaussian, linestyle='-', linewidth=3, color='blue', label='gaussian')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating DOS from eigenvalues\n", - "def gen_DOS_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " dim_bnd = len((array_eigs[: , 0]))\n", - " dim_k = len((array_eigs[0 , :]))\n", - " ra_en = array_en #dos_qe[: , 0] # energy grid (same as QE-DOS input/output) \n", - " ra_dos_ik = [[] for i in range(dim_bnd)]\n", - " ra_dos = np.zeros(len(array_en)) #create empty array\n", - " for idx_bnd in range(dim_bnd):\n", - " for idx_k in range(dim_k):\n", - " if (smearing_type == 1):\n", - " smearing = gaussian(en=array_en, eF=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " elif (smearing_type == 2):\n", - " smearing = MV(en=array_en, mu=array_eigs[idx_bnd , :][idx_k], sigma=sigma)\n", - " else:\n", - " print(\"Error, choose valid smearing function.\")\n", - " ra_dos_ik[idx_bnd].append(smearing)\n", - " # Sum the Gaussians over idx_band and idx_k\n", - " ra_dos += k_weights[idx_k]*ra_dos_ik[idx_bnd][idx_k]\n", - " return ra_dos #, ra_dos_ik" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_en = dos_qe[: , 0]\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_qe*Ry2eV,smearing_type=2)\n", - "\n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='--', linewidth=3, color='red', label='computed')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(1.5, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function generating band energy from DOS\n", - "## Integrate DOS*E*FD to obtain band energy\n", - "def gen_eband_ST(k_weights, array_en, array_eigs, sigma, smearing_type):\n", - " # input:\n", - " ## k_weights: weights of k-point summation (taken from QE output)\n", - " ## array_en: energy grid [eV]\n", - " ## array_eigs: array[dim_bnd, dim_k] containing eigenvalues (\\epsilon_{i,k})\n", - " ## sigma: width of Gaussian [eV]\n", - " # output:\n", - " ## array_dos: ra_dos\n", - " ## array_dos_contr: ra_dos_ik (terms for each i,k)\n", - " ra_fd = fd_function(array_en, eF=fermi_energy, t=temp)\n", - " #ra_dos, ra_dos_ik = gen_DOS(k_weights_qe, array_en, eigs_qe, sigma)\n", - " ra_dos = gen_DOS_ST(k_weights_qe, array_en, eigs_qe, sigma, smearing_type)\n", - " eband = sp.integrate.trapz(ra_dos*array_en*ra_fd, array_en)\n", - " #Convert from eV to Ry for comparison with QE output\n", - " eband_Ry = eband/Ry2eV\n", - " return eband_Ry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate band energy\n", - "emin = dos_qe[: , 0][0]-1\n", - "emax = dos_qe[: , 0][-1]+1\n", - "ra_en = np.linspace(emin, emax, int(len(dos_qe[: , 0])))\n", - "sigma_mod = sigma_qe*30.56825\n", - "eband = gen_eband_ST(k_weights_qe, ra_en , eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - "print(\"smearing width {0} eV ({1} Ry)\".format(sigma_mod, sigma_mod/Ry2eV))\n", - "print(\"Band energy {0} Ry)\".format(eband))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Error in band energy (due to discretization of the energy grid in DOS calculation and choice of smearing width)\n", - "eband_error = eband-eband_qe\n", - "print(\"Error in Rydberg\", eband_error)\n", - "print(\"Error in eV\", eband_error*Ry2eV)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate data\n", - "ra_dos = gen_DOS_ST(k_weights_qe, ra_en, eigs_qe, sigma=sigma_mod, smearing_type=2)\n", - " \n", - "# Plot data \n", - "plt.figure(figsize=[8,6])\n", - "ax = plt.subplot(1,1,1)\n", - "ax.set_xlabel(r'E [eV]')\n", - "ax.set_ylabel(r'D(E)')\n", - "plt.rcParams.update({'font.size': 22})\n", - "\n", - "ax.plot(dos_qe[: , 0], dos_qe[: , 1], linestyle='-', linewidth=3, color='black', label='QE-DOS')\n", - "ax.plot(dos_qe[: , 0] , ra_dos, linestyle='-', linewidth=3, color='red', label='computed (adjusted width)')\n", - "\n", - "# Legend\n", - "ax.legend(loc='upper right',frameon=False, bbox_to_anchor=(2, 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/Al.dos b/ml-dft-sandia/notebooks/dos2eband/snap_0/Al.dos deleted file mode 100644 index ad752533b..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/Al.dos +++ /dev/null @@ -1,140 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.770 eV - -4.627 0.7863E-04 0.8668E-05 - -4.517 0.3781E-03 0.5035E-04 - -4.407 0.1613E-02 0.2282E-03 - -4.297 0.6114E-02 0.9021E-03 - -4.186 0.2062E-01 0.3175E-02 - -4.076 0.6197E-01 0.1001E-01 - -3.966 0.1664E+00 0.2835E-01 - -3.856 0.4005E+00 0.7250E-01 - -3.746 0.8666E+00 0.1680E+00 - -3.635 0.1693E+01 0.3547E+00 - -3.525 0.3003E+01 0.6858E+00 - -3.415 0.4866E+01 0.1222E+01 - -3.305 0.7258E+01 0.2022E+01 - -3.194 0.1005E+02 0.3130E+01 - -3.084 0.1305E+02 0.4569E+01 - -2.974 0.1604E+02 0.6337E+01 - -2.864 0.1888E+02 0.8418E+01 - -2.753 0.2147E+02 0.1079E+02 - -2.643 0.2381E+02 0.1341E+02 - -2.533 0.2594E+02 0.1627E+02 - -2.423 0.2789E+02 0.1935E+02 - -2.312 0.2970E+02 0.2262E+02 - -2.202 0.3136E+02 0.2608E+02 - -2.092 0.3291E+02 0.2970E+02 - -1.982 0.3440E+02 0.3350E+02 - -1.872 0.3587E+02 0.3745E+02 - -1.761 0.3730E+02 0.4156E+02 - -1.651 0.3864E+02 0.4582E+02 - -1.541 0.3987E+02 0.5022E+02 - -1.431 0.4102E+02 0.5474E+02 - -1.320 0.4220E+02 0.5939E+02 - -1.210 0.4345E+02 0.6418E+02 - -1.100 0.4479E+02 0.6912E+02 - -0.990 0.4609E+02 0.7420E+02 - -0.879 0.4726E+02 0.7941E+02 - -0.769 0.4820E+02 0.8472E+02 - -0.659 0.4898E+02 0.9012E+02 - -0.549 0.4979E+02 0.9561E+02 - -0.438 0.5083E+02 0.1012E+03 - -0.328 0.5218E+02 0.1070E+03 - -0.218 0.5365E+02 0.1129E+03 - -0.108 0.5493E+02 0.1189E+03 - 0.002 0.5582E+02 0.1251E+03 - 0.113 0.5635E+02 0.1313E+03 - 0.223 0.5677E+02 0.1376E+03 - 0.333 0.5741E+02 0.1439E+03 - 0.443 0.5844E+02 0.1503E+03 - 0.554 0.5979E+02 0.1569E+03 - 0.664 0.6123E+02 0.1637E+03 - 0.774 0.6248E+02 0.1706E+03 - 0.884 0.6343E+02 0.1775E+03 - 0.995 0.6409E+02 0.1846E+03 - 1.105 0.6458E+02 0.1917E+03 - 1.215 0.6501E+02 0.1989E+03 - 1.325 0.6548E+02 0.2061E+03 - 1.436 0.6612E+02 0.2134E+03 - 1.546 0.6708E+02 0.2208E+03 - 1.656 0.6844E+02 0.2283E+03 - 1.766 0.7012E+02 0.2361E+03 - 1.877 0.7180E+02 0.2440E+03 - 1.987 0.7306E+02 0.2520E+03 - 2.097 0.7359E+02 0.2602E+03 - 2.207 0.7342E+02 0.2682E+03 - 2.317 0.7296E+02 0.2763E+03 - 2.428 0.7286E+02 0.2843E+03 - 2.538 0.7363E+02 0.2924E+03 - 2.648 0.7532E+02 0.3007E+03 - 2.758 0.7751E+02 0.3093E+03 - 2.869 0.7957E+02 0.3181E+03 - 2.979 0.8100E+02 0.3270E+03 - 3.089 0.8164E+02 0.3360E+03 - 3.199 0.8167E+02 0.3450E+03 - 3.310 0.8147E+02 0.3540E+03 - 3.420 0.8142E+02 0.3629E+03 - 3.530 0.8176E+02 0.3720E+03 - 3.640 0.8252E+02 0.3811E+03 - 3.751 0.8358E+02 0.3903E+03 - 3.861 0.8479E+02 0.3996E+03 - 3.971 0.8607E+02 0.4091E+03 - 4.081 0.8743E+02 0.4187E+03 - 4.191 0.8886E+02 0.4285E+03 - 4.302 0.9032E+02 0.4385E+03 - 4.412 0.9169E+02 0.4486E+03 - 4.522 0.9288E+02 0.4588E+03 - 4.632 0.9384E+02 0.4692E+03 - 4.743 0.9453E+02 0.4796E+03 - 4.853 0.9493E+02 0.4901E+03 - 4.963 0.9497E+02 0.5005E+03 - 5.073 0.9469E+02 0.5110E+03 - 5.184 0.9423E+02 0.5214E+03 - 5.294 0.9383E+02 0.5317E+03 - 5.404 0.9369E+02 0.5420E+03 - 5.514 0.9383E+02 0.5524E+03 - 5.625 0.9407E+02 0.5627E+03 - 5.735 0.9411E+02 0.5731E+03 - 5.845 0.9377E+02 0.5835E+03 - 5.955 0.9311E+02 0.5937E+03 - 6.065 0.9248E+02 0.6039E+03 - 6.176 0.9231E+02 0.6141E+03 - 6.286 0.9288E+02 0.6243E+03 - 6.396 0.9411E+02 0.6347E+03 - 6.506 0.9559E+02 0.6452E+03 - 6.617 0.9683E+02 0.6559E+03 - 6.727 0.9754E+02 0.6667E+03 - 6.837 0.9776E+02 0.6774E+03 - 6.947 0.9777E+02 0.6882E+03 - 7.058 0.9793E+02 0.6990E+03 - 7.168 0.9862E+02 0.7099E+03 - 7.278 0.1001E+03 0.7209E+03 - 7.388 0.1022E+03 0.7322E+03 - 7.499 0.1045E+03 0.7437E+03 - 7.609 0.1063E+03 0.7554E+03 - 7.719 0.1070E+03 0.7672E+03 - 7.829 0.1064E+03 0.7789E+03 - 7.940 0.1048E+03 0.7905E+03 - 8.050 0.1031E+03 0.8019E+03 - 8.160 0.1021E+03 0.8131E+03 - 8.270 0.1023E+03 0.8244E+03 - 8.380 0.1035E+03 0.8358E+03 - 8.491 0.1052E+03 0.8474E+03 - 8.601 0.1061E+03 0.8591E+03 - 8.711 0.1050E+03 0.8707E+03 - 8.821 0.1004E+03 0.8817E+03 - 8.932 0.9173E+02 0.8918E+03 - 9.042 0.7935E+02 0.9006E+03 - 9.152 0.6440E+02 0.9077E+03 - 9.262 0.4868E+02 0.9131E+03 - 9.373 0.3404E+02 0.9168E+03 - 9.483 0.2187E+02 0.9192E+03 - 9.593 0.1284E+02 0.9206E+03 - 9.703 0.6849E+01 0.9214E+03 - 9.814 0.3306E+01 0.9217E+03 - 9.924 0.1438E+01 0.9219E+03 - 10.034 0.5617E+00 0.9220E+03 - 10.144 0.1965E+00 0.9220E+03 - 10.254 0.6144E-01 0.9220E+03 - 10.365 0.1713E-01 0.9220E+03 - 10.475 0.4250E-02 0.9220E+03 - 10.585 0.9372E-03 0.9220E+03 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/EIGS b/ml-dft-sandia/notebooks/dos2eband/snap_0/EIGS deleted file mode 100644 index b66c97b79..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/EIGS +++ /dev/null @@ -1,461 +0,0 @@ --3.321300, -3.259400, -3.263400, -3.201900, -3.201600, -3.259700, -3.197800, -3.198000, -3.202000, -3.140500, -3.140500, -3.201700, -3.140000, -3.140400 --2.811300, -3.074300, -3.063600, -3.022600, -3.029100, -3.073400, -3.025900, -3.013600, -3.021500, -2.974600, -2.970600, -3.026100, -2.976600, -2.968400 --2.796900, -2.752000, -2.735300, -2.994600, -2.986600, -2.741500, -2.997700, -3.011200, -2.996100, -2.945800, -2.954500, -2.991800, -2.955400, -2.955300 --2.777600, -2.707800, -2.724100, -2.815700, -2.818300, -2.726000, -2.828600, -2.826900, -2.814700, -2.928000, -2.922700, -2.813700, -2.914400, -2.926400 --2.740600, -2.680300, -2.695200, -2.667800, -2.663900, -2.690300, -2.667500, -2.667600, -2.656500, -2.781000, -2.782800, -2.658400, -2.784500, -2.779500 --2.736300, -2.662400, -2.682100, -2.626100, -2.628500, -2.647800, -2.602300, -2.602900, -2.639800, -2.751100, -2.755200, -2.637500, -2.760500, -2.754100 --2.706000, -2.559300, -2.530000, -2.480300, -2.499800, -2.541400, -2.496900, -2.502500, -2.491700, -2.736400, -2.730300, -2.495100, -2.724100, -2.732400 --2.296300, -2.518800, -2.525500, -2.465800, -2.452700, -2.536100, -2.468400, -2.456900, -2.456400, -2.564400, -2.565500, -2.471000, -2.565900, -2.563600 --2.267200, -2.492500, -2.494200, -2.451700, -2.435800, -2.503400, -2.420900, -2.430800, -2.444700, -2.237500, -2.232700, -2.436500, -2.238600, -2.230900 --2.263100, -2.476300, -2.456900, -2.406700, -2.413200, -2.460400, -2.405300, -2.399900, -2.413400, -2.202900, -2.215200, -2.398900, -2.215600, -2.221600 --2.252400, -2.322400, -2.317100, -2.294100, -2.313800, -2.323700, -2.304800, -2.297500, -2.290100, -2.189700, -2.181000, -2.296700, -2.181300, -2.187500 --2.215900, -2.196700, -2.186400, -2.272100, -2.257600, -2.192500, -2.272800, -2.273800, -2.267900, -2.078700, -2.064200, -2.267300, -2.074500, -2.079200 --2.196700, -2.148900, -2.179100, -2.247500, -2.247900, -2.148600, -2.248200, -2.259800, -2.239300, -2.044200, -2.051200, -2.244800, -2.043800, -2.034100 --2.191200, -2.110500, -2.127600, -2.216600, -2.209000, -2.114100, -2.210800, -2.206300, -2.219800, -2.038500, -2.034400, -2.218400, -2.030700, -2.017500 --2.177700, -2.086900, -2.107700, -2.075300, -2.084600, -2.090200, -2.098300, -2.091900, -2.099700, -2.007800, -2.009400, -2.091400, -2.016800, -2.006800 --2.153500, -2.014000, -1.993300, -2.055500, -2.049500, -1.999800, -2.049300, -2.060300, -2.038200, -1.969000, -1.992300, -2.037900, -1.970800, -1.999600 --2.130200, -1.965500, -1.951300, -1.762600, -1.776200, -1.960500, -1.773000, -1.777200, -1.775300, -1.956500, -1.952100, -1.781700, -1.952400, -1.959600 --2.117300, -1.917900, -1.929400, -1.748700, -1.752700, -1.929700, -1.741900, -1.749700, -1.738700, -1.860600, -1.864900, -1.760400, -1.851200, -1.849700 --2.107300, -1.899700, -1.893200, -1.710900, -1.713200, -1.909000, -1.719700, -1.714700, -1.726800, -1.823500, -1.808900, -1.724300, -1.830700, -1.812100 --1.734800, -1.812700, -1.804400, -1.703200, -1.697000, -1.809800, -1.711000, -1.699200, -1.708900, -1.785500, -1.786100, -1.689700, -1.779200, -1.794900 --1.693800, -1.769400, -1.774900, -1.681200, -1.674700, -1.787600, -1.675600, -1.677300, -1.672100, -1.670400, -1.683600, -1.677800, -1.685100, -1.688200 --1.663600, -1.766600, -1.747500, -1.661700, -1.653100, -1.768100, -1.651900, -1.636700, -1.655500, -1.662000, -1.640700, -1.652700, -1.660900, -1.632900 --1.644000, -1.724500, -1.740600, -1.574600, -1.571000, -1.721200, -1.566700, -1.562500, -1.564300, -1.599200, -1.613700, -1.587400, -1.595700, -1.613800 --1.604000, -1.707100, -1.701400, -1.544800, -1.546800, -1.703600, -1.547300, -1.543300, -1.545500, -1.511100, -1.506000, -1.529600, -1.515100, -1.497100 --1.595500, -1.313300, -1.281000, -1.514100, -1.522800, -1.310600, -1.527600, -1.533400, -1.521700, -1.492100, -1.483100, -1.508200, -1.480100, -1.485400 --1.589600, -1.263700, -1.264700, -1.499500, -1.494700, -1.255500, -1.503200, -1.503200, -1.494200, -1.470200, -1.465400, -1.482800, -1.471100, -1.470400 --1.548800, -1.245200, -1.245500, -1.461400, -1.480200, -1.241500, -1.475500, -1.489900, -1.467000, -1.437200, -1.441200, -1.463700, -1.447900, -1.439900 --1.167000, -1.222100, -1.232200, -1.454600, -1.429600, -1.217200, -1.431400, -1.437600, -1.448900, -1.420000, -1.428700, -1.452900, -1.420100, -1.433300 --1.138500, -1.200700, -1.197300, -1.318700, -1.330100, -1.192900, -1.324500, -1.331200, -1.331100, -1.399400, -1.401700, -1.333300, -1.399000, -1.401800 --1.098000, -1.192200, -1.185600, -1.195100, -1.191800, -1.181400, -1.198100, -1.185800, -1.185000, -1.303000, -1.300100, -1.188700, -1.319300, -1.321500 --1.068200, -1.160900, -1.172000, -1.159300, -1.159000, -1.167400, -1.172300, -1.160600, -1.165700, -1.280100, -1.287600, -1.177300, -1.302300, -1.293700 --1.035300, -1.146200, -1.121700, -1.139600, -1.150000, -1.124400, -1.140100, -1.142600, -1.143400, -1.260500, -1.270400, -1.131100, -1.261300, -1.261500 --1.019000, -1.065700, -1.078300, -1.118800, -1.115700, -1.058700, -1.090600, -1.095000, -1.115100, -1.251200, -1.264600, -1.117000, -1.231900, -1.249200 --0.697800, -1.009900, -1.046400, -1.018700, -1.022300, -1.038000, -1.020800, -1.015000, -1.013500, -1.240900, -1.229300, -1.015900, -1.221600, -1.224800 --0.667800, -0.986900, -1.005200, -0.989800, -0.983500, -1.004800, -0.984900, -0.989800, -0.985800, -1.220300, -1.188300, -1.005600, -1.207400, -1.199600 --0.648800, -0.972900, -0.972900, -0.977200, -0.973700, -0.972600, -0.967500, -0.975500, -0.968900, -1.108700, -1.114200, -0.962800, -1.092400, -1.099800 --0.623500, -0.913100, -0.870800, -0.957700, -0.942600, -0.875800, -0.942200, -0.953600, -0.951400, -1.063600, -1.061600, -0.937500, -1.072100, -1.058100 --0.605800, -0.830600, -0.857700, -0.933000, -0.928300, -0.854600, -0.927400, -0.933900, -0.920700, -1.018000, -1.033300, -0.931700, -1.022000, -1.041800 --0.603900, -0.816200, -0.801600, -0.914600, -0.906200, -0.816500, -0.893500, -0.909000, -0.915800, -0.775500, -0.775200, -0.893900, -0.790300, -0.786100 --0.595000, -0.783400, -0.778400, -0.834900, -0.852400, -0.788100, -0.831700, -0.819900, -0.824600, -0.746500, -0.756200, -0.839500, -0.766600, -0.752900 --0.589300, -0.705500, -0.696800, -0.813900, -0.796700, -0.704800, -0.813200, -0.804900, -0.809900, -0.727700, -0.720500, -0.825000, -0.729500, -0.724400 --0.575000, -0.670500, -0.663700, -0.776400, -0.786700, -0.670400, -0.793400, -0.788800, -0.791300, -0.714400, -0.705200, -0.808700, -0.695900, -0.707200 --0.553800, -0.629100, -0.648600, -0.765600, -0.766900, -0.638700, -0.781300, -0.764700, -0.764500, -0.686800, -0.685700, -0.754900, -0.685000, -0.684500 --0.540800, -0.603100, -0.614200, -0.747600, -0.755200, -0.618100, -0.752300, -0.750300, -0.755300, -0.655300, -0.660200, -0.747500, -0.656400, -0.664100 --0.526300, -0.539900, -0.537300, -0.730500, -0.743500, -0.581500, -0.737600, -0.727900, -0.737200, -0.581100, -0.571900, -0.732500, -0.587600, -0.561200 --0.516100, -0.519800, -0.518000, -0.706100, -0.700100, -0.506300, -0.727800, -0.720000, -0.702900, -0.552600, -0.543200, -0.712600, -0.555900, -0.551900 --0.514800, -0.495700, -0.515200, -0.687500, -0.697800, -0.478400, -0.672800, -0.686700, -0.691100, -0.523100, -0.530500, -0.681700, -0.514300, -0.520900 --0.503500, -0.479500, -0.481300, -0.596100, -0.588900, -0.466600, -0.585700, -0.597000, -0.599900, -0.503900, -0.511900, -0.586100, -0.500000, -0.504200 --0.490700, -0.463600, -0.461600, -0.544800, -0.543400, -0.457500, -0.556700, -0.553400, -0.550600, -0.482400, -0.476500, -0.545500, -0.492400, -0.480200 --0.487000, -0.441700, -0.449500, -0.289500, -0.276200, -0.445700, -0.282200, -0.284100, -0.298000, -0.457300, -0.464000, -0.299800, -0.439800, -0.463000 --0.470500, -0.408700, -0.432800, -0.266100, -0.263100, -0.427100, -0.265200, -0.268200, -0.265900, -0.339000, -0.338700, -0.279000, -0.334000, -0.331600 --0.466200, -0.398600, -0.401400, -0.240500, -0.255800, -0.382700, -0.249300, -0.246300, -0.237800, -0.223800, -0.234600, -0.248500, -0.219800, -0.230200 --0.445000, -0.337500, -0.343700, -0.211300, -0.231800, -0.356800, -0.227800, -0.234700, -0.223900, -0.195800, -0.187800, -0.219900, -0.211600, -0.201900 --0.428900, -0.331800, -0.312900, -0.197000, -0.200600, -0.312400, -0.203900, -0.216600, -0.206900, -0.172100, -0.175100, -0.195200, -0.185900, -0.167000 --0.413100, -0.307100, -0.294600, -0.186500, -0.184300, -0.299700, -0.182100, -0.180000, -0.196800, -0.158500, -0.150200, -0.186200, -0.172400, -0.140600 --0.388500, -0.293800, -0.283200, -0.158600, -0.146500, -0.278300, -0.157400, -0.149900, -0.160600, -0.132000, -0.135200, -0.166600, -0.119900, -0.128700 --0.366800, -0.271900, -0.263700, -0.097700, -0.088300, -0.265700, -0.085800, -0.079000, -0.075100, -0.102800, -0.112500, -0.102800, -0.093500, -0.111000 --0.123300, -0.243300, -0.252400, -0.066600, -0.049400, -0.247100, -0.066600, -0.058900, -0.067600, -0.046600, -0.039900, -0.057000, -0.040900, -0.056200 --0.113600, -0.214400, -0.241000, -0.033800, -0.039000, -0.241500, -0.048100, -0.045900, -0.035500, -0.013500, -0.018900, -0.033000, -0.021100, -0.024000 --0.078600, -0.206300, -0.204400, -0.022800, -0.032200, -0.210100, -0.019400, -0.019700, -0.022300, 0.001600, -0.011100, -0.017700, -0.004200, -0.006300 --0.059500, -0.186600, -0.171800, 0.002700, -0.017100, -0.174400, 0.007500, -0.008100, -0.001900, 0.005100, 0.012600, 0.008500, 0.021600, 0.009600 --0.047700, -0.130200, -0.110800, 0.018800, 0.029800, -0.109800, 0.031800, 0.018100, 0.026000, 0.042200, 0.020000, 0.030800, 0.029400, 0.027700 --0.028200, -0.071400, -0.094500, 0.107400, 0.107000, -0.101200, 0.099000, 0.107400, 0.092200, 0.051300, 0.054200, 0.111300, 0.047300, 0.051700 --0.016100, -0.047500, -0.045500, 0.136900, 0.144800, -0.047300, 0.146100, 0.135300, 0.136900, 0.063200, 0.066900, 0.145300, 0.065700, 0.061600 -0.001600, -0.036100, -0.018800, 0.158900, 0.172300, -0.033200, 0.164200, 0.157600, 0.168300, 0.090000, 0.096300, 0.149400, 0.083200, 0.079100 -0.011100, 0.210300, 0.232200, 0.197500, 0.197100, 0.226400, 0.187700, 0.194000, 0.203300, 0.097000, 0.107700, 0.210300, 0.117300, 0.095400 -0.026600, 0.241200, 0.257400, 0.276200, 0.278200, 0.250500, 0.273400, 0.283500, 0.273800, 0.175900, 0.178800, 0.278300, 0.169600, 0.181700 -0.032500, 0.286200, 0.273200, 0.306300, 0.306400, 0.274700, 0.289000, 0.310100, 0.299500, 0.188400, 0.195900, 0.303200, 0.204800, 0.197100 -0.046300, 0.309600, 0.290800, 0.329900, 0.319300, 0.317500, 0.314000, 0.323300, 0.325600, 0.214200, 0.229000, 0.321900, 0.232500, 0.232000 -0.051800, 0.346100, 0.376300, 0.353900, 0.347800, 0.356000, 0.345800, 0.347100, 0.353700, 0.232600, 0.244200, 0.339200, 0.251200, 0.244400 -0.076500, 0.401500, 0.389200, 0.361500, 0.351600, 0.390100, 0.374300, 0.379300, 0.364400, 0.267100, 0.267600, 0.368500, 0.263100, 0.276800 -0.087600, 0.410500, 0.409500, 0.382700, 0.390400, 0.407900, 0.401100, 0.399800, 0.396300, 0.300600, 0.280100, 0.394400, 0.267700, 0.296900 -0.091800, 0.425700, 0.419700, 0.442300, 0.455100, 0.425500, 0.459800, 0.458800, 0.451800, 0.660400, 0.661900, 0.442300, 0.638400, 0.638000 -0.100600, 0.442800, 0.439800, 0.474000, 0.469900, 0.444900, 0.481500, 0.479300, 0.476900, 0.676800, 0.686300, 0.468200, 0.660900, 0.666700 -0.112200, 0.457800, 0.457300, 0.492600, 0.487800, 0.455900, 0.497600, 0.483900, 0.492400, 0.693600, 0.696200, 0.475700, 0.697500, 0.686200 -0.124900, 0.467700, 0.472100, 0.510400, 0.504500, 0.467200, 0.513000, 0.505500, 0.519500, 0.709400, 0.707800, 0.497700, 0.718200, 0.711500 -0.135100, 0.483500, 0.485300, 0.528200, 0.527200, 0.486300, 0.525900, 0.528800, 0.528600, 0.716000, 0.719900, 0.535600, 0.728800, 0.730500 -0.138100, 0.508600, 0.505900, 0.552400, 0.538800, 0.501400, 0.546700, 0.553400, 0.552100, 0.729500, 0.735700, 0.556200, 0.747100, 0.738400 -0.158900, 0.520800, 0.527700, 0.562700, 0.569800, 0.518100, 0.555900, 0.582800, 0.571000, 0.756700, 0.744600, 0.565700, 0.758400, 0.752000 -0.195400, 0.547100, 0.547600, 0.587100, 0.598600, 0.556200, 0.591700, 0.596400, 0.576600, 0.761200, 0.761000, 0.611600, 0.767400, 0.765400 -0.225400, 0.574700, 0.581500, 0.645000, 0.663100, 0.569200, 0.660500, 0.652000, 0.656200, 0.783800, 0.778400, 0.647600, 0.773500, 0.770400 -1.005100, 0.654600, 0.653100, 0.664800, 0.672000, 0.650200, 0.671900, 0.666600, 0.673300, 0.800300, 0.799100, 0.666200, 0.793300, 0.809100 -1.044600, 0.758800, 0.784800, 0.692900, 0.692200, 0.773400, 0.694200, 0.689200, 0.695300, 0.808100, 0.818100, 0.684600, 0.822200, 0.820900 -1.057500, 0.819100, 0.811500, 0.714700, 0.711700, 0.813600, 0.705500, 0.702200, 0.712800, 0.830700, 0.828300, 0.709700, 0.837100, 0.834300 -1.079000, 0.854000, 0.836200, 0.725700, 0.730600, 0.842700, 0.718800, 0.721600, 0.716900, 0.885500, 0.867700, 0.730600, 0.869800, 0.880900 -1.092000, 0.866800, 0.861300, 0.740000, 0.735500, 0.858800, 0.739800, 0.726200, 0.737800, 0.897400, 0.896200, 0.743300, 0.878800, 0.889300 -1.106200, 0.927100, 0.945200, 0.750700, 0.750700, 0.909000, 0.762200, 0.750700, 0.763500, 0.906800, 0.909100, 0.774600, 0.897500, 0.904100 -1.116000, 0.952900, 0.959100, 0.788300, 0.786000, 0.982200, 0.790100, 0.777600, 0.801100, 0.922300, 0.925300, 0.793600, 0.920800, 0.919900 -1.137800, 0.985400, 0.989900, 0.872400, 0.860700, 0.991400, 0.845300, 0.861000, 0.854900, 0.944200, 0.939700, 0.874100, 0.932300, 0.936000 -1.170400, 1.001000, 0.991800, 0.901000, 0.899700, 1.010200, 0.887200, 0.894400, 0.906100, 0.961700, 0.954700, 0.881600, 0.945900, 0.957600 -1.191400, 1.019400, 1.009400, 0.915200, 0.929200, 1.025700, 0.913400, 0.915600, 0.921700, 0.970800, 0.969000, 0.913300, 0.979000, 0.970400 -1.215500, 1.046200, 1.013300, 0.959700, 0.935500, 1.028400, 0.956600, 0.940800, 0.935800, 0.979800, 0.983100, 0.949500, 0.990100, 0.990800 -1.242400, 1.065800, 1.039500, 1.159500, 1.160600, 1.057900, 1.179100, 1.170600, 1.170900, 0.992300, 0.994400, 1.160500, 0.995900, 0.998500 -1.520000, 1.080600, 1.092700, 1.171700, 1.178800, 1.103200, 1.187400, 1.193300, 1.183000, 1.004000, 1.005600, 1.172800, 1.016000, 1.008900 -1.530400, 1.118700, 1.126400, 1.213800, 1.203800, 1.123000, 1.206000, 1.207000, 1.199800, 1.027400, 1.013400, 1.198900, 1.037800, 1.023700 -1.541300, 1.155600, 1.159200, 1.230700, 1.227200, 1.161400, 1.226600, 1.217300, 1.225600, 1.049900, 1.053700, 1.222000, 1.051500, 1.051000 -1.552100, 1.174300, 1.179000, 1.241700, 1.245200, 1.175100, 1.239900, 1.235900, 1.242900, 1.118900, 1.115600, 1.244000, 1.109300, 1.102700 -1.564500, 1.193700, 1.191000, 1.264300, 1.253200, 1.187300, 1.259700, 1.250800, 1.254300, 1.138800, 1.156400, 1.255700, 1.135100, 1.144500 -1.581300, 1.208000, 1.206400, 1.271500, 1.266000, 1.210000, 1.268200, 1.271700, 1.269000, 1.172800, 1.167100, 1.267800, 1.183000, 1.163300 -1.587100, 1.225600, 1.225700, 1.288500, 1.274900, 1.227000, 1.272800, 1.285600, 1.275800, 1.254900, 1.253500, 1.288400, 1.252200, 1.264000 -1.597000, 1.253200, 1.254800, 1.300800, 1.305100, 1.243200, 1.314400, 1.304700, 1.295800, 1.277200, 1.281000, 1.315100, 1.256600, 1.284900 -1.610700, 1.277300, 1.280600, 1.316500, 1.326000, 1.271700, 1.325400, 1.331100, 1.305900, 1.300500, 1.294700, 1.333600, 1.316300, 1.302600 -1.623600, 1.338600, 1.342800, 1.365200, 1.384300, 1.343400, 1.386600, 1.383800, 1.385300, 1.321500, 1.324600, 1.378800, 1.333900, 1.312900 -1.631100, 1.375900, 1.388900, 1.394100, 1.400100, 1.374300, 1.395300, 1.410700, 1.408500, 1.331900, 1.344600, 1.388600, 1.338400, 1.341600 -1.643800, 1.398200, 1.399300, 1.434500, 1.416400, 1.399100, 1.421300, 1.424100, 1.413300, 1.344500, 1.360200, 1.417200, 1.356700, 1.365400 -1.655100, 1.445700, 1.454700, 1.451800, 1.438200, 1.443000, 1.436800, 1.430200, 1.445200, 1.388900, 1.371600, 1.438300, 1.371800, 1.402200 -1.663000, 1.650600, 1.653700, 1.460400, 1.460000, 1.653800, 1.454000, 1.452100, 1.451100, 1.458900, 1.445400, 1.468500, 1.457600, 1.448200 -1.669300, 1.670000, 1.677100, 1.472900, 1.473000, 1.678500, 1.467900, 1.470500, 1.483700, 1.485100, 1.478900, 1.477800, 1.467900, 1.455800 -1.676500, 1.694000, 1.693100, 1.481400, 1.510700, 1.695000, 1.487300, 1.487000, 1.493600, 1.503300, 1.494000, 1.502700, 1.510100, 1.483700 -1.679800, 1.713800, 1.711100, 1.524100, 1.527400, 1.709100, 1.527100, 1.528700, 1.513700, 1.516200, 1.509800, 1.529300, 1.514100, 1.507100 -1.691700, 1.752800, 1.726800, 1.596200, 1.614800, 1.735900, 1.608400, 1.607300, 1.612400, 1.527500, 1.530400, 1.598700, 1.526900, 1.515800 -1.703200, 1.765600, 1.755800, 1.636100, 1.627300, 1.754800, 1.628900, 1.620000, 1.639500, 1.538300, 1.555700, 1.655400, 1.560600, 1.556500 -1.726400, 1.786300, 1.762800, 1.739600, 1.751500, 1.779300, 1.733200, 1.756500, 1.754900, 1.626700, 1.621200, 1.729500, 1.616300, 1.613600 -1.738000, 1.798000, 1.799300, 1.767500, 1.766600, 1.797300, 1.770400, 1.772000, 1.764900, 1.643900, 1.640800, 1.756800, 1.639800, 1.647900 -1.744800, 1.850200, 1.853200, 1.785700, 1.785700, 1.853000, 1.777500, 1.785900, 1.779800, 1.654000, 1.659900, 1.781200, 1.656800, 1.660300 -1.749400, 1.865200, 1.873700, 1.797300, 1.801500, 1.873100, 1.799200, 1.810000, 1.801300, 1.677600, 1.672500, 1.798200, 1.673200, 1.671100 -1.761300, 1.893500, 1.900100, 1.819300, 1.814100, 1.879700, 1.815700, 1.832600, 1.816500, 1.684800, 1.682700, 1.812800, 1.682000, 1.688200 -1.767000, 1.917600, 1.921500, 1.845600, 1.831300, 1.909200, 1.851700, 1.840600, 1.830800, 1.700000, 1.696000, 1.848600, 1.706000, 1.706400 -1.786300, 1.930700, 1.928800, 1.904200, 1.902900, 1.929500, 1.909400, 1.910600, 1.895900, 1.712500, 1.718600, 1.908700, 1.719500, 1.722600 -1.796200, 1.937200, 1.953300, 1.929200, 1.921500, 1.945500, 1.927400, 1.931600, 1.930900, 1.731400, 1.737800, 1.922400, 1.739400, 1.752100 -1.807200, 1.966000, 1.957800, 1.956500, 1.932500, 1.950300, 1.947400, 1.937900, 1.942100, 1.751600, 1.752100, 1.936100, 1.752100, 1.765500 -1.815300, 1.990800, 1.987000, 1.964100, 1.946400, 1.995300, 1.956000, 1.947100, 1.953200, 1.815800, 1.824100, 1.951000, 1.812100, 1.830400 -1.833600, 2.045400, 2.058900, 1.971100, 1.963000, 2.062400, 1.978700, 1.962200, 1.967900, 1.840100, 1.844000, 1.964800, 1.834600, 1.850200 -2.087600, 2.088300, 2.099000, 1.983900, 1.984200, 2.099500, 1.994900, 1.985700, 1.975300, 1.883900, 1.860000, 1.979000, 1.873100, 1.865200 -2.118000, 2.111500, 2.111800, 1.986700, 1.998900, 2.116600, 2.004100, 2.005700, 1.993500, 1.890800, 1.899000, 1.992100, 1.899200, 1.880800 -2.120000, 2.152100, 2.154100, 1.999600, 2.014900, 2.144000, 2.016500, 2.013500, 2.014600, 1.900900, 1.911900, 2.017000, 1.911300, 1.897900 -2.125600, 2.202800, 2.196800, 2.033700, 2.042100, 2.206200, 2.027800, 2.023400, 2.032600, 1.943600, 1.937900, 2.036100, 1.927300, 1.942300 -2.137500, 2.215400, 2.221100, 2.063400, 2.062400, 2.227800, 2.033800, 2.059700, 2.055700, 2.148100, 2.132100, 2.052200, 2.122200, 2.123600 -2.152600, 2.235800, 2.232700, 2.083600, 2.101600, 2.234200, 2.086900, 2.102600, 2.114900, 2.158400, 2.156100, 2.078400, 2.143100, 2.146100 -2.169000, 2.261200, 2.242600, 2.112200, 2.118500, 2.245100, 2.131100, 2.124600, 2.121900, 2.176000, 2.179600, 2.099000, 2.172800, 2.176900 -2.173400, 2.267400, 2.271000, 2.130600, 2.133800, 2.273500, 2.133800, 2.140400, 2.144400, 2.184000, 2.195400, 2.129500, 2.196800, 2.189000 -2.189300, 2.295100, 2.283300, 2.160200, 2.151600, 2.294000, 2.150800, 2.149300, 2.153900, 2.197900, 2.204400, 2.143200, 2.209000, 2.201100 -2.195100, 2.310700, 2.298900, 2.168200, 2.160500, 2.311200, 2.159500, 2.167600, 2.163900, 2.211700, 2.218700, 2.159800, 2.226200, 2.213000 -2.203100, 2.351200, 2.310400, 2.177200, 2.179100, 2.328300, 2.172200, 2.177900, 2.175200, 2.220200, 2.230000, 2.177300, 2.241100, 2.222600 -2.225100, 2.353100, 2.373000, 2.191900, 2.197600, 2.355800, 2.180800, 2.186900, 2.188700, 2.239200, 2.248700, 2.199100, 2.249700, 2.250200 -2.234900, 2.376300, 2.387500, 2.205400, 2.212500, 2.385900, 2.196300, 2.198300, 2.207400, 2.253400, 2.260100, 2.205900, 2.257600, 2.267800 -2.249200, 2.387200, 2.404900, 2.220100, 2.221300, 2.403600, 2.207000, 2.207400, 2.222300, 2.271000, 2.275400, 2.232700, 2.273400, 2.274100 -2.255500, 2.407300, 2.421800, 2.233400, 2.234700, 2.420500, 2.227300, 2.210900, 2.230800, 2.285900, 2.295200, 2.239300, 2.283400, 2.298000 -2.264900, 2.424700, 2.430900, 2.257400, 2.252400, 2.432100, 2.259300, 2.242400, 2.249400, 2.305800, 2.302000, 2.269700, 2.311900, 2.310900 -2.276400, 2.438000, 2.440600, 2.278200, 2.270000, 2.437900, 2.291300, 2.268700, 2.268100, 2.380100, 2.387400, 2.293600, 2.365100, 2.384000 -2.293100, 2.449800, 2.453100, 2.627800, 2.618900, 2.448900, 2.617200, 2.628900, 2.619600, 2.400200, 2.394200, 2.610200, 2.402600, 2.391300 -2.303400, 2.463100, 2.463300, 2.642300, 2.651200, 2.462300, 2.642500, 2.650500, 2.642800, 2.415400, 2.404300, 2.638100, 2.409100, 2.419300 -2.308700, 2.473600, 2.467900, 2.660400, 2.660300, 2.479300, 2.659800, 2.671500, 2.657500, 2.441000, 2.436700, 2.653800, 2.431600, 2.437000 -2.317600, 2.482400, 2.485300, 2.678700, 2.666800, 2.499200, 2.678900, 2.679600, 2.671900, 2.461000, 2.443700, 2.683300, 2.448300, 2.447800 -2.332900, 2.504100, 2.496600, 2.684000, 2.680500, 2.503600, 2.686600, 2.683200, 2.689000, 2.475700, 2.483800, 2.686200, 2.482000, 2.461700 -2.351900, 2.515800, 2.504400, 2.694100, 2.704500, 2.511100, 2.706400, 2.687500, 2.693400, 2.563200, 2.578700, 2.695000, 2.563700, 2.558400 -2.362900, 2.531700, 2.516400, 2.705000, 2.716800, 2.526900, 2.721700, 2.706500, 2.706800, 2.593600, 2.590200, 2.701900, 2.597200, 2.599200 -2.636000, 2.555600, 2.542100, 2.715600, 2.735700, 2.537700, 2.735900, 2.730400, 2.715000, 2.613400, 2.599900, 2.734500, 2.625000, 2.613000 -2.651100, 2.557700, 2.554500, 2.760700, 2.746300, 2.558800, 2.752600, 2.738000, 2.731200, 2.716200, 2.713700, 2.757900, 2.708100, 2.703300 -2.655200, 2.580500, 2.575700, 2.790800, 2.789700, 2.582300, 2.798200, 2.799600, 2.801500, 2.725800, 2.737700, 2.776100, 2.727100, 2.739300 -2.684500, 2.596600, 2.609800, 2.801500, 2.813300, 2.593600, 2.818500, 2.813800, 2.817400, 2.748900, 2.755200, 2.800000, 2.756400, 2.751100 -2.691000, 2.617500, 2.627100, 2.822400, 2.824400, 2.620000, 2.838900, 2.831700, 2.831800, 2.771500, 2.770400, 2.811300, 2.782200, 2.774600 -2.703500, 2.639700, 2.659300, 2.833400, 2.838600, 2.643500, 2.843900, 2.849100, 2.845600, 2.797300, 2.789500, 2.834000, 2.792400, 2.799200 -2.726700, 2.662800, 2.664100, 2.850000, 2.853400, 2.653600, 2.852900, 2.862100, 2.850700, 2.825200, 2.809300, 2.854300, 2.806700, 2.821600 -2.735000, 2.682300, 2.676000, 2.877700, 2.863500, 2.668500, 2.867500, 2.871100, 2.878300, 2.887800, 2.875000, 2.868300, 2.882700, 2.877300 -2.739000, 2.685500, 2.690500, 2.883700, 2.874700, 2.673100, 2.880900, 2.882100, 2.879900, 2.899200, 2.894200, 2.884400, 2.899500, 2.898700 -2.746600, 2.723400, 2.700500, 2.891300, 2.893100, 2.695900, 2.891500, 2.887400, 2.894600, 2.917400, 2.931800, 2.901400, 2.940100, 2.915500 -2.753600, 2.730200, 2.722000, 2.895400, 2.897000, 2.738300, 2.894100, 2.900700, 2.903100, 2.930600, 2.945000, 2.913400, 2.942700, 2.931400 -2.770100, 2.769800, 2.793800, 2.913400, 2.910100, 2.805700, 2.918900, 2.908100, 2.912500, 2.974100, 2.954100, 2.922600, 2.964000, 2.969300 -2.784200, 2.826900, 2.818900, 2.926000, 2.928600, 2.814400, 2.929500, 2.922200, 2.926200, 2.996500, 2.988600, 2.944500, 2.987100, 2.994900 -2.788500, 2.847300, 2.835800, 2.942100, 2.946200, 2.830800, 2.936200, 2.938800, 2.936600, 3.057900, 3.051200, 2.955200, 3.045600, 3.049600 -2.800900, 2.866000, 2.873300, 2.961600, 2.952500, 2.856600, 2.947000, 2.955500, 2.959600, 3.074000, 3.066800, 2.965100, 3.059000, 3.064400 -2.814800, 2.881600, 2.889300, 2.984800, 2.964400, 2.901400, 2.959500, 2.977700, 2.970800, 3.080300, 3.084800, 2.986700, 3.075700, 3.072100 -2.818100, 3.094400, 3.095000, 3.030600, 3.030700, 3.104900, 3.009800, 3.031400, 3.028800, 3.094700, 3.094900, 3.024100, 3.093100, 3.088400 -2.826200, 3.114000, 3.112700, 3.048200, 3.051800, 3.114800, 3.033600, 3.048600, 3.053900, 3.113100, 3.101800, 3.037900, 3.100900, 3.110000 -2.835600, 3.125000, 3.128200, 3.060200, 3.070900, 3.122000, 3.060000, 3.066900, 3.064000, 3.120800, 3.108700, 3.063000, 3.116500, 3.119500 -2.858800, 3.134100, 3.148400, 3.071400, 3.084100, 3.140300, 3.090500, 3.074800, 3.089500, 3.128700, 3.125800, 3.077000, 3.126300, 3.126300 -2.865200, 3.158500, 3.160700, 3.090300, 3.101900, 3.151700, 3.100100, 3.092200, 3.100200, 3.137200, 3.142000, 3.094100, 3.132300, 3.140200 -2.874900, 3.172400, 3.174800, 3.135700, 3.124800, 3.160600, 3.130300, 3.133500, 3.117400, 3.150300, 3.153700, 3.152200, 3.151000, 3.153400 -2.891000, 3.183600, 3.185000, 3.194500, 3.187400, 3.179300, 3.183900, 3.185400, 3.187600, 3.158400, 3.166700, 3.176600, 3.169100, 3.172700 -2.920100, 3.196400, 3.200000, 3.217100, 3.214200, 3.195900, 3.219600, 3.228800, 3.207300, 3.171200, 3.188100, 3.211300, 3.179100, 3.193900 -3.190300, 3.208400, 3.210500, 3.231600, 3.228400, 3.208600, 3.232900, 3.239500, 3.241800, 3.187600, 3.200200, 3.225400, 3.199100, 3.224000 -3.226000, 3.216200, 3.221800, 3.239400, 3.233000, 3.224300, 3.250900, 3.250100, 3.263700, 3.277200, 3.287400, 3.243600, 3.281700, 3.263100 -3.227600, 3.237600, 3.238300, 3.261000, 3.254300, 3.230000, 3.278200, 3.266000, 3.273000, 3.311800, 3.306600, 3.264900, 3.310200, 3.303900 -3.239400, 3.255900, 3.257000, 3.270400, 3.282700, 3.254600, 3.294500, 3.277900, 3.287900, 3.326300, 3.317800, 3.285700, 3.334900, 3.321800 -3.402500, 3.289400, 3.305600, 3.328100, 3.329000, 3.290500, 3.324900, 3.324700, 3.336400, 3.527800, 3.528900, 3.316200, 3.530000, 3.520200 -3.421000, 3.308000, 3.324000, 3.340900, 3.342800, 3.324900, 3.342600, 3.340200, 3.345700, 3.554200, 3.550200, 3.327300, 3.541100, 3.548900 -3.431400, 3.317600, 3.339200, 3.368500, 3.362000, 3.334900, 3.373700, 3.365200, 3.371700, 3.561200, 3.567800, 3.356200, 3.566200, 3.573700 -3.450300, 3.345600, 3.343600, 3.385800, 3.385300, 3.342200, 3.383500, 3.391800, 3.380500, 3.604700, 3.599200, 3.397100, 3.600400, 3.598500 -3.689100, 3.361500, 3.355700, 3.399700, 3.394900, 3.360600, 3.399500, 3.400000, 3.394800, 3.622000, 3.619700, 3.407000, 3.627700, 3.619300 -3.712800, 3.369100, 3.368700, 3.420500, 3.410700, 3.364400, 3.422500, 3.416100, 3.406700, 3.642100, 3.635300, 3.413200, 3.646500, 3.641100 -3.727600, 3.383500, 3.370800, 3.424400, 3.432400, 3.377100, 3.433000, 3.421800, 3.422500, 3.656100, 3.657600, 3.426800, 3.670500, 3.658600 -3.739400, 3.386500, 3.381300, 3.445600, 3.444500, 3.390600, 3.439900, 3.435700, 3.437000, 3.667700, 3.668400, 3.444100, 3.683900, 3.675400 -3.752900, 3.406700, 3.388900, 3.452500, 3.456100, 3.400400, 3.456500, 3.443900, 3.446600, 3.689100, 3.682600, 3.455600, 3.691200, 3.697800 -3.767700, 3.418400, 3.401200, 3.471800, 3.480600, 3.413300, 3.467100, 3.478600, 3.451000, 3.728900, 3.721100, 3.475000, 3.724300, 3.718900 -3.778000, 3.437200, 3.422100, 3.510500, 3.524700, 3.431600, 3.514300, 3.528000, 3.522700, 3.748500, 3.741900, 3.524500, 3.733100, 3.744900 -3.787100, 3.449300, 3.469000, 3.554400, 3.550700, 3.471300, 3.535200, 3.541500, 3.543900, 3.760600, 3.763800, 3.543800, 3.745700, 3.766400 -3.792800, 3.640700, 3.657500, 3.563700, 3.558800, 3.656200, 3.559500, 3.557600, 3.568900, 3.768800, 3.772600, 3.561900, 3.763300, 3.778800 -3.803800, 3.668300, 3.673500, 3.578400, 3.584900, 3.673900, 3.575900, 3.581500, 3.579000, 3.779600, 3.788500, 3.571200, 3.783500, 3.788200 -3.815500, 3.681400, 3.687000, 3.587000, 3.596800, 3.685500, 3.586100, 3.590500, 3.587200, 3.798400, 3.796000, 3.589900, 3.790700, 3.795000 -3.832400, 3.708400, 3.697600, 3.603300, 3.600900, 3.701200, 3.597600, 3.604900, 3.598300, 3.812400, 3.811700, 3.617600, 3.806800, 3.811700 -3.837200, 3.719700, 3.722800, 3.623200, 3.617600, 3.725400, 3.611300, 3.617900, 3.619100, 3.823500, 3.824300, 3.626700, 3.818300, 3.820400 -3.840000, 3.731100, 3.736600, 3.651400, 3.628300, 3.741000, 3.629000, 3.635200, 3.626600, 3.836900, 3.837800, 3.641400, 3.830700, 3.834200 -3.859000, 3.756400, 3.750700, 3.663500, 3.651400, 3.758400, 3.653600, 3.661300, 3.649200, 3.844400, 3.854700, 3.647900, 3.857900, 3.848200 -3.865100, 3.779100, 3.758700, 3.670900, 3.661600, 3.772600, 3.681400, 3.668900, 3.668100, 3.860100, 3.868800, 3.664200, 3.868700, 3.857400 -3.870500, 3.804500, 3.805400, 3.686600, 3.698300, 3.808900, 3.700000, 3.696500, 3.704600, 3.875900, 3.874600, 3.692300, 3.874900, 3.873600 -3.879400, 3.826200, 3.829100, 3.708600, 3.708900, 3.825100, 3.717200, 3.707700, 3.707700, 3.881400, 3.881700, 3.708300, 3.889900, 3.878600 -3.896300, 3.845400, 3.848800, 3.772700, 3.770000, 3.849000, 3.750700, 3.761000, 3.772700, 3.888100, 3.891900, 3.773400, 3.907000, 3.896300 -3.910700, 3.871900, 3.855000, 3.796400, 3.802400, 3.866200, 3.813600, 3.795300, 3.808600, 3.907800, 3.915400, 3.805700, 3.915700, 3.915200 -3.912400, 3.885500, 3.866100, 3.904300, 3.905500, 3.873900, 3.902700, 3.899500, 3.906500, 3.966400, 3.959600, 3.903000, 3.963200, 3.972400 -3.921900, 3.890300, 3.877100, 3.918500, 3.914600, 3.883100, 3.916200, 3.904800, 3.910600, 3.986100, 3.982700, 3.921200, 3.980300, 3.990000 -3.944200, 3.904300, 3.893400, 3.993300, 4.005800, 3.894300, 4.000600, 3.996600, 3.994600, 4.006900, 4.001600, 3.971000, 3.994200, 4.000100 -3.952900, 3.912900, 3.910900, 4.013000, 4.017100, 3.913800, 4.013000, 4.005400, 4.018600, 4.021700, 4.027300, 4.008500, 4.028000, 4.013000 -4.150600, 3.933200, 3.926000, 4.024100, 4.030800, 3.922600, 4.031500, 4.034800, 4.043800, 4.031700, 4.043300, 4.031900, 4.049900, 4.019800 -4.160700, 3.953600, 3.940000, 4.056200, 4.056100, 3.945500, 4.050200, 4.051000, 4.055400, 4.068300, 4.070600, 4.044600, 4.065500, 4.069000 -4.176400, 3.965600, 3.953800, 4.063500, 4.060900, 3.950200, 4.071000, 4.064800, 4.068400, 4.114200, 4.116100, 4.078600, 4.117500, 4.101700 -4.184500, 3.986900, 3.974200, 4.086300, 4.087000, 3.971000, 4.084700, 4.091500, 4.085300, 4.120900, 4.121700, 4.091500, 4.125600, 4.121000 -4.194000, 4.004100, 4.019700, 4.188200, 4.196600, 4.022900, 4.194500, 4.204100, 4.198400, 4.152700, 4.135400, 4.181700, 4.145300, 4.139400 -4.197600, 4.024200, 4.025900, 4.207800, 4.209600, 4.035400, 4.200800, 4.214500, 4.204300, 4.184800, 4.206400, 4.210900, 4.188300, 4.193000 -4.199500, 4.041000, 4.034400, 4.235600, 4.228900, 4.046500, 4.219500, 4.224600, 4.232600, 4.210300, 4.217900, 4.222700, 4.218200, 4.219200 -4.213200, 4.057300, 4.056100, 4.242700, 4.241300, 4.060900, 4.234300, 4.240300, 4.241000, 4.235900, 4.226300, 4.228800, 4.228000, 4.226300 -4.221300, 4.063100, 4.076800, 4.260100, 4.251300, 4.068200, 4.251900, 4.253900, 4.255100, 4.251400, 4.242000, 4.254200, 4.235500, 4.247900 -4.237200, 4.078800, 4.085100, 4.269400, 4.265400, 4.080300, 4.271900, 4.265100, 4.260400, 4.257000, 4.259000, 4.269000, 4.267100, 4.265600 -4.248300, 4.087800, 4.098500, 4.280900, 4.281700, 4.092600, 4.277800, 4.271700, 4.271300, 4.268000, 4.270700, 4.278700, 4.288500, 4.271800 -4.252100, 4.107200, 4.100600, 4.295100, 4.289700, 4.103500, 4.289400, 4.281000, 4.293400, 4.298500, 4.293400, 4.286400, 4.295700, 4.297400 -4.256800, 4.116900, 4.116900, 4.306000, 4.298100, 4.122100, 4.299800, 4.297400, 4.298900, 4.309200, 4.317200, 4.295600, 4.298000, 4.310300 -4.269700, 4.131900, 4.141000, 4.316200, 4.317400, 4.128100, 4.308100, 4.313800, 4.308800, 4.324000, 4.325800, 4.319500, 4.317600, 4.319600 -4.277400, 4.149900, 4.154900, 4.328800, 4.319600, 4.143400, 4.319100, 4.320100, 4.324900, 4.337400, 4.344100, 4.335700, 4.335300, 4.331700 -4.281200, 4.171300, 4.173800, 4.331300, 4.334400, 4.179600, 4.335100, 4.332300, 4.327300, 4.345900, 4.348200, 4.346900, 4.344100, 4.352900 -4.282800, 4.195200, 4.222100, 4.341900, 4.341700, 4.200200, 4.350200, 4.351600, 4.348300, 4.360600, 4.363100, 4.358400, 4.359500, 4.362500 -4.290500, 4.488900, 4.517400, 4.362300, 4.359700, 4.504900, 4.362500, 4.367500, 4.370400, 4.375900, 4.375300, 4.361900, 4.381500, 4.371800 -4.303100, 4.532800, 4.523600, 4.367300, 4.368000, 4.519300, 4.373300, 4.376200, 4.374100, 4.389800, 4.387200, 4.376100, 4.386500, 4.392600 -4.322100, 4.554000, 4.548400, 4.392800, 4.395900, 4.543700, 4.384600, 4.390800, 4.399300, 4.407200, 4.399300, 4.411000, 4.402000, 4.404100 -4.322700, 4.565300, 4.568700, 4.484900, 4.499900, 4.556200, 4.475100, 4.488500, 4.480700, 4.445100, 4.444200, 4.497600, 4.424000, 4.445800 -4.335300, 4.571300, 4.573200, 4.552400, 4.561400, 4.587400, 4.546100, 4.552900, 4.563500, 4.474700, 4.461400, 4.551800, 4.447600, 4.455200 -4.343900, 4.594500, 4.590400, 4.559100, 4.568500, 4.596200, 4.568200, 4.566000, 4.577900, 4.480700, 4.479400, 4.566600, 4.469000, 4.481300 -4.353300, 4.606900, 4.607700, 4.585300, 4.593600, 4.617000, 4.598200, 4.599000, 4.599100, 4.493300, 4.497400, 4.572500, 4.490600, 4.488300 -4.424400, 4.635700, 4.621700, 4.611400, 4.608400, 4.647400, 4.614500, 4.613600, 4.614700, 4.505800, 4.501300, 4.608300, 4.501400, 4.513800 -4.442200, 4.739500, 4.744100, 4.627100, 4.613200, 4.723200, 4.635100, 4.634400, 4.626700, 4.518500, 4.511900, 4.617800, 4.509900, 4.517800 -4.469000, 4.755800, 4.759200, 4.639900, 4.629500, 4.760800, 4.644600, 4.649500, 4.632200, 4.525700, 4.523200, 4.638400, 4.523200, 4.527100 -4.472500, 4.769600, 4.769200, 4.651900, 4.635400, 4.774300, 4.661500, 4.653500, 4.658400, 4.533500, 4.532800, 4.651200, 4.532600, 4.540000 -4.482300, 4.785200, 4.783000, 4.669600, 4.663300, 4.788700, 4.672500, 4.666800, 4.671300, 4.547600, 4.540500, 4.665900, 4.546200, 4.548200 -4.492500, 4.813100, 4.802500, 4.681700, 4.695500, 4.797900, 4.694400, 4.678000, 4.685000, 4.558700, 4.551100, 4.683600, 4.554800, 4.561000 -4.494900, 4.823700, 4.816300, 4.700400, 4.700400, 4.814200, 4.700300, 4.703400, 4.694400, 4.571900, 4.569700, 4.698000, 4.569500, 4.568400 -4.501200, 4.835800, 4.836500, 4.714300, 4.724000, 4.826300, 4.715300, 4.712200, 4.716100, 4.575300, 4.577500, 4.718800, 4.579900, 4.577300 -4.505900, 4.847200, 4.853200, 4.715800, 4.735000, 4.849200, 4.721100, 4.722800, 4.735100, 4.581300, 4.590800, 4.725700, 4.591700, 4.590100 -4.518800, 4.874900, 4.897200, 4.740100, 4.745900, 4.885500, 4.730900, 4.736900, 4.738400, 4.592500, 4.600300, 4.740500, 4.608600, 4.598400 -4.526600, 4.891100, 4.905700, 4.752700, 4.753300, 4.902100, 4.749900, 4.755200, 4.746000, 4.604600, 4.607500, 4.751500, 4.617500, 4.611300 -4.538300, 4.916500, 4.926400, 4.769400, 4.778400, 4.922800, 4.763000, 4.764400, 4.762900, 4.617500, 4.629000, 4.764200, 4.624100, 4.614700 -4.544400, 4.945500, 4.930200, 4.796300, 4.790500, 4.926300, 4.786900, 4.795100, 4.786000, 4.624700, 4.637500, 4.792000, 4.633400, 4.625100 -4.550200, 4.949600, 4.944300, 4.822000, 4.808000, 4.939200, 4.814800, 4.810900, 4.804100, 4.648100, 4.643700, 4.807000, 4.644300, 4.645300 -4.558600, 4.964800, 4.966400, 4.832100, 4.842400, 4.961300, 4.835300, 4.833400, 4.819100, 4.657900, 4.650200, 4.840400, 4.649900, 4.654300 -4.561400, 4.976100, 4.976400, 4.849600, 4.856400, 4.983900, 4.862300, 4.867100, 4.850500, 4.676100, 4.669500, 4.853900, 4.677700, 4.675900 -4.570800, 4.989600, 4.989800, 4.895400, 4.886100, 4.995400, 4.891600, 4.874400, 4.888600, 4.685800, 4.676700, 4.892400, 4.695600, 4.708600 -4.577800, 4.999300, 5.007400, 4.918400, 4.914100, 5.008500, 4.909200, 4.917800, 4.922500, 4.830100, 4.829400, 4.911600, 4.836200, 4.828300 -4.590400, 5.015500, 5.016000, 4.932300, 4.931800, 5.013700, 4.923300, 4.936100, 4.928300, 4.852100, 4.878900, 4.928900, 4.853500, 4.873900 -4.599100, 5.046300, 5.034500, 4.937300, 4.941400, 5.039000, 4.946200, 4.946800, 4.943100, 4.905100, 4.885200, 4.943700, 4.905100, 4.894000 -4.605600, 5.060900, 5.059400, 4.952400, 4.959900, 5.047900, 4.962800, 4.957000, 4.962400, 4.966400, 4.973100, 4.960000, 4.958000, 4.967100 -4.612000, 5.072700, 5.081600, 4.969300, 4.975200, 5.077000, 4.972800, 4.981400, 4.967900, 4.977100, 4.980400, 4.977900, 4.972100, 4.973000 -4.622300, 5.090500, 5.094500, 4.977600, 4.989000, 5.091900, 4.993900, 4.988700, 4.991400, 4.992000, 4.993400, 4.995900, 4.997600, 4.992100 -4.640100, 5.109200, 5.112300, 4.998300, 4.997800, 5.102400, 5.013100, 4.995700, 5.002500, 4.997800, 5.008100, 4.997800, 5.006900, 5.004400 -4.895800, 5.118200, 5.129800, 5.015500, 5.007300, 5.108800, 5.018200, 5.008400, 5.015400, 5.022000, 5.012500, 5.009200, 5.012900, 5.019600 -4.911100, 5.127900, 5.133500, 5.029800, 5.017600, 5.136200, 5.031000, 5.034900, 5.031300, 5.036600, 5.021200, 5.034000, 5.026000, 5.043200 -4.917400, 5.149500, 5.152000, 5.045400, 5.039800, 5.151700, 5.038600, 5.040100, 5.040800, 5.082300, 5.065900, 5.037600, 5.068600, 5.074500 -5.333300, 5.165500, 5.156100, 5.053900, 5.052400, 5.159100, 5.058900, 5.047300, 5.055000, 5.089400, 5.084000, 5.057400, 5.076800, 5.088400 -5.340700, 5.175700, 5.171700, 5.062900, 5.063700, 5.168200, 5.065100, 5.064600, 5.073900, 5.099400, 5.097100, 5.074100, 5.105900, 5.092700 -5.360200, 5.188700, 5.183800, 5.090300, 5.092900, 5.183900, 5.089300, 5.081600, 5.080100, 5.106300, 5.106200, 5.081300, 5.115200, 5.103200 -5.371800, 5.198100, 5.195200, 5.112100, 5.106900, 5.197900, 5.096300, 5.106700, 5.097600, 5.118800, 5.120800, 5.093600, 5.128700, 5.120400 -5.381300, 5.218500, 5.218900, 5.123200, 5.119000, 5.225200, 5.109700, 5.109600, 5.116800, 5.142800, 5.139400, 5.121000, 5.154400, 5.126500 -5.398900, 5.242000, 5.237800, 5.179200, 5.173400, 5.241400, 5.171600, 5.182200, 5.176100, 5.154400, 5.157100, 5.168000, 5.162300, 5.159100 -5.410000, 5.278400, 5.284200, 5.215100, 5.208100, 5.278800, 5.194000, 5.199200, 5.195000, 5.170800, 5.175800, 5.198700, 5.181400, 5.171100 -5.418300, 5.290700, 5.294000, 5.311500, 5.320600, 5.302200, 5.317100, 5.307000, 5.302100, 5.198600, 5.187200, 5.308000, 5.201700, 5.195700 -5.430200, 5.309600, 5.323300, 5.323500, 5.328900, 5.311600, 5.331500, 5.325600, 5.327000, 5.207400, 5.208500, 5.327300, 5.222500, 5.211300 -5.434300, 5.332000, 5.331200, 5.359000, 5.348900, 5.328500, 5.348000, 5.349700, 5.352200, 5.218000, 5.237600, 5.353900, 5.227700, 5.225000 -5.454600, 5.343200, 5.343100, 5.368500, 5.366500, 5.341100, 5.373700, 5.360600, 5.376500, 5.237000, 5.243000, 5.362300, 5.243100, 5.231900 -5.478600, 5.356700, 5.353600, 5.387100, 5.386100, 5.352100, 5.381400, 5.375800, 5.388500, 5.247800, 5.253300, 5.381300, 5.251900, 5.258100 -5.767800, 5.365700, 5.373000, 5.398500, 5.402000, 5.383800, 5.402300, 5.413600, 5.413900, 5.262200, 5.276400, 5.413400, 5.266900, 5.274100 -5.788600, 5.387500, 5.390100, 5.415000, 5.428100, 5.391100, 5.417500, 5.437400, 5.417500, 5.280000, 5.298200, 5.434600, 5.273400, 5.279500 -5.805200, 5.406800, 5.413800, 5.466900, 5.459700, 5.411800, 5.456100, 5.459100, 5.463300, 5.302600, 5.304400, 5.466100, 5.311700, 5.295300 -5.843900, 5.422100, 5.429700, 5.494800, 5.511400, 5.427100, 5.517600, 5.480200, 5.508800, 5.312200, 5.310300, 5.506500, 5.318400, 5.321700 -5.849000, 5.436500, 5.441500, 5.536400, 5.539600, 5.436300, 5.537400, 5.534300, 5.541400, 5.331900, 5.325300, 5.548900, 5.327900, 5.333000 -5.866900, 5.459700, 5.447800, 5.559700, 5.557800, 5.457100, 5.557000, 5.543100, 5.550600, 5.439900, 5.427000, 5.559700, 5.422000, 5.413000 -5.876000, 5.464300, 5.461200, 5.570700, 5.566400, 5.463500, 5.571400, 5.574000, 5.570400, 5.456700, 5.448300, 5.573900, 5.445600, 5.442400 -5.880900, 5.474400, 5.473900, 5.585100, 5.595700, 5.483200, 5.588200, 5.593200, 5.585400, 5.466500, 5.460400, 5.588300, 5.459900, 5.465100 -5.884200, 5.490400, 5.489100, 5.617400, 5.617700, 5.492100, 5.627600, 5.619900, 5.616000, 5.492600, 5.495100, 5.626600, 5.480100, 5.491400 -5.886900, 5.498700, 5.495200, 5.633800, 5.629000, 5.498300, 5.641900, 5.634700, 5.640100, 5.510100, 5.507100, 5.643900, 5.501900, 5.506300 -5.907100, 5.511100, 5.503800, 5.642200, 5.651500, 5.515000, 5.658200, 5.662900, 5.652600, 5.524900, 5.516800, 5.647300, 5.543900, 5.532300 -5.912500, 5.518900, 5.514000, 5.670500, 5.666300, 5.522500, 5.671600, 5.684100, 5.665800, 5.536100, 5.561800, 5.668900, 5.553600, 5.544100 -5.924400, 5.538000, 5.524400, 5.706700, 5.683300, 5.532400, 5.687400, 5.696400, 5.696600, 5.553600, 5.571000, 5.686000, 5.566900, 5.551000 -5.936100, 5.545300, 5.536200, 5.716900, 5.708100, 5.542400, 5.703700, 5.710300, 5.704300, 5.576500, 5.594200, 5.703800, 5.574200, 5.572800 -5.936500, 5.565600, 5.551200, 5.725100, 5.720900, 5.555000, 5.716700, 5.719000, 5.711300, 5.597700, 5.599800, 5.722400, 5.579300, 5.592100 -5.950700, 5.581300, 5.565700, 5.737500, 5.729900, 5.562800, 5.721700, 5.734400, 5.726500, 5.611200, 5.616200, 5.727400, 5.585700, 5.610100 -5.956000, 5.601500, 5.576200, 5.746400, 5.746700, 5.584900, 5.747200, 5.744900, 5.736500, 5.637000, 5.625500, 5.736500, 5.637600, 5.634600 -5.961600, 5.612400, 5.617300, 5.760200, 5.757800, 5.618200, 5.760200, 5.754800, 5.752900, 5.652300, 5.642100, 5.752700, 5.653700, 5.641600 -5.970000, 5.629000, 5.642100, 5.769500, 5.771200, 5.632200, 5.776500, 5.775700, 5.767700, 5.670600, 5.664300, 5.768100, 5.669700, 5.665800 -5.974100, 5.656200, 5.660000, 5.788500, 5.793700, 5.651900, 5.783700, 5.791100, 5.786200, 5.686300, 5.678300, 5.786900, 5.695200, 5.677000 -5.979900, 5.683800, 5.694100, 5.802400, 5.801700, 5.672600, 5.794800, 5.794700, 5.808800, 5.717900, 5.701600, 5.796300, 5.716600, 5.708300 -5.985500, 5.705100, 5.704100, 5.810300, 5.819000, 5.707800, 5.813300, 5.823900, 5.818300, 5.771500, 5.778100, 5.833000, 5.776200, 5.772500 -5.999800, 5.806400, 5.818400, 5.841200, 5.838500, 5.818500, 5.844700, 5.850900, 5.844100, 5.780600, 5.794700, 5.845600, 5.782600, 5.787700 -6.004800, 5.828100, 5.831600, 5.870200, 5.861900, 5.830100, 5.861100, 5.868300, 5.871900, 5.798300, 5.798400, 5.863800, 5.796900, 5.801600 -6.013400, 5.928500, 5.961900, 5.882600, 5.895400, 5.953300, 5.883800, 5.880700, 5.885400, 5.813600, 5.811900, 5.889400, 5.817400, 5.813400 -6.021300, 5.983100, 5.986400, 5.903800, 5.905600, 5.988000, 5.925500, 5.906200, 5.915500, 5.846800, 5.828400, 5.893900, 5.835500, 5.853600 -6.029400, 6.005200, 6.005500, 5.926300, 5.928300, 6.002400, 5.943200, 5.927000, 5.927100, 5.852600, 5.859900, 5.925100, 5.853800, 5.865300 -6.042800, 6.014800, 6.016600, 5.971500, 5.957700, 6.019500, 5.951800, 5.959700, 5.953400, 5.877300, 5.878500, 5.966200, 5.878500, 5.872400 -6.048300, 6.047400, 6.031600, 5.994900, 5.992100, 6.029200, 5.985000, 5.984100, 5.969000, 5.885700, 5.883000, 5.979300, 5.887200, 5.891600 -6.053000, 6.070300, 6.046700, 6.000700, 6.000500, 6.049300, 5.989400, 5.991300, 6.000700, 5.897300, 5.893800, 6.001800, 5.907600, 5.907500 -6.062900, 6.078300, 6.063800, 6.018600, 6.022900, 6.063800, 6.009200, 6.015100, 6.023200, 5.918300, 5.927000, 6.010600, 5.914700, 5.919200 -6.079200, 6.082500, 6.081200, 6.032700, 6.038400, 6.084100, 6.034500, 6.024600, 6.033400, 5.930500, 5.931800, 6.025400, 5.924500, 5.927300 -6.087900, 6.110900, 6.093600, 6.044600, 6.039200, 6.104100, 6.042900, 6.054600, 6.045000, 5.950700, 5.944000, 6.044900, 5.949500, 5.946100 -6.105400, 6.143100, 6.116900, 6.065200, 6.052000, 6.134300, 6.070400, 6.063500, 6.068200, 5.970500, 5.952900, 6.055300, 5.962600, 5.952700 -6.123600, 6.156900, 6.170500, 6.071700, 6.083700, 6.150700, 6.074300, 6.079300, 6.087800, 5.983100, 5.968100, 6.088900, 5.975000, 5.969900 -6.144800, 6.168000, 6.190400, 6.094100, 6.093200, 6.171100, 6.090700, 6.108000, 6.101300, 5.987200, 5.985500, 6.109500, 5.989200, 5.977700 -6.165100, 6.205600, 6.205700, 6.101800, 6.111500, 6.213300, 6.105200, 6.117000, 6.108700, 5.998200, 6.004300, 6.113400, 5.998800, 6.009300 -6.189100, 6.234400, 6.223300, 6.116000, 6.130200, 6.234000, 6.123100, 6.118700, 6.117100, 6.008900, 6.014400, 6.133900, 6.006200, 6.014100 -6.195200, 6.252200, 6.268400, 6.123700, 6.147400, 6.277900, 6.143600, 6.142600, 6.139600, 6.027200, 6.025000, 6.139400, 6.028000, 6.031100 -6.358900, 6.290600, 6.293500, 6.176100, 6.160900, 6.291900, 6.166900, 6.151100, 6.162400, 6.032400, 6.032800, 6.158800, 6.039600, 6.047400 -6.372900, 6.309100, 6.334100, 6.229500, 6.212400, 6.306100, 6.211900, 6.213600, 6.233200, 6.049900, 6.052400, 6.213900, 6.051700, 6.054100 -6.375200, 6.328600, 6.340000, 6.240800, 6.234800, 6.324800, 6.250900, 6.250000, 6.239400, 6.070400, 6.059200, 6.228300, 6.065500, 6.080200 -6.397900, 6.343400, 6.355300, 6.258400, 6.247400, 6.361100, 6.263600, 6.260800, 6.266700, 6.369600, 6.378900, 6.248900, 6.373900, 6.380800 -6.408800, 6.372500, 6.371300, 6.265700, 6.264300, 6.389400, 6.272900, 6.279400, 6.271000, 6.398000, 6.412300, 6.270700, 6.392800, 6.401400 -6.421800, 6.408400, 6.403200, 6.276000, 6.280600, 6.398200, 6.291300, 6.286000, 6.283500, 6.418400, 6.417900, 6.289700, 6.421500, 6.417100 -6.429400, 6.429400, 6.433800, 6.283500, 6.292900, 6.425000, 6.304100, 6.299400, 6.292800, 6.439400, 6.439700, 6.297200, 6.434700, 6.432100 -6.458500, 6.508700, 6.495700, 6.306300, 6.311700, 6.495200, 6.321400, 6.315500, 6.320400, 6.446700, 6.448800, 6.311200, 6.454700, 6.447200 -6.470800, 6.528600, 6.520900, 6.328700, 6.320300, 6.524300, 6.331800, 6.327500, 6.328900, 6.468800, 6.471000, 6.338100, 6.466300, 6.473700 -6.476100, 6.541800, 6.533200, 6.352100, 6.343400, 6.537100, 6.353400, 6.355400, 6.350500, 6.509200, 6.504700, 6.345700, 6.507400, 6.502900 -6.489700, 6.562800, 6.545500, 6.366400, 6.355100, 6.548400, 6.362900, 6.368700, 6.364500, 6.522400, 6.514100, 6.361100, 6.517700, 6.520100 -6.512300, 6.571200, 6.583800, 6.377300, 6.378200, 6.564900, 6.389400, 6.383800, 6.385600, 6.533700, 6.530400, 6.380700, 6.528600, 6.530300 -6.622300, 6.596500, 6.598700, 6.396400, 6.389800, 6.613900, 6.399800, 6.391800, 6.400600, 6.595500, 6.594900, 6.389800, 6.586000, 6.578600 -6.637800, 6.625600, 6.617200, 6.401100, 6.412200, 6.625700, 6.408500, 6.407300, 6.406700, 6.602300, 6.602500, 6.401700, 6.605000, 6.600700 -6.644100, 6.632400, 6.633200, 6.416400, 6.418000, 6.637600, 6.421100, 6.417400, 6.426000, 6.618400, 6.617600, 6.416100, 6.614500, 6.616400 -6.668600, 6.656000, 6.646700, 6.425200, 6.432600, 6.655900, 6.432100, 6.435100, 6.430100, 6.631700, 6.624300, 6.427400, 6.631000, 6.636300 -6.677000, 6.661800, 6.654500, 6.448800, 6.439100, 6.662200, 6.445300, 6.446500, 6.442100, 6.639700, 6.636500, 6.441200, 6.637500, 6.655000 -6.698900, 6.678000, 6.669500, 6.457900, 6.454400, 6.670600, 6.450800, 6.452500, 6.457000, 6.658200, 6.643300, 6.452700, 6.657400, 6.664800 -6.704200, 6.685600, 6.673600, 6.465200, 6.467400, 6.679400, 6.467200, 6.466300, 6.465600, 6.672700, 6.663700, 6.459800, 6.671700, 6.670700 -6.711600, 6.692400, 6.679700, 6.479600, 6.486100, 6.689300, 6.482400, 6.482700, 6.479800, 6.682300, 6.675000, 6.475700, 6.686700, 6.679600 -6.733000, 6.696400, 6.692900, 6.492500, 6.494100, 6.705800, 6.493500, 6.497000, 6.491300, 6.691400, 6.687500, 6.494300, 6.693100, 6.700500 -6.739400, 6.704300, 6.705600, 6.504200, 6.511700, 6.714000, 6.500100, 6.511000, 6.500900, 6.704200, 6.710400, 6.505600, 6.709100, 6.702100 -6.744600, 6.714500, 6.714200, 6.514700, 6.520700, 6.722000, 6.515500, 6.518700, 6.516100, 6.726200, 6.723000, 6.518100, 6.729600, 6.724400 -6.750700, 6.724300, 6.725600, 6.535400, 6.538800, 6.731500, 6.532000, 6.530000, 6.535800, 6.741300, 6.744700, 6.531300, 6.740900, 6.740300 -6.814500, 6.739100, 6.734900, 6.570900, 6.558500, 6.739800, 6.549900, 6.556200, 6.557600, 6.781400, 6.792800, 6.562700, 6.777800, 6.793400 -6.853800, 6.747700, 6.752700, 6.583600, 6.579300, 6.745300, 6.577600, 6.576400, 6.568700, 6.809700, 6.809800, 6.592100, 6.817700, 6.810000 -6.862300, 6.758200, 6.756200, 6.601100, 6.591400, 6.752700, 6.590100, 6.596500, 6.589500, 6.820400, 6.814900, 6.605900, 6.819800, 6.822700 -6.872300, 6.764100, 6.763500, 6.616900, 6.620500, 6.761500, 6.607500, 6.602900, 6.616600, 6.842300, 6.849300, 6.615400, 6.834500, 6.846200 -6.892100, 6.772000, 6.768500, 6.640500, 6.647400, 6.772700, 6.646000, 6.647900, 6.645300, 6.852800, 6.858100, 6.635900, 6.858500, 6.863300 -6.907700, 6.778900, 6.779100, 6.683200, 6.664300, 6.781800, 6.683100, 6.677800, 6.682600, 6.873600, 6.871400, 6.676300, 6.872900, 6.874800 -6.919000, 6.788500, 6.789700, 6.700200, 6.702300, 6.788900, 6.693300, 6.696800, 6.695400, 6.898500, 6.898400, 6.713600, 6.891700, 6.892400 -6.924500, 6.794800, 6.795700, 6.771600, 6.771600, 6.804900, 6.743800, 6.747300, 6.755100, 6.908500, 6.924300, 6.764400, 6.910300, 6.913800 -6.927800, 6.814800, 6.807500, 6.839600, 6.836900, 6.812500, 6.836100, 6.826500, 6.826600, 6.925000, 6.937100, 6.829900, 6.925200, 6.937600 -6.941600, 6.822700, 6.822900, 6.861100, 6.867400, 6.822600, 6.861000, 6.852300, 6.866000, 6.933700, 6.953000, 6.864700, 6.942700, 6.951900 -6.950400, 6.831100, 6.832200, 6.951900, 6.956700, 6.831200, 6.948500, 6.968900, 6.940400, 6.952900, 6.957600, 6.947300, 6.957700, 6.960300 -6.959300, 6.846900, 6.855100, 6.970900, 6.977700, 6.843100, 6.968200, 6.979300, 6.969900, 6.972100, 6.972800, 6.972800, 6.969100, 6.967700 -6.968500, 6.853600, 6.870600, 6.991000, 6.983500, 6.866300, 6.990300, 6.996300, 6.990400, 6.978700, 6.985500, 6.991500, 6.984100, 6.983600 -6.985700, 6.871900, 6.881000, 7.003200, 7.004400, 6.871900, 6.999200, 7.005400, 6.999900, 6.997800, 7.002100, 7.007100, 6.994200, 6.994900 -6.993000, 6.896900, 6.887300, 7.029500, 7.032900, 6.889700, 7.039100, 7.049300, 7.033800, 7.038000, 7.030100, 7.028200, 7.017500, 7.025500 -6.999500, 6.906600, 6.905400, 7.050000, 7.054300, 6.900200, 7.062900, 7.055900, 7.054400, 7.079300, 7.085100, 7.057000, 7.080000, 7.065600 -7.007000, 6.924900, 6.914300, 7.080400, 7.077100, 6.924200, 7.072600, 7.062300, 7.085000, 7.108600, 7.103300, 7.070300, 7.106400, 7.090600 -7.020300, 6.939600, 6.941900, 7.095200, 7.093600, 6.944200, 7.087700, 7.090000, 7.097700, 7.114600, 7.122600, 7.079400, 7.121500, 7.102900 -7.023900, 6.970400, 6.960500, 7.100400, 7.114000, 6.965800, 7.103700, 7.110500, 7.114400, 7.128900, 7.134800, 7.103000, 7.131000, 7.129800 -7.031900, 6.979900, 6.977300, 7.118000, 7.124800, 7.006900, 7.121400, 7.120600, 7.116700, 7.141100, 7.148000, 7.120000, 7.144700, 7.144900 -7.038800, 7.024700, 7.008400, 7.134900, 7.132100, 7.016500, 7.126500, 7.133200, 7.133900, 7.157200, 7.160500, 7.132600, 7.155500, 7.156300 -7.044600, 7.041100, 7.026100, 7.149800, 7.146700, 7.033500, 7.151800, 7.151000, 7.145400, 7.183100, 7.181800, 7.156500, 7.185800, 7.184900 -7.052200, 7.046300, 7.052300, 7.162500, 7.156300, 7.055700, 7.171200, 7.165700, 7.154000, 7.199700, 7.194600, 7.169300, 7.201700, 7.188000 -7.062600, 7.062300, 7.067200, 7.185700, 7.183400, 7.075300, 7.192000, 7.172700, 7.177500, 7.212000, 7.202100, 7.176200, 7.217600, 7.203700 -7.067300, 7.087800, 7.092300, 7.190900, 7.206600, 7.085500, 7.205600, 7.192600, 7.213800, 7.223200, 7.217500, 7.208700, 7.221400, 7.211800 -7.076300, 7.097000, 7.102600, 7.225000, 7.213600, 7.104700, 7.232900, 7.215900, 7.226100, 7.234200, 7.230200, 7.234900, 7.240700, 7.240900 -7.090700, 7.107900, 7.120300, 7.238400, 7.262500, 7.117500, 7.245500, 7.253600, 7.255700, 7.246700, 7.238500, 7.255100, 7.250600, 7.255500 -7.098400, 7.134400, 7.131400, 7.293000, 7.289300, 7.127700, 7.259200, 7.272300, 7.273400, 7.269600, 7.278200, 7.288700, 7.258800, 7.268600 -7.104300, 7.140000, 7.156300, 7.345000, 7.361300, 7.156000, 7.337200, 7.336300, 7.362200, 7.285500, 7.291600, 7.342100, 7.280900, 7.296900 -7.117700, 7.171900, 7.180700, 7.369500, 7.374700, 7.184500, 7.357600, 7.360700, 7.378800, 7.301600, 7.311900, 7.367400, 7.302600, 7.315500 -7.136900, 7.191400, 7.197900, 7.385700, 7.389900, 7.208100, 7.382300, 7.375500, 7.384700, 7.376200, 7.373900, 7.386300, 7.381300, 7.382200 -7.142500, 7.229500, 7.220200, 7.407000, 7.399600, 7.210800, 7.407600, 7.409300, 7.414700, 7.383900, 7.391800, 7.413100, 7.387700, 7.401100 -7.146600, 7.253800, 7.255100, 7.423400, 7.416600, 7.244800, 7.433800, 7.420900, 7.426400, 7.403000, 7.400400, 7.426600, 7.412300, 7.404100 -7.164400, 7.264300, 7.284500, 7.441300, 7.443000, 7.249800, 7.445700, 7.443000, 7.441500, 7.430300, 7.413500, 7.444800, 7.419400, 7.410500 -7.182300, 7.408000, 7.419800, 7.462200, 7.453100, 7.418600, 7.463800, 7.466000, 7.452200, 7.434300, 7.424500, 7.458500, 7.429800, 7.424500 -7.203100, 7.437200, 7.429800, 7.470700, 7.474900, 7.428400, 7.480000, 7.476500, 7.470900, 7.445500, 7.437200, 7.474200, 7.450600, 7.437700 -7.263800, 7.455500, 7.452200, 7.486400, 7.493500, 7.449900, 7.501100, 7.494600, 7.481200, 7.456800, 7.451500, 7.490800, 7.458500, 7.449300 -7.277700, 7.463200, 7.470100, 7.503800, 7.504100, 7.460700, 7.510600, 7.518400, 7.508300, 7.465600, 7.463200, 7.508600, 7.463400, 7.461300 -7.292100, 7.549200, 7.539400, 7.520800, 7.529700, 7.548200, 7.526900, 7.540400, 7.523900, 7.475500, 7.467900, 7.532200, 7.481500, 7.477100 -7.300600, 7.560300, 7.553300, 7.536300, 7.545100, 7.553800, 7.543600, 7.549700, 7.539800, 7.516000, 7.528700, 7.543100, 7.499100, 7.505500 -7.304800, 7.569300, 7.574900, 7.561600, 7.558000, 7.569300, 7.547000, 7.562400, 7.552500, 7.534500, 7.535000, 7.553200, 7.534000, 7.529200 -7.316600, 7.578700, 7.588800, 7.565300, 7.564200, 7.589500, 7.579200, 7.571200, 7.564600, 7.542000, 7.542900, 7.572000, 7.552900, 7.550700 -7.334100, 7.591700, 7.592000, 7.576600, 7.574900, 7.599600, 7.582600, 7.578700, 7.575400, 7.563100, 7.564100, 7.579100, 7.572600, 7.560100 -7.346000, 7.604600, 7.601100, 7.599600, 7.595200, 7.607600, 7.600500, 7.602700, 7.601100, 7.575300, 7.576300, 7.596500, 7.585000, 7.570400 -7.352200, 7.614100, 7.610000, 7.604600, 7.606500, 7.619200, 7.614000, 7.611500, 7.612200, 7.597200, 7.597100, 7.607400, 7.594000, 7.586800 -7.361800, 7.623000, 7.621300, 7.655500, 7.625800, 7.623500, 7.637700, 7.629500, 7.649900, 7.605600, 7.611700, 7.653000, 7.616500, 7.618300 -7.374500, 7.635600, 7.633800, 7.669200, 7.672100, 7.627800, 7.679000, 7.669100, 7.664000, 7.620700, 7.632000, 7.659300, 7.620100, 7.624100 -7.395900, 7.640900, 7.649700, 7.686900, 7.693900, 7.638900, 7.691000, 7.688300, 7.689100, 7.642700, 7.635300, 7.682500, 7.638400, 7.651400 -7.403900, 7.648800, 7.659100, 7.708100, 7.709800, 7.654100, 7.708900, 7.712100, 7.703900, 7.694200, 7.696200, 7.705300, 7.687300, 7.675500 -7.421300, 7.657100, 7.666300, 7.719000, 7.718700, 7.657500, 7.729900, 7.719300, 7.714400, 7.724500, 7.709700, 7.713700, 7.715700, 7.704200 -7.435500, 7.675900, 7.673800, 7.731500, 7.730900, 7.673700, 7.741700, 7.734800, 7.737400, 7.734900, 7.722900, 7.737000, 7.745200, 7.716600 -7.444600, 7.682000, 7.687100, 7.745800, 7.737000, 7.678100, 7.748000, 7.752600, 7.754600, 7.746400, 7.749600, 7.758800, 7.752100, 7.749700 -7.450100, 7.690400, 7.694000, 7.757000, 7.770700, 7.688000, 7.763300, 7.764600, 7.763200, 7.775800, 7.766100, 7.763400, 7.767100, 7.775200 -7.475400, 7.701900, 7.708100, 7.775900, 7.782000, 7.700500, 7.773800, 7.767400, 7.779100, 7.783900, 7.787400, 7.780700, 7.782000, 7.788800 -7.485100, 7.713600, 7.710900, 7.792200, 7.796000, 7.705100, 7.787200, 7.793600, 7.789800, 7.804100, 7.810900, 7.790800, 7.810500, 7.815200 -7.490900, 7.721200, 7.723000, 7.797400, 7.807100, 7.711700, 7.805300, 7.808100, 7.799800, 7.820100, 7.818600, 7.800300, 7.818800, 7.831300 -7.498100, 7.734500, 7.729200, 7.818300, 7.813900, 7.728500, 7.815800, 7.814000, 7.819300, 7.831100, 7.827700, 7.810300, 7.829900, 7.840600 -7.507500, 7.737200, 7.746500, 7.824100, 7.824300, 7.741700, 7.825900, 7.834200, 7.822100, 7.838100, 7.849500, 7.832100, 7.845600, 7.854200 -7.512500, 7.758400, 7.763100, 7.837700, 7.834500, 7.754700, 7.843300, 7.843200, 7.828700, 7.857000, 7.859000, 7.833500, 7.857300, 7.857500 -7.521100, 7.768800, 7.768500, 7.853500, 7.852000, 7.765600, 7.845500, 7.857500, 7.848800, 7.882000, 7.881900, 7.849700, 7.872300, 7.873900 -7.535500, 7.780700, 7.776700, 7.861200, 7.864300, 7.785900, 7.864500, 7.872900, 7.871300, 7.944300, 7.951900, 7.858800, 7.938600, 7.942300 -7.543500, 7.814300, 7.807000, 7.880800, 7.866600, 7.799500, 7.877900, 7.884700, 7.877300, 7.959600, 7.957400, 7.874000, 7.953200, 7.963300 -7.551000, 7.861200, 7.847000, 7.900100, 7.882200, 7.856100, 7.893400, 7.887400, 7.898300, 7.977500, 7.988400, 7.891500, 7.981100, 7.988200 -7.569500, 7.894600, 7.874300, 7.906900, 7.908000, 7.895000, 7.897500, 7.898900, 7.909500, 7.997500, 8.011600, 7.904600, 8.018100, 8.008500 -7.582100, 7.902200, 7.922600, 7.913100, 7.921800, 7.905300, 7.924600, 7.914900, 7.927500, 8.048300, 8.022100, 7.932400, 8.032700, 8.033300 -7.590300, 7.935700, 7.931200, 7.948900, 7.950000, 7.923400, 7.933500, 7.941900, 7.947700, 8.052100, 8.046200, 7.950000, 8.051900, 8.040500 -7.594800, 7.951900, 7.960800, 7.958200, 7.963600, 7.961100, 7.955600, 7.963600, 7.964300, 8.060000, 8.058000, 7.963300, 8.062100, 8.061700 -7.605100, 7.983400, 7.978500, 7.981400, 7.976300, 7.980700, 7.981900, 7.984600, 7.977800, 8.073000, 8.072400, 7.993000, 8.069000, 8.075800 -7.606100, 7.985400, 7.994200, 8.001300, 8.008700, 7.989200, 7.994500, 7.990700, 7.983800, 8.087100, 8.093900, 8.004300, 8.083700, 8.089700 -7.646900, 8.001600, 8.019700, 8.041700, 8.030100, 8.020800, 8.041300, 8.015900, 8.032100, 8.094300, 8.096900, 8.039000, 8.100700, 8.098500 -7.657500, 8.036500, 8.062700, 8.052700, 8.058000, 8.046700, 8.046400, 8.034400, 8.050600, 8.106100, 8.110200, 8.047000, 8.115800, 8.112200 -7.662600, 8.079200, 8.069000, 8.067000, 8.071400, 8.069500, 8.060000, 8.060700, 8.070800, 8.121100, 8.124300, 8.056700, 8.122000, 8.123500 -7.871100, 8.084700, 8.089500, 8.085600, 8.079800, 8.091800, 8.085900, 8.079800, 8.082500, 8.195000, 8.186100, 8.065500, 8.190200, 8.183700 -7.921300, 8.100000, 8.098100, 8.093200, 8.092100, 8.099100, 8.090300, 8.089900, 8.091000, 8.210500, 8.193200, 8.094000, 8.206500, 8.206400 -7.949300, 8.120600, 8.113700, 8.120000, 8.108500, 8.121400, 8.112300, 8.117500, 8.111100, 8.226500, 8.220300, 8.115200, 8.217800, 8.216400 -7.981700, 8.134400, 8.128300, 8.159900, 8.143300, 8.131300, 8.148900, 8.152300, 8.160300, 8.247800, 8.239800, 8.155800, 8.239900, 8.238800 -7.993300, 8.146900, 8.142400, 8.262100, 8.235000, 8.146300, 8.250900, 8.246500, 8.255000, 8.256700, 8.260100, 8.254500, 8.247500, 8.254200 -8.018400, 8.163300, 8.163400, 8.271200, 8.290300, 8.160000, 8.282900, 8.284900, 8.287900, 8.262600, 8.269600, 8.270400, 8.267300, 8.275400 -8.485000, 8.177600, 8.180200, 8.296900, 8.300500, 8.177600, 8.316300, 8.312600, 8.297200, 8.274900, 8.279900, 8.305900, 8.276900, 8.284500 -8.514600, 8.187700, 8.191400, 8.324800, 8.319500, 8.190200, 8.320500, 8.335700, 8.322900, 8.296000, 8.315800, 8.331900, 8.300100, 8.307100 -8.528600, 8.197100, 8.197900, 8.373400, 8.362100, 8.199500, 8.354000, 8.362400, 8.365500, 8.312600, 8.325500, 8.345100, 8.329600, 8.319100 -8.533700, 8.207400, 8.214800, 8.377900, 8.381600, 8.207300, 8.376600, 8.384700, 8.381000, 8.331600, 8.333100, 8.374100, 8.338200, 8.334600 -8.546100, 8.218400, 8.219700, 8.386200, 8.393400, 8.212200, 8.396200, 8.390900, 8.383500, 8.344900, 8.341100, 8.390900, 8.354500, 8.341600 -8.555200, 8.232600, 8.225700, 8.407000, 8.409900, 8.225400, 8.400300, 8.414100, 8.408000, 8.354600, 8.353900, 8.405400, 8.360800, 8.359500 -8.559500, 8.246700, 8.236600, 8.434300, 8.434600, 8.239600, 8.438900, 8.426000, 8.427400, 8.367200, 8.366100, 8.443500, 8.366300, 8.375100 -8.572100, 8.249100, 8.252100, 8.464000, 8.479100, 8.243400, 8.471000, 8.463400, 8.469400, 8.381900, 8.376800, 8.472200, 8.380000, 8.383500 -8.583100, 8.266400, 8.260400, 8.511600, 8.494500, 8.258800, 8.487400, 8.490600, 8.493000, 8.391400, 8.398300, 8.490600, 8.394400, 8.393700 -8.588600, 8.271500, 8.265700, 8.521300, 8.520200, 8.272300, 8.518200, 8.506300, 8.510700, 8.414500, 8.404700, 8.521400, 8.402800, 8.406000 -8.590700, 8.276700, 8.275300, 8.532300, 8.528000, 8.286200, 8.528100, 8.523100, 8.539600, 8.421300, 8.408400, 8.533800, 8.417100, 8.413200 -8.603100, 8.291700, 8.285000, 8.543300, 8.546600, 8.293100, 8.557300, 8.544900, 8.551500, 8.429000, 8.426300, 8.545700, 8.429700, 8.425500 -8.605700, 8.304100, 8.299900, 8.574000, 8.565300, 8.299500, 8.579600, 8.571700, 8.583800, 8.451200, 8.441900, 8.557500, 8.446400, 8.442400 -8.613100, 8.319100, 8.307900, 8.596400, 8.597700, 8.313200, 8.588400, 8.588100, 8.600800, 8.557000, 8.557600, 8.590500, 8.544900, 8.559900 -8.624400, 8.325200, 8.321200, 8.614200, 8.611400, 8.330900, 8.607200, 8.609100, 8.615300, 8.580400, 8.579800, 8.597300, 8.573100, 8.572700 -8.629300, 8.330100, 8.338900, 8.627100, 8.621600, 8.339900, 8.613900, 8.616300, 8.632400, 8.601500, 8.591100, 8.618800, 8.594800, 8.598200 -8.634800, 8.359700, 8.341100, 8.636800, 8.628400, 8.351600, 8.632900, 8.632200, 8.640800, 8.610200, 8.617000, 8.638800, 8.611300, 8.607900 -8.641000, 8.364300, 8.350500, 8.646100, 8.635700, 8.366700, 8.642900, 8.644200, 8.649100, 8.615100, 8.629400, 8.650000, 8.626200, 8.624300 -8.658800, 8.370400, 8.364200, 8.657000, 8.653300, 8.372800, 8.652600, 8.649000, 8.652900, 8.637900, 8.636600, 8.657400, 8.635700, 8.637600 -8.666800, 8.392800, 8.389600, 8.661400, 8.666800, 8.397400, 8.664900, 8.665000, 8.669700, 8.650800, 8.655400, 8.672000, 8.652400, 8.640900 -8.686700, 8.404400, 8.402400, 8.676900, 8.679000, 8.407800, 8.683100, 8.682000, 8.678600, 8.656700, 8.668600, 8.680700, 8.662700, 8.654900 -8.690500, 8.440800, 8.424700, 8.691100, 8.693000, 8.438300, 8.687700, 8.688300, 8.692300, 8.660700, 8.677500, 8.693700, 8.671500, 8.670000 -8.697900, 8.457400, 8.469800, 8.698900, 8.702400, 8.451000, 8.693700, 8.700500, 8.695100, 8.670400, 8.681500, 8.700000, 8.685000, 8.682000 -8.707400, 8.471900, 8.489100, 8.713700, 8.711900, 8.488600, 8.707900, 8.710400, 8.709900, 8.689200, 8.696200, 8.715500, 8.692500, 8.690700 -8.744100, 8.547600, 8.549400, 8.728300, 8.732800, 8.546400, 8.717200, 8.723200, 8.719500, 8.694800, 8.711100, 8.726100, 8.695300, 8.698600 -8.754800, 8.567300, 8.567700, 8.739400, 8.736900, 8.567100, 8.741800, 8.736900, 8.734100, 8.712900, 8.716800, 8.739200, 8.708200, 8.714600 -8.776400, 8.588200, 8.599000, 8.746700, 8.757200, 8.590000, 8.758000, 8.748400, 8.748600, 8.726800, 8.720100, 8.753000, 8.732100, 8.733000 -8.779000, 8.603800, 8.614500, 8.755200, 8.766800, 8.597400, 8.765600, 8.753300, 8.754100, 8.738900, 8.736800, 8.762000, 8.745300, 8.748200 -8.789400, 8.620900, 8.634700, 8.767400, 8.778100, 8.612500, 8.768600, 8.772800, 8.772000, 8.758600, 8.753800, 8.780100, 8.755100, 8.759500 -8.789900, 8.660500, 8.645900, 8.786800, 8.798800, 8.635600, 8.784200, 8.796200, 8.792200, 8.772500, 8.764000, 8.798300, 8.765200, 8.766000 -8.805500, 8.681400, 8.681100, 8.805200, 8.812800, 8.694500, 8.802200, 8.818900, 8.808000, 8.776100, 8.779700, 8.812700, 8.773800, 8.786000 -8.809500, 8.747400, 8.751300, 8.825500, 8.820000, 8.745800, 8.832100, 8.828600, 8.828400, 8.803300, 8.798800, 8.832900, 8.790400, 8.797400 -8.822300, 8.778200, 8.781600, 8.840900, 8.843000, 8.777900, 8.848900, 8.850500, 8.836900, 8.812000, 8.803400, 8.842800, 8.805900, 8.804600 -8.826700, 8.808400, 8.812000, 8.850500, 8.850400, 8.797600, 8.857100, 8.862000, 8.857600, 8.825200, 8.810700, 8.858700, 8.819200, 8.815000 -8.833600, 8.833400, 8.826000, 8.871700, 8.860400, 8.839100, 8.866800, 8.880200, 8.874000, 8.830900, 8.826100, 8.871000, 8.827400, 8.837600 -8.847900, 9.031900, 9.040500, 8.885400, 8.881500, 9.033500, 8.886600, 8.888200, 8.888100, 8.846700, 8.837000, 8.888600, 8.843400, 8.847000 -8.856600, 9.058900, 9.061900, 8.897000, 8.903900, 9.049200, 8.895400, 8.900200, 8.899100, 8.860000, 8.856200, 8.896000, 8.847600, 8.857400 -8.863300, 9.083000, 9.076000, 8.910400, 8.920700, 9.081400, 8.909500, 8.912600, 8.915100, 8.875400, 8.867400, 8.908400, 8.871600, 8.864200 -8.871600, 9.105100, 9.103400, 8.923700, 8.935600, 9.097000, 8.930600, 8.925700, 8.928900, 8.884500, 8.877400, 8.918300, 8.890100, 8.882600 -8.876600, 9.118700, 9.135100, 8.939100, 8.943100, 9.119200, 8.941700, 8.940100, 8.943400, 8.899500, 8.900100, 8.945600, 8.902100, 8.893500 -8.883700, 9.144400, 9.141900, 8.957500, 8.951900, 9.142100, 8.964400, 8.958000, 8.959400, 8.909300, 8.912400, 8.957200, 8.916300, 8.901400 -8.894700, 9.157500, 9.154100, 8.971600, 8.976900, 9.165000, 8.983100, 8.980500, 8.971600, 8.921100, 8.919600, 8.964900, 8.921100, 8.920900 -8.900400, 9.188700, 9.178700, 8.996200, 8.997100, 9.169000, 8.997500, 8.995200, 8.985100, 8.939800, 8.932500, 8.993500, 8.936400, 8.933700 -8.913500, 9.194400, 9.204000, 9.019800, 9.012700, 9.200100, 9.019900, 9.010600, 9.012100, 8.948200, 8.942300, 9.016500, 8.952300, 8.951700 -8.915700, 9.204800, 9.218600, 9.037900, 9.028500, 9.215700, 9.033800, 9.024000, 9.037200, 8.970600, 8.962400, 9.036300, 8.958200, 8.971200 -8.923200, 9.220100, 9.227100, 9.046800, 9.042300, 9.230100, 9.039700, 9.046000, 9.038700, 8.977000, 8.976400, 9.045800, 8.966200, 8.977300 -8.934400, 9.238700, 9.237300, 9.052600, 9.050700, 9.234000, 9.049800, 9.056700, 9.059300, 8.984300, 8.990000, 9.058400, 8.983900, 8.989100 -8.938200, 9.250400, 9.245900, 9.077300, 9.062800, 9.254800, 9.068000, 9.073200, 9.069700, 8.999100, 9.001600, 9.069600, 9.000200, 9.004900 -8.941100, 9.260400, 9.257700, 9.084000, 9.086200, 9.263100, 9.076500, 9.079200, 9.085100, 9.023200, 9.013400, 9.079300, 9.025100, 9.026800 -8.958700, 9.273100, 9.268400, 9.094300, 9.092100, 9.276200, 9.086100, 9.088800, 9.095900, 9.068500, 9.068500, 9.082200, 9.072200, 9.056000 -8.970200, 9.285400, 9.280500, 9.103000, 9.109600, 9.282100, 9.100700, 9.114700, 9.101100, 9.095700, 9.095400, 9.111200, 9.084200, 9.086000 -8.981600, 9.296300, 9.291900, 9.114600, 9.142000, 9.299100, 9.124800, 9.123700, 9.136600, 9.116600, 9.116800, 9.123100, 9.121700, 9.123200 -8.990500, 9.300400, 9.306300, 9.153000, 9.154100, 9.310600, 9.146700, 9.154100, 9.148000, 9.171900, 9.169800, 9.157300, 9.176500, 9.175600 -8.998200, 9.310100, 9.311100, 9.170700, 9.166200, 9.321200, 9.168800, 9.170600, 9.154800, 9.200800, 9.194300, 9.167500, 9.201500, 9.196900 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_01 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_01 deleted file mode 100644 index dea854fa6..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_01 +++ /dev/null @@ -1,461 +0,0 @@ --3.3213 --2.8113 --2.7969 --2.7776 --2.7406 --2.7363 --2.7060 --2.2963 --2.2672 --2.2631 --2.2524 --2.2159 --2.1967 --2.1912 --2.1777 --2.1535 --2.1302 --2.1173 --2.1073 --1.7348 --1.6938 --1.6636 --1.6440 --1.6040 --1.5955 --1.5896 --1.5488 --1.1670 --1.1385 --1.0980 --1.0682 --1.0353 --1.0190 --0.6978 --0.6678 --0.6488 --0.6235 --0.6058 --0.6039 --0.5950 --0.5893 --0.5750 --0.5538 --0.5408 --0.5263 --0.5161 --0.5148 --0.5035 --0.4907 --0.4870 --0.4705 --0.4662 --0.4450 --0.4289 --0.4131 --0.3885 --0.3668 --0.1233 --0.1136 --0.0786 --0.0595 --0.0477 --0.0282 --0.0161 - 0.0016 - 0.0111 - 0.0266 - 0.0325 - 0.0463 - 0.0518 - 0.0765 - 0.0876 - 0.0918 - 0.1006 - 0.1122 - 0.1249 - 0.1351 - 0.1381 - 0.1589 - 0.1954 - 0.2254 - 1.0051 - 1.0446 - 1.0575 - 1.0790 - 1.0920 - 1.1062 - 1.1160 - 1.1378 - 1.1704 - 1.1914 - 1.2155 - 1.2424 - 1.5200 - 1.5304 - 1.5413 - 1.5521 - 1.5645 - 1.5813 - 1.5871 - 1.5970 - 1.6107 - 1.6236 - 1.6311 - 1.6438 - 1.6551 - 1.6630 - 1.6693 - 1.6765 - 1.6798 - 1.6917 - 1.7032 - 1.7264 - 1.7380 - 1.7448 - 1.7494 - 1.7613 - 1.7670 - 1.7863 - 1.7962 - 1.8072 - 1.8153 - 1.8336 - 2.0876 - 2.1180 - 2.1200 - 2.1256 - 2.1375 - 2.1526 - 2.1690 - 2.1734 - 2.1893 - 2.1951 - 2.2031 - 2.2251 - 2.2349 - 2.2492 - 2.2555 - 2.2649 - 2.2764 - 2.2931 - 2.3034 - 2.3087 - 2.3176 - 2.3329 - 2.3519 - 2.3629 - 2.6360 - 2.6511 - 2.6552 - 2.6845 - 2.6910 - 2.7035 - 2.7267 - 2.7350 - 2.7390 - 2.7466 - 2.7536 - 2.7701 - 2.7842 - 2.7885 - 2.8009 - 2.8148 - 2.8181 - 2.8262 - 2.8356 - 2.8588 - 2.8652 - 2.8749 - 2.8910 - 2.9201 - 3.1903 - 3.2260 - 3.2276 - 3.2394 - 3.4025 - 3.4210 - 3.4314 - 3.4503 - 3.6891 - 3.7128 - 3.7276 - 3.7394 - 3.7529 - 3.7677 - 3.7780 - 3.7871 - 3.7928 - 3.8038 - 3.8155 - 3.8324 - 3.8372 - 3.8400 - 3.8590 - 3.8651 - 3.8705 - 3.8794 - 3.8963 - 3.9107 - 3.9124 - 3.9219 - 3.9442 - 3.9529 - 4.1506 - 4.1607 - 4.1764 - 4.1845 - 4.1940 - 4.1976 - 4.1995 - 4.2132 - 4.2213 - 4.2372 - 4.2483 - 4.2521 - 4.2568 - 4.2697 - 4.2774 - 4.2812 - 4.2828 - 4.2905 - 4.3031 - 4.3221 - 4.3227 - 4.3353 - 4.3439 - 4.3533 - 4.4244 - 4.4422 - 4.4690 - 4.4725 - 4.4823 - 4.4925 - 4.4949 - 4.5012 - 4.5059 - 4.5188 - 4.5266 - 4.5383 - 4.5444 - 4.5502 - 4.5586 - 4.5614 - 4.5708 - 4.5778 - 4.5904 - 4.5991 - 4.6056 - 4.6120 - 4.6223 - 4.6401 - 4.8958 - 4.9111 - 4.9174 - 5.3333 - 5.3407 - 5.3602 - 5.3718 - 5.3813 - 5.3989 - 5.4100 - 5.4183 - 5.4302 - 5.4343 - 5.4546 - 5.4786 - 5.7678 - 5.7886 - 5.8052 - 5.8439 - 5.8490 - 5.8669 - 5.8760 - 5.8809 - 5.8842 - 5.8869 - 5.9071 - 5.9125 - 5.9244 - 5.9361 - 5.9365 - 5.9507 - 5.9560 - 5.9616 - 5.9700 - 5.9741 - 5.9799 - 5.9855 - 5.9998 - 6.0048 - 6.0134 - 6.0213 - 6.0294 - 6.0428 - 6.0483 - 6.0530 - 6.0629 - 6.0792 - 6.0879 - 6.1054 - 6.1236 - 6.1448 - 6.1651 - 6.1891 - 6.1952 - 6.3589 - 6.3729 - 6.3752 - 6.3979 - 6.4088 - 6.4218 - 6.4294 - 6.4585 - 6.4708 - 6.4761 - 6.4897 - 6.5123 - 6.6223 - 6.6378 - 6.6441 - 6.6686 - 6.6770 - 6.6989 - 6.7042 - 6.7116 - 6.7330 - 6.7394 - 6.7446 - 6.7507 - 6.8145 - 6.8538 - 6.8623 - 6.8723 - 6.8921 - 6.9077 - 6.9190 - 6.9245 - 6.9278 - 6.9416 - 6.9504 - 6.9593 - 6.9685 - 6.9857 - 6.9930 - 6.9995 - 7.0070 - 7.0203 - 7.0239 - 7.0319 - 7.0388 - 7.0446 - 7.0522 - 7.0626 - 7.0673 - 7.0763 - 7.0907 - 7.0984 - 7.1043 - 7.1177 - 7.1369 - 7.1425 - 7.1466 - 7.1644 - 7.1823 - 7.2031 - 7.2638 - 7.2777 - 7.2921 - 7.3006 - 7.3048 - 7.3166 - 7.3341 - 7.3460 - 7.3522 - 7.3618 - 7.3745 - 7.3959 - 7.4039 - 7.4213 - 7.4355 - 7.4446 - 7.4501 - 7.4754 - 7.4851 - 7.4909 - 7.4981 - 7.5075 - 7.5125 - 7.5211 - 7.5355 - 7.5435 - 7.5510 - 7.5695 - 7.5821 - 7.5903 - 7.5948 - 7.6051 - 7.6061 - 7.6469 - 7.6575 - 7.6626 - 7.8711 - 7.9213 - 7.9493 - 7.9817 - 7.9933 - 8.0184 - 8.4850 - 8.5146 - 8.5286 - 8.5337 - 8.5461 - 8.5552 - 8.5595 - 8.5721 - 8.5831 - 8.5886 - 8.5907 - 8.6031 - 8.6057 - 8.6131 - 8.6244 - 8.6293 - 8.6348 - 8.6410 - 8.6588 - 8.6668 - 8.6867 - 8.6905 - 8.6979 - 8.7074 - 8.7441 - 8.7548 - 8.7764 - 8.7790 - 8.7894 - 8.7899 - 8.8055 - 8.8095 - 8.8223 - 8.8267 - 8.8336 - 8.8479 - 8.8566 - 8.8633 - 8.8716 - 8.8766 - 8.8837 - 8.8947 - 8.9004 - 8.9135 - 8.9157 - 8.9232 - 8.9344 - 8.9382 - 8.9411 - 8.9587 - 8.9702 - 8.9816 - 8.9905 - 8.9982 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_02 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_02 deleted file mode 100644 index 0ce8233a6..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_02 +++ /dev/null @@ -1,461 +0,0 @@ --3.2594 --3.0743 --2.7520 --2.7078 --2.6803 --2.6624 --2.5593 --2.5188 --2.4925 --2.4763 --2.3224 --2.1967 --2.1489 --2.1105 --2.0869 --2.0140 --1.9655 --1.9179 --1.8997 --1.8127 --1.7694 --1.7666 --1.7245 --1.7071 --1.3133 --1.2637 --1.2452 --1.2221 --1.2007 --1.1922 --1.1609 --1.1462 --1.0657 --1.0099 --0.9869 --0.9729 --0.9131 --0.8306 --0.8162 --0.7834 --0.7055 --0.6705 --0.6291 --0.6031 --0.5399 --0.5198 --0.4957 --0.4795 --0.4636 --0.4417 --0.4087 --0.3986 --0.3375 --0.3318 --0.3071 --0.2938 --0.2719 --0.2433 --0.2144 --0.2063 --0.1866 --0.1302 --0.0714 --0.0475 --0.0361 - 0.2103 - 0.2412 - 0.2862 - 0.3096 - 0.3461 - 0.4015 - 0.4105 - 0.4257 - 0.4428 - 0.4578 - 0.4677 - 0.4835 - 0.5086 - 0.5208 - 0.5471 - 0.5747 - 0.6546 - 0.7588 - 0.8191 - 0.8540 - 0.8668 - 0.9271 - 0.9529 - 0.9854 - 1.0010 - 1.0194 - 1.0462 - 1.0658 - 1.0806 - 1.1187 - 1.1556 - 1.1743 - 1.1937 - 1.2080 - 1.2256 - 1.2532 - 1.2773 - 1.3386 - 1.3759 - 1.3982 - 1.4457 - 1.6506 - 1.6700 - 1.6940 - 1.7138 - 1.7528 - 1.7656 - 1.7863 - 1.7980 - 1.8502 - 1.8652 - 1.8935 - 1.9176 - 1.9307 - 1.9372 - 1.9660 - 1.9908 - 2.0454 - 2.0883 - 2.1115 - 2.1521 - 2.2028 - 2.2154 - 2.2358 - 2.2612 - 2.2674 - 2.2951 - 2.3107 - 2.3512 - 2.3531 - 2.3763 - 2.3872 - 2.4073 - 2.4247 - 2.4380 - 2.4498 - 2.4631 - 2.4736 - 2.4824 - 2.5041 - 2.5158 - 2.5317 - 2.5556 - 2.5577 - 2.5805 - 2.5966 - 2.6175 - 2.6397 - 2.6628 - 2.6823 - 2.6855 - 2.7234 - 2.7302 - 2.7698 - 2.8269 - 2.8473 - 2.8660 - 2.8816 - 3.0944 - 3.1140 - 3.1250 - 3.1341 - 3.1585 - 3.1724 - 3.1836 - 3.1964 - 3.2084 - 3.2162 - 3.2376 - 3.2559 - 3.2894 - 3.3080 - 3.3176 - 3.3456 - 3.3615 - 3.3691 - 3.3835 - 3.3865 - 3.4067 - 3.4184 - 3.4372 - 3.4493 - 3.6407 - 3.6683 - 3.6814 - 3.7084 - 3.7197 - 3.7311 - 3.7564 - 3.7791 - 3.8045 - 3.8262 - 3.8454 - 3.8719 - 3.8855 - 3.8903 - 3.9043 - 3.9129 - 3.9332 - 3.9536 - 3.9656 - 3.9869 - 4.0041 - 4.0242 - 4.0410 - 4.0573 - 4.0631 - 4.0788 - 4.0878 - 4.1072 - 4.1169 - 4.1319 - 4.1499 - 4.1713 - 4.1952 - 4.4889 - 4.5328 - 4.5540 - 4.5653 - 4.5713 - 4.5945 - 4.6069 - 4.6357 - 4.7395 - 4.7558 - 4.7696 - 4.7852 - 4.8131 - 4.8237 - 4.8358 - 4.8472 - 4.8749 - 4.8911 - 4.9165 - 4.9455 - 4.9496 - 4.9648 - 4.9761 - 4.9896 - 4.9993 - 5.0155 - 5.0463 - 5.0609 - 5.0727 - 5.0905 - 5.1092 - 5.1182 - 5.1279 - 5.1495 - 5.1655 - 5.1757 - 5.1887 - 5.1981 - 5.2185 - 5.2420 - 5.2784 - 5.2907 - 5.3096 - 5.3320 - 5.3432 - 5.3567 - 5.3657 - 5.3875 - 5.4068 - 5.4221 - 5.4365 - 5.4597 - 5.4643 - 5.4744 - 5.4904 - 5.4987 - 5.5111 - 5.5189 - 5.5380 - 5.5453 - 5.5656 - 5.5813 - 5.6015 - 5.6124 - 5.6290 - 5.6562 - 5.6838 - 5.7051 - 5.8064 - 5.8281 - 5.9285 - 5.9831 - 6.0052 - 6.0148 - 6.0474 - 6.0703 - 6.0783 - 6.0825 - 6.1109 - 6.1431 - 6.1569 - 6.1680 - 6.2056 - 6.2344 - 6.2522 - 6.2906 - 6.3091 - 6.3286 - 6.3434 - 6.3725 - 6.4084 - 6.4294 - 6.5087 - 6.5286 - 6.5418 - 6.5628 - 6.5712 - 6.5965 - 6.6256 - 6.6324 - 6.6560 - 6.6618 - 6.6780 - 6.6856 - 6.6924 - 6.6964 - 6.7043 - 6.7145 - 6.7243 - 6.7391 - 6.7477 - 6.7582 - 6.7641 - 6.7720 - 6.7789 - 6.7885 - 6.7948 - 6.8148 - 6.8227 - 6.8311 - 6.8469 - 6.8536 - 6.8719 - 6.8969 - 6.9066 - 6.9249 - 6.9396 - 6.9704 - 6.9799 - 7.0247 - 7.0411 - 7.0463 - 7.0623 - 7.0878 - 7.0970 - 7.1079 - 7.1344 - 7.1400 - 7.1719 - 7.1914 - 7.2295 - 7.2538 - 7.2643 - 7.4080 - 7.4372 - 7.4555 - 7.4632 - 7.5492 - 7.5603 - 7.5693 - 7.5787 - 7.5917 - 7.6046 - 7.6141 - 7.6230 - 7.6356 - 7.6409 - 7.6488 - 7.6571 - 7.6759 - 7.6820 - 7.6904 - 7.7019 - 7.7136 - 7.7212 - 7.7345 - 7.7372 - 7.7584 - 7.7688 - 7.7807 - 7.8143 - 7.8612 - 7.8946 - 7.9022 - 7.9357 - 7.9519 - 7.9834 - 7.9854 - 8.0016 - 8.0365 - 8.0792 - 8.0847 - 8.1000 - 8.1206 - 8.1344 - 8.1469 - 8.1633 - 8.1776 - 8.1877 - 8.1971 - 8.2074 - 8.2184 - 8.2326 - 8.2467 - 8.2491 - 8.2664 - 8.2715 - 8.2767 - 8.2917 - 8.3041 - 8.3191 - 8.3252 - 8.3301 - 8.3597 - 8.3643 - 8.3704 - 8.3928 - 8.4044 - 8.4408 - 8.4574 - 8.4719 - 8.5476 - 8.5673 - 8.5882 - 8.6038 - 8.6209 - 8.6605 - 8.6814 - 8.7474 - 8.7782 - 8.8084 - 8.8334 - 9.0319 - 9.0589 - 9.0830 - 9.1051 - 9.1187 - 9.1444 - 9.1575 - 9.1887 - 9.1944 - 9.2048 - 9.2201 - 9.2387 - 9.2504 - 9.2604 - 9.2731 - 9.2854 - 9.2963 - 9.3004 - 9.3101 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_03 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_03 deleted file mode 100644 index c9debc42e..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_03 +++ /dev/null @@ -1,461 +0,0 @@ --3.2634 --3.0636 --2.7353 --2.7241 --2.6952 --2.6821 --2.5300 --2.5255 --2.4942 --2.4569 --2.3171 --2.1864 --2.1791 --2.1276 --2.1077 --1.9933 --1.9513 --1.9294 --1.8932 --1.8044 --1.7749 --1.7475 --1.7406 --1.7014 --1.2810 --1.2647 --1.2455 --1.2322 --1.1973 --1.1856 --1.1720 --1.1217 --1.0783 --1.0464 --1.0052 --0.9729 --0.8708 --0.8577 --0.8016 --0.7784 --0.6968 --0.6637 --0.6486 --0.6142 --0.5373 --0.5180 --0.5152 --0.4813 --0.4616 --0.4495 --0.4328 --0.4014 --0.3437 --0.3129 --0.2946 --0.2832 --0.2637 --0.2524 --0.2410 --0.2044 --0.1718 --0.1108 --0.0945 --0.0455 --0.0188 - 0.2322 - 0.2574 - 0.2732 - 0.2908 - 0.3763 - 0.3892 - 0.4095 - 0.4197 - 0.4398 - 0.4573 - 0.4721 - 0.4853 - 0.5059 - 0.5277 - 0.5476 - 0.5815 - 0.6531 - 0.7848 - 0.8115 - 0.8362 - 0.8613 - 0.9452 - 0.9591 - 0.9899 - 0.9918 - 1.0094 - 1.0133 - 1.0395 - 1.0927 - 1.1264 - 1.1592 - 1.1790 - 1.1910 - 1.2064 - 1.2257 - 1.2548 - 1.2806 - 1.3428 - 1.3889 - 1.3993 - 1.4547 - 1.6537 - 1.6771 - 1.6931 - 1.7111 - 1.7268 - 1.7558 - 1.7628 - 1.7993 - 1.8532 - 1.8737 - 1.9001 - 1.9215 - 1.9288 - 1.9533 - 1.9578 - 1.9870 - 2.0589 - 2.0990 - 2.1118 - 2.1541 - 2.1968 - 2.2211 - 2.2327 - 2.2426 - 2.2710 - 2.2833 - 2.2989 - 2.3104 - 2.3730 - 2.3875 - 2.4049 - 2.4218 - 2.4309 - 2.4406 - 2.4531 - 2.4633 - 2.4679 - 2.4853 - 2.4966 - 2.5044 - 2.5164 - 2.5421 - 2.5545 - 2.5757 - 2.6098 - 2.6271 - 2.6593 - 2.6641 - 2.6760 - 2.6905 - 2.7005 - 2.7220 - 2.7938 - 2.8189 - 2.8358 - 2.8733 - 2.8893 - 3.0950 - 3.1127 - 3.1282 - 3.1484 - 3.1607 - 3.1748 - 3.1850 - 3.2000 - 3.2105 - 3.2218 - 3.2383 - 3.2570 - 3.3056 - 3.3240 - 3.3392 - 3.3436 - 3.3557 - 3.3687 - 3.3708 - 3.3813 - 3.3889 - 3.4012 - 3.4221 - 3.4690 - 3.6575 - 3.6735 - 3.6870 - 3.6976 - 3.7228 - 3.7366 - 3.7507 - 3.7587 - 3.8054 - 3.8291 - 3.8488 - 3.8550 - 3.8661 - 3.8771 - 3.8934 - 3.9109 - 3.9260 - 3.9400 - 3.9538 - 3.9742 - 4.0197 - 4.0259 - 4.0344 - 4.0561 - 4.0768 - 4.0851 - 4.0985 - 4.1006 - 4.1169 - 4.1410 - 4.1549 - 4.1738 - 4.2221 - 4.5174 - 4.5236 - 4.5484 - 4.5687 - 4.5732 - 4.5904 - 4.6077 - 4.6217 - 4.7441 - 4.7592 - 4.7692 - 4.7830 - 4.8025 - 4.8163 - 4.8365 - 4.8532 - 4.8972 - 4.9057 - 4.9264 - 4.9302 - 4.9443 - 4.9664 - 4.9764 - 4.9898 - 5.0074 - 5.0160 - 5.0345 - 5.0594 - 5.0816 - 5.0945 - 5.1123 - 5.1298 - 5.1335 - 5.1520 - 5.1561 - 5.1717 - 5.1838 - 5.1952 - 5.2189 - 5.2378 - 5.2842 - 5.2940 - 5.3233 - 5.3312 - 5.3431 - 5.3536 - 5.3730 - 5.3901 - 5.4138 - 5.4297 - 5.4415 - 5.4478 - 5.4612 - 5.4739 - 5.4891 - 5.4952 - 5.5038 - 5.5140 - 5.5244 - 5.5362 - 5.5512 - 5.5657 - 5.5762 - 5.6173 - 5.6421 - 5.6600 - 5.6941 - 5.7041 - 5.8184 - 5.8316 - 5.9619 - 5.9864 - 6.0055 - 6.0166 - 6.0316 - 6.0467 - 6.0638 - 6.0812 - 6.0936 - 6.1169 - 6.1705 - 6.1904 - 6.2057 - 6.2233 - 6.2684 - 6.2935 - 6.3341 - 6.3400 - 6.3553 - 6.3713 - 6.4032 - 6.4338 - 6.4957 - 6.5209 - 6.5332 - 6.5455 - 6.5838 - 6.5987 - 6.6172 - 6.6332 - 6.6467 - 6.6545 - 6.6695 - 6.6736 - 6.6797 - 6.6929 - 6.7056 - 6.7142 - 6.7256 - 6.7349 - 6.7527 - 6.7562 - 6.7635 - 6.7685 - 6.7791 - 6.7897 - 6.7957 - 6.8075 - 6.8229 - 6.8322 - 6.8551 - 6.8706 - 6.8810 - 6.8873 - 6.9054 - 6.9143 - 6.9419 - 6.9605 - 6.9773 - 7.0084 - 7.0261 - 7.0523 - 7.0672 - 7.0923 - 7.1026 - 7.1203 - 7.1314 - 7.1563 - 7.1807 - 7.1979 - 7.2202 - 7.2551 - 7.2845 - 7.4198 - 7.4298 - 7.4522 - 7.4701 - 7.5394 - 7.5533 - 7.5749 - 7.5888 - 7.5920 - 7.6011 - 7.6100 - 7.6213 - 7.6338 - 7.6497 - 7.6591 - 7.6663 - 7.6738 - 7.6871 - 7.6940 - 7.7081 - 7.7109 - 7.7230 - 7.7292 - 7.7465 - 7.7631 - 7.7685 - 7.7767 - 7.8070 - 7.8470 - 7.8743 - 7.9226 - 7.9312 - 7.9608 - 7.9785 - 7.9942 - 8.0197 - 8.0627 - 8.0690 - 8.0895 - 8.0981 - 8.1137 - 8.1283 - 8.1424 - 8.1634 - 8.1802 - 8.1914 - 8.1979 - 8.2148 - 8.2197 - 8.2257 - 8.2366 - 8.2521 - 8.2604 - 8.2657 - 8.2753 - 8.2850 - 8.2999 - 8.3079 - 8.3212 - 8.3389 - 8.3411 - 8.3505 - 8.3642 - 8.3896 - 8.4024 - 8.4247 - 8.4698 - 8.4891 - 8.5494 - 8.5677 - 8.5990 - 8.6145 - 8.6347 - 8.6459 - 8.6811 - 8.7513 - 8.7816 - 8.8120 - 8.8260 - 9.0405 - 9.0619 - 9.0760 - 9.1034 - 9.1351 - 9.1419 - 9.1541 - 9.1787 - 9.2040 - 9.2186 - 9.2271 - 9.2373 - 9.2459 - 9.2577 - 9.2684 - 9.2805 - 9.2919 - 9.3063 - 9.3111 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_04 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_04 deleted file mode 100644 index b3399c536..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_04 +++ /dev/null @@ -1,461 +0,0 @@ --3.2019 --3.0226 --2.9946 --2.8157 --2.6678 --2.6261 --2.4803 --2.4658 --2.4517 --2.4067 --2.2941 --2.2721 --2.2475 --2.2166 --2.0753 --2.0555 --1.7626 --1.7487 --1.7109 --1.7032 --1.6812 --1.6617 --1.5746 --1.5448 --1.5141 --1.4995 --1.4614 --1.4546 --1.3187 --1.1951 --1.1593 --1.1396 --1.1188 --1.0187 --0.9898 --0.9772 --0.9577 --0.9330 --0.9146 --0.8349 --0.8139 --0.7764 --0.7656 --0.7476 --0.7305 --0.7061 --0.6875 --0.5961 --0.5448 --0.2895 --0.2661 --0.2405 --0.2113 --0.1970 --0.1865 --0.1586 --0.0977 --0.0666 --0.0338 --0.0228 - 0.0027 - 0.0188 - 0.1074 - 0.1369 - 0.1589 - 0.1975 - 0.2762 - 0.3063 - 0.3299 - 0.3539 - 0.3615 - 0.3827 - 0.4423 - 0.4740 - 0.4926 - 0.5104 - 0.5282 - 0.5524 - 0.5627 - 0.5871 - 0.6450 - 0.6648 - 0.6929 - 0.7147 - 0.7257 - 0.7400 - 0.7507 - 0.7883 - 0.8724 - 0.9010 - 0.9152 - 0.9597 - 1.1595 - 1.1717 - 1.2138 - 1.2307 - 1.2417 - 1.2643 - 1.2715 - 1.2885 - 1.3008 - 1.3165 - 1.3652 - 1.3941 - 1.4345 - 1.4518 - 1.4604 - 1.4729 - 1.4814 - 1.5241 - 1.5962 - 1.6361 - 1.7396 - 1.7675 - 1.7857 - 1.7973 - 1.8193 - 1.8456 - 1.9042 - 1.9292 - 1.9565 - 1.9641 - 1.9711 - 1.9839 - 1.9867 - 1.9996 - 2.0337 - 2.0634 - 2.0836 - 2.1122 - 2.1306 - 2.1602 - 2.1682 - 2.1772 - 2.1919 - 2.2054 - 2.2201 - 2.2334 - 2.2574 - 2.2782 - 2.6278 - 2.6423 - 2.6604 - 2.6787 - 2.6840 - 2.6941 - 2.7050 - 2.7156 - 2.7607 - 2.7908 - 2.8015 - 2.8224 - 2.8334 - 2.8500 - 2.8777 - 2.8837 - 2.8913 - 2.8954 - 2.9134 - 2.9260 - 2.9421 - 2.9616 - 2.9848 - 3.0306 - 3.0482 - 3.0602 - 3.0714 - 3.0903 - 3.1357 - 3.1945 - 3.2171 - 3.2316 - 3.2394 - 3.2610 - 3.2704 - 3.3281 - 3.3409 - 3.3685 - 3.3858 - 3.3997 - 3.4205 - 3.4244 - 3.4456 - 3.4525 - 3.4718 - 3.5105 - 3.5544 - 3.5637 - 3.5784 - 3.5870 - 3.6033 - 3.6232 - 3.6514 - 3.6635 - 3.6709 - 3.6866 - 3.7086 - 3.7727 - 3.7964 - 3.9043 - 3.9185 - 3.9933 - 4.0130 - 4.0241 - 4.0562 - 4.0635 - 4.0863 - 4.1882 - 4.2078 - 4.2356 - 4.2427 - 4.2601 - 4.2694 - 4.2809 - 4.2951 - 4.3060 - 4.3162 - 4.3288 - 4.3313 - 4.3419 - 4.3623 - 4.3673 - 4.3928 - 4.4849 - 4.5524 - 4.5591 - 4.5853 - 4.6114 - 4.6271 - 4.6399 - 4.6519 - 4.6696 - 4.6817 - 4.7004 - 4.7143 - 4.7158 - 4.7401 - 4.7527 - 4.7694 - 4.7963 - 4.8220 - 4.8321 - 4.8496 - 4.8954 - 4.9184 - 4.9323 - 4.9373 - 4.9524 - 4.9693 - 4.9776 - 4.9983 - 5.0155 - 5.0298 - 5.0454 - 5.0539 - 5.0629 - 5.0903 - 5.1121 - 5.1232 - 5.1792 - 5.2151 - 5.3115 - 5.3235 - 5.3590 - 5.3685 - 5.3871 - 5.3985 - 5.4150 - 5.4669 - 5.4948 - 5.5364 - 5.5597 - 5.5707 - 5.5851 - 5.6174 - 5.6338 - 5.6422 - 5.6705 - 5.7067 - 5.7169 - 5.7251 - 5.7375 - 5.7464 - 5.7602 - 5.7695 - 5.7885 - 5.8024 - 5.8103 - 5.8412 - 5.8702 - 5.8826 - 5.9038 - 5.9263 - 5.9715 - 5.9949 - 6.0007 - 6.0186 - 6.0327 - 6.0446 - 6.0652 - 6.0717 - 6.0941 - 6.1018 - 6.1160 - 6.1237 - 6.1761 - 6.2295 - 6.2408 - 6.2584 - 6.2657 - 6.2760 - 6.2835 - 6.3063 - 6.3287 - 6.3521 - 6.3664 - 6.3773 - 6.3964 - 6.4011 - 6.4164 - 6.4252 - 6.4488 - 6.4579 - 6.4652 - 6.4796 - 6.4925 - 6.5042 - 6.5147 - 6.5354 - 6.5709 - 6.5836 - 6.6011 - 6.6169 - 6.6405 - 6.6832 - 6.7002 - 6.7716 - 6.8396 - 6.8611 - 6.9519 - 6.9709 - 6.9910 - 7.0032 - 7.0295 - 7.0500 - 7.0804 - 7.0952 - 7.1004 - 7.1180 - 7.1349 - 7.1498 - 7.1625 - 7.1857 - 7.1909 - 7.2250 - 7.2384 - 7.2930 - 7.3450 - 7.3695 - 7.3857 - 7.4070 - 7.4234 - 7.4413 - 7.4622 - 7.4707 - 7.4864 - 7.5038 - 7.5208 - 7.5363 - 7.5616 - 7.5653 - 7.5766 - 7.5996 - 7.6046 - 7.6555 - 7.6692 - 7.6869 - 7.7081 - 7.7190 - 7.7315 - 7.7458 - 7.7570 - 7.7759 - 7.7922 - 7.7974 - 7.8183 - 7.8241 - 7.8377 - 7.8535 - 7.8612 - 7.8808 - 7.9001 - 7.9069 - 7.9131 - 7.9489 - 7.9582 - 7.9814 - 8.0013 - 8.0417 - 8.0527 - 8.0670 - 8.0856 - 8.0932 - 8.1200 - 8.1599 - 8.2621 - 8.2712 - 8.2969 - 8.3248 - 8.3734 - 8.3779 - 8.3862 - 8.4070 - 8.4343 - 8.4640 - 8.5116 - 8.5213 - 8.5323 - 8.5433 - 8.5740 - 8.5964 - 8.6142 - 8.6271 - 8.6368 - 8.6461 - 8.6570 - 8.6614 - 8.6769 - 8.6911 - 8.6989 - 8.7137 - 8.7283 - 8.7394 - 8.7467 - 8.7552 - 8.7674 - 8.7868 - 8.8052 - 8.8255 - 8.8409 - 8.8505 - 8.8717 - 8.8854 - 8.8970 - 8.9104 - 8.9237 - 8.9391 - 8.9575 - 8.9716 - 8.9962 - 9.0198 - 9.0379 - 9.0468 - 9.0526 - 9.0773 - 9.0840 - 9.0943 - 9.1030 - 9.1146 - 9.1530 - 9.1707 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_05 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_05 deleted file mode 100644 index ecf1c5786..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_05 +++ /dev/null @@ -1,461 +0,0 @@ --3.2016 --3.0291 --2.9866 --2.8183 --2.6639 --2.6285 --2.4998 --2.4527 --2.4358 --2.4132 --2.3138 --2.2576 --2.2479 --2.2090 --2.0846 --2.0495 --1.7762 --1.7527 --1.7132 --1.6970 --1.6747 --1.6531 --1.5710 --1.5468 --1.5228 --1.4947 --1.4802 --1.4296 --1.3301 --1.1918 --1.1590 --1.1500 --1.1157 --1.0223 --0.9835 --0.9737 --0.9426 --0.9283 --0.9062 --0.8524 --0.7967 --0.7867 --0.7669 --0.7552 --0.7435 --0.7001 --0.6978 --0.5889 --0.5434 --0.2762 --0.2631 --0.2558 --0.2318 --0.2006 --0.1843 --0.1465 --0.0883 --0.0494 --0.0390 --0.0322 --0.0171 - 0.0298 - 0.1070 - 0.1448 - 0.1723 - 0.1971 - 0.2782 - 0.3064 - 0.3193 - 0.3478 - 0.3516 - 0.3904 - 0.4551 - 0.4699 - 0.4878 - 0.5045 - 0.5272 - 0.5388 - 0.5698 - 0.5986 - 0.6631 - 0.6720 - 0.6922 - 0.7117 - 0.7306 - 0.7355 - 0.7507 - 0.7860 - 0.8607 - 0.8997 - 0.9292 - 0.9355 - 1.1606 - 1.1788 - 1.2038 - 1.2272 - 1.2452 - 1.2532 - 1.2660 - 1.2749 - 1.3051 - 1.3260 - 1.3843 - 1.4001 - 1.4164 - 1.4382 - 1.4600 - 1.4730 - 1.5107 - 1.5274 - 1.6148 - 1.6273 - 1.7515 - 1.7666 - 1.7857 - 1.8015 - 1.8141 - 1.8313 - 1.9029 - 1.9215 - 1.9325 - 1.9464 - 1.9630 - 1.9842 - 1.9989 - 2.0149 - 2.0421 - 2.0624 - 2.1016 - 2.1185 - 2.1338 - 2.1516 - 2.1605 - 2.1791 - 2.1976 - 2.2125 - 2.2213 - 2.2347 - 2.2524 - 2.2700 - 2.6189 - 2.6512 - 2.6603 - 2.6668 - 2.6805 - 2.7045 - 2.7168 - 2.7357 - 2.7463 - 2.7897 - 2.8133 - 2.8244 - 2.8386 - 2.8534 - 2.8635 - 2.8747 - 2.8931 - 2.8970 - 2.9101 - 2.9286 - 2.9462 - 2.9525 - 2.9644 - 3.0307 - 3.0518 - 3.0709 - 3.0841 - 3.1019 - 3.1248 - 3.1874 - 3.2142 - 3.2284 - 3.2330 - 3.2543 - 3.2827 - 3.3290 - 3.3428 - 3.3620 - 3.3853 - 3.3949 - 3.4107 - 3.4324 - 3.4445 - 3.4561 - 3.4806 - 3.5247 - 3.5507 - 3.5588 - 3.5849 - 3.5968 - 3.6009 - 3.6176 - 3.6283 - 3.6514 - 3.6616 - 3.6983 - 3.7089 - 3.7700 - 3.8024 - 3.9055 - 3.9146 - 4.0058 - 4.0171 - 4.0308 - 4.0561 - 4.0609 - 4.0870 - 4.1966 - 4.2096 - 4.2289 - 4.2413 - 4.2513 - 4.2654 - 4.2817 - 4.2897 - 4.2981 - 4.3174 - 4.3196 - 4.3344 - 4.3417 - 4.3597 - 4.3680 - 4.3959 - 4.4999 - 4.5614 - 4.5685 - 4.5936 - 4.6084 - 4.6132 - 4.6295 - 4.6354 - 4.6633 - 4.6955 - 4.7004 - 4.7240 - 4.7350 - 4.7459 - 4.7533 - 4.7784 - 4.7905 - 4.8080 - 4.8424 - 4.8564 - 4.8861 - 4.9141 - 4.9318 - 4.9414 - 4.9599 - 4.9752 - 4.9890 - 4.9978 - 5.0073 - 5.0176 - 5.0398 - 5.0524 - 5.0637 - 5.0929 - 5.1069 - 5.1190 - 5.1734 - 5.2081 - 5.3206 - 5.3289 - 5.3489 - 5.3665 - 5.3861 - 5.4020 - 5.4281 - 5.4597 - 5.5114 - 5.5396 - 5.5578 - 5.5664 - 5.5957 - 5.6177 - 5.6290 - 5.6515 - 5.6663 - 5.6833 - 5.7081 - 5.7209 - 5.7299 - 5.7467 - 5.7578 - 5.7712 - 5.7937 - 5.8017 - 5.8190 - 5.8385 - 5.8619 - 5.8954 - 5.9056 - 5.9283 - 5.9577 - 5.9921 - 6.0005 - 6.0229 - 6.0384 - 6.0392 - 6.0520 - 6.0837 - 6.0932 - 6.1115 - 6.1302 - 6.1474 - 6.1609 - 6.2124 - 6.2348 - 6.2474 - 6.2643 - 6.2806 - 6.2929 - 6.3117 - 6.3203 - 6.3434 - 6.3551 - 6.3782 - 6.3898 - 6.4122 - 6.4180 - 6.4326 - 6.4391 - 6.4544 - 6.4674 - 6.4861 - 6.4941 - 6.5117 - 6.5207 - 6.5388 - 6.5585 - 6.5793 - 6.5914 - 6.6205 - 6.6474 - 6.6643 - 6.7023 - 6.7716 - 6.8369 - 6.8674 - 6.9567 - 6.9777 - 6.9835 - 7.0044 - 7.0329 - 7.0543 - 7.0771 - 7.0936 - 7.1140 - 7.1248 - 7.1321 - 7.1467 - 7.1563 - 7.1834 - 7.2066 - 7.2136 - 7.2625 - 7.2893 - 7.3613 - 7.3747 - 7.3899 - 7.3996 - 7.4166 - 7.4430 - 7.4531 - 7.4749 - 7.4935 - 7.5041 - 7.5297 - 7.5451 - 7.5580 - 7.5642 - 7.5749 - 7.5952 - 7.6065 - 7.6258 - 7.6721 - 7.6939 - 7.7098 - 7.7187 - 7.7309 - 7.7370 - 7.7707 - 7.7820 - 7.7960 - 7.8071 - 7.8139 - 7.8243 - 7.8345 - 7.8520 - 7.8643 - 7.8666 - 7.8822 - 7.9080 - 7.9218 - 7.9500 - 7.9636 - 7.9763 - 8.0087 - 8.0301 - 8.0580 - 8.0714 - 8.0798 - 8.0921 - 8.1085 - 8.1433 - 8.2350 - 8.2903 - 8.3005 - 8.3195 - 8.3621 - 8.3816 - 8.3934 - 8.4099 - 8.4346 - 8.4791 - 8.4945 - 8.5202 - 8.5280 - 8.5466 - 8.5653 - 8.5977 - 8.6114 - 8.6216 - 8.6284 - 8.6357 - 8.6533 - 8.6668 - 8.6790 - 8.6930 - 8.7024 - 8.7119 - 8.7328 - 8.7369 - 8.7572 - 8.7668 - 8.7781 - 8.7988 - 8.8128 - 8.8200 - 8.8430 - 8.8504 - 8.8604 - 8.8815 - 8.9039 - 8.9207 - 8.9356 - 8.9431 - 8.9519 - 8.9769 - 8.9971 - 9.0127 - 9.0285 - 9.0423 - 9.0507 - 9.0628 - 9.0862 - 9.0921 - 9.1096 - 9.1420 - 9.1541 - 9.1662 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_06 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_06 deleted file mode 100644 index 9bc2cdfe4..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_06 +++ /dev/null @@ -1,461 +0,0 @@ --3.2597 --3.0734 --2.7415 --2.7260 --2.6903 --2.6478 --2.5414 --2.5361 --2.5034 --2.4604 --2.3237 --2.1925 --2.1486 --2.1141 --2.0902 --1.9998 --1.9605 --1.9297 --1.9090 --1.8098 --1.7876 --1.7681 --1.7212 --1.7036 --1.3106 --1.2555 --1.2415 --1.2172 --1.1929 --1.1814 --1.1674 --1.1244 --1.0587 --1.0380 --1.0048 --0.9726 --0.8758 --0.8546 --0.8165 --0.7881 --0.7048 --0.6704 --0.6387 --0.6181 --0.5815 --0.5063 --0.4784 --0.4666 --0.4575 --0.4457 --0.4271 --0.3827 --0.3568 --0.3124 --0.2997 --0.2783 --0.2657 --0.2471 --0.2415 --0.2101 --0.1744 --0.1098 --0.1012 --0.0473 --0.0332 - 0.2264 - 0.2505 - 0.2747 - 0.3175 - 0.3560 - 0.3901 - 0.4079 - 0.4255 - 0.4449 - 0.4559 - 0.4672 - 0.4863 - 0.5014 - 0.5181 - 0.5562 - 0.5692 - 0.6502 - 0.7734 - 0.8136 - 0.8427 - 0.8588 - 0.9090 - 0.9822 - 0.9914 - 1.0102 - 1.0257 - 1.0284 - 1.0579 - 1.1032 - 1.1230 - 1.1614 - 1.1751 - 1.1873 - 1.2100 - 1.2270 - 1.2432 - 1.2717 - 1.3434 - 1.3743 - 1.3991 - 1.4430 - 1.6538 - 1.6785 - 1.6950 - 1.7091 - 1.7359 - 1.7548 - 1.7793 - 1.7973 - 1.8530 - 1.8731 - 1.8797 - 1.9092 - 1.9295 - 1.9455 - 1.9503 - 1.9953 - 2.0624 - 2.0995 - 2.1166 - 2.1440 - 2.2062 - 2.2278 - 2.2342 - 2.2451 - 2.2735 - 2.2940 - 2.3112 - 2.3283 - 2.3558 - 2.3859 - 2.4036 - 2.4205 - 2.4321 - 2.4379 - 2.4489 - 2.4623 - 2.4793 - 2.4992 - 2.5036 - 2.5111 - 2.5269 - 2.5377 - 2.5588 - 2.5823 - 2.5936 - 2.6200 - 2.6435 - 2.6536 - 2.6685 - 2.6731 - 2.6959 - 2.7383 - 2.8057 - 2.8144 - 2.8308 - 2.8566 - 2.9014 - 3.1049 - 3.1148 - 3.1220 - 3.1403 - 3.1517 - 3.1606 - 3.1793 - 3.1959 - 3.2086 - 3.2243 - 3.2300 - 3.2546 - 3.2905 - 3.3249 - 3.3349 - 3.3422 - 3.3606 - 3.3644 - 3.3771 - 3.3906 - 3.4004 - 3.4133 - 3.4316 - 3.4713 - 3.6562 - 3.6739 - 3.6855 - 3.7012 - 3.7254 - 3.7410 - 3.7584 - 3.7726 - 3.8089 - 3.8251 - 3.8490 - 3.8662 - 3.8739 - 3.8831 - 3.8943 - 3.9138 - 3.9226 - 3.9455 - 3.9502 - 3.9710 - 4.0229 - 4.0354 - 4.0465 - 4.0609 - 4.0682 - 4.0803 - 4.0926 - 4.1035 - 4.1221 - 4.1281 - 4.1434 - 4.1796 - 4.2002 - 4.5049 - 4.5193 - 4.5437 - 4.5562 - 4.5874 - 4.5962 - 4.6170 - 4.6474 - 4.7232 - 4.7608 - 4.7743 - 4.7887 - 4.7979 - 4.8142 - 4.8263 - 4.8492 - 4.8855 - 4.9021 - 4.9228 - 4.9263 - 4.9392 - 4.9613 - 4.9839 - 4.9954 - 5.0085 - 5.0137 - 5.0390 - 5.0479 - 5.0770 - 5.0919 - 5.1024 - 5.1088 - 5.1362 - 5.1517 - 5.1591 - 5.1682 - 5.1839 - 5.1979 - 5.2252 - 5.2414 - 5.2788 - 5.3022 - 5.3116 - 5.3285 - 5.3411 - 5.3521 - 5.3838 - 5.3911 - 5.4118 - 5.4271 - 5.4363 - 5.4571 - 5.4635 - 5.4832 - 5.4921 - 5.4983 - 5.5150 - 5.5225 - 5.5324 - 5.5424 - 5.5550 - 5.5628 - 5.5849 - 5.6182 - 5.6322 - 5.6519 - 5.6726 - 5.7078 - 5.8185 - 5.8301 - 5.9533 - 5.9880 - 6.0024 - 6.0195 - 6.0292 - 6.0493 - 6.0638 - 6.0841 - 6.1041 - 6.1343 - 6.1507 - 6.1711 - 6.2133 - 6.2340 - 6.2779 - 6.2919 - 6.3061 - 6.3248 - 6.3611 - 6.3894 - 6.3982 - 6.4250 - 6.4952 - 6.5243 - 6.5371 - 6.5484 - 6.5649 - 6.6139 - 6.6257 - 6.6376 - 6.6559 - 6.6622 - 6.6706 - 6.6794 - 6.6893 - 6.7058 - 6.7140 - 6.7220 - 6.7315 - 6.7398 - 6.7453 - 6.7527 - 6.7615 - 6.7727 - 6.7818 - 6.7889 - 6.8049 - 6.8125 - 6.8226 - 6.8312 - 6.8431 - 6.8663 - 6.8719 - 6.8897 - 6.9002 - 6.9242 - 6.9442 - 6.9658 - 7.0069 - 7.0165 - 7.0335 - 7.0557 - 7.0753 - 7.0855 - 7.1047 - 7.1175 - 7.1277 - 7.1560 - 7.1845 - 7.2081 - 7.2108 - 7.2448 - 7.2498 - 7.4186 - 7.4284 - 7.4499 - 7.4607 - 7.5482 - 7.5538 - 7.5693 - 7.5895 - 7.5996 - 7.6076 - 7.6192 - 7.6235 - 7.6278 - 7.6389 - 7.6541 - 7.6575 - 7.6737 - 7.6781 - 7.6880 - 7.7005 - 7.7051 - 7.7117 - 7.7285 - 7.7417 - 7.7547 - 7.7656 - 7.7859 - 7.7995 - 7.8561 - 7.8950 - 7.9053 - 7.9234 - 7.9611 - 7.9807 - 7.9892 - 8.0208 - 8.0467 - 8.0695 - 8.0918 - 8.0991 - 8.1214 - 8.1313 - 8.1463 - 8.1600 - 8.1776 - 8.1902 - 8.1995 - 8.2073 - 8.2122 - 8.2254 - 8.2396 - 8.2434 - 8.2588 - 8.2723 - 8.2862 - 8.2931 - 8.2995 - 8.3132 - 8.3309 - 8.3399 - 8.3516 - 8.3667 - 8.3728 - 8.3974 - 8.4078 - 8.4383 - 8.4510 - 8.4886 - 8.5464 - 8.5671 - 8.5900 - 8.5974 - 8.6125 - 8.6356 - 8.6945 - 8.7458 - 8.7779 - 8.7976 - 8.8391 - 9.0335 - 9.0492 - 9.0814 - 9.0970 - 9.1192 - 9.1421 - 9.1650 - 9.1690 - 9.2001 - 9.2157 - 9.2301 - 9.2340 - 9.2548 - 9.2631 - 9.2762 - 9.2821 - 9.2991 - 9.3106 - 9.3212 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_07 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_07 deleted file mode 100644 index d4420e4c3..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_07 +++ /dev/null @@ -1,461 +0,0 @@ --3.1978 --3.0259 --2.9977 --2.8286 --2.6675 --2.6023 --2.4969 --2.4684 --2.4209 --2.4053 --2.3048 --2.2728 --2.2482 --2.2108 --2.0983 --2.0493 --1.7730 --1.7419 --1.7197 --1.7110 --1.6756 --1.6519 --1.5667 --1.5473 --1.5276 --1.5032 --1.4755 --1.4314 --1.3245 --1.1981 --1.1723 --1.1401 --1.0906 --1.0208 --0.9849 --0.9675 --0.9422 --0.9274 --0.8935 --0.8317 --0.8132 --0.7934 --0.7813 --0.7523 --0.7376 --0.7278 --0.6728 --0.5857 --0.5567 --0.2822 --0.2652 --0.2493 --0.2278 --0.2039 --0.1821 --0.1574 --0.0858 --0.0666 --0.0481 --0.0194 - 0.0075 - 0.0318 - 0.0990 - 0.1461 - 0.1642 - 0.1877 - 0.2734 - 0.2890 - 0.3140 - 0.3458 - 0.3743 - 0.4011 - 0.4598 - 0.4815 - 0.4976 - 0.5130 - 0.5259 - 0.5467 - 0.5559 - 0.5917 - 0.6605 - 0.6719 - 0.6942 - 0.7055 - 0.7188 - 0.7398 - 0.7622 - 0.7901 - 0.8453 - 0.8872 - 0.9134 - 0.9566 - 1.1791 - 1.1874 - 1.2060 - 1.2266 - 1.2399 - 1.2597 - 1.2682 - 1.2728 - 1.3144 - 1.3254 - 1.3866 - 1.3953 - 1.4213 - 1.4368 - 1.4540 - 1.4679 - 1.4873 - 1.5271 - 1.6084 - 1.6289 - 1.7332 - 1.7704 - 1.7775 - 1.7992 - 1.8157 - 1.8517 - 1.9094 - 1.9274 - 1.9474 - 1.9560 - 1.9787 - 1.9949 - 2.0041 - 2.0165 - 2.0278 - 2.0338 - 2.0869 - 2.1311 - 2.1338 - 2.1508 - 2.1595 - 2.1722 - 2.1808 - 2.1963 - 2.2070 - 2.2273 - 2.2593 - 2.2913 - 2.6172 - 2.6425 - 2.6598 - 2.6789 - 2.6866 - 2.7064 - 2.7217 - 2.7359 - 2.7526 - 2.7982 - 2.8185 - 2.8389 - 2.8439 - 2.8529 - 2.8675 - 2.8809 - 2.8915 - 2.8941 - 2.9189 - 2.9295 - 2.9362 - 2.9470 - 2.9595 - 3.0098 - 3.0336 - 3.0600 - 3.0905 - 3.1001 - 3.1303 - 3.1839 - 3.2196 - 3.2329 - 3.2509 - 3.2782 - 3.2945 - 3.3249 - 3.3426 - 3.3737 - 3.3835 - 3.3995 - 3.4225 - 3.4330 - 3.4399 - 3.4565 - 3.4671 - 3.5143 - 3.5352 - 3.5595 - 3.5759 - 3.5861 - 3.5976 - 3.6113 - 3.6290 - 3.6536 - 3.6814 - 3.7000 - 3.7172 - 3.7507 - 3.8136 - 3.9027 - 3.9162 - 4.0006 - 4.0130 - 4.0315 - 4.0502 - 4.0710 - 4.0847 - 4.1945 - 4.2008 - 4.2195 - 4.2343 - 4.2519 - 4.2719 - 4.2778 - 4.2894 - 4.2998 - 4.3081 - 4.3191 - 4.3351 - 4.3502 - 4.3625 - 4.3733 - 4.3846 - 4.4751 - 4.5461 - 4.5682 - 4.5982 - 4.6145 - 4.6351 - 4.6446 - 4.6615 - 4.6725 - 4.6944 - 4.7003 - 4.7153 - 4.7211 - 4.7309 - 4.7499 - 4.7630 - 4.7869 - 4.8148 - 4.8353 - 4.8623 - 4.8916 - 4.9092 - 4.9233 - 4.9462 - 4.9628 - 4.9728 - 4.9939 - 5.0131 - 5.0182 - 5.0310 - 5.0386 - 5.0589 - 5.0651 - 5.0893 - 5.0963 - 5.1097 - 5.1716 - 5.1940 - 5.3171 - 5.3315 - 5.3480 - 5.3737 - 5.3814 - 5.4023 - 5.4175 - 5.4561 - 5.5176 - 5.5374 - 5.5570 - 5.5714 - 5.5882 - 5.6276 - 5.6419 - 5.6582 - 5.6716 - 5.6874 - 5.7037 - 5.7167 - 5.7217 - 5.7472 - 5.7602 - 5.7765 - 5.7837 - 5.7948 - 5.8133 - 5.8447 - 5.8611 - 5.8838 - 5.9255 - 5.9432 - 5.9518 - 5.9850 - 5.9894 - 6.0092 - 6.0345 - 6.0429 - 6.0704 - 6.0743 - 6.0907 - 6.1052 - 6.1231 - 6.1436 - 6.1669 - 6.2119 - 6.2509 - 6.2636 - 6.2729 - 6.2913 - 6.3041 - 6.3214 - 6.3318 - 6.3534 - 6.3629 - 6.3894 - 6.3998 - 6.4085 - 6.4211 - 6.4321 - 6.4453 - 6.4508 - 6.4672 - 6.4824 - 6.4935 - 6.5001 - 6.5155 - 6.5320 - 6.5499 - 6.5776 - 6.5901 - 6.6075 - 6.6460 - 6.6831 - 6.6933 - 6.7438 - 6.8361 - 6.8610 - 6.9485 - 6.9682 - 6.9903 - 6.9992 - 7.0391 - 7.0629 - 7.0726 - 7.0877 - 7.1037 - 7.1214 - 7.1265 - 7.1518 - 7.1712 - 7.1920 - 7.2056 - 7.2329 - 7.2455 - 7.2592 - 7.3372 - 7.3576 - 7.3823 - 7.4076 - 7.4338 - 7.4457 - 7.4638 - 7.4800 - 7.5011 - 7.5106 - 7.5269 - 7.5436 - 7.5470 - 7.5792 - 7.5826 - 7.6005 - 7.6140 - 7.6377 - 7.6790 - 7.6910 - 7.7089 - 7.7299 - 7.7417 - 7.7480 - 7.7633 - 7.7738 - 7.7872 - 7.8053 - 7.8158 - 7.8259 - 7.8433 - 7.8455 - 7.8645 - 7.8779 - 7.8934 - 7.8975 - 7.9246 - 7.9335 - 7.9556 - 7.9819 - 7.9945 - 8.0413 - 8.0464 - 8.0600 - 8.0859 - 8.0903 - 8.1123 - 8.1489 - 8.2509 - 8.2829 - 8.3163 - 8.3205 - 8.3540 - 8.3766 - 8.3962 - 8.4003 - 8.4389 - 8.4710 - 8.4874 - 8.5182 - 8.5281 - 8.5573 - 8.5796 - 8.5884 - 8.6072 - 8.6139 - 8.6329 - 8.6429 - 8.6526 - 8.6649 - 8.6831 - 8.6877 - 8.6937 - 8.7079 - 8.7172 - 8.7418 - 8.7580 - 8.7656 - 8.7686 - 8.7842 - 8.8022 - 8.8321 - 8.8489 - 8.8571 - 8.8668 - 8.8866 - 8.8954 - 8.9095 - 8.9306 - 8.9417 - 8.9644 - 8.9831 - 8.9975 - 9.0199 - 9.0338 - 9.0397 - 9.0498 - 9.0680 - 9.0765 - 9.0861 - 9.1007 - 9.1248 - 9.1467 - 9.1688 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_08 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_08 deleted file mode 100644 index 784723176..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_08 +++ /dev/null @@ -1,461 +0,0 @@ --3.1980 --3.0136 --3.0112 --2.8269 --2.6676 --2.6029 --2.5025 --2.4569 --2.4308 --2.3999 --2.2975 --2.2738 --2.2598 --2.2063 --2.0919 --2.0603 --1.7772 --1.7497 --1.7147 --1.6992 --1.6773 --1.6367 --1.5625 --1.5433 --1.5334 --1.5032 --1.4899 --1.4376 --1.3312 --1.1858 --1.1606 --1.1426 --1.0950 --1.0150 --0.9898 --0.9755 --0.9536 --0.9339 --0.9090 --0.8199 --0.8049 --0.7888 --0.7647 --0.7503 --0.7279 --0.7200 --0.6867 --0.5970 --0.5534 --0.2841 --0.2682 --0.2463 --0.2347 --0.2166 --0.1800 --0.1499 --0.0790 --0.0589 --0.0459 --0.0197 --0.0081 - 0.0181 - 0.1074 - 0.1353 - 0.1576 - 0.1940 - 0.2835 - 0.3101 - 0.3233 - 0.3471 - 0.3793 - 0.3998 - 0.4588 - 0.4793 - 0.4839 - 0.5055 - 0.5288 - 0.5534 - 0.5828 - 0.5964 - 0.6520 - 0.6666 - 0.6892 - 0.7022 - 0.7216 - 0.7262 - 0.7507 - 0.7776 - 0.8610 - 0.8944 - 0.9156 - 0.9408 - 1.1706 - 1.1933 - 1.2070 - 1.2173 - 1.2359 - 1.2508 - 1.2717 - 1.2856 - 1.3047 - 1.3311 - 1.3838 - 1.4107 - 1.4241 - 1.4302 - 1.4521 - 1.4705 - 1.4870 - 1.5287 - 1.6073 - 1.6200 - 1.7565 - 1.7720 - 1.7859 - 1.8100 - 1.8326 - 1.8406 - 1.9106 - 1.9316 - 1.9379 - 1.9471 - 1.9622 - 1.9857 - 2.0057 - 2.0135 - 2.0234 - 2.0597 - 2.1026 - 2.1246 - 2.1404 - 2.1493 - 2.1676 - 2.1779 - 2.1869 - 2.1983 - 2.2074 - 2.2109 - 2.2424 - 2.2687 - 2.6289 - 2.6505 - 2.6715 - 2.6796 - 2.6832 - 2.6875 - 2.7065 - 2.7304 - 2.7380 - 2.7996 - 2.8138 - 2.8317 - 2.8491 - 2.8621 - 2.8711 - 2.8821 - 2.8874 - 2.9007 - 2.9081 - 2.9222 - 2.9388 - 2.9555 - 2.9777 - 3.0314 - 3.0486 - 3.0669 - 3.0748 - 3.0922 - 3.1335 - 3.1854 - 3.2288 - 3.2395 - 3.2501 - 3.2660 - 3.2779 - 3.3247 - 3.3402 - 3.3652 - 3.3918 - 3.4000 - 3.4161 - 3.4218 - 3.4357 - 3.4439 - 3.4786 - 3.5280 - 3.5415 - 3.5576 - 3.5815 - 3.5905 - 3.6049 - 3.6179 - 3.6352 - 3.6613 - 3.6689 - 3.6965 - 3.7077 - 3.7610 - 3.7953 - 3.8995 - 3.9048 - 3.9966 - 4.0054 - 4.0348 - 4.0510 - 4.0648 - 4.0915 - 4.2041 - 4.2145 - 4.2246 - 4.2403 - 4.2539 - 4.2651 - 4.2717 - 4.2810 - 4.2974 - 4.3138 - 4.3201 - 4.3323 - 4.3516 - 4.3675 - 4.3762 - 4.3908 - 4.4885 - 4.5529 - 4.5660 - 4.5990 - 4.6136 - 4.6344 - 4.6495 - 4.6535 - 4.6668 - 4.6780 - 4.7034 - 4.7122 - 4.7228 - 4.7369 - 4.7552 - 4.7644 - 4.7951 - 4.8109 - 4.8334 - 4.8671 - 4.8744 - 4.9178 - 4.9361 - 4.9468 - 4.9570 - 4.9814 - 4.9887 - 4.9957 - 5.0084 - 5.0349 - 5.0401 - 5.0473 - 5.0646 - 5.0816 - 5.1067 - 5.1096 - 5.1822 - 5.1992 - 5.3070 - 5.3256 - 5.3497 - 5.3606 - 5.3758 - 5.4136 - 5.4374 - 5.4591 - 5.4802 - 5.5343 - 5.5431 - 5.5740 - 5.5932 - 5.6199 - 5.6347 - 5.6629 - 5.6841 - 5.6964 - 5.7103 - 5.7190 - 5.7344 - 5.7449 - 5.7548 - 5.7757 - 5.7911 - 5.7947 - 5.8239 - 5.8509 - 5.8683 - 5.8807 - 5.9062 - 5.9270 - 5.9597 - 5.9841 - 5.9913 - 6.0151 - 6.0246 - 6.0546 - 6.0635 - 6.0793 - 6.1080 - 6.1170 - 6.1187 - 6.1426 - 6.1511 - 6.2136 - 6.2500 - 6.2608 - 6.2794 - 6.2860 - 6.2994 - 6.3155 - 6.3275 - 6.3554 - 6.3687 - 6.3838 - 6.3918 - 6.4073 - 6.4174 - 6.4351 - 6.4465 - 6.4525 - 6.4663 - 6.4827 - 6.4970 - 6.5110 - 6.5187 - 6.5300 - 6.5562 - 6.5764 - 6.5965 - 6.6029 - 6.6479 - 6.6778 - 6.6968 - 6.7473 - 6.8265 - 6.8523 - 6.9689 - 6.9793 - 6.9963 - 7.0054 - 7.0493 - 7.0559 - 7.0623 - 7.0900 - 7.1105 - 7.1206 - 7.1332 - 7.1510 - 7.1657 - 7.1727 - 7.1926 - 7.2159 - 7.2536 - 7.2723 - 7.3363 - 7.3607 - 7.3755 - 7.4093 - 7.4209 - 7.4430 - 7.4660 - 7.4765 - 7.4946 - 7.5184 - 7.5404 - 7.5497 - 7.5624 - 7.5712 - 7.5787 - 7.6027 - 7.6115 - 7.6295 - 7.6691 - 7.6883 - 7.7121 - 7.7193 - 7.7348 - 7.7526 - 7.7646 - 7.7674 - 7.7936 - 7.8081 - 7.8140 - 7.8342 - 7.8432 - 7.8575 - 7.8729 - 7.8847 - 7.8874 - 7.8989 - 7.9149 - 7.9419 - 7.9636 - 7.9846 - 7.9907 - 8.0159 - 8.0344 - 8.0607 - 8.0798 - 8.0899 - 8.1175 - 8.1523 - 8.2465 - 8.2849 - 8.3126 - 8.3357 - 8.3624 - 8.3847 - 8.3909 - 8.4141 - 8.4260 - 8.4634 - 8.4906 - 8.5063 - 8.5231 - 8.5449 - 8.5717 - 8.5881 - 8.6091 - 8.6163 - 8.6322 - 8.6442 - 8.6490 - 8.6650 - 8.6820 - 8.6883 - 8.7005 - 8.7104 - 8.7232 - 8.7369 - 8.7484 - 8.7533 - 8.7728 - 8.7962 - 8.8189 - 8.8286 - 8.8505 - 8.8620 - 8.8802 - 8.8882 - 8.9002 - 8.9126 - 8.9257 - 8.9401 - 8.9580 - 8.9805 - 8.9952 - 9.0106 - 9.0240 - 9.0460 - 9.0567 - 9.0732 - 9.0792 - 9.0888 - 9.1147 - 9.1237 - 9.1541 - 9.1706 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_09 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_09 deleted file mode 100644 index d5107efaa..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_09 +++ /dev/null @@ -1,461 +0,0 @@ --3.2020 --3.0215 --2.9961 --2.8147 --2.6565 --2.6398 --2.4917 --2.4564 --2.4447 --2.4134 --2.2901 --2.2679 --2.2393 --2.2198 --2.0997 --2.0382 --1.7753 --1.7387 --1.7268 --1.7089 --1.6721 --1.6555 --1.5643 --1.5455 --1.5217 --1.4942 --1.4670 --1.4489 --1.3311 --1.1850 --1.1657 --1.1434 --1.1151 --1.0135 --0.9858 --0.9689 --0.9514 --0.9207 --0.9158 --0.8246 --0.8099 --0.7913 --0.7645 --0.7553 --0.7372 --0.7029 --0.6911 --0.5999 --0.5506 --0.2980 --0.2659 --0.2378 --0.2239 --0.2069 --0.1968 --0.1606 --0.0751 --0.0676 --0.0355 --0.0223 --0.0019 - 0.0260 - 0.0922 - 0.1369 - 0.1683 - 0.2033 - 0.2738 - 0.2995 - 0.3256 - 0.3537 - 0.3644 - 0.3963 - 0.4518 - 0.4769 - 0.4924 - 0.5195 - 0.5286 - 0.5521 - 0.5710 - 0.5766 - 0.6562 - 0.6733 - 0.6953 - 0.7128 - 0.7169 - 0.7378 - 0.7635 - 0.8011 - 0.8549 - 0.9061 - 0.9217 - 0.9358 - 1.1709 - 1.1830 - 1.1998 - 1.2256 - 1.2429 - 1.2543 - 1.2690 - 1.2758 - 1.2958 - 1.3059 - 1.3853 - 1.4085 - 1.4133 - 1.4452 - 1.4511 - 1.4837 - 1.4936 - 1.5137 - 1.6124 - 1.6395 - 1.7549 - 1.7649 - 1.7798 - 1.8013 - 1.8165 - 1.8308 - 1.8959 - 1.9309 - 1.9421 - 1.9532 - 1.9679 - 1.9753 - 1.9935 - 2.0146 - 2.0326 - 2.0557 - 2.1149 - 2.1219 - 2.1444 - 2.1539 - 2.1639 - 2.1752 - 2.1887 - 2.2074 - 2.2223 - 2.2308 - 2.2494 - 2.2681 - 2.6196 - 2.6428 - 2.6575 - 2.6719 - 2.6890 - 2.6934 - 2.7068 - 2.7150 - 2.7312 - 2.8015 - 2.8174 - 2.8318 - 2.8456 - 2.8507 - 2.8783 - 2.8799 - 2.8946 - 2.9031 - 2.9125 - 2.9262 - 2.9366 - 2.9596 - 2.9708 - 3.0288 - 3.0539 - 3.0640 - 3.0895 - 3.1002 - 3.1174 - 3.1876 - 3.2073 - 3.2418 - 3.2637 - 3.2730 - 3.2879 - 3.3364 - 3.3457 - 3.3717 - 3.3805 - 3.3948 - 3.4067 - 3.4225 - 3.4370 - 3.4466 - 3.4510 - 3.5227 - 3.5439 - 3.5689 - 3.5790 - 3.5872 - 3.5983 - 3.6191 - 3.6266 - 3.6492 - 3.6681 - 3.7046 - 3.7077 - 3.7727 - 3.8086 - 3.9065 - 3.9106 - 3.9946 - 4.0186 - 4.0438 - 4.0554 - 4.0684 - 4.0853 - 4.1984 - 4.2043 - 4.2326 - 4.2410 - 4.2551 - 4.2604 - 4.2713 - 4.2934 - 4.2989 - 4.3088 - 4.3249 - 4.3273 - 4.3483 - 4.3704 - 4.3741 - 4.3993 - 4.4807 - 4.5635 - 4.5779 - 4.5991 - 4.6147 - 4.6267 - 4.6322 - 4.6584 - 4.6713 - 4.6850 - 4.6944 - 4.7161 - 4.7351 - 4.7384 - 4.7460 - 4.7629 - 4.7860 - 4.8041 - 4.8191 - 4.8505 - 4.8886 - 4.9225 - 4.9283 - 4.9431 - 4.9624 - 4.9679 - 4.9914 - 5.0025 - 5.0154 - 5.0313 - 5.0408 - 5.0550 - 5.0739 - 5.0801 - 5.0976 - 5.1168 - 5.1761 - 5.1950 - 5.3021 - 5.3270 - 5.3522 - 5.3765 - 5.3885 - 5.4139 - 5.4175 - 5.4633 - 5.5088 - 5.5414 - 5.5506 - 5.5704 - 5.5854 - 5.6160 - 5.6401 - 5.6526 - 5.6658 - 5.6966 - 5.7043 - 5.7113 - 5.7265 - 5.7365 - 5.7529 - 5.7677 - 5.7862 - 5.8088 - 5.8183 - 5.8441 - 5.8719 - 5.8854 - 5.9155 - 5.9271 - 5.9534 - 5.9690 - 6.0007 - 6.0232 - 6.0334 - 6.0450 - 6.0682 - 6.0878 - 6.1013 - 6.1087 - 6.1171 - 6.1396 - 6.1624 - 6.2332 - 6.2394 - 6.2667 - 6.2710 - 6.2835 - 6.2928 - 6.3204 - 6.3289 - 6.3505 - 6.3645 - 6.3856 - 6.4006 - 6.4067 - 6.4260 - 6.4301 - 6.4421 - 6.4570 - 6.4656 - 6.4798 - 6.4913 - 6.5009 - 6.5161 - 6.5358 - 6.5576 - 6.5687 - 6.5895 - 6.6166 - 6.6453 - 6.6826 - 6.6954 - 6.7551 - 6.8266 - 6.8660 - 6.9404 - 6.9699 - 6.9904 - 6.9999 - 7.0338 - 7.0544 - 7.0850 - 7.0977 - 7.1144 - 7.1167 - 7.1339 - 7.1454 - 7.1540 - 7.1775 - 7.2138 - 7.2261 - 7.2557 - 7.2734 - 7.3622 - 7.3788 - 7.3847 - 7.4147 - 7.4264 - 7.4415 - 7.4522 - 7.4709 - 7.4812 - 7.5083 - 7.5239 - 7.5398 - 7.5525 - 7.5646 - 7.5754 - 7.6011 - 7.6122 - 7.6499 - 7.6640 - 7.6891 - 7.7039 - 7.7144 - 7.7374 - 7.7546 - 7.7632 - 7.7791 - 7.7898 - 7.7998 - 7.8193 - 7.8221 - 7.8287 - 7.8488 - 7.8713 - 7.8773 - 7.8983 - 7.9095 - 7.9275 - 7.9477 - 7.9643 - 7.9778 - 7.9838 - 8.0321 - 8.0506 - 8.0708 - 8.0825 - 8.0910 - 8.1111 - 8.1603 - 8.2550 - 8.2879 - 8.2972 - 8.3229 - 8.3655 - 8.3810 - 8.3835 - 8.4080 - 8.4274 - 8.4694 - 8.4930 - 8.5107 - 8.5396 - 8.5515 - 8.5838 - 8.6008 - 8.6153 - 8.6324 - 8.6408 - 8.6491 - 8.6529 - 8.6697 - 8.6786 - 8.6923 - 8.6951 - 8.7099 - 8.7195 - 8.7341 - 8.7486 - 8.7541 - 8.7720 - 8.7922 - 8.8080 - 8.8284 - 8.8369 - 8.8576 - 8.8740 - 8.8881 - 8.8991 - 8.9151 - 8.9289 - 8.9434 - 8.9594 - 8.9716 - 8.9851 - 9.0121 - 9.0372 - 9.0387 - 9.0593 - 9.0697 - 9.0851 - 9.0959 - 9.1011 - 9.1366 - 9.1480 - 9.1548 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_10 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_10 deleted file mode 100644 index a65fd3fa7..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_10 +++ /dev/null @@ -1,461 +0,0 @@ --3.1405 --2.9746 --2.9458 --2.9280 --2.7810 --2.7511 --2.7364 --2.5644 --2.2375 --2.2029 --2.1897 --2.0787 --2.0442 --2.0385 --2.0078 --1.9690 --1.9565 --1.8606 --1.8235 --1.7855 --1.6704 --1.6620 --1.5992 --1.5111 --1.4921 --1.4702 --1.4372 --1.4200 --1.3994 --1.3030 --1.2801 --1.2605 --1.2512 --1.2409 --1.2203 --1.1087 --1.0636 --1.0180 --0.7755 --0.7465 --0.7277 --0.7144 --0.6868 --0.6553 --0.5811 --0.5526 --0.5231 --0.5039 --0.4824 --0.4573 --0.3390 --0.2238 --0.1958 --0.1721 --0.1585 --0.1320 --0.1028 --0.0466 --0.0135 - 0.0016 - 0.0051 - 0.0422 - 0.0513 - 0.0632 - 0.0900 - 0.0970 - 0.1759 - 0.1884 - 0.2142 - 0.2326 - 0.2671 - 0.3006 - 0.6604 - 0.6768 - 0.6936 - 0.7094 - 0.7160 - 0.7295 - 0.7567 - 0.7612 - 0.7838 - 0.8003 - 0.8081 - 0.8307 - 0.8855 - 0.8974 - 0.9068 - 0.9223 - 0.9442 - 0.9617 - 0.9708 - 0.9798 - 0.9923 - 1.0040 - 1.0274 - 1.0499 - 1.1189 - 1.1388 - 1.1728 - 1.2549 - 1.2772 - 1.3005 - 1.3215 - 1.3319 - 1.3445 - 1.3889 - 1.4589 - 1.4851 - 1.5033 - 1.5162 - 1.5275 - 1.5383 - 1.6267 - 1.6439 - 1.6540 - 1.6776 - 1.6848 - 1.7000 - 1.7125 - 1.7314 - 1.7516 - 1.8158 - 1.8401 - 1.8839 - 1.8908 - 1.9009 - 1.9436 - 2.1481 - 2.1584 - 2.1760 - 2.1840 - 2.1979 - 2.2117 - 2.2202 - 2.2392 - 2.2534 - 2.2710 - 2.2859 - 2.3058 - 2.3801 - 2.4002 - 2.4154 - 2.4410 - 2.4610 - 2.4757 - 2.5632 - 2.5936 - 2.6134 - 2.7162 - 2.7258 - 2.7489 - 2.7715 - 2.7973 - 2.8252 - 2.8878 - 2.8992 - 2.9174 - 2.9306 - 2.9741 - 2.9965 - 3.0579 - 3.0740 - 3.0803 - 3.0947 - 3.1131 - 3.1208 - 3.1287 - 3.1372 - 3.1503 - 3.1584 - 3.1712 - 3.1876 - 3.2772 - 3.3118 - 3.3263 - 3.5278 - 3.5542 - 3.5612 - 3.6047 - 3.6220 - 3.6421 - 3.6561 - 3.6677 - 3.6891 - 3.7289 - 3.7485 - 3.7606 - 3.7688 - 3.7796 - 3.7984 - 3.8124 - 3.8235 - 3.8369 - 3.8444 - 3.8601 - 3.8759 - 3.8814 - 3.8881 - 3.9078 - 3.9664 - 3.9861 - 4.0069 - 4.0217 - 4.0317 - 4.0683 - 4.1142 - 4.1209 - 4.1527 - 4.1848 - 4.2103 - 4.2359 - 4.2514 - 4.2570 - 4.2680 - 4.2985 - 4.3092 - 4.3240 - 4.3374 - 4.3459 - 4.3606 - 4.3759 - 4.3898 - 4.4072 - 4.4451 - 4.4747 - 4.4807 - 4.4933 - 4.5058 - 4.5185 - 4.5257 - 4.5335 - 4.5476 - 4.5587 - 4.5719 - 4.5753 - 4.5813 - 4.5925 - 4.6046 - 4.6175 - 4.6247 - 4.6481 - 4.6579 - 4.6761 - 4.6858 - 4.8301 - 4.8521 - 4.9051 - 4.9664 - 4.9771 - 4.9920 - 4.9978 - 5.0220 - 5.0366 - 5.0823 - 5.0894 - 5.0994 - 5.1063 - 5.1188 - 5.1428 - 5.1544 - 5.1708 - 5.1986 - 5.2074 - 5.2180 - 5.2370 - 5.2478 - 5.2622 - 5.2800 - 5.3026 - 5.3122 - 5.3319 - 5.4399 - 5.4567 - 5.4665 - 5.4926 - 5.5101 - 5.5249 - 5.5361 - 5.5536 - 5.5765 - 5.5977 - 5.6112 - 5.6370 - 5.6523 - 5.6706 - 5.6863 - 5.7179 - 5.7715 - 5.7806 - 5.7983 - 5.8136 - 5.8468 - 5.8526 - 5.8773 - 5.8857 - 5.8973 - 5.9183 - 5.9305 - 5.9507 - 5.9705 - 5.9831 - 5.9872 - 5.9982 - 6.0089 - 6.0272 - 6.0324 - 6.0499 - 6.0704 - 6.3696 - 6.3980 - 6.4184 - 6.4394 - 6.4467 - 6.4688 - 6.5092 - 6.5224 - 6.5337 - 6.5955 - 6.6023 - 6.6184 - 6.6317 - 6.6397 - 6.6582 - 6.6727 - 6.6823 - 6.6914 - 6.7042 - 6.7262 - 6.7413 - 6.7814 - 6.8097 - 6.8204 - 6.8423 - 6.8528 - 6.8736 - 6.8985 - 6.9085 - 6.9250 - 6.9337 - 6.9529 - 6.9721 - 6.9787 - 6.9978 - 7.0380 - 7.0793 - 7.1086 - 7.1146 - 7.1289 - 7.1411 - 7.1572 - 7.1831 - 7.1997 - 7.2120 - 7.2232 - 7.2342 - 7.2467 - 7.2696 - 7.2855 - 7.3016 - 7.3762 - 7.3839 - 7.4030 - 7.4303 - 7.4343 - 7.4455 - 7.4568 - 7.4656 - 7.4755 - 7.5160 - 7.5345 - 7.5420 - 7.5631 - 7.5753 - 7.5972 - 7.6056 - 7.6207 - 7.6427 - 7.6942 - 7.7245 - 7.7349 - 7.7464 - 7.7758 - 7.7839 - 7.8041 - 7.8201 - 7.8311 - 7.8381 - 7.8570 - 7.8820 - 7.9443 - 7.9596 - 7.9775 - 7.9975 - 8.0483 - 8.0521 - 8.0600 - 8.0730 - 8.0871 - 8.0943 - 8.1061 - 8.1211 - 8.1950 - 8.2105 - 8.2265 - 8.2478 - 8.2567 - 8.2626 - 8.2749 - 8.2960 - 8.3126 - 8.3316 - 8.3449 - 8.3546 - 8.3672 - 8.3819 - 8.3914 - 8.4145 - 8.4213 - 8.4290 - 8.4512 - 8.5570 - 8.5804 - 8.6015 - 8.6102 - 8.6151 - 8.6379 - 8.6508 - 8.6567 - 8.6607 - 8.6704 - 8.6892 - 8.6948 - 8.7129 - 8.7268 - 8.7389 - 8.7586 - 8.7725 - 8.7761 - 8.8033 - 8.8120 - 8.8252 - 8.8309 - 8.8467 - 8.8600 - 8.8754 - 8.8845 - 8.8995 - 8.9093 - 8.9211 - 8.9398 - 8.9482 - 8.9706 - 8.9770 - 8.9843 - 8.9991 - 9.0232 - 9.0685 - 9.0957 - 9.1166 - 9.1719 - 9.2008 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_11 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_11 deleted file mode 100644 index 8ae4e3740..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_11 +++ /dev/null @@ -1,461 +0,0 @@ --3.1405 --2.9706 --2.9545 --2.9227 --2.7828 --2.7552 --2.7303 --2.5655 --2.2327 --2.2152 --2.1810 --2.0642 --2.0512 --2.0344 --2.0094 --1.9923 --1.9521 --1.8649 --1.8089 --1.7861 --1.6836 --1.6407 --1.6137 --1.5060 --1.4831 --1.4654 --1.4412 --1.4287 --1.4017 --1.3001 --1.2876 --1.2704 --1.2646 --1.2293 --1.1883 --1.1142 --1.0616 --1.0333 --0.7752 --0.7562 --0.7205 --0.7052 --0.6857 --0.6602 --0.5719 --0.5432 --0.5305 --0.5119 --0.4765 --0.4640 --0.3387 --0.2346 --0.1878 --0.1751 --0.1502 --0.1352 --0.1125 --0.0399 --0.0189 --0.0111 - 0.0126 - 0.0200 - 0.0542 - 0.0669 - 0.0963 - 0.1077 - 0.1788 - 0.1959 - 0.2290 - 0.2442 - 0.2676 - 0.2801 - 0.6619 - 0.6863 - 0.6962 - 0.7078 - 0.7199 - 0.7357 - 0.7446 - 0.7610 - 0.7784 - 0.7991 - 0.8181 - 0.8283 - 0.8677 - 0.8962 - 0.9091 - 0.9253 - 0.9397 - 0.9547 - 0.9690 - 0.9831 - 0.9944 - 1.0056 - 1.0134 - 1.0537 - 1.1156 - 1.1564 - 1.1671 - 1.2535 - 1.2810 - 1.2947 - 1.3246 - 1.3446 - 1.3602 - 1.3716 - 1.4454 - 1.4789 - 1.4940 - 1.5098 - 1.5304 - 1.5557 - 1.6212 - 1.6408 - 1.6599 - 1.6725 - 1.6827 - 1.6960 - 1.7186 - 1.7378 - 1.7521 - 1.8241 - 1.8440 - 1.8600 - 1.8990 - 1.9119 - 1.9379 - 2.1321 - 2.1561 - 2.1796 - 2.1954 - 2.2044 - 2.2187 - 2.2300 - 2.2487 - 2.2601 - 2.2754 - 2.2952 - 2.3020 - 2.3874 - 2.3942 - 2.4043 - 2.4367 - 2.4437 - 2.4838 - 2.5787 - 2.5902 - 2.5999 - 2.7137 - 2.7377 - 2.7552 - 2.7704 - 2.7895 - 2.8093 - 2.8750 - 2.8942 - 2.9318 - 2.9450 - 2.9541 - 2.9886 - 3.0512 - 3.0668 - 3.0848 - 3.0949 - 3.1018 - 3.1087 - 3.1258 - 3.1420 - 3.1537 - 3.1667 - 3.1881 - 3.2002 - 3.2874 - 3.3066 - 3.3178 - 3.5289 - 3.5502 - 3.5678 - 3.5992 - 3.6197 - 3.6353 - 3.6576 - 3.6684 - 3.6826 - 3.7211 - 3.7419 - 3.7638 - 3.7726 - 3.7885 - 3.7960 - 3.8117 - 3.8243 - 3.8378 - 3.8547 - 3.8688 - 3.8746 - 3.8817 - 3.8919 - 3.9154 - 3.9596 - 3.9827 - 4.0016 - 4.0273 - 4.0433 - 4.0706 - 4.1161 - 4.1217 - 4.1354 - 4.2064 - 4.2179 - 4.2263 - 4.2420 - 4.2590 - 4.2707 - 4.2934 - 4.3172 - 4.3258 - 4.3441 - 4.3482 - 4.3631 - 4.3753 - 4.3872 - 4.3993 - 4.4442 - 4.4614 - 4.4794 - 4.4974 - 4.5013 - 4.5119 - 4.5232 - 4.5328 - 4.5405 - 4.5511 - 4.5697 - 4.5775 - 4.5908 - 4.6003 - 4.6075 - 4.6290 - 4.6375 - 4.6437 - 4.6502 - 4.6695 - 4.6767 - 4.8294 - 4.8789 - 4.8852 - 4.9731 - 4.9804 - 4.9934 - 5.0081 - 5.0125 - 5.0212 - 5.0659 - 5.0840 - 5.0971 - 5.1062 - 5.1208 - 5.1394 - 5.1571 - 5.1758 - 5.1872 - 5.2085 - 5.2376 - 5.2430 - 5.2533 - 5.2764 - 5.2982 - 5.3044 - 5.3103 - 5.3253 - 5.4270 - 5.4483 - 5.4604 - 5.4951 - 5.5071 - 5.5168 - 5.5618 - 5.5710 - 5.5942 - 5.5998 - 5.6162 - 5.6255 - 5.6421 - 5.6643 - 5.6783 - 5.7016 - 5.7781 - 5.7947 - 5.7984 - 5.8119 - 5.8284 - 5.8599 - 5.8785 - 5.8830 - 5.8938 - 5.9270 - 5.9318 - 5.9440 - 5.9529 - 5.9681 - 5.9855 - 6.0043 - 6.0144 - 6.0250 - 6.0328 - 6.0524 - 6.0592 - 6.3789 - 6.4123 - 6.4179 - 6.4397 - 6.4488 - 6.4710 - 6.5047 - 6.5141 - 6.5304 - 6.5949 - 6.6025 - 6.6176 - 6.6243 - 6.6365 - 6.6433 - 6.6637 - 6.6750 - 6.6875 - 6.7104 - 6.7230 - 6.7447 - 6.7928 - 6.8098 - 6.8149 - 6.8493 - 6.8581 - 6.8714 - 6.8984 - 6.9243 - 6.9371 - 6.9530 - 6.9576 - 6.9728 - 6.9855 - 7.0021 - 7.0301 - 7.0851 - 7.1033 - 7.1226 - 7.1348 - 7.1480 - 7.1605 - 7.1818 - 7.1946 - 7.2021 - 7.2175 - 7.2302 - 7.2385 - 7.2782 - 7.2916 - 7.3119 - 7.3739 - 7.3918 - 7.4004 - 7.4135 - 7.4245 - 7.4372 - 7.4515 - 7.4632 - 7.4679 - 7.5287 - 7.5350 - 7.5429 - 7.5641 - 7.5763 - 7.5971 - 7.6117 - 7.6320 - 7.6353 - 7.6962 - 7.7097 - 7.7229 - 7.7496 - 7.7661 - 7.7874 - 7.8109 - 7.8186 - 7.8277 - 7.8495 - 7.8590 - 7.8819 - 7.9519 - 7.9574 - 7.9884 - 8.0116 - 8.0221 - 8.0462 - 8.0580 - 8.0724 - 8.0939 - 8.0969 - 8.1102 - 8.1243 - 8.1861 - 8.1932 - 8.2203 - 8.2398 - 8.2601 - 8.2696 - 8.2799 - 8.3158 - 8.3255 - 8.3331 - 8.3411 - 8.3539 - 8.3661 - 8.3768 - 8.3983 - 8.4047 - 8.4084 - 8.4263 - 8.4419 - 8.5576 - 8.5798 - 8.5911 - 8.6170 - 8.6294 - 8.6366 - 8.6554 - 8.6686 - 8.6775 - 8.6815 - 8.6962 - 8.7111 - 8.7168 - 8.7201 - 8.7368 - 8.7538 - 8.7640 - 8.7797 - 8.7988 - 8.8034 - 8.8107 - 8.8261 - 8.8370 - 8.8562 - 8.8674 - 8.8774 - 8.9001 - 8.9124 - 8.9196 - 8.9325 - 8.9423 - 8.9624 - 8.9764 - 8.9900 - 9.0016 - 9.0134 - 9.0685 - 9.0954 - 9.1168 - 9.1698 - 9.1943 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_12 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_12 deleted file mode 100644 index 279ab338a..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_12 +++ /dev/null @@ -1,461 +0,0 @@ --3.2017 --3.0261 --2.9918 --2.8137 --2.6584 --2.6375 --2.4951 --2.4710 --2.4365 --2.3989 --2.2967 --2.2673 --2.2448 --2.2184 --2.0914 --2.0379 --1.7817 --1.7604 --1.7243 --1.6897 --1.6778 --1.6527 --1.5874 --1.5296 --1.5082 --1.4828 --1.4637 --1.4529 --1.3333 --1.1887 --1.1773 --1.1311 --1.1170 --1.0159 --1.0056 --0.9628 --0.9375 --0.9317 --0.8939 --0.8395 --0.8250 --0.8087 --0.7549 --0.7475 --0.7325 --0.7126 --0.6817 --0.5861 --0.5455 --0.2998 --0.2790 --0.2485 --0.2199 --0.1952 --0.1862 --0.1666 --0.1028 --0.0570 --0.0330 --0.0177 - 0.0085 - 0.0308 - 0.1113 - 0.1453 - 0.1494 - 0.2103 - 0.2783 - 0.3032 - 0.3219 - 0.3392 - 0.3685 - 0.3944 - 0.4423 - 0.4682 - 0.4757 - 0.4977 - 0.5356 - 0.5562 - 0.5657 - 0.6116 - 0.6476 - 0.6662 - 0.6846 - 0.7097 - 0.7306 - 0.7433 - 0.7746 - 0.7936 - 0.8741 - 0.8816 - 0.9133 - 0.9495 - 1.1605 - 1.1728 - 1.1989 - 1.2220 - 1.2440 - 1.2557 - 1.2678 - 1.2884 - 1.3151 - 1.3336 - 1.3788 - 1.3886 - 1.4172 - 1.4383 - 1.4685 - 1.4778 - 1.5027 - 1.5293 - 1.5987 - 1.6554 - 1.7295 - 1.7568 - 1.7812 - 1.7982 - 1.8128 - 1.8486 - 1.9087 - 1.9224 - 1.9361 - 1.9510 - 1.9648 - 1.9790 - 1.9921 - 2.0170 - 2.0361 - 2.0522 - 2.0784 - 2.0990 - 2.1295 - 2.1432 - 2.1598 - 2.1773 - 2.1991 - 2.2059 - 2.2327 - 2.2393 - 2.2697 - 2.2936 - 2.6102 - 2.6381 - 2.6538 - 2.6833 - 2.6862 - 2.6950 - 2.7019 - 2.7345 - 2.7579 - 2.7761 - 2.8000 - 2.8113 - 2.8340 - 2.8543 - 2.8683 - 2.8844 - 2.9014 - 2.9134 - 2.9226 - 2.9445 - 2.9552 - 2.9651 - 2.9867 - 3.0241 - 3.0379 - 3.0630 - 3.0770 - 3.0941 - 3.1522 - 3.1766 - 3.2113 - 3.2254 - 3.2436 - 3.2649 - 3.2857 - 3.3162 - 3.3273 - 3.3562 - 3.3971 - 3.4070 - 3.4132 - 3.4268 - 3.4441 - 3.4556 - 3.4750 - 3.5245 - 3.5438 - 3.5619 - 3.5712 - 3.5899 - 3.6176 - 3.6267 - 3.6414 - 3.6479 - 3.6642 - 3.6923 - 3.7083 - 3.7734 - 3.8057 - 3.9030 - 3.9212 - 3.9710 - 4.0085 - 4.0319 - 4.0446 - 4.0786 - 4.0915 - 4.1817 - 4.2109 - 4.2227 - 4.2288 - 4.2542 - 4.2690 - 4.2787 - 4.2864 - 4.2956 - 4.3195 - 4.3357 - 4.3469 - 4.3584 - 4.3619 - 4.3761 - 4.4110 - 4.4976 - 4.5518 - 4.5666 - 4.5725 - 4.6083 - 4.6178 - 4.6384 - 4.6512 - 4.6659 - 4.6836 - 4.6980 - 4.7188 - 4.7257 - 4.7405 - 4.7515 - 4.7642 - 4.7920 - 4.8070 - 4.8404 - 4.8539 - 4.8924 - 4.9116 - 4.9289 - 4.9437 - 4.9600 - 4.9779 - 4.9959 - 4.9978 - 5.0092 - 5.0340 - 5.0376 - 5.0574 - 5.0741 - 5.0813 - 5.0936 - 5.1210 - 5.1680 - 5.1987 - 5.3080 - 5.3273 - 5.3539 - 5.3623 - 5.3813 - 5.4134 - 5.4346 - 5.4661 - 5.5065 - 5.5489 - 5.5597 - 5.5739 - 5.5883 - 5.6266 - 5.6439 - 5.6473 - 5.6689 - 5.6860 - 5.7038 - 5.7224 - 5.7274 - 5.7365 - 5.7527 - 5.7681 - 5.7869 - 5.7963 - 5.8330 - 5.8456 - 5.8638 - 5.8894 - 5.8939 - 5.9251 - 5.9662 - 5.9793 - 6.0018 - 6.0106 - 6.0254 - 6.0449 - 6.0553 - 6.0889 - 6.1095 - 6.1134 - 6.1339 - 6.1394 - 6.1588 - 6.2139 - 6.2283 - 6.2489 - 6.2707 - 6.2897 - 6.2972 - 6.3112 - 6.3381 - 6.3457 - 6.3611 - 6.3807 - 6.3898 - 6.4017 - 6.4161 - 6.4274 - 6.4412 - 6.4527 - 6.4598 - 6.4757 - 6.4943 - 6.5056 - 6.5181 - 6.5313 - 6.5627 - 6.5921 - 6.6059 - 6.6154 - 6.6359 - 6.6763 - 6.7136 - 6.7644 - 6.8299 - 6.8647 - 6.9473 - 6.9728 - 6.9915 - 7.0071 - 7.0282 - 7.0570 - 7.0703 - 7.0794 - 7.1030 - 7.1200 - 7.1326 - 7.1565 - 7.1693 - 7.1762 - 7.2087 - 7.2349 - 7.2551 - 7.2887 - 7.3421 - 7.3674 - 7.3863 - 7.4131 - 7.4266 - 7.4448 - 7.4585 - 7.4742 - 7.4908 - 7.5086 - 7.5322 - 7.5431 - 7.5532 - 7.5720 - 7.5791 - 7.5965 - 7.6074 - 7.6530 - 7.6593 - 7.6825 - 7.7053 - 7.7137 - 7.7370 - 7.7588 - 7.7634 - 7.7807 - 7.7908 - 7.8003 - 7.8103 - 7.8321 - 7.8335 - 7.8497 - 7.8588 - 7.8740 - 7.8915 - 7.9046 - 7.9324 - 7.9500 - 7.9633 - 7.9930 - 8.0043 - 8.0390 - 8.0470 - 8.0567 - 8.0655 - 8.0940 - 8.1152 - 8.1558 - 8.2545 - 8.2704 - 8.3059 - 8.3319 - 8.3451 - 8.3741 - 8.3909 - 8.4054 - 8.4435 - 8.4722 - 8.4906 - 8.5214 - 8.5338 - 8.5457 - 8.5575 - 8.5905 - 8.5973 - 8.6188 - 8.6388 - 8.6500 - 8.6574 - 8.6720 - 8.6807 - 8.6937 - 8.7000 - 8.7155 - 8.7261 - 8.7392 - 8.7530 - 8.7620 - 8.7801 - 8.7983 - 8.8127 - 8.8329 - 8.8428 - 8.8587 - 8.8710 - 8.8886 - 8.8960 - 8.9084 - 8.9183 - 8.9456 - 8.9572 - 8.9649 - 8.9935 - 9.0165 - 9.0363 - 9.0458 - 9.0584 - 9.0696 - 9.0793 - 9.0822 - 9.1112 - 9.1231 - 9.1573 - 9.1675 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_13 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_13 deleted file mode 100644 index 8c4394bf1..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_13 +++ /dev/null @@ -1,461 +0,0 @@ --3.1400 --2.9766 --2.9554 --2.9144 --2.7845 --2.7605 --2.7241 --2.5659 --2.2386 --2.2156 --2.1813 --2.0745 --2.0438 --2.0307 --2.0168 --1.9708 --1.9524 --1.8512 --1.8307 --1.7792 --1.6851 --1.6609 --1.5957 --1.5151 --1.4801 --1.4711 --1.4479 --1.4201 --1.3990 --1.3193 --1.3023 --1.2613 --1.2319 --1.2216 --1.2074 --1.0924 --1.0721 --1.0220 --0.7903 --0.7666 --0.7295 --0.6959 --0.6850 --0.6564 --0.5876 --0.5559 --0.5143 --0.5000 --0.4924 --0.4398 --0.3340 --0.2198 --0.2116 --0.1859 --0.1724 --0.1199 --0.0935 --0.0409 --0.0211 --0.0042 - 0.0216 - 0.0294 - 0.0473 - 0.0657 - 0.0832 - 0.1173 - 0.1696 - 0.2048 - 0.2325 - 0.2512 - 0.2631 - 0.2677 - 0.6384 - 0.6609 - 0.6975 - 0.7182 - 0.7288 - 0.7471 - 0.7584 - 0.7674 - 0.7735 - 0.7933 - 0.8222 - 0.8371 - 0.8698 - 0.8788 - 0.8975 - 0.9208 - 0.9323 - 0.9459 - 0.9790 - 0.9901 - 0.9959 - 1.0160 - 1.0378 - 1.0515 - 1.1093 - 1.1351 - 1.1830 - 1.2522 - 1.2566 - 1.3163 - 1.3339 - 1.3384 - 1.3567 - 1.3718 - 1.4576 - 1.4679 - 1.5101 - 1.5141 - 1.5269 - 1.5606 - 1.6163 - 1.6398 - 1.6568 - 1.6732 - 1.6820 - 1.7060 - 1.7195 - 1.7394 - 1.7521 - 1.8121 - 1.8346 - 1.8731 - 1.8992 - 1.9113 - 1.9273 - 2.1222 - 2.1431 - 2.1728 - 2.1968 - 2.2090 - 2.2262 - 2.2411 - 2.2497 - 2.2576 - 2.2734 - 2.2834 - 2.3119 - 2.3651 - 2.4026 - 2.4091 - 2.4316 - 2.4483 - 2.4820 - 2.5637 - 2.5972 - 2.6250 - 2.7081 - 2.7271 - 2.7564 - 2.7822 - 2.7924 - 2.8067 - 2.8827 - 2.8995 - 2.9401 - 2.9427 - 2.9640 - 2.9871 - 3.0456 - 3.0590 - 3.0757 - 3.0931 - 3.1009 - 3.1165 - 3.1263 - 3.1323 - 3.1510 - 3.1691 - 3.1791 - 3.1991 - 3.2817 - 3.3102 - 3.3349 - 3.5300 - 3.5411 - 3.5662 - 3.6004 - 3.6277 - 3.6465 - 3.6705 - 3.6839 - 3.6912 - 3.7243 - 3.7331 - 3.7457 - 3.7633 - 3.7835 - 3.7907 - 3.8068 - 3.8183 - 3.8307 - 3.8579 - 3.8687 - 3.8749 - 3.8899 - 3.9070 - 3.9157 - 3.9632 - 3.9803 - 3.9942 - 4.0280 - 4.0499 - 4.0655 - 4.1175 - 4.1256 - 4.1453 - 4.1883 - 4.2182 - 4.2280 - 4.2355 - 4.2671 - 4.2885 - 4.2957 - 4.2980 - 4.3176 - 4.3353 - 4.3441 - 4.3595 - 4.3815 - 4.3865 - 4.4020 - 4.4240 - 4.4476 - 4.4690 - 4.4906 - 4.5014 - 4.5099 - 4.5232 - 4.5326 - 4.5462 - 4.5548 - 4.5695 - 4.5799 - 4.5917 - 4.6086 - 4.6175 - 4.6241 - 4.6334 - 4.6443 - 4.6499 - 4.6777 - 4.6956 - 4.8362 - 4.8535 - 4.9051 - 4.9580 - 4.9721 - 4.9976 - 5.0069 - 5.0129 - 5.0260 - 5.0686 - 5.0768 - 5.1059 - 5.1152 - 5.1287 - 5.1544 - 5.1623 - 5.1814 - 5.2017 - 5.2225 - 5.2277 - 5.2431 - 5.2519 - 5.2669 - 5.2734 - 5.3117 - 5.3184 - 5.3279 - 5.4220 - 5.4456 - 5.4599 - 5.4801 - 5.5019 - 5.5439 - 5.5536 - 5.5669 - 5.5742 - 5.5793 - 5.5857 - 5.6376 - 5.6537 - 5.6697 - 5.6952 - 5.7166 - 5.7762 - 5.7826 - 5.7969 - 5.8174 - 5.8355 - 5.8538 - 5.8785 - 5.8872 - 5.9076 - 5.9147 - 5.9245 - 5.9495 - 5.9626 - 5.9750 - 5.9892 - 5.9988 - 6.0062 - 6.0280 - 6.0396 - 6.0517 - 6.0655 - 6.3739 - 6.3928 - 6.4215 - 6.4347 - 6.4547 - 6.4663 - 6.5074 - 6.5177 - 6.5286 - 6.5860 - 6.6050 - 6.6145 - 6.6310 - 6.6375 - 6.6574 - 6.6717 - 6.6867 - 6.6931 - 6.7091 - 6.7296 - 6.7409 - 6.7778 - 6.8177 - 6.8198 - 6.8345 - 6.8585 - 6.8729 - 6.8917 - 6.9103 - 6.9252 - 6.9427 - 6.9577 - 6.9691 - 6.9841 - 6.9942 - 7.0175 - 7.0800 - 7.1064 - 7.1215 - 7.1310 - 7.1447 - 7.1555 - 7.1858 - 7.2017 - 7.2176 - 7.2214 - 7.2407 - 7.2506 - 7.2588 - 7.2809 - 7.3026 - 7.3813 - 7.3877 - 7.4123 - 7.4194 - 7.4298 - 7.4506 - 7.4585 - 7.4634 - 7.4815 - 7.4991 - 7.5340 - 7.5529 - 7.5726 - 7.5850 - 7.5940 - 7.6165 - 7.6201 - 7.6384 - 7.6873 - 7.7157 - 7.7452 - 7.7521 - 7.7671 - 7.7820 - 7.8105 - 7.8188 - 7.8299 - 7.8456 - 7.8573 - 7.8723 - 7.9386 - 7.9532 - 7.9811 - 8.0181 - 8.0327 - 8.0519 - 8.0621 - 8.0690 - 8.0837 - 8.1007 - 8.1158 - 8.1220 - 8.1902 - 8.2065 - 8.2178 - 8.2399 - 8.2475 - 8.2673 - 8.2769 - 8.3001 - 8.3296 - 8.3382 - 8.3545 - 8.3608 - 8.3663 - 8.3800 - 8.3944 - 8.4028 - 8.4171 - 8.4297 - 8.4464 - 8.5449 - 8.5731 - 8.5948 - 8.6113 - 8.6262 - 8.6357 - 8.6524 - 8.6627 - 8.6715 - 8.6850 - 8.6925 - 8.6953 - 8.7082 - 8.7321 - 8.7453 - 8.7551 - 8.7652 - 8.7738 - 8.7904 - 8.8059 - 8.8192 - 8.8274 - 8.8434 - 8.8476 - 8.8716 - 8.8901 - 8.9021 - 8.9163 - 8.9211 - 8.9364 - 8.9523 - 8.9582 - 8.9662 - 8.9839 - 9.0002 - 9.0251 - 9.0722 - 9.0842 - 9.1217 - 9.1765 - 9.2015 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_14 b/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_14 deleted file mode 100644 index e2b904c40..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/eigvals_14 +++ /dev/null @@ -1,461 +0,0 @@ --3.1404 --2.9684 --2.9553 --2.9264 --2.7795 --2.7541 --2.7324 --2.5636 --2.2309 --2.2216 --2.1875 --2.0792 --2.0341 --2.0175 --2.0068 --1.9996 --1.9596 --1.8497 --1.8121 --1.7949 --1.6882 --1.6329 --1.6138 --1.4971 --1.4854 --1.4704 --1.4399 --1.4333 --1.4018 --1.3215 --1.2937 --1.2615 --1.2492 --1.2248 --1.1996 --1.0998 --1.0581 --1.0418 --0.7861 --0.7529 --0.7244 --0.7072 --0.6845 --0.6641 --0.5612 --0.5519 --0.5209 --0.5042 --0.4802 --0.4630 --0.3316 --0.2302 --0.2019 --0.1670 --0.1406 --0.1287 --0.1110 --0.0562 --0.0240 --0.0063 - 0.0096 - 0.0277 - 0.0517 - 0.0616 - 0.0791 - 0.0954 - 0.1817 - 0.1971 - 0.2320 - 0.2444 - 0.2768 - 0.2969 - 0.6380 - 0.6667 - 0.6862 - 0.7115 - 0.7305 - 0.7384 - 0.7520 - 0.7654 - 0.7704 - 0.8091 - 0.8209 - 0.8343 - 0.8809 - 0.8893 - 0.9041 - 0.9199 - 0.9360 - 0.9576 - 0.9704 - 0.9908 - 0.9985 - 1.0089 - 1.0237 - 1.0510 - 1.1027 - 1.1445 - 1.1633 - 1.2640 - 1.2849 - 1.3026 - 1.3129 - 1.3416 - 1.3654 - 1.4022 - 1.4482 - 1.4558 - 1.4837 - 1.5071 - 1.5158 - 1.5565 - 1.6136 - 1.6479 - 1.6603 - 1.6711 - 1.6882 - 1.7064 - 1.7226 - 1.7521 - 1.7655 - 1.8304 - 1.8502 - 1.8652 - 1.8808 - 1.8979 - 1.9423 - 2.1236 - 2.1461 - 2.1769 - 2.1890 - 2.2011 - 2.2130 - 2.2226 - 2.2502 - 2.2678 - 2.2741 - 2.2980 - 2.3109 - 2.3840 - 2.3913 - 2.4193 - 2.4370 - 2.4478 - 2.4617 - 2.5584 - 2.5992 - 2.6130 - 2.7033 - 2.7393 - 2.7511 - 2.7746 - 2.7992 - 2.8216 - 2.8773 - 2.8987 - 2.9155 - 2.9314 - 2.9693 - 2.9949 - 3.0496 - 3.0644 - 3.0721 - 3.0884 - 3.1100 - 3.1195 - 3.1263 - 3.1402 - 3.1534 - 3.1727 - 3.1939 - 3.2240 - 3.2631 - 3.3039 - 3.3218 - 3.5202 - 3.5489 - 3.5737 - 3.5985 - 3.6193 - 3.6411 - 3.6586 - 3.6754 - 3.6978 - 3.7189 - 3.7449 - 3.7664 - 3.7788 - 3.7882 - 3.7950 - 3.8117 - 3.8204 - 3.8342 - 3.8482 - 3.8574 - 3.8736 - 3.8786 - 3.8963 - 3.9152 - 3.9724 - 3.9900 - 4.0001 - 4.0130 - 4.0198 - 4.0690 - 4.1017 - 4.1210 - 4.1394 - 4.1930 - 4.2192 - 4.2263 - 4.2479 - 4.2656 - 4.2718 - 4.2974 - 4.3103 - 4.3196 - 4.3317 - 4.3529 - 4.3625 - 4.3718 - 4.3926 - 4.4041 - 4.4458 - 4.4552 - 4.4813 - 4.4883 - 4.5138 - 4.5178 - 4.5271 - 4.5400 - 4.5482 - 4.5610 - 4.5684 - 4.5773 - 4.5901 - 4.5984 - 4.6113 - 4.6147 - 4.6251 - 4.6453 - 4.6543 - 4.6759 - 4.7086 - 4.8283 - 4.8739 - 4.8940 - 4.9671 - 4.9730 - 4.9921 - 5.0044 - 5.0196 - 5.0432 - 5.0745 - 5.0884 - 5.0927 - 5.1032 - 5.1204 - 5.1265 - 5.1591 - 5.1711 - 5.1957 - 5.2113 - 5.2250 - 5.2319 - 5.2581 - 5.2741 - 5.2795 - 5.2953 - 5.3217 - 5.3330 - 5.4130 - 5.4424 - 5.4651 - 5.4914 - 5.5063 - 5.5323 - 5.5441 - 5.5510 - 5.5728 - 5.5921 - 5.6101 - 5.6346 - 5.6416 - 5.6658 - 5.6770 - 5.7083 - 5.7725 - 5.7877 - 5.8016 - 5.8134 - 5.8536 - 5.8653 - 5.8724 - 5.8916 - 5.9075 - 5.9192 - 5.9273 - 5.9461 - 5.9527 - 5.9699 - 5.9777 - 6.0093 - 6.0141 - 6.0311 - 6.0474 - 6.0541 - 6.0802 - 6.3808 - 6.4014 - 6.4171 - 6.4321 - 6.4472 - 6.4737 - 6.5029 - 6.5201 - 6.5303 - 6.5786 - 6.6007 - 6.6164 - 6.6363 - 6.6550 - 6.6648 - 6.6707 - 6.6796 - 6.7005 - 6.7021 - 6.7244 - 6.7403 - 6.7934 - 6.8100 - 6.8227 - 6.8462 - 6.8633 - 6.8748 - 6.8924 - 6.9138 - 6.9376 - 6.9519 - 6.9603 - 6.9677 - 6.9836 - 6.9949 - 7.0255 - 7.0656 - 7.0906 - 7.1029 - 7.1298 - 7.1449 - 7.1563 - 7.1849 - 7.1880 - 7.2037 - 7.2118 - 7.2409 - 7.2555 - 7.2686 - 7.2969 - 7.3155 - 7.3822 - 7.4011 - 7.4041 - 7.4105 - 7.4245 - 7.4377 - 7.4493 - 7.4613 - 7.4771 - 7.5055 - 7.5292 - 7.5507 - 7.5601 - 7.5704 - 7.5868 - 7.6183 - 7.6241 - 7.6514 - 7.6755 - 7.7042 - 7.7166 - 7.7497 - 7.7752 - 7.7888 - 7.8152 - 7.8313 - 7.8406 - 7.8542 - 7.8575 - 7.8739 - 7.9423 - 7.9633 - 7.9882 - 8.0085 - 8.0333 - 8.0405 - 8.0617 - 8.0758 - 8.0897 - 8.0985 - 8.1122 - 8.1235 - 8.1837 - 8.2064 - 8.2164 - 8.2388 - 8.2542 - 8.2754 - 8.2845 - 8.3071 - 8.3191 - 8.3346 - 8.3416 - 8.3595 - 8.3751 - 8.3835 - 8.3937 - 8.4060 - 8.4132 - 8.4255 - 8.4424 - 8.5599 - 8.5727 - 8.5982 - 8.6079 - 8.6243 - 8.6376 - 8.6409 - 8.6549 - 8.6700 - 8.6820 - 8.6907 - 8.6986 - 8.7146 - 8.7330 - 8.7482 - 8.7595 - 8.7660 - 8.7860 - 8.7974 - 8.8046 - 8.8150 - 8.8376 - 8.8470 - 8.8574 - 8.8642 - 8.8826 - 8.8935 - 8.9014 - 8.9209 - 8.9337 - 8.9517 - 8.9712 - 8.9773 - 8.9891 - 9.0049 - 9.0268 - 9.0560 - 9.0860 - 9.1232 - 9.1756 - 9.1969 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0/k_weights b/ml-dft-sandia/notebooks/dos2eband/snap_0/k_weights deleted file mode 100644 index 932964253..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0/k_weights +++ /dev/null @@ -1 +0,0 @@ -7.407407407407e-2, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1, 1.481481481481e-1 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/200327132835.err b/ml-dft-sandia/notebooks/dos2eband/snap_0_666/200327132835.err deleted file mode 100644 index 19ad444f9..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/200327132835.err +++ /dev/null @@ -1 +0,0 @@ -cp: failed to close ‘/home/namodin/MLDFT/output/200327132835/200327132835.out’: Disk quota exceeded diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/snap_0_666/Al.scf.pw deleted file mode 100644 index 00a6d929f..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/Al.scf.pw +++ /dev/null @@ -1,299 +0,0 @@ -Al.scf.pw -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.true., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ - -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.0019, -/ - -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 6 6 6 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000 0.00000000 0.00000000 -0.00000000 16.19800000 0.00000000 -0.00000000 0.00000000 16.19800000 - -ATOMIC_POSITIONS {alat} -Al 0.00317715 0.00115020 0.00422977 -Al 0.00020601 0.12325432 0.12276585 -Al 0.13205907 0.00069849 0.12880466 -Al 0.12035063 0.12233298 0.00500888 -Al 0.99616080 0.99965781 0.25468156 -Al 0.00462834 0.11696233 0.37753909 -Al 0.13126733 0.00105961 0.37584558 -Al 0.11831629 0.13176219 0.25212569 -Al 0.00779253 0.99842842 0.50068938 -Al 0.99406565 0.12050283 0.62795631 -Al 0.12039495 0.99518808 0.62583829 -Al 0.12049355 0.12381140 0.50177796 -Al 0.99335490 0.01245642 0.75437014 -Al 0.99553204 0.13002426 0.87495149 -Al 0.11943260 0.01288485 0.85395661 -Al 0.13138905 0.13208432 0.74220015 -Al 0.00382143 0.24709358 0.00053019 -Al 0.99204471 0.37073519 0.12626821 -Al 0.11874381 0.25060539 0.13404114 -Al 0.11679824 0.37202808 0.00098539 -Al 0.99223667 0.24879828 0.24894088 -Al 0.99033374 0.37367286 0.37740263 -Al 0.12258871 0.24839655 0.38475195 -Al 0.12073235 0.37545826 0.25391324 -Al 0.99414425 0.25962947 0.50477243 -Al 0.99545625 0.39077079 0.62318287 -Al 0.11229683 0.24772820 0.61759188 -Al 0.12817764 0.37661444 0.49803461 -Al 0.00321505 0.25783831 0.75237872 -Al 0.99978890 0.37320385 0.86750262 -Al 0.12814221 0.25837418 0.87188042 -Al 0.13120253 0.38190646 0.75012449 -Al 0.99484757 0.49812333 0.00609974 -Al 0.00874093 0.61918173 0.12645399 -Al 0.12780204 0.49617002 0.11988085 -Al 0.12226886 0.61840000 0.99658195 -Al 0.00793260 0.49965903 0.24600526 -Al 0.00325045 0.61742519 0.35830843 -Al 0.13001625 0.50497624 0.37276834 -Al 0.12888048 0.61619867 0.24525564 -Al 0.00725752 0.49718671 0.49005208 -Al 0.00809822 0.62296642 0.62954075 -Al 0.13096336 0.50063965 0.62282885 -Al 0.12195581 0.62021395 0.49527532 -Al 0.99547982 0.50080057 0.73804569 -Al 0.00972095 0.62755205 0.87195202 -Al 0.11302378 0.49835758 0.86591511 -Al 0.13264708 0.62729203 0.75399568 -Al 0.01326271 0.74521439 0.98957500 -Al 0.00308360 0.88595919 0.13014794 -Al 0.13008724 0.74119884 0.12955884 -Al 0.11689139 0.87730057 0.00074077 -Al 0.00598782 0.74653283 0.24416491 -Al 0.99993759 0.87055960 0.37502856 -Al 0.12679125 0.74442819 0.37338182 -Al 0.13173136 0.87223433 0.25545163 -Al 0.00075479 0.74591358 0.50343419 -Al 0.98829944 0.87376572 0.62937187 -Al 0.12462864 0.74836788 0.62116638 -Al 0.12111028 0.87199090 0.50129970 -Al 0.99367338 0.74957799 0.75284518 -Al 0.00069577 0.88157231 0.87119742 -Al 0.12945036 0.76313369 0.86763456 -Al 0.11475345 0.87795232 0.75038888 -Al 0.23626248 0.00319436 0.99166677 -Al 0.25757080 0.12700004 0.12783241 -Al 0.37099739 0.99374573 0.12173435 -Al 0.37029839 0.11613890 0.99404599 -Al 0.25302916 0.99711742 0.24225680 -Al 0.25196272 0.12266725 0.37109725 -Al 0.37381480 0.99324247 0.37948380 -Al 0.38064617 0.12924791 0.24513119 -Al 0.25254530 0.98903725 0.49475226 -Al 0.25394042 0.12783157 0.61666274 -Al 0.37372857 0.99731025 0.62863151 -Al 0.37756758 0.12120710 0.49756168 -Al 0.23710907 0.00496925 0.74787682 -Al 0.24708361 0.13299635 0.86870489 -Al 0.36903611 0.99772149 0.87386064 -Al 0.37613133 0.12940253 0.75595693 -Al 0.25074156 0.24968000 0.00237963 -Al 0.24176045 0.37397695 0.11819446 -Al 0.37099257 0.25277893 0.12126261 -Al 0.36491106 0.38167290 0.00319109 -Al 0.24943387 0.24137978 0.24963289 -Al 0.25168702 0.37152301 0.37586054 -Al 0.37679982 0.24767965 0.37002965 -Al 0.36566749 0.36687118 0.24719678 -Al 0.25668066 0.24935992 0.49689055 -Al 0.23688615 0.37325791 0.61362708 -Al 0.36775284 0.25295831 0.63339193 -Al 0.37058487 0.37232564 0.50641822 -Al 0.24058480 0.25887981 0.74450233 -Al 0.24768663 0.38273245 0.88066757 -Al 0.37052541 0.26712547 0.87335350 -Al 0.37038910 0.37579674 0.75276513 -Al 0.24253455 0.49942232 0.99487916 -Al 0.25074173 0.62442019 0.12243577 -Al 0.37311382 0.49914902 0.12420954 -Al 0.37320920 0.62350426 0.99376271 -Al 0.25389455 0.49538335 0.25271040 -Al 0.25658599 0.62317196 0.37349744 -Al 0.38212228 0.49034093 0.37947714 -Al 0.38090066 0.60896281 0.25545615 -Al 0.24329407 0.50142690 0.49126120 -Al 0.25269515 0.62955678 0.62841784 -Al 0.37042634 0.50105050 0.62697351 -Al 0.37084280 0.62520133 0.51267915 -Al 0.25231582 0.50422315 0.74908575 -Al 0.25083118 0.62883028 0.87233488 -Al 0.38054186 0.49697121 0.87200829 -Al 0.38857876 0.61850989 0.74785557 -Al 0.25779019 0.74847839 0.99939367 -Al 0.24911012 0.87420062 0.12270013 -Al 0.37379063 0.73973313 0.12344417 -Al 0.37805029 0.86810019 0.99298930 -Al 0.25333605 0.74287691 0.24945202 -Al 0.25383293 0.87208918 0.37325974 -Al 0.37376891 0.74959858 0.37877335 -Al 0.37486391 0.86890075 0.25672474 -Al 0.23915687 0.74103044 0.49724675 -Al 0.24369823 0.87643261 0.62451626 -Al 0.38505233 0.75239503 0.62617122 -Al 0.37847875 0.87612161 0.51019113 -Al 0.26582340 0.74964806 0.74671707 -Al 0.24070512 0.87568485 0.87138745 -Al 0.38127443 0.74478341 0.87734871 -Al 0.37122727 0.88166043 0.75464351 -Al 0.49676265 0.99913572 0.00773492 -Al 0.49677586 0.12889222 0.11883841 -Al 0.62632069 0.00209937 0.12239078 -Al 0.61429381 0.12500820 0.00331895 -Al 0.50499332 0.99536389 0.25588511 -Al 0.51758471 0.12246991 0.37168698 -Al 0.62685441 0.99657069 0.38221316 -Al 0.62133037 0.10677543 0.24236551 -Al 0.50283046 0.00027661 0.50517401 -Al 0.49924389 0.12871700 0.63075628 -Al 0.61973760 0.99776872 0.63487085 -Al 0.62154625 0.13372902 0.49349498 -Al 0.48858742 0.00996567 0.75577873 -Al 0.50030758 0.12998960 0.88598660 -Al 0.61675238 0.01078308 0.87268885 -Al 0.62062082 0.13817810 0.75159238 -Al 0.49551556 0.25732791 0.99892171 -Al 0.49621790 0.37539287 0.12546048 -Al 0.63140164 0.26479969 0.12145568 -Al 0.61997492 0.37552116 0.99192773 -Al 0.50866253 0.24052677 0.24820621 -Al 0.50268749 0.36723972 0.37156275 -Al 0.62567643 0.24712665 0.38373644 -Al 0.62928974 0.38239436 0.25813868 -Al 0.48999643 0.25627225 0.49935502 -Al 0.49796721 0.38502975 0.62724580 -Al 0.62430452 0.25166879 0.62749593 -Al 0.61467977 0.37317844 0.50637909 -Al 0.49493639 0.25133042 0.75154257 -Al 0.49534688 0.37618114 0.86909990 -Al 0.61246283 0.25121344 0.86485038 -Al 0.62282704 0.38082335 0.74352853 -Al 0.50348440 0.50148151 0.00898825 -Al 0.49859317 0.62374629 0.13172456 -Al 0.63072956 0.50103732 0.13011505 -Al 0.62698283 0.62785259 0.00833124 -Al 0.50116452 0.48931611 0.24883425 -Al 0.50458482 0.61475673 0.38100075 -Al 0.62957740 0.49402239 0.38181668 -Al 0.62655074 0.62155853 0.25519562 -Al 0.50115871 0.49541243 0.49810488 -Al 0.50973680 0.61713381 0.62630168 -Al 0.63118820 0.49631279 0.62401404 -Al 0.62498572 0.61067461 0.49866825 -Al 0.50907412 0.50153474 0.75901977 -Al 0.51212343 0.62386323 0.88244495 -Al 0.62239397 0.49705208 0.88343202 -Al 0.62757424 0.61527633 0.74473006 -Al 0.49936968 0.75141687 0.00098419 -Al 0.50198259 0.87164597 0.13247901 -Al 0.61759859 0.75078730 0.14208182 -Al 0.62790966 0.87363482 0.01134898 -Al 0.49648381 0.74798718 0.25575989 -Al 0.49563886 0.87098031 0.37490084 -Al 0.61975734 0.74992524 0.38173015 -Al 0.63001577 0.87476567 0.25423197 -Al 0.50069165 0.74864365 0.50712919 -Al 0.51183280 0.87152323 0.63036879 -Al 0.63128640 0.73926092 0.61850891 -Al 0.62876440 0.86579297 0.49946341 -Al 0.49769761 0.74656916 0.75232188 -Al 0.50599556 0.87822282 0.88111163 -Al 0.62828277 0.74851850 0.87818830 -Al 0.62013637 0.87599170 0.76303239 -Al 0.75686751 0.99492115 0.00088827 -Al 0.74467843 0.12723427 0.11961291 -Al 0.87556549 0.00369676 0.12621795 -Al 0.87475810 0.12266938 0.99868019 -Al 0.74609007 0.00163629 0.24752646 -Al 0.75349991 0.12933425 0.37611815 -Al 0.88095143 0.00133752 0.37711697 -Al 0.87706767 0.11849743 0.24714141 -Al 0.74362808 0.00703466 0.50528327 -Al 0.75057559 0.13367993 0.62043474 -Al 0.87015719 0.00376019 0.62411051 -Al 0.87832474 0.11957331 0.50122298 -Al 0.75440296 0.00266564 0.75438769 -Al 0.75063391 0.12797922 0.87408035 -Al 0.87500514 0.00969461 0.87268056 -Al 0.87355340 0.12955559 0.75399544 -Al 0.74541659 0.24490088 0.00407350 -Al 0.75075681 0.39099472 0.11533268 -Al 0.86431841 0.25660834 0.11255680 -Al 0.86652423 0.37969599 0.99219682 -Al 0.74146925 0.23987690 0.24834194 -Al 0.75169720 0.37625628 0.37634352 -Al 0.88890668 0.25086535 0.37728200 -Al 0.86238571 0.36121717 0.24200173 -Al 0.75146734 0.25403038 0.50718035 -Al 0.74894394 0.36950948 0.62383741 -Al 0.87442534 0.25501163 0.62503015 -Al 0.87776574 0.37481735 0.50628054 -Al 0.74617247 0.24906860 0.75596080 -Al 0.75221802 0.37507914 0.87355096 -Al 0.87896034 0.25760957 0.88390838 -Al 0.86867608 0.38164705 0.74626903 -Al 0.74189350 0.51020090 0.99834605 -Al 0.74524061 0.62716394 0.13044927 -Al 0.87170353 0.49891082 0.12002179 -Al 0.86951405 0.62129397 0.00276830 -Al 0.75203169 0.50093943 0.24050544 -Al 0.75900617 0.61844580 0.36090421 -Al 0.87814676 0.49591115 0.36355387 -Al 0.87903888 0.62184363 0.24034326 -Al 0.75162722 0.49628811 0.49270285 -Al 0.74834445 0.62934556 0.61707414 -Al 0.86376714 0.50616251 0.62149233 -Al 0.87601835 0.61794319 0.49499002 -Al 0.75832911 0.50299237 0.75301563 -Al 0.75002999 0.63141690 0.87782568 -Al 0.87777246 0.50587526 0.87233272 -Al 0.88336963 0.62653265 0.75699366 -Al 0.74583914 0.75416465 0.00348848 -Al 0.75813025 0.87640517 0.12706117 -Al 0.87928098 0.75005800 0.12474447 -Al 0.88438720 0.87819211 0.00472541 -Al 0.75998762 0.75236132 0.25078015 -Al 0.76260167 0.87804941 0.36636549 -Al 0.88099052 0.74935941 0.37229183 -Al 0.88247979 0.86897661 0.25221829 -Al 0.75248504 0.75642062 0.49706069 -Al 0.74984275 0.87473162 0.62898769 -Al 0.87611175 0.74487681 0.62710867 -Al 0.88093126 0.87696450 0.49141002 -Al 0.74834534 0.75930289 0.75569426 -Al 0.75898225 0.88269616 0.86945006 -Al 0.87028964 0.75236772 0.87807720 -Al 0.87801602 0.87625452 0.74951145 - diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/pbs.job b/ml-dft-sandia/notebooks/dos2eband/snap_0_666/pbs.job deleted file mode 100644 index a0d51a733..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_666/pbs.job +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# -# Script to run a VASP job using SLURM on 576 cpus of Chama -# Created by ./run_job.exe on Fri Mar 27 13:28:35 MDT 2020 -# -#SBATCH --nodes=16 -#SBATCH --time=48:00:00 -#SBATCH --account=FY200018 -#SBATCH --job-name=200327132835 -#SBATCH --output=/nscratch/namodin/200327132835/200327132835.out -#SBATCH --error=/nscratch/namodin/200327132835/200327132835.err - -# Number of nodes -nodes=16 - -# Number MPI processes to run on each node (a.k.a. PPN) -# Redsky has 8 cores per node -cores=36 - -# Total number of cores -cpus=576 - -# -# Set up running directory -# -cd /nscratch/namodin/200327132835 -cp /home/namodin/MLDFT/output/200327132835/Al.scf.pw . -cp /ascldap/users/namodin/MLDFT/pw.x . - -# -# Set up the environment -# -module purge -module load tce -module load intel/18.0.5.274 -module load mkl/18.0.5.274 -module load openmpi-intel/1.10 -# -# Execute code -# -mpiexec --npernode $cores --n $cpus ./pw.x -nk $nodes -in Al.scf.pw -#mpiexec --npernode $cores --n $cpus ./pw.x -nk $nodes -nt 1 -nd 1 -in Al.scf.pw - -# -# Save results and clean up -# -rm pw.x -cp -r *.out /home/namodin/MLDFT/output/200327132835 -cp -r *.err /home/namodin/MLDFT/output/200327132835 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/200330132037.err b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/200330132037.err deleted file mode 100644 index a55bd10bb..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/200330132037.err +++ /dev/null @@ -1,2 +0,0 @@ -slurmstepd: error: *** JOB 6007243 ON gho157 CANCELLED AT 2020-04-01T12:30:28 DUE TO NODE FAILURE, SEE SLURMCTLD LOG FOR DETAILS *** -slurmstepd: error: *** JOB 6007243 STEPD TERMINATED ON gho157 AT 2020-04-01T12:32:28 DUE TO JOB NOT ENDING WITH SIGNALS *** diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g deleted file mode 100644 index ee4dd9c14..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g +++ /dev/null @@ -1,252 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.797 eV - -10.000 0.4497E-83 0.4497E-84 - -9.900 0.4497E-83 0.8995E-84 - -9.800 0.4497E-83 0.1349E-83 - -9.700 0.4497E-83 0.1799E-83 - -9.600 0.4497E-83 0.2249E-83 - -9.500 0.4497E-83 0.2698E-83 - -9.400 0.4497E-83 0.3148E-83 - -9.300 0.4497E-83 0.3598E-83 - -9.200 0.4497E-83 0.4048E-83 - -9.100 0.4497E-83 0.4497E-83 - -9.000 0.4497E-83 0.4947E-83 - -8.900 0.4497E-83 0.5397E-83 - -8.800 0.4497E-83 0.5846E-83 - -8.700 0.4497E-83 0.6296E-83 - -8.600 0.4497E-83 0.6746E-83 - -8.500 0.4497E-83 0.7196E-83 - -8.400 0.4497E-83 0.7645E-83 - -8.300 0.4497E-83 0.8095E-83 - -8.200 0.4497E-83 0.8545E-83 - -8.100 0.4497E-83 0.8995E-83 - -8.000 0.4497E-83 0.9444E-83 - -7.900 0.4497E-83 0.9894E-83 - -7.800 0.4497E-83 0.1034E-82 - -7.700 0.4497E-83 0.1079E-82 - -7.600 0.4497E-83 0.1124E-82 - -7.500 0.4497E-83 0.1169E-82 - -7.400 0.4497E-83 0.1214E-82 - -7.300 0.4497E-83 0.1259E-82 - -7.200 0.4497E-83 0.1304E-82 - -7.100 0.4497E-83 0.1349E-82 - -7.000 0.4497E-83 0.1394E-82 - -6.900 0.4497E-83 0.1439E-82 - -6.800 0.4497E-83 0.1484E-82 - -6.700 0.4497E-83 0.1529E-82 - -6.600 0.4497E-83 0.1574E-82 - -6.500 0.4497E-83 0.1619E-82 - -6.400 0.4497E-83 0.1664E-82 - -6.300 0.4497E-83 0.1709E-82 - -6.200 0.4497E-83 0.1754E-82 - -6.100 0.4576E-83 0.1800E-82 - -6.000 0.7046E-79 0.7064E-80 - -5.900 0.3789E-73 0.3789E-74 - -5.800 0.1238E-67 0.1238E-68 - -5.700 0.2461E-62 0.2461E-63 - -5.600 0.2975E-57 0.2975E-58 - -5.500 0.2188E-52 0.2188E-53 - -5.400 0.9786E-48 0.9786E-49 - -5.300 0.2664E-43 0.2664E-44 - -5.200 0.4416E-39 0.4416E-40 - -5.100 0.4458E-35 0.4458E-36 - -5.000 0.2742E-31 0.2742E-32 - -4.900 0.1028E-27 0.1028E-28 - -4.800 0.2352E-24 0.2353E-25 - -4.700 0.3285E-21 0.3287E-22 - -4.600 0.2804E-18 0.2807E-19 - -4.500 0.1464E-15 0.1467E-16 - -4.400 0.4682E-13 0.4697E-14 - -4.300 0.9191E-11 0.9238E-12 - -4.200 0.1110E-08 0.1119E-09 - -4.100 0.8262E-07 0.8373E-08 - -4.000 0.3808E-05 0.3892E-06 - -3.900 0.1092E-03 0.1131E-04 - -3.800 0.1960E-02 0.2073E-03 - -3.700 0.2223E-01 0.2430E-02 - -3.600 0.1615E+00 0.1858E-01 - -3.500 0.7663E+00 0.9520E-01 - -3.400 0.2450E+01 0.3402E+00 - -3.300 0.5531E+01 0.8932E+00 - -3.200 0.9433E+01 0.1837E+01 - -3.100 0.1320E+02 0.3156E+01 - -3.000 0.1640E+02 0.4797E+01 - -2.900 0.1912E+02 0.6708E+01 - -2.800 0.2147E+02 0.8856E+01 - -2.700 0.2349E+02 0.1120E+02 - -2.600 0.2521E+02 0.1373E+02 - -2.500 0.2683E+02 0.1641E+02 - -2.400 0.2851E+02 0.1926E+02 - -2.300 0.3023E+02 0.2228E+02 - -2.200 0.3181E+02 0.2546E+02 - -2.100 0.3319E+02 0.2878E+02 - -2.000 0.3441E+02 0.3222E+02 - -1.900 0.3559E+02 0.3578E+02 - -1.800 0.3680E+02 0.3946E+02 - -1.700 0.3805E+02 0.4327E+02 - -1.600 0.3932E+02 0.4720E+02 - -1.500 0.4050E+02 0.5125E+02 - -1.400 0.4155E+02 0.5540E+02 - -1.300 0.4256E+02 0.5966E+02 - -1.200 0.4365E+02 0.6403E+02 - -1.100 0.4484E+02 0.6851E+02 - -1.000 0.4595E+02 0.7310E+02 - -0.900 0.4691E+02 0.7780E+02 - -0.800 0.4787E+02 0.8258E+02 - -0.700 0.4882E+02 0.8747E+02 - -0.600 0.4974E+02 0.9244E+02 - -0.500 0.5071E+02 0.9751E+02 - -0.400 0.5162E+02 0.1027E+03 - -0.300 0.5243E+02 0.1079E+03 - -0.200 0.5337E+02 0.1133E+03 - -0.100 0.5444E+02 0.1187E+03 - 0.000 0.5538E+02 0.1242E+03 - 0.100 0.5628E+02 0.1299E+03 - 0.200 0.5722E+02 0.1356E+03 - 0.300 0.5799E+02 0.1414E+03 - 0.400 0.5865E+02 0.1473E+03 - 0.500 0.5954E+02 0.1532E+03 - 0.600 0.6049E+02 0.1593E+03 - 0.700 0.6115E+02 0.1654E+03 - 0.800 0.6182E+02 0.1716E+03 - 0.900 0.6277E+02 0.1778E+03 - 1.000 0.6366E+02 0.1842E+03 - 1.100 0.6440E+02 0.1906E+03 - 1.200 0.6525E+02 0.1972E+03 - 1.300 0.6617E+02 0.2038E+03 - 1.400 0.6698E+02 0.2105E+03 - 1.500 0.6758E+02 0.2172E+03 - 1.600 0.6823E+02 0.2241E+03 - 1.700 0.6919E+02 0.2310E+03 - 1.800 0.7009E+02 0.2380E+03 - 1.900 0.7061E+02 0.2450E+03 - 2.000 0.7128E+02 0.2522E+03 - 2.100 0.7236E+02 0.2594E+03 - 2.200 0.7329E+02 0.2667E+03 - 2.300 0.7379E+02 0.2741E+03 - 2.400 0.7433E+02 0.2815E+03 - 2.500 0.7532E+02 0.2891E+03 - 2.600 0.7640E+02 0.2967E+03 - 2.700 0.7701E+02 0.3044E+03 - 2.800 0.7745E+02 0.3122E+03 - 2.900 0.7842E+02 0.3200E+03 - 3.000 0.7971E+02 0.3280E+03 - 3.100 0.8054E+02 0.3360E+03 - 3.200 0.8085E+02 0.3441E+03 - 3.300 0.8125E+02 0.3522E+03 - 3.400 0.8189E+02 0.3604E+03 - 3.500 0.8257E+02 0.3687E+03 - 3.600 0.8318E+02 0.3770E+03 - 3.700 0.8374E+02 0.3854E+03 - 3.800 0.8458E+02 0.3938E+03 - 3.900 0.8581E+02 0.4024E+03 - 4.000 0.8676E+02 0.4111E+03 - 4.100 0.8717E+02 0.4198E+03 - 4.200 0.8792E+02 0.4286E+03 - 4.300 0.8931E+02 0.4375E+03 - 4.400 0.9049E+02 0.4466E+03 - 4.500 0.9124E+02 0.4557E+03 - 4.600 0.9237E+02 0.4649E+03 - 4.700 0.9404E+02 0.4743E+03 - 4.800 0.9566E+02 0.4839E+03 - 4.900 0.9692E+02 0.4936E+03 - 5.000 0.9763E+02 0.5034E+03 - 5.100 0.9742E+02 0.5131E+03 - 5.200 0.9664E+02 0.5228E+03 - 5.300 0.9586E+02 0.5324E+03 - 5.400 0.9498E+02 0.5419E+03 - 5.500 0.9397E+02 0.5513E+03 - 5.600 0.9307E+02 0.5606E+03 - 5.700 0.9223E+02 0.5698E+03 - 5.800 0.9125E+02 0.5789E+03 - 5.900 0.9028E+02 0.5879E+03 - 6.000 0.8986E+02 0.5969E+03 - 6.100 0.9030E+02 0.6060E+03 - 6.200 0.9143E+02 0.6151E+03 - 6.300 0.9306E+02 0.6244E+03 - 6.400 0.9488E+02 0.6339E+03 - 6.500 0.9650E+02 0.6435E+03 - 6.600 0.9776E+02 0.6533E+03 - 6.700 0.9880E+02 0.6632E+03 - 6.800 0.9987E+02 0.6732E+03 - 6.900 0.1008E+03 0.6833E+03 - 7.000 0.1008E+03 0.6933E+03 - 7.100 0.9942E+02 0.7033E+03 - 7.200 0.9807E+02 0.7131E+03 - 7.300 0.9826E+02 0.7229E+03 - 7.400 0.9958E+02 0.7329E+03 - 7.500 0.1006E+03 0.7429E+03 - 7.600 0.1014E+03 0.7531E+03 - 7.700 0.1029E+03 0.7634E+03 - 7.800 0.1049E+03 0.7739E+03 - 7.900 0.1064E+03 0.7845E+03 - 8.000 0.1069E+03 0.7952E+03 - 8.100 0.1071E+03 0.8059E+03 - 8.200 0.1076E+03 0.8167E+03 - 8.300 0.1080E+03 0.8275E+03 - 8.400 0.1076E+03 0.8382E+03 - 8.500 0.1075E+03 0.8490E+03 - 8.600 0.1087E+03 0.8598E+03 - 8.700 0.1097E+03 0.8708E+03 - 8.800 0.1092E+03 0.8817E+03 - 8.900 0.1082E+03 0.8925E+03 - 9.000 0.1088E+03 0.9034E+03 - 9.100 0.1108E+03 0.9145E+03 - 9.200 0.1124E+03 0.9257E+03 - 9.300 0.1130E+03 0.9370E+03 - 9.400 0.1128E+03 0.9483E+03 - 9.500 0.1123E+03 0.9595E+03 - 9.600 0.1126E+03 0.9708E+03 - 9.700 0.1146E+03 0.9823E+03 - 9.800 0.1167E+03 0.9939E+03 - 9.900 0.1169E+03 0.1006E+04 - 10.000 0.1155E+03 0.1017E+04 - 10.100 0.1151E+03 0.1029E+04 - 10.200 0.1166E+03 0.1040E+04 - 10.300 0.1185E+03 0.1052E+04 - 10.400 0.1194E+03 0.1064E+04 - 10.500 0.1195E+03 0.1076E+04 - 10.600 0.1194E+03 0.1088E+04 - 10.700 0.1198E+03 0.1100E+04 - 10.800 0.1202E+03 0.1112E+04 - 10.900 0.1174E+03 0.1124E+04 - 11.000 0.1065E+03 0.1134E+04 - 11.100 0.8405E+02 0.1143E+04 - 11.200 0.5377E+02 0.1148E+04 - 11.300 0.2619E+02 0.1151E+04 - 11.400 0.9246E+01 0.1152E+04 - 11.500 0.2281E+01 0.1152E+04 - 11.600 0.3820E+00 0.1152E+04 - 11.700 0.4240E-01 0.1152E+04 - 11.800 0.3063E-02 0.1152E+04 - 11.900 0.1422E-03 0.1152E+04 - 12.000 0.4200E-05 0.1152E+04 - 12.100 0.7857E-07 0.1152E+04 - 12.200 0.9275E-09 0.1152E+04 - 12.300 0.6900E-11 0.1152E+04 - 12.400 0.3232E-13 0.1152E+04 - 12.500 0.9526E-16 0.1152E+04 - 12.600 0.1764E-18 0.1152E+04 - 12.700 0.2047E-21 0.1152E+04 - 12.800 0.1484E-24 0.1152E+04 - 12.900 0.6703E-28 0.1152E+04 - 13.000 0.1878E-31 0.1152E+04 - 13.100 0.3251E-35 0.1152E+04 - 13.200 0.3467E-39 0.1152E+04 - 13.300 0.2271E-43 0.1152E+04 - 13.400 0.9114E-48 0.1152E+04 - 13.500 0.2237E-52 0.1152E+04 - 13.600 0.3352E-57 0.1152E+04 - 13.700 0.3062E-62 0.1152E+04 - 13.800 0.1705E-67 0.1152E+04 - 13.900 0.5775E-73 0.1152E+04 - 14.000 0.1190E-78 0.1152E+04 - 14.100 0.4646E-83 0.1152E+04 - 14.200 0.4497E-83 0.1152E+04 - 14.300 0.4497E-83 0.1152E+04 - 14.400 0.4497E-83 0.1152E+04 - 14.500 0.4497E-83 0.1152E+04 - 14.600 0.4497E-83 0.1152E+04 - 14.700 0.4497E-83 0.1152E+04 - 14.800 0.4497E-83 0.1152E+04 - 14.900 0.4497E-83 0.1152E+04 - 15.000 0.4497E-83 0.1152E+04 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g.old b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g.old deleted file mode 100644 index 9d8e3a8b2..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_2g.old +++ /dev/null @@ -1,202 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.797 eV - -5.000 0.2784E-31 0.2784E-32 - -4.900 0.1043E-27 0.1043E-28 - -4.800 0.2384E-24 0.2385E-25 - -4.700 0.3327E-21 0.3329E-22 - -4.600 0.2837E-18 0.2841E-19 - -4.500 0.1480E-15 0.1483E-16 - -4.400 0.4731E-13 0.4745E-14 - -4.300 0.9278E-11 0.9326E-12 - -4.200 0.1119E-08 0.1129E-09 - -4.100 0.8328E-07 0.8441E-08 - -4.000 0.3836E-05 0.3920E-06 - -3.900 0.1099E-03 0.1138E-04 - -3.800 0.1971E-02 0.2085E-03 - -3.700 0.2234E-01 0.2443E-02 - -3.600 0.1621E+00 0.1866E-01 - -3.500 0.7687E+00 0.9553E-01 - -3.400 0.2455E+01 0.3410E+00 - -3.300 0.5537E+01 0.8947E+00 - -3.200 0.9436E+01 0.1838E+01 - -3.100 0.1320E+02 0.3158E+01 - -3.000 0.1640E+02 0.4798E+01 - -2.900 0.1911E+02 0.6709E+01 - -2.800 0.2147E+02 0.8856E+01 - -2.700 0.2348E+02 0.1120E+02 - -2.600 0.2521E+02 0.1372E+02 - -2.500 0.2683E+02 0.1641E+02 - -2.400 0.2851E+02 0.1926E+02 - -2.300 0.3022E+02 0.2228E+02 - -2.200 0.3180E+02 0.2546E+02 - -2.100 0.3318E+02 0.2878E+02 - -2.000 0.3441E+02 0.3222E+02 - -1.900 0.3559E+02 0.3578E+02 - -1.800 0.3680E+02 0.3946E+02 - -1.700 0.3805E+02 0.4327E+02 - -1.600 0.3932E+02 0.4720E+02 - -1.500 0.4050E+02 0.5125E+02 - -1.400 0.4154E+02 0.5540E+02 - -1.300 0.4256E+02 0.5966E+02 - -1.200 0.4365E+02 0.6402E+02 - -1.100 0.4483E+02 0.6851E+02 - -1.000 0.4595E+02 0.7310E+02 - -0.900 0.4691E+02 0.7779E+02 - -0.800 0.4787E+02 0.8258E+02 - -0.700 0.4882E+02 0.8746E+02 - -0.600 0.4974E+02 0.9244E+02 - -0.500 0.5071E+02 0.9751E+02 - -0.400 0.5162E+02 0.1027E+03 - -0.300 0.5243E+02 0.1079E+03 - -0.200 0.5337E+02 0.1132E+03 - -0.100 0.5444E+02 0.1187E+03 - 0.000 0.5538E+02 0.1242E+03 - 0.100 0.5628E+02 0.1299E+03 - 0.200 0.5722E+02 0.1356E+03 - 0.300 0.5799E+02 0.1414E+03 - 0.400 0.5866E+02 0.1472E+03 - 0.500 0.5954E+02 0.1532E+03 - 0.600 0.6049E+02 0.1592E+03 - 0.700 0.6115E+02 0.1654E+03 - 0.800 0.6182E+02 0.1715E+03 - 0.900 0.6277E+02 0.1778E+03 - 1.000 0.6366E+02 0.1842E+03 - 1.100 0.6440E+02 0.1906E+03 - 1.200 0.6525E+02 0.1972E+03 - 1.300 0.6617E+02 0.2038E+03 - 1.400 0.6698E+02 0.2105E+03 - 1.500 0.6758E+02 0.2172E+03 - 1.600 0.6823E+02 0.2241E+03 - 1.700 0.6919E+02 0.2310E+03 - 1.800 0.7009E+02 0.2380E+03 - 1.900 0.7061E+02 0.2450E+03 - 2.000 0.7128E+02 0.2522E+03 - 2.100 0.7236E+02 0.2594E+03 - 2.200 0.7329E+02 0.2667E+03 - 2.300 0.7379E+02 0.2741E+03 - 2.400 0.7433E+02 0.2815E+03 - 2.500 0.7532E+02 0.2891E+03 - 2.600 0.7640E+02 0.2967E+03 - 2.700 0.7701E+02 0.3044E+03 - 2.800 0.7745E+02 0.3122E+03 - 2.900 0.7842E+02 0.3200E+03 - 3.000 0.7972E+02 0.3280E+03 - 3.100 0.8053E+02 0.3360E+03 - 3.200 0.8085E+02 0.3441E+03 - 3.300 0.8125E+02 0.3522E+03 - 3.400 0.8189E+02 0.3604E+03 - 3.500 0.8257E+02 0.3687E+03 - 3.600 0.8318E+02 0.3770E+03 - 3.700 0.8374E+02 0.3854E+03 - 3.800 0.8458E+02 0.3938E+03 - 3.900 0.8581E+02 0.4024E+03 - 4.000 0.8676E+02 0.4111E+03 - 4.100 0.8717E+02 0.4198E+03 - 4.200 0.8792E+02 0.4286E+03 - 4.300 0.8931E+02 0.4375E+03 - 4.400 0.9049E+02 0.4466E+03 - 4.500 0.9124E+02 0.4557E+03 - 4.600 0.9237E+02 0.4649E+03 - 4.700 0.9405E+02 0.4743E+03 - 4.800 0.9566E+02 0.4839E+03 - 4.900 0.9692E+02 0.4936E+03 - 5.000 0.9763E+02 0.5034E+03 - 5.100 0.9742E+02 0.5131E+03 - 5.200 0.9664E+02 0.5228E+03 - 5.300 0.9586E+02 0.5324E+03 - 5.400 0.9498E+02 0.5419E+03 - 5.500 0.9397E+02 0.5513E+03 - 5.600 0.9307E+02 0.5606E+03 - 5.700 0.9223E+02 0.5698E+03 - 5.800 0.9125E+02 0.5789E+03 - 5.900 0.9028E+02 0.5879E+03 - 6.000 0.8986E+02 0.5969E+03 - 6.100 0.9030E+02 0.6060E+03 - 6.200 0.9143E+02 0.6151E+03 - 6.300 0.9306E+02 0.6244E+03 - 6.400 0.9488E+02 0.6339E+03 - 6.500 0.9649E+02 0.6435E+03 - 6.600 0.9776E+02 0.6533E+03 - 6.700 0.9880E+02 0.6632E+03 - 6.800 0.9987E+02 0.6732E+03 - 6.900 0.1008E+03 0.6833E+03 - 7.000 0.1008E+03 0.6933E+03 - 7.100 0.9942E+02 0.7033E+03 - 7.200 0.9807E+02 0.7131E+03 - 7.300 0.9826E+02 0.7229E+03 - 7.400 0.9958E+02 0.7329E+03 - 7.500 0.1006E+03 0.7429E+03 - 7.600 0.1014E+03 0.7531E+03 - 7.700 0.1029E+03 0.7634E+03 - 7.800 0.1049E+03 0.7739E+03 - 7.900 0.1064E+03 0.7845E+03 - 8.000 0.1069E+03 0.7952E+03 - 8.100 0.1071E+03 0.8059E+03 - 8.200 0.1076E+03 0.8167E+03 - 8.300 0.1080E+03 0.8275E+03 - 8.400 0.1076E+03 0.8382E+03 - 8.500 0.1075E+03 0.8490E+03 - 8.600 0.1086E+03 0.8598E+03 - 8.700 0.1097E+03 0.8708E+03 - 8.800 0.1088E+03 0.8817E+03 - 8.900 0.1060E+03 0.8923E+03 - 9.000 0.1000E+03 0.9023E+03 - 9.100 0.8565E+02 0.9108E+03 - 9.200 0.6073E+02 0.9169E+03 - 9.300 0.3305E+02 0.9202E+03 - 9.400 0.1316E+02 0.9215E+03 - 9.500 0.3726E+01 0.9219E+03 - 9.600 0.7354E+00 0.9220E+03 - 9.700 0.9934E-01 0.9220E+03 - 9.800 0.9014E-02 0.9220E+03 - 9.900 0.5397E-03 0.9220E+03 - 10.000 0.2098E-04 0.9220E+03 - 10.100 0.5219E-06 0.9220E+03 - 10.200 0.8219E-08 0.9220E+03 - 10.300 0.8114E-10 0.9220E+03 - 10.400 0.4985E-12 0.9220E+03 - 10.500 0.1895E-14 0.9220E+03 - 10.600 0.4436E-17 0.9220E+03 - 10.700 0.6373E-20 0.9220E+03 - 10.800 0.5605E-23 0.9220E+03 - 10.900 0.3012E-26 0.9220E+03 - 11.000 0.9875E-30 0.9220E+03 - 11.100 0.1973E-33 0.9220E+03 - 11.200 0.2399E-37 0.9220E+03 - 11.300 0.1775E-41 0.9220E+03 - 11.400 0.7990E-46 0.9220E+03 - 11.500 0.2186E-50 0.9220E+03 - 11.600 0.3634E-55 0.9220E+03 - 11.700 0.3670E-60 0.9220E+03 - 11.800 0.2252E-65 0.9220E+03 - 11.900 0.8391E-71 0.9220E+03 - 12.000 0.1899E-76 0.9220E+03 - 12.100 0.2968E-82 0.9220E+03 - 12.200 0.3599E-83 0.9220E+03 - 12.300 0.3599E-83 0.9220E+03 - 12.400 0.3599E-83 0.9220E+03 - 12.500 0.3599E-83 0.9220E+03 - 12.600 0.3599E-83 0.9220E+03 - 12.700 0.3599E-83 0.9220E+03 - 12.800 0.3599E-83 0.9220E+03 - 12.900 0.3599E-83 0.9220E+03 - 13.000 0.3599E-83 0.9220E+03 - 13.100 0.3599E-83 0.9220E+03 - 13.200 0.3599E-83 0.9220E+03 - 13.300 0.3599E-83 0.9220E+03 - 13.400 0.3599E-83 0.9220E+03 - 13.500 0.3599E-83 0.9220E+03 - 13.600 0.3599E-83 0.9220E+03 - 13.700 0.3599E-83 0.9220E+03 - 13.800 0.3599E-83 0.9220E+03 - 13.900 0.3599E-83 0.9220E+03 - 14.000 0.3599E-83 0.9220E+03 - 14.100 0.3599E-83 0.9220E+03 - 14.200 0.3599E-83 0.9220E+03 - 14.300 0.3599E-83 0.9220E+03 - 14.400 0.3599E-83 0.9220E+03 - 14.500 0.3599E-83 0.9220E+03 - 14.600 0.3599E-83 0.9220E+03 - 14.700 0.3599E-83 0.9220E+03 - 14.800 0.3599E-83 0.9220E+03 - 14.900 0.3599E-83 0.9220E+03 - 15.000 0.3599E-83 0.9220E+03 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g deleted file mode 100644 index 72279a4be..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g +++ /dev/null @@ -1,252 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.797 eV - -10.000 0.8995E-83 0.8995E-84 - -9.900 0.8995E-83 0.1799E-83 - -9.800 0.8995E-83 0.2698E-83 - -9.700 0.8995E-83 0.3598E-83 - -9.600 0.8995E-83 0.4497E-83 - -9.500 0.8995E-83 0.5397E-83 - -9.400 0.8995E-83 0.6296E-83 - -9.300 0.8995E-83 0.7196E-83 - -9.200 0.8995E-83 0.8095E-83 - -9.100 0.8995E-83 0.8995E-83 - -9.000 0.8995E-83 0.9894E-83 - -8.900 0.8995E-83 0.1079E-82 - -8.800 0.8995E-83 0.1169E-82 - -8.700 0.8995E-83 0.1259E-82 - -8.600 0.8995E-83 0.1349E-82 - -8.500 0.8995E-83 0.1439E-82 - -8.400 0.8995E-83 0.1529E-82 - -8.300 0.8995E-83 0.1619E-82 - -8.200 0.8995E-83 0.1709E-82 - -8.100 0.8995E-83 0.1799E-82 - -8.000 0.8995E-83 0.1889E-82 - -7.900 0.8995E-83 0.1979E-82 - -7.800 0.8995E-83 0.2069E-82 - -7.700 0.8995E-83 0.2159E-82 - -7.600 0.8995E-83 0.2249E-82 - -7.500 0.8995E-83 0.2339E-82 - -7.400 0.8995E-83 0.2429E-82 - -7.300 0.8995E-83 0.2518E-82 - -7.200 0.8995E-83 0.2608E-82 - -7.100 0.8995E-83 0.2698E-82 - -7.000 0.8995E-83 0.2788E-82 - -6.900 0.8995E-83 0.2878E-82 - -6.800 0.8995E-83 0.2968E-82 - -6.700 0.8995E-83 0.3058E-82 - -6.600 0.8995E-83 0.3148E-82 - -6.500 0.8995E-83 0.3238E-82 - -6.400 0.8995E-83 0.3328E-82 - -6.300 0.8995E-83 0.3418E-82 - -6.200 0.8995E-83 0.3508E-82 - -6.100 0.8995E-83 0.3598E-82 - -6.000 0.8995E-83 0.3688E-82 - -5.900 0.8995E-83 0.3778E-82 - -5.800 0.8995E-83 0.3868E-82 - -5.700 0.8995E-83 0.3958E-82 - -5.600 0.8995E-83 0.4048E-82 - -5.500 0.8995E-83 0.4138E-82 - -5.400 0.8995E-83 0.4227E-82 - -5.300 0.8995E-83 0.4317E-82 - -5.200 0.8995E-83 0.4407E-82 - -5.100 0.8995E-83 0.4497E-82 - -5.000 0.8995E-83 0.4587E-82 - -4.900 0.8995E-83 0.4677E-82 - -4.800 0.8995E-83 0.4767E-82 - -4.700 0.1035E-82 0.4871E-82 - -4.600 0.5050E-72 0.5050E-73 - -4.500 0.2575E-61 0.2575E-62 - -4.400 0.1803E-51 0.1803E-52 - -4.300 0.1739E-42 0.1739E-43 - -4.200 0.2313E-34 0.2313E-35 - -4.100 0.4256E-27 0.4256E-28 - -4.000 0.1088E-20 0.1088E-21 - -3.900 0.3887E-15 0.3887E-16 - -3.800 0.1960E-10 0.1960E-11 - -3.700 0.1418E-06 0.1418E-07 - -3.600 0.1515E-03 0.1516E-04 - -3.500 0.2524E-01 0.2539E-02 - -3.400 0.7327E+00 0.7581E-01 - -3.300 0.4664E+01 0.5422E+00 - -3.200 0.1008E+02 0.1550E+01 - -3.100 0.1377E+02 0.2927E+01 - -3.000 0.1670E+02 0.4598E+01 - -2.900 0.1933E+02 0.6530E+01 - -2.800 0.2173E+02 0.8703E+01 - -2.700 0.2382E+02 0.1108E+02 - -2.600 0.2531E+02 0.1362E+02 - -2.500 0.2658E+02 0.1627E+02 - -2.400 0.2852E+02 0.1913E+02 - -2.300 0.3028E+02 0.2215E+02 - -2.200 0.3217E+02 0.2537E+02 - -2.100 0.3308E+02 0.2868E+02 - -2.000 0.3475E+02 0.3216E+02 - -1.900 0.3514E+02 0.3567E+02 - -1.800 0.3718E+02 0.3939E+02 - -1.700 0.3765E+02 0.4315E+02 - -1.600 0.3956E+02 0.4711E+02 - -1.500 0.4076E+02 0.5119E+02 - -1.400 0.4133E+02 0.5532E+02 - -1.300 0.4278E+02 0.5960E+02 - -1.200 0.4323E+02 0.6392E+02 - -1.100 0.4493E+02 0.6841E+02 - -1.000 0.4647E+02 0.7306E+02 - -0.900 0.4654E+02 0.7771E+02 - -0.800 0.4784E+02 0.8250E+02 - -0.700 0.4932E+02 0.8743E+02 - -0.600 0.4910E+02 0.9234E+02 - -0.500 0.5103E+02 0.9744E+02 - -0.400 0.5182E+02 0.1026E+03 - -0.300 0.5246E+02 0.1079E+03 - -0.200 0.5241E+02 0.1131E+03 - -0.100 0.5555E+02 0.1187E+03 - 0.000 0.5508E+02 0.1242E+03 - 0.100 0.5587E+02 0.1298E+03 - 0.200 0.5773E+02 0.1355E+03 - 0.300 0.5827E+02 0.1414E+03 - 0.400 0.5826E+02 0.1472E+03 - 0.500 0.5883E+02 0.1531E+03 - 0.600 0.6173E+02 0.1592E+03 - 0.700 0.6121E+02 0.1654E+03 - 0.800 0.6038E+02 0.1714E+03 - 0.900 0.6382E+02 0.1778E+03 - 1.000 0.6372E+02 0.1842E+03 - 1.100 0.6395E+02 0.1906E+03 - 1.200 0.6539E+02 0.1971E+03 - 1.300 0.6603E+02 0.2037E+03 - 1.400 0.6746E+02 0.2104E+03 - 1.500 0.6780E+02 0.2172E+03 - 1.600 0.6735E+02 0.2240E+03 - 1.700 0.6896E+02 0.2309E+03 - 1.800 0.7162E+02 0.2380E+03 - 1.900 0.6999E+02 0.2450E+03 - 2.000 0.7020E+02 0.2520E+03 - 2.100 0.7293E+02 0.2593E+03 - 2.200 0.7404E+02 0.2667E+03 - 2.300 0.7375E+02 0.2741E+03 - 2.400 0.7351E+02 0.2815E+03 - 2.500 0.7482E+02 0.2889E+03 - 2.600 0.7765E+02 0.2967E+03 - 2.700 0.7736E+02 0.3044E+03 - 2.800 0.7649E+02 0.3121E+03 - 2.900 0.7743E+02 0.3198E+03 - 3.000 0.8097E+02 0.3279E+03 - 3.100 0.8138E+02 0.3361E+03 - 3.200 0.8006E+02 0.3441E+03 - 3.300 0.8099E+02 0.3522E+03 - 3.400 0.8231E+02 0.3604E+03 - 3.500 0.8207E+02 0.3686E+03 - 3.600 0.8389E+02 0.3770E+03 - 3.700 0.8337E+02 0.3853E+03 - 3.800 0.8372E+02 0.3937E+03 - 3.900 0.8573E+02 0.4023E+03 - 4.000 0.8896E+02 0.4112E+03 - 4.100 0.8593E+02 0.4198E+03 - 4.200 0.8650E+02 0.4284E+03 - 4.300 0.9003E+02 0.4374E+03 - 4.400 0.9194E+02 0.4466E+03 - 4.500 0.9005E+02 0.4556E+03 - 4.600 0.9134E+02 0.4648E+03 - 4.700 0.9476E+02 0.4742E+03 - 4.800 0.9618E+02 0.4839E+03 - 4.900 0.9623E+02 0.4935E+03 - 5.000 0.9953E+02 0.5034E+03 - 5.100 0.9807E+02 0.5132E+03 - 5.200 0.9541E+02 0.5228E+03 - 5.300 0.9667E+02 0.5324E+03 - 5.400 0.9523E+02 0.5420E+03 - 5.500 0.9344E+02 0.5513E+03 - 5.600 0.9315E+02 0.5606E+03 - 5.700 0.9230E+02 0.5699E+03 - 5.800 0.9171E+02 0.5790E+03 - 5.900 0.8979E+02 0.5880E+03 - 6.000 0.8841E+02 0.5968E+03 - 6.100 0.9056E+02 0.6059E+03 - 6.200 0.9053E+02 0.6150E+03 - 6.300 0.9301E+02 0.6243E+03 - 6.400 0.9515E+02 0.6338E+03 - 6.500 0.9687E+02 0.6435E+03 - 6.600 0.9796E+02 0.6533E+03 - 6.700 0.9889E+02 0.6631E+03 - 6.800 0.9912E+02 0.6731E+03 - 6.900 0.1018E+03 0.6832E+03 - 7.000 0.1027E+03 0.6935E+03 - 7.100 0.1002E+03 0.7035E+03 - 7.200 0.9508E+02 0.7130E+03 - 7.300 0.9677E+02 0.7227E+03 - 7.400 0.1012E+03 0.7328E+03 - 7.500 0.1013E+03 0.7430E+03 - 7.600 0.1002E+03 0.7530E+03 - 7.700 0.1016E+03 0.7631E+03 - 7.800 0.1058E+03 0.7737E+03 - 7.900 0.1079E+03 0.7845E+03 - 8.000 0.1074E+03 0.7952E+03 - 8.100 0.1058E+03 0.8058E+03 - 8.200 0.1070E+03 0.8165E+03 - 8.300 0.1105E+03 0.8276E+03 - 8.400 0.1077E+03 0.8384E+03 - 8.500 0.1040E+03 0.8488E+03 - 8.600 0.1089E+03 0.8596E+03 - 8.700 0.1129E+03 0.8709E+03 - 8.800 0.1102E+03 0.8820E+03 - 8.900 0.1050E+03 0.8925E+03 - 9.000 0.1067E+03 0.9031E+03 - 9.100 0.1126E+03 0.9144E+03 - 9.200 0.1133E+03 0.9257E+03 - 9.300 0.1132E+03 0.9370E+03 - 9.400 0.1133E+03 0.9484E+03 - 9.500 0.1125E+03 0.9596E+03 - 9.600 0.1096E+03 0.9706E+03 - 9.700 0.1136E+03 0.9819E+03 - 9.800 0.1199E+03 0.9939E+03 - 9.900 0.1201E+03 0.1006E+04 - 10.000 0.1132E+03 0.1017E+04 - 10.100 0.1114E+03 0.1028E+04 - 10.200 0.1177E+03 0.1040E+04 - 10.300 0.1201E+03 0.1052E+04 - 10.400 0.1197E+03 0.1064E+04 - 10.500 0.1195E+03 0.1076E+04 - 10.600 0.1195E+03 0.1088E+04 - 10.700 0.1180E+03 0.1100E+04 - 10.800 0.1217E+03 0.1112E+04 - 10.900 0.1236E+03 0.1124E+04 - 11.000 0.1174E+03 0.1136E+04 - 11.100 0.9586E+02 0.1146E+04 - 11.200 0.4947E+02 0.1151E+04 - 11.300 0.1244E+02 0.1152E+04 - 11.400 0.1045E+01 0.1152E+04 - 11.500 0.2079E-01 0.1152E+04 - 11.600 0.9110E-04 0.1152E+04 - 11.700 0.8721E-07 0.1152E+04 - 11.800 0.1574E-10 0.1152E+04 - 11.900 0.4534E-15 0.1152E+04 - 12.000 0.1904E-20 0.1152E+04 - 12.100 0.1122E-26 0.1152E+04 - 12.200 0.9139E-34 0.1152E+04 - 12.300 0.1020E-41 0.1152E+04 - 12.400 0.1556E-50 0.1152E+04 - 12.500 0.3228E-60 0.1152E+04 - 12.600 0.9104E-71 0.1152E+04 - 12.700 0.4385E-82 0.1152E+04 - 12.800 0.8995E-83 0.1152E+04 - 12.900 0.8995E-83 0.1152E+04 - 13.000 0.8995E-83 0.1152E+04 - 13.100 0.8995E-83 0.1152E+04 - 13.200 0.8995E-83 0.1152E+04 - 13.300 0.8995E-83 0.1152E+04 - 13.400 0.8995E-83 0.1152E+04 - 13.500 0.8995E-83 0.1152E+04 - 13.600 0.8995E-83 0.1152E+04 - 13.700 0.8995E-83 0.1152E+04 - 13.800 0.8995E-83 0.1152E+04 - 13.900 0.8995E-83 0.1152E+04 - 14.000 0.8995E-83 0.1152E+04 - 14.100 0.8995E-83 0.1152E+04 - 14.200 0.8995E-83 0.1152E+04 - 14.300 0.8995E-83 0.1152E+04 - 14.400 0.8995E-83 0.1152E+04 - 14.500 0.8995E-83 0.1152E+04 - 14.600 0.8995E-83 0.1152E+04 - 14.700 0.8995E-83 0.1152E+04 - 14.800 0.8995E-83 0.1152E+04 - 14.900 0.8995E-83 0.1152E+04 - 15.000 0.8995E-83 0.1152E+04 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g.old b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g.old deleted file mode 100644 index 0d0f5f7aa..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.dos_g.old +++ /dev/null @@ -1,202 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.797 eV - -5.000 0.7199E-83 0.7199E-84 - -4.900 0.7199E-83 0.1440E-83 - -4.800 0.7199E-83 0.2160E-83 - -4.700 0.8622E-83 0.3022E-83 - -4.600 0.5276E-72 0.5276E-73 - -4.500 0.2681E-61 0.2681E-62 - -4.400 0.1872E-51 0.1872E-52 - -4.300 0.1799E-42 0.1799E-43 - -4.200 0.2384E-34 0.2384E-35 - -4.100 0.4373E-27 0.4373E-28 - -4.000 0.1114E-20 0.1114E-21 - -3.900 0.3968E-15 0.3968E-16 - -3.800 0.1994E-10 0.1994E-11 - -3.700 0.1438E-06 0.1438E-07 - -3.600 0.1532E-03 0.1533E-04 - -3.500 0.2544E-01 0.2560E-02 - -3.400 0.7368E+00 0.7624E-01 - -3.300 0.4679E+01 0.5441E+00 - -3.200 0.1009E+02 0.1553E+01 - -3.100 0.1376E+02 0.2929E+01 - -3.000 0.1669E+02 0.4598E+01 - -2.900 0.1932E+02 0.6530E+01 - -2.800 0.2172E+02 0.8703E+01 - -2.700 0.2382E+02 0.1108E+02 - -2.600 0.2531E+02 0.1362E+02 - -2.500 0.2658E+02 0.1627E+02 - -2.400 0.2852E+02 0.1913E+02 - -2.300 0.3027E+02 0.2215E+02 - -2.200 0.3217E+02 0.2537E+02 - -2.100 0.3308E+02 0.2868E+02 - -2.000 0.3475E+02 0.3215E+02 - -1.900 0.3514E+02 0.3567E+02 - -1.800 0.3718E+02 0.3939E+02 - -1.700 0.3765E+02 0.4315E+02 - -1.600 0.3956E+02 0.4711E+02 - -1.500 0.4076E+02 0.5118E+02 - -1.400 0.4132E+02 0.5532E+02 - -1.300 0.4278E+02 0.5959E+02 - -1.200 0.4323E+02 0.6392E+02 - -1.100 0.4493E+02 0.6841E+02 - -1.000 0.4647E+02 0.7306E+02 - -0.900 0.4653E+02 0.7771E+02 - -0.800 0.4784E+02 0.8249E+02 - -0.700 0.4932E+02 0.8743E+02 - -0.600 0.4909E+02 0.9233E+02 - -0.500 0.5103E+02 0.9744E+02 - -0.400 0.5183E+02 0.1026E+03 - -0.300 0.5245E+02 0.1079E+03 - -0.200 0.5241E+02 0.1131E+03 - -0.100 0.5556E+02 0.1187E+03 - 0.000 0.5507E+02 0.1242E+03 - 0.100 0.5587E+02 0.1298E+03 - 0.200 0.5774E+02 0.1355E+03 - 0.300 0.5826E+02 0.1414E+03 - 0.400 0.5826E+02 0.1472E+03 - 0.500 0.5884E+02 0.1531E+03 - 0.600 0.6173E+02 0.1592E+03 - 0.700 0.6120E+02 0.1654E+03 - 0.800 0.6038E+02 0.1714E+03 - 0.900 0.6383E+02 0.1778E+03 - 1.000 0.6372E+02 0.1842E+03 - 1.100 0.6395E+02 0.1905E+03 - 1.200 0.6540E+02 0.1971E+03 - 1.300 0.6603E+02 0.2037E+03 - 1.400 0.6746E+02 0.2104E+03 - 1.500 0.6779E+02 0.2172E+03 - 1.600 0.6735E+02 0.2240E+03 - 1.700 0.6897E+02 0.2308E+03 - 1.800 0.7162E+02 0.2380E+03 - 1.900 0.6998E+02 0.2450E+03 - 2.000 0.7021E+02 0.2520E+03 - 2.100 0.7294E+02 0.2593E+03 - 2.200 0.7404E+02 0.2667E+03 - 2.300 0.7374E+02 0.2741E+03 - 2.400 0.7351E+02 0.2815E+03 - 2.500 0.7482E+02 0.2889E+03 - 2.600 0.7766E+02 0.2967E+03 - 2.700 0.7735E+02 0.3044E+03 - 2.800 0.7648E+02 0.3121E+03 - 2.900 0.7744E+02 0.3198E+03 - 3.000 0.8098E+02 0.3279E+03 - 3.100 0.8137E+02 0.3361E+03 - 3.200 0.8006E+02 0.3441E+03 - 3.300 0.8099E+02 0.3522E+03 - 3.400 0.8232E+02 0.3604E+03 - 3.500 0.8207E+02 0.3686E+03 - 3.600 0.8388E+02 0.3770E+03 - 3.700 0.8336E+02 0.3853E+03 - 3.800 0.8372E+02 0.3937E+03 - 3.900 0.8574E+02 0.4023E+03 - 4.000 0.8896E+02 0.4112E+03 - 4.100 0.8592E+02 0.4198E+03 - 4.200 0.8650E+02 0.4284E+03 - 4.300 0.9005E+02 0.4374E+03 - 4.400 0.9194E+02 0.4466E+03 - 4.500 0.9004E+02 0.4556E+03 - 4.600 0.9134E+02 0.4648E+03 - 4.700 0.9478E+02 0.4742E+03 - 4.800 0.9618E+02 0.4838E+03 - 4.900 0.9623E+02 0.4935E+03 - 5.000 0.9952E+02 0.5034E+03 - 5.100 0.9807E+02 0.5132E+03 - 5.200 0.9540E+02 0.5228E+03 - 5.300 0.9667E+02 0.5324E+03 - 5.400 0.9523E+02 0.5420E+03 - 5.500 0.9344E+02 0.5513E+03 - 5.600 0.9314E+02 0.5606E+03 - 5.700 0.9230E+02 0.5698E+03 - 5.800 0.9171E+02 0.5790E+03 - 5.900 0.8979E+02 0.5880E+03 - 6.000 0.8841E+02 0.5968E+03 - 6.100 0.9057E+02 0.6059E+03 - 6.200 0.9053E+02 0.6149E+03 - 6.300 0.9301E+02 0.6242E+03 - 6.400 0.9515E+02 0.6338E+03 - 6.500 0.9687E+02 0.6435E+03 - 6.600 0.9795E+02 0.6532E+03 - 6.700 0.9889E+02 0.6631E+03 - 6.800 0.9912E+02 0.6730E+03 - 6.900 0.1018E+03 0.6832E+03 - 7.000 0.1027E+03 0.6935E+03 - 7.100 0.1001E+03 0.7035E+03 - 7.200 0.9508E+02 0.7130E+03 - 7.300 0.9679E+02 0.7227E+03 - 7.400 0.1012E+03 0.7328E+03 - 7.500 0.1012E+03 0.7429E+03 - 7.600 0.1002E+03 0.7530E+03 - 7.700 0.1016E+03 0.7631E+03 - 7.800 0.1058E+03 0.7737E+03 - 7.900 0.1079E+03 0.7845E+03 - 8.000 0.1074E+03 0.7952E+03 - 8.100 0.1058E+03 0.8058E+03 - 8.200 0.1070E+03 0.8165E+03 - 8.300 0.1105E+03 0.8276E+03 - 8.400 0.1077E+03 0.8383E+03 - 8.500 0.1040E+03 0.8487E+03 - 8.600 0.1089E+03 0.8596E+03 - 8.700 0.1129E+03 0.8709E+03 - 8.800 0.1102E+03 0.8819E+03 - 8.900 0.1050E+03 0.8924E+03 - 9.000 0.1058E+03 0.9030E+03 - 9.100 0.1018E+03 0.9132E+03 - 9.200 0.6434E+02 0.9196E+03 - 9.300 0.2057E+02 0.9217E+03 - 9.400 0.2996E+01 0.9220E+03 - 9.500 0.1486E+00 0.9220E+03 - 9.600 0.1742E-02 0.9220E+03 - 9.700 0.3580E-05 0.9220E+03 - 9.800 0.1108E-08 0.9220E+03 - 9.900 0.4876E-13 0.9220E+03 - 10.000 0.2983E-18 0.9220E+03 - 10.100 0.2514E-24 0.9220E+03 - 10.200 0.2906E-31 0.9220E+03 - 10.300 0.4595E-39 0.9220E+03 - 10.400 0.9925E-48 0.9220E+03 - 10.500 0.2925E-57 0.9220E+03 - 10.600 0.1175E-67 0.9220E+03 - 10.700 0.6436E-79 0.9220E+03 - 10.800 0.7199E-83 0.9220E+03 - 10.900 0.7199E-83 0.9220E+03 - 11.000 0.7199E-83 0.9220E+03 - 11.100 0.7199E-83 0.9220E+03 - 11.200 0.7199E-83 0.9220E+03 - 11.300 0.7199E-83 0.9220E+03 - 11.400 0.7199E-83 0.9220E+03 - 11.500 0.7199E-83 0.9220E+03 - 11.600 0.7199E-83 0.9220E+03 - 11.700 0.7199E-83 0.9220E+03 - 11.800 0.7199E-83 0.9220E+03 - 11.900 0.7199E-83 0.9220E+03 - 12.000 0.7199E-83 0.9220E+03 - 12.100 0.7199E-83 0.9220E+03 - 12.200 0.7199E-83 0.9220E+03 - 12.300 0.7199E-83 0.9220E+03 - 12.400 0.7199E-83 0.9220E+03 - 12.500 0.7199E-83 0.9220E+03 - 12.600 0.7199E-83 0.9220E+03 - 12.700 0.7199E-83 0.9220E+03 - 12.800 0.7199E-83 0.9220E+03 - 12.900 0.7199E-83 0.9220E+03 - 13.000 0.7199E-83 0.9220E+03 - 13.100 0.7199E-83 0.9220E+03 - 13.200 0.7199E-83 0.9220E+03 - 13.300 0.7199E-83 0.9220E+03 - 13.400 0.7199E-83 0.9220E+03 - 13.500 0.7199E-83 0.9220E+03 - 13.600 0.7199E-83 0.9220E+03 - 13.700 0.7199E-83 0.9220E+03 - 13.800 0.7199E-83 0.9220E+03 - 13.900 0.7199E-83 0.9220E+03 - 14.000 0.7199E-83 0.9220E+03 - 14.100 0.7199E-83 0.9220E+03 - 14.200 0.7199E-83 0.9220E+03 - 14.300 0.7199E-83 0.9220E+03 - 14.400 0.7199E-83 0.9220E+03 - 14.500 0.7199E-83 0.9220E+03 - 14.600 0.7199E-83 0.9220E+03 - 14.700 0.7199E-83 0.9220E+03 - 14.800 0.7199E-83 0.9220E+03 - 14.900 0.7199E-83 0.9220E+03 - 15.000 0.7199E-83 0.9220E+03 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.scf.pw b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.scf.pw deleted file mode 100644 index af52f9e1d..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/Al.scf.pw +++ /dev/null @@ -1,299 +0,0 @@ -Al.scf.pw -&CONTROL - calculation='scf', - verbosity='high', - restart_mode='from_scratch', - tstress=.true., - tprnfor=.true., - prefix='Al', - pseudo_dir='/ascldap/users/namodin/MLDFT/pp/', - outdir='out', -/ - -&SYSTEM - ibrav=0, - nosym=.true., - nat=256, - ntyp=1, - ecutwfc=100, - ecutrho=400, - occupations='smearing', - smearing='fermi-dirac', - degauss=0.0019, -/ - -&ELECTRONS - mixing_mode='plain', - mixing_beta=0.2, - conv_thr=0.000256, -/ - -ATOMIC_SPECIES - Al 26.981539 Al.sr-pbesol.upf - -K_POINTS automatic - 8 8 8 0 0 0 - -CELL_PARAMETERS angstrom -16.19800000 0.00000000 0.00000000 -0.00000000 16.19800000 0.00000000 -0.00000000 0.00000000 16.19800000 - -ATOMIC_POSITIONS {alat} -Al 0.00317715 0.00115020 0.00422977 -Al 0.00020601 0.12325432 0.12276585 -Al 0.13205907 0.00069849 0.12880466 -Al 0.12035063 0.12233298 0.00500888 -Al 0.99616080 0.99965781 0.25468156 -Al 0.00462834 0.11696233 0.37753909 -Al 0.13126733 0.00105961 0.37584558 -Al 0.11831629 0.13176219 0.25212569 -Al 0.00779253 0.99842842 0.50068938 -Al 0.99406565 0.12050283 0.62795631 -Al 0.12039495 0.99518808 0.62583829 -Al 0.12049355 0.12381140 0.50177796 -Al 0.99335490 0.01245642 0.75437014 -Al 0.99553204 0.13002426 0.87495149 -Al 0.11943260 0.01288485 0.85395661 -Al 0.13138905 0.13208432 0.74220015 -Al 0.00382143 0.24709358 0.00053019 -Al 0.99204471 0.37073519 0.12626821 -Al 0.11874381 0.25060539 0.13404114 -Al 0.11679824 0.37202808 0.00098539 -Al 0.99223667 0.24879828 0.24894088 -Al 0.99033374 0.37367286 0.37740263 -Al 0.12258871 0.24839655 0.38475195 -Al 0.12073235 0.37545826 0.25391324 -Al 0.99414425 0.25962947 0.50477243 -Al 0.99545625 0.39077079 0.62318287 -Al 0.11229683 0.24772820 0.61759188 -Al 0.12817764 0.37661444 0.49803461 -Al 0.00321505 0.25783831 0.75237872 -Al 0.99978890 0.37320385 0.86750262 -Al 0.12814221 0.25837418 0.87188042 -Al 0.13120253 0.38190646 0.75012449 -Al 0.99484757 0.49812333 0.00609974 -Al 0.00874093 0.61918173 0.12645399 -Al 0.12780204 0.49617002 0.11988085 -Al 0.12226886 0.61840000 0.99658195 -Al 0.00793260 0.49965903 0.24600526 -Al 0.00325045 0.61742519 0.35830843 -Al 0.13001625 0.50497624 0.37276834 -Al 0.12888048 0.61619867 0.24525564 -Al 0.00725752 0.49718671 0.49005208 -Al 0.00809822 0.62296642 0.62954075 -Al 0.13096336 0.50063965 0.62282885 -Al 0.12195581 0.62021395 0.49527532 -Al 0.99547982 0.50080057 0.73804569 -Al 0.00972095 0.62755205 0.87195202 -Al 0.11302378 0.49835758 0.86591511 -Al 0.13264708 0.62729203 0.75399568 -Al 0.01326271 0.74521439 0.98957500 -Al 0.00308360 0.88595919 0.13014794 -Al 0.13008724 0.74119884 0.12955884 -Al 0.11689139 0.87730057 0.00074077 -Al 0.00598782 0.74653283 0.24416491 -Al 0.99993759 0.87055960 0.37502856 -Al 0.12679125 0.74442819 0.37338182 -Al 0.13173136 0.87223433 0.25545163 -Al 0.00075479 0.74591358 0.50343419 -Al 0.98829944 0.87376572 0.62937187 -Al 0.12462864 0.74836788 0.62116638 -Al 0.12111028 0.87199090 0.50129970 -Al 0.99367338 0.74957799 0.75284518 -Al 0.00069577 0.88157231 0.87119742 -Al 0.12945036 0.76313369 0.86763456 -Al 0.11475345 0.87795232 0.75038888 -Al 0.23626248 0.00319436 0.99166677 -Al 0.25757080 0.12700004 0.12783241 -Al 0.37099739 0.99374573 0.12173435 -Al 0.37029839 0.11613890 0.99404599 -Al 0.25302916 0.99711742 0.24225680 -Al 0.25196272 0.12266725 0.37109725 -Al 0.37381480 0.99324247 0.37948380 -Al 0.38064617 0.12924791 0.24513119 -Al 0.25254530 0.98903725 0.49475226 -Al 0.25394042 0.12783157 0.61666274 -Al 0.37372857 0.99731025 0.62863151 -Al 0.37756758 0.12120710 0.49756168 -Al 0.23710907 0.00496925 0.74787682 -Al 0.24708361 0.13299635 0.86870489 -Al 0.36903611 0.99772149 0.87386064 -Al 0.37613133 0.12940253 0.75595693 -Al 0.25074156 0.24968000 0.00237963 -Al 0.24176045 0.37397695 0.11819446 -Al 0.37099257 0.25277893 0.12126261 -Al 0.36491106 0.38167290 0.00319109 -Al 0.24943387 0.24137978 0.24963289 -Al 0.25168702 0.37152301 0.37586054 -Al 0.37679982 0.24767965 0.37002965 -Al 0.36566749 0.36687118 0.24719678 -Al 0.25668066 0.24935992 0.49689055 -Al 0.23688615 0.37325791 0.61362708 -Al 0.36775284 0.25295831 0.63339193 -Al 0.37058487 0.37232564 0.50641822 -Al 0.24058480 0.25887981 0.74450233 -Al 0.24768663 0.38273245 0.88066757 -Al 0.37052541 0.26712547 0.87335350 -Al 0.37038910 0.37579674 0.75276513 -Al 0.24253455 0.49942232 0.99487916 -Al 0.25074173 0.62442019 0.12243577 -Al 0.37311382 0.49914902 0.12420954 -Al 0.37320920 0.62350426 0.99376271 -Al 0.25389455 0.49538335 0.25271040 -Al 0.25658599 0.62317196 0.37349744 -Al 0.38212228 0.49034093 0.37947714 -Al 0.38090066 0.60896281 0.25545615 -Al 0.24329407 0.50142690 0.49126120 -Al 0.25269515 0.62955678 0.62841784 -Al 0.37042634 0.50105050 0.62697351 -Al 0.37084280 0.62520133 0.51267915 -Al 0.25231582 0.50422315 0.74908575 -Al 0.25083118 0.62883028 0.87233488 -Al 0.38054186 0.49697121 0.87200829 -Al 0.38857876 0.61850989 0.74785557 -Al 0.25779019 0.74847839 0.99939367 -Al 0.24911012 0.87420062 0.12270013 -Al 0.37379063 0.73973313 0.12344417 -Al 0.37805029 0.86810019 0.99298930 -Al 0.25333605 0.74287691 0.24945202 -Al 0.25383293 0.87208918 0.37325974 -Al 0.37376891 0.74959858 0.37877335 -Al 0.37486391 0.86890075 0.25672474 -Al 0.23915687 0.74103044 0.49724675 -Al 0.24369823 0.87643261 0.62451626 -Al 0.38505233 0.75239503 0.62617122 -Al 0.37847875 0.87612161 0.51019113 -Al 0.26582340 0.74964806 0.74671707 -Al 0.24070512 0.87568485 0.87138745 -Al 0.38127443 0.74478341 0.87734871 -Al 0.37122727 0.88166043 0.75464351 -Al 0.49676265 0.99913572 0.00773492 -Al 0.49677586 0.12889222 0.11883841 -Al 0.62632069 0.00209937 0.12239078 -Al 0.61429381 0.12500820 0.00331895 -Al 0.50499332 0.99536389 0.25588511 -Al 0.51758471 0.12246991 0.37168698 -Al 0.62685441 0.99657069 0.38221316 -Al 0.62133037 0.10677543 0.24236551 -Al 0.50283046 0.00027661 0.50517401 -Al 0.49924389 0.12871700 0.63075628 -Al 0.61973760 0.99776872 0.63487085 -Al 0.62154625 0.13372902 0.49349498 -Al 0.48858742 0.00996567 0.75577873 -Al 0.50030758 0.12998960 0.88598660 -Al 0.61675238 0.01078308 0.87268885 -Al 0.62062082 0.13817810 0.75159238 -Al 0.49551556 0.25732791 0.99892171 -Al 0.49621790 0.37539287 0.12546048 -Al 0.63140164 0.26479969 0.12145568 -Al 0.61997492 0.37552116 0.99192773 -Al 0.50866253 0.24052677 0.24820621 -Al 0.50268749 0.36723972 0.37156275 -Al 0.62567643 0.24712665 0.38373644 -Al 0.62928974 0.38239436 0.25813868 -Al 0.48999643 0.25627225 0.49935502 -Al 0.49796721 0.38502975 0.62724580 -Al 0.62430452 0.25166879 0.62749593 -Al 0.61467977 0.37317844 0.50637909 -Al 0.49493639 0.25133042 0.75154257 -Al 0.49534688 0.37618114 0.86909990 -Al 0.61246283 0.25121344 0.86485038 -Al 0.62282704 0.38082335 0.74352853 -Al 0.50348440 0.50148151 0.00898825 -Al 0.49859317 0.62374629 0.13172456 -Al 0.63072956 0.50103732 0.13011505 -Al 0.62698283 0.62785259 0.00833124 -Al 0.50116452 0.48931611 0.24883425 -Al 0.50458482 0.61475673 0.38100075 -Al 0.62957740 0.49402239 0.38181668 -Al 0.62655074 0.62155853 0.25519562 -Al 0.50115871 0.49541243 0.49810488 -Al 0.50973680 0.61713381 0.62630168 -Al 0.63118820 0.49631279 0.62401404 -Al 0.62498572 0.61067461 0.49866825 -Al 0.50907412 0.50153474 0.75901977 -Al 0.51212343 0.62386323 0.88244495 -Al 0.62239397 0.49705208 0.88343202 -Al 0.62757424 0.61527633 0.74473006 -Al 0.49936968 0.75141687 0.00098419 -Al 0.50198259 0.87164597 0.13247901 -Al 0.61759859 0.75078730 0.14208182 -Al 0.62790966 0.87363482 0.01134898 -Al 0.49648381 0.74798718 0.25575989 -Al 0.49563886 0.87098031 0.37490084 -Al 0.61975734 0.74992524 0.38173015 -Al 0.63001577 0.87476567 0.25423197 -Al 0.50069165 0.74864365 0.50712919 -Al 0.51183280 0.87152323 0.63036879 -Al 0.63128640 0.73926092 0.61850891 -Al 0.62876440 0.86579297 0.49946341 -Al 0.49769761 0.74656916 0.75232188 -Al 0.50599556 0.87822282 0.88111163 -Al 0.62828277 0.74851850 0.87818830 -Al 0.62013637 0.87599170 0.76303239 -Al 0.75686751 0.99492115 0.00088827 -Al 0.74467843 0.12723427 0.11961291 -Al 0.87556549 0.00369676 0.12621795 -Al 0.87475810 0.12266938 0.99868019 -Al 0.74609007 0.00163629 0.24752646 -Al 0.75349991 0.12933425 0.37611815 -Al 0.88095143 0.00133752 0.37711697 -Al 0.87706767 0.11849743 0.24714141 -Al 0.74362808 0.00703466 0.50528327 -Al 0.75057559 0.13367993 0.62043474 -Al 0.87015719 0.00376019 0.62411051 -Al 0.87832474 0.11957331 0.50122298 -Al 0.75440296 0.00266564 0.75438769 -Al 0.75063391 0.12797922 0.87408035 -Al 0.87500514 0.00969461 0.87268056 -Al 0.87355340 0.12955559 0.75399544 -Al 0.74541659 0.24490088 0.00407350 -Al 0.75075681 0.39099472 0.11533268 -Al 0.86431841 0.25660834 0.11255680 -Al 0.86652423 0.37969599 0.99219682 -Al 0.74146925 0.23987690 0.24834194 -Al 0.75169720 0.37625628 0.37634352 -Al 0.88890668 0.25086535 0.37728200 -Al 0.86238571 0.36121717 0.24200173 -Al 0.75146734 0.25403038 0.50718035 -Al 0.74894394 0.36950948 0.62383741 -Al 0.87442534 0.25501163 0.62503015 -Al 0.87776574 0.37481735 0.50628054 -Al 0.74617247 0.24906860 0.75596080 -Al 0.75221802 0.37507914 0.87355096 -Al 0.87896034 0.25760957 0.88390838 -Al 0.86867608 0.38164705 0.74626903 -Al 0.74189350 0.51020090 0.99834605 -Al 0.74524061 0.62716394 0.13044927 -Al 0.87170353 0.49891082 0.12002179 -Al 0.86951405 0.62129397 0.00276830 -Al 0.75203169 0.50093943 0.24050544 -Al 0.75900617 0.61844580 0.36090421 -Al 0.87814676 0.49591115 0.36355387 -Al 0.87903888 0.62184363 0.24034326 -Al 0.75162722 0.49628811 0.49270285 -Al 0.74834445 0.62934556 0.61707414 -Al 0.86376714 0.50616251 0.62149233 -Al 0.87601835 0.61794319 0.49499002 -Al 0.75832911 0.50299237 0.75301563 -Al 0.75002999 0.63141690 0.87782568 -Al 0.87777246 0.50587526 0.87233272 -Al 0.88336963 0.62653265 0.75699366 -Al 0.74583914 0.75416465 0.00348848 -Al 0.75813025 0.87640517 0.12706117 -Al 0.87928098 0.75005800 0.12474447 -Al 0.88438720 0.87819211 0.00472541 -Al 0.75998762 0.75236132 0.25078015 -Al 0.76260167 0.87804941 0.36636549 -Al 0.88099052 0.74935941 0.37229183 -Al 0.88247979 0.86897661 0.25221829 -Al 0.75248504 0.75642062 0.49706069 -Al 0.74984275 0.87473162 0.62898769 -Al 0.87611175 0.74487681 0.62710867 -Al 0.88093126 0.87696450 0.49141002 -Al 0.74834534 0.75930289 0.75569426 -Al 0.75898225 0.88269616 0.86945006 -Al 0.87028964 0.75236772 0.87807720 -Al 0.87801602 0.87625452 0.74951145 - diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/pbs.job b/ml-dft-sandia/notebooks/dos2eband/snap_0_888/pbs.job deleted file mode 100644 index 0dfe02617..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_0_888/pbs.job +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# Script to run a VASP job using SLURM on 1152 cpus of Chama -# Created by ./run_job.exe on Mon Mar 30 13:20:37 MDT 2020 -# -#SBATCH --nodes=32 -#SBATCH --time=48:00:00 -#SBATCH --account=FY200018 -#SBATCH --job-name=200330132037 -#SBATCH --output=/nscratch/namodin/200330132037/200330132037.out -#SBATCH --error=/nscratch/namodin/200330132037/200330132037.err - -# Number of nodes -nodes=32 - -# Number MPI processes to run on each node (a.k.a. PPN) -# Redsky has 8 cores per node -cores=36 - -# Total number of cores -cpus=1152 - -# -# Set up running directory -# -cd /nscratch/namodin/200330132037 -cp /home/namodin/MLDFT/output/200330132037/Al.scf.pw . -cp /ascldap/users/namodin/MLDFT/pw.x . -#cp /ascldap/users/namodin/MLDFT/pw_intel.x . - -# -# Set up the environment -# -module purge -module load tce -module load intel/18.0.5.274 -module load mkl/18.0.5.274 -module load openmpi-intel/1.10 -# -# Execute code -# -mpiexec --npernode $cores --n $cpus ./pw.x -nk $nodes -in Al.scf.pw -#mpiexec --npernode $cores --n $cpus ./pw.x -nk $nodes -nt 1 -nd 1 -in Al.scf.pw -#mpiexec --npernode $cores --n $cpus ./pw_intel.x -nk $nodes -in Al.scf.pw - -# -# Save results and clean up -# -rm pw.x -#rm pw_intel.x -cp -r *.out /home/namodin/MLDFT/output/200330132037 -cp -r *.err /home/namodin/MLDFT/output/200330132037 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/Al.dos b/ml-dft-sandia/notebooks/dos2eband/snap_1/Al.dos deleted file mode 100644 index 589d70b24..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/Al.dos +++ /dev/null @@ -1,140 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.773 eV - -4.620 0.7785E-04 0.8582E-05 - -4.510 0.3747E-03 0.4988E-04 - -4.400 0.1600E-02 0.2262E-03 - -4.289 0.6069E-02 0.8952E-03 - -4.179 0.2048E-01 0.3153E-02 - -4.069 0.6163E-01 0.9948E-02 - -3.959 0.1657E+00 0.2821E-01 - -3.849 0.3991E+00 0.7221E-01 - -3.738 0.8645E+00 0.1675E+00 - -3.628 0.1691E+01 0.3539E+00 - -3.518 0.3001E+01 0.6847E+00 - -3.408 0.4866E+01 0.1221E+01 - -3.297 0.7261E+01 0.2021E+01 - -3.187 0.1006E+02 0.3130E+01 - -3.077 0.1306E+02 0.4570E+01 - -2.967 0.1607E+02 0.6342E+01 - -2.856 0.1891E+02 0.8427E+01 - -2.746 0.2151E+02 0.1080E+02 - -2.636 0.2385E+02 0.1343E+02 - -2.526 0.2597E+02 0.1629E+02 - -2.415 0.2790E+02 0.1937E+02 - -2.305 0.2968E+02 0.2264E+02 - -2.195 0.3132E+02 0.2609E+02 - -2.085 0.3287E+02 0.2971E+02 - -1.975 0.3437E+02 0.3350E+02 - -1.864 0.3586E+02 0.3746E+02 - -1.754 0.3733E+02 0.4157E+02 - -1.644 0.3870E+02 0.4584E+02 - -1.534 0.3995E+02 0.5024E+02 - -1.423 0.4112E+02 0.5477E+02 - -1.313 0.4228E+02 0.5944E+02 - -1.203 0.4352E+02 0.6423E+02 - -1.093 0.4483E+02 0.6918E+02 - -0.982 0.4612E+02 0.7426E+02 - -0.872 0.4726E+02 0.7947E+02 - -0.762 0.4819E+02 0.8478E+02 - -0.652 0.4897E+02 0.9018E+02 - -0.541 0.4980E+02 0.9567E+02 - -0.431 0.5087E+02 0.1013E+03 - -0.321 0.5224E+02 0.1070E+03 - -0.211 0.5372E+02 0.1130E+03 - -0.101 0.5501E+02 0.1190E+03 - 0.010 0.5589E+02 0.1252E+03 - 0.120 0.5640E+02 0.1314E+03 - 0.230 0.5681E+02 0.1377E+03 - 0.340 0.5745E+02 0.1440E+03 - 0.451 0.5849E+02 0.1504E+03 - 0.561 0.5987E+02 0.1570E+03 - 0.671 0.6132E+02 0.1638E+03 - 0.781 0.6259E+02 0.1707E+03 - 0.892 0.6353E+02 0.1777E+03 - 1.002 0.6420E+02 0.1848E+03 - 1.112 0.6468E+02 0.1919E+03 - 1.222 0.6511E+02 0.1991E+03 - 1.333 0.6556E+02 0.2063E+03 - 1.443 0.6618E+02 0.2136E+03 - 1.553 0.6713E+02 0.2210E+03 - 1.663 0.6851E+02 0.2286E+03 - 1.773 0.7021E+02 0.2363E+03 - 1.884 0.7193E+02 0.2442E+03 - 1.994 0.7321E+02 0.2523E+03 - 2.104 0.7374E+02 0.2604E+03 - 2.214 0.7353E+02 0.2685E+03 - 2.325 0.7302E+02 0.2766E+03 - 2.435 0.7287E+02 0.2846E+03 - 2.545 0.7363E+02 0.2927E+03 - 2.655 0.7534E+02 0.3010E+03 - 2.766 0.7756E+02 0.3096E+03 - 2.876 0.7966E+02 0.3184E+03 - 2.986 0.8111E+02 0.3273E+03 - 3.096 0.8175E+02 0.3363E+03 - 3.207 0.8177E+02 0.3453E+03 - 3.317 0.8154E+02 0.3543E+03 - 3.427 0.8146E+02 0.3633E+03 - 3.537 0.8177E+02 0.3723E+03 - 3.648 0.8250E+02 0.3814E+03 - 3.758 0.8355E+02 0.3906E+03 - 3.868 0.8476E+02 0.4000E+03 - 3.978 0.8606E+02 0.4095E+03 - 4.088 0.8745E+02 0.4191E+03 - 4.199 0.8892E+02 0.4289E+03 - 4.309 0.9040E+02 0.4389E+03 - 4.419 0.9179E+02 0.4490E+03 - 4.529 0.9299E+02 0.4592E+03 - 4.640 0.9394E+02 0.4696E+03 - 4.750 0.9463E+02 0.4800E+03 - 4.860 0.9502E+02 0.4905E+03 - 4.970 0.9507E+02 0.5010E+03 - 5.081 0.9478E+02 0.5114E+03 - 5.191 0.9429E+02 0.5218E+03 - 5.301 0.9386E+02 0.5322E+03 - 5.411 0.9371E+02 0.5425E+03 - 5.522 0.9385E+02 0.5528E+03 - 5.632 0.9408E+02 0.5632E+03 - 5.742 0.9411E+02 0.5736E+03 - 5.852 0.9376E+02 0.5839E+03 - 5.962 0.9310E+02 0.5942E+03 - 6.073 0.9246E+02 0.6044E+03 - 6.183 0.9229E+02 0.6146E+03 - 6.293 0.9287E+02 0.6248E+03 - 6.403 0.9410E+02 0.6352E+03 - 6.514 0.9557E+02 0.6457E+03 - 6.624 0.9680E+02 0.6564E+03 - 6.734 0.9752E+02 0.6671E+03 - 6.844 0.9775E+02 0.6779E+03 - 6.955 0.9775E+02 0.6887E+03 - 7.065 0.9789E+02 0.6995E+03 - 7.175 0.9856E+02 0.7103E+03 - 7.285 0.1000E+03 0.7214E+03 - 7.396 0.1022E+03 0.7326E+03 - 7.506 0.1046E+03 0.7441E+03 - 7.616 0.1064E+03 0.7559E+03 - 7.726 0.1071E+03 0.7677E+03 - 7.836 0.1065E+03 0.7794E+03 - 7.947 0.1048E+03 0.7910E+03 - 8.057 0.1031E+03 0.8023E+03 - 8.167 0.1020E+03 0.8136E+03 - 8.277 0.1020E+03 0.8248E+03 - 8.388 0.1033E+03 0.8362E+03 - 8.498 0.1050E+03 0.8478E+03 - 8.608 0.1060E+03 0.8595E+03 - 8.718 0.1049E+03 0.8710E+03 - 8.829 0.1002E+03 0.8821E+03 - 8.939 0.9141E+02 0.8922E+03 - 9.049 0.7887E+02 0.9009E+03 - 9.159 0.6382E+02 0.9079E+03 - 9.270 0.4810E+02 0.9132E+03 - 9.380 0.3354E+02 0.9169E+03 - 9.490 0.2151E+02 0.9193E+03 - 9.600 0.1261E+02 0.9207E+03 - 9.711 0.6724E+01 0.9214E+03 - 9.821 0.3246E+01 0.9218E+03 - 9.931 0.1413E+01 0.9219E+03 - 10.041 0.5525E+00 0.9220E+03 - 10.151 0.1936E+00 0.9220E+03 - 10.262 0.6059E-01 0.9220E+03 - 10.372 0.1691E-01 0.9220E+03 - 10.482 0.4200E-02 0.9220E+03 - 10.592 0.9270E-03 0.9220E+03 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/EIGS b/ml-dft-sandia/notebooks/dos2eband/snap_1/EIGS deleted file mode 100644 index a6d1af701..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/EIGS +++ /dev/null @@ -1,461 +0,0 @@ --3.314100, -3.252400, -3.254400, -3.193400, -3.192500, -3.252300, -3.190900, -3.190800, -3.193000, -3.132200, -3.131200, -3.192500, -3.130900, -3.131600 --2.806200, -3.066300, -3.060600, -3.010400, -3.028200, -3.066800, -3.013000, -3.020400, -3.008900, -2.955600, -2.973300, -3.021000, -2.974600, -2.970200 --2.782300, -2.729900, -2.725100, -2.994300, -2.974000, -2.730500, -2.996800, -2.987700, -2.996600, -2.941700, -2.941200, -2.984000, -2.939900, -2.934600 --2.767300, -2.698700, -2.715900, -2.807200, -2.810900, -2.714900, -2.818700, -2.821200, -2.812900, -2.930700, -2.908300, -2.813300, -2.909400, -2.920700 --2.740800, -2.688000, -2.690300, -2.658300, -2.656900, -2.668700, -2.643600, -2.642600, -2.648900, -2.760200, -2.783200, -2.649400, -2.785400, -2.777000 --2.716000, -2.664900, -2.664000, -2.627100, -2.624600, -2.658000, -2.615300, -2.616200, -2.621700, -2.754200, -2.747400, -2.620700, -2.748700, -2.746100 --2.714800, -2.540500, -2.519600, -2.470700, -2.499300, -2.548400, -2.474400, -2.482700, -2.475000, -2.735900, -2.722800, -2.479100, -2.716900, -2.728500 --2.287200, -2.505500, -2.509500, -2.452300, -2.449500, -2.528700, -2.454200, -2.448100, -2.454700, -2.558400, -2.563100, -2.460700, -2.562100, -2.560600 --2.260300, -2.498200, -2.500400, -2.440600, -2.425700, -2.481700, -2.434400, -2.428800, -2.436400, -2.221300, -2.239300, -2.443500, -2.239600, -2.231000 --2.242400, -2.469700, -2.472600, -2.415000, -2.398400, -2.466700, -2.410000, -2.410900, -2.415000, -2.205300, -2.197700, -2.397000, -2.202700, -2.197700 --2.222100, -2.317300, -2.312800, -2.274400, -2.289100, -2.306200, -2.294300, -2.288500, -2.288000, -2.186700, -2.166300, -2.285600, -2.172700, -2.176900 --2.215300, -2.171700, -2.180400, -2.265300, -2.279500, -2.161600, -2.265000, -2.269000, -2.273100, -2.058700, -2.064700, -2.260500, -2.077200, -2.078100 --2.202400, -2.141100, -2.139800, -2.237200, -2.232200, -2.150000, -2.244900, -2.243800, -2.235200, -2.043300, -2.040700, -2.243600, -2.028800, -2.051200 --2.188100, -2.119000, -2.126000, -2.216100, -2.197000, -2.134100, -2.213400, -2.213000, -2.210300, -2.027600, -2.025300, -2.219100, -2.024200, -2.008300 --2.162400, -2.105400, -2.109600, -2.086200, -2.082500, -2.088300, -2.077200, -2.080700, -2.071000, -1.987800, -1.990400, -2.081800, -1.986700, -1.994200 --2.153400, -1.979700, -1.970000, -2.038800, -2.038900, -1.974000, -2.044400, -2.054400, -2.045900, -1.984400, -1.975200, -2.037300, -1.976500, -1.979300 --2.142200, -1.947300, -1.939800, -1.753800, -1.782800, -1.967100, -1.752000, -1.750800, -1.761600, -1.955700, -1.965800, -1.768200, -1.962000, -1.950000 --2.122300, -1.912700, -1.929700, -1.730400, -1.736400, -1.944500, -1.730900, -1.737100, -1.745700, -1.842300, -1.845000, -1.733400, -1.842300, -1.836700 --2.106400, -1.907700, -1.907800, -1.707200, -1.720800, -1.897600, -1.725900, -1.703600, -1.707900, -1.804900, -1.815400, -1.716200, -1.800500, -1.828100 --1.679800, -1.790100, -1.781200, -1.688000, -1.691100, -1.804700, -1.700500, -1.684800, -1.691900, -1.779400, -1.786100, -1.682300, -1.780400, -1.774300 --1.674200, -1.771100, -1.761600, -1.676000, -1.662700, -1.768100, -1.672100, -1.668100, -1.678900, -1.669900, -1.665000, -1.677100, -1.686700, -1.659100 --1.652100, -1.754100, -1.744800, -1.671100, -1.643600, -1.745800, -1.649500, -1.655900, -1.640400, -1.640200, -1.650100, -1.639800, -1.632400, -1.649300 --1.631300, -1.729900, -1.733700, -1.552700, -1.556200, -1.708300, -1.549800, -1.550500, -1.560200, -1.620800, -1.597300, -1.563900, -1.614700, -1.608700 --1.621400, -1.715800, -1.720400, -1.525500, -1.538900, -1.700200, -1.527500, -1.528100, -1.524900, -1.508400, -1.489700, -1.525800, -1.501000, -1.507100 --1.604100, -1.269700, -1.267500, -1.507500, -1.507800, -1.291800, -1.509400, -1.511700, -1.514800, -1.482100, -1.478300, -1.515700, -1.472700, -1.476600 --1.580700, -1.252400, -1.249600, -1.492000, -1.481000, -1.260500, -1.499800, -1.504300, -1.491400, -1.452500, -1.456300, -1.494100, -1.452800, -1.446000 --1.567500, -1.242200, -1.225600, -1.477100, -1.469700, -1.229900, -1.467100, -1.494300, -1.469500, -1.424700, -1.435700, -1.461900, -1.435800, -1.441300 --1.153300, -1.227100, -1.207200, -1.462400, -1.449800, -1.207300, -1.453800, -1.455000, -1.443500, -1.420700, -1.424400, -1.446500, -1.416100, -1.403200 --1.119600, -1.207800, -1.200100, -1.321200, -1.317800, -1.203300, -1.322800, -1.320300, -1.318100, -1.395600, -1.399000, -1.319200, -1.390300, -1.391800 --1.095200, -1.177700, -1.194300, -1.185600, -1.182400, -1.186800, -1.175500, -1.163900, -1.180100, -1.294100, -1.291400, -1.183800, -1.318800, -1.312100 --1.075100, -1.151500, -1.164500, -1.152000, -1.155500, -1.152000, -1.154000, -1.156400, -1.155400, -1.282000, -1.283800, -1.154600, -1.285200, -1.292700 --1.037900, -1.123900, -1.146500, -1.131200, -1.134500, -1.133600, -1.141900, -1.134200, -1.142700, -1.262400, -1.259100, -1.151000, -1.268200, -1.272500 --1.030500, -1.052100, -1.061800, -1.113100, -1.111400, -1.060000, -1.111100, -1.107400, -1.117400, -1.234500, -1.246300, -1.104400, -1.241200, -1.244300 --0.673800, -1.021300, -1.029300, -0.998100, -1.016900, -1.017400, -1.009600, -1.002000, -1.006600, -1.220100, -1.225300, -1.022400, -1.233300, -1.215000 --0.647200, -1.003200, -1.002600, -0.980400, -0.988400, -0.988600, -0.987500, -0.976500, -0.984300, -1.213900, -1.193500, -0.980700, -1.180000, -1.189200 --0.636500, -0.977000, -0.975400, -0.963900, -0.960200, -0.984600, -0.948400, -0.959100, -0.958200, -1.093900, -1.096600, -0.967300, -1.096800, -1.092100 --0.622100, -0.855700, -0.858500, -0.950800, -0.957400, -0.869400, -0.935200, -0.948400, -0.948600, -1.054200, -1.074400, -0.951800, -1.056400, -1.081600 --0.609900, -0.836000, -0.846300, -0.924000, -0.907900, -0.833900, -0.912900, -0.921900, -0.929500, -1.041000, -1.036500, -0.908500, -1.027800, -1.030600 --0.587400, -0.824200, -0.812400, -0.898500, -0.887800, -0.799700, -0.900000, -0.913000, -0.885900, -0.777900, -0.766800, -0.873000, -0.776700, -0.758900 --0.577400, -0.796400, -0.773100, -0.809600, -0.822000, -0.787600, -0.818500, -0.808800, -0.828800, -0.742200, -0.745800, -0.844500, -0.763700, -0.752000 --0.568900, -0.682800, -0.685200, -0.794700, -0.808900, -0.681000, -0.804300, -0.792600, -0.802000, -0.717300, -0.712300, -0.809300, -0.736700, -0.724000 --0.553500, -0.665000, -0.652500, -0.781600, -0.788900, -0.669700, -0.784900, -0.780100, -0.791100, -0.692400, -0.694700, -0.782700, -0.700900, -0.691400 --0.549200, -0.634700, -0.638100, -0.763000, -0.774300, -0.646800, -0.769500, -0.759000, -0.760500, -0.680600, -0.675800, -0.769200, -0.680500, -0.679800 --0.544000, -0.624700, -0.626000, -0.750900, -0.757000, -0.605500, -0.750400, -0.752000, -0.742400, -0.662400, -0.660800, -0.743500, -0.619000, -0.649700 --0.524000, -0.505200, -0.545900, -0.739800, -0.719400, -0.527500, -0.733400, -0.735200, -0.727900, -0.574100, -0.572500, -0.728800, -0.572800, -0.572000 --0.512500, -0.494400, -0.515100, -0.719300, -0.701000, -0.492000, -0.714600, -0.714000, -0.706400, -0.536300, -0.555000, -0.701000, -0.545400, -0.562900 --0.498200, -0.477600, -0.493300, -0.689500, -0.693400, -0.480800, -0.693700, -0.699400, -0.682500, -0.517100, -0.538800, -0.678100, -0.531300, -0.511800 --0.490300, -0.467500, -0.459200, -0.577700, -0.570400, -0.472500, -0.574300, -0.581300, -0.595700, -0.498500, -0.490300, -0.593500, -0.493600, -0.490500 --0.487700, -0.450600, -0.453700, -0.553200, -0.551900, -0.455600, -0.551700, -0.561400, -0.549100, -0.478000, -0.466900, -0.549600, -0.473000, -0.474000 --0.466800, -0.431000, -0.444200, -0.260300, -0.290100, -0.439200, -0.265200, -0.268500, -0.292600, -0.468100, -0.453800, -0.285500, -0.430200, -0.461700 --0.459500, -0.417800, -0.399800, -0.251000, -0.261500, -0.420000, -0.247500, -0.251700, -0.248200, -0.330800, -0.338000, -0.260400, -0.338000, -0.326100 --0.451800, -0.406300, -0.386800, -0.244300, -0.232700, -0.387700, -0.227700, -0.235300, -0.225300, -0.207000, -0.204700, -0.237800, -0.212100, -0.201100 --0.439700, -0.341300, -0.336900, -0.217200, -0.215700, -0.346500, -0.222500, -0.222800, -0.217600, -0.184900, -0.188700, -0.211900, -0.198900, -0.181700 --0.419500, -0.315100, -0.306500, -0.204800, -0.187100, -0.326400, -0.210700, -0.185000, -0.202900, -0.163900, -0.170700, -0.197300, -0.180500, -0.168800 --0.417900, -0.283500, -0.288200, -0.185600, -0.173700, -0.298500, -0.189900, -0.178400, -0.190200, -0.150200, -0.161400, -0.194700, -0.146200, -0.155800 --0.390600, -0.276100, -0.278100, -0.172900, -0.158400, -0.275100, -0.172400, -0.168400, -0.163900, -0.133000, -0.125600, -0.147600, -0.124400, -0.140200 --0.376000, -0.257200, -0.260100, -0.068800, -0.092500, -0.266200, -0.065400, -0.070700, -0.076500, -0.111600, -0.097000, -0.083100, -0.105300, -0.097800 --0.102000, -0.248500, -0.246800, -0.040400, -0.063700, -0.236700, -0.056500, -0.065700, -0.048400, -0.041600, -0.029000, -0.044100, -0.038800, -0.041900 --0.075100, -0.233200, -0.223800, -0.030000, -0.030200, -0.234100, -0.048400, -0.040500, -0.028100, -0.010300, -0.014100, -0.035100, -0.018300, -0.010200 --0.070900, -0.223800, -0.205500, -0.019700, -0.000700, -0.220700, -0.021200, -0.013300, -0.019900, 0.010500, 0.012500, -0.004400, -0.011900, 0.003400 --0.046800, -0.176500, -0.184000, -0.012100, 0.008500, -0.181300, 0.006800, 0.004200, 0.009200, 0.036700, 0.025900, 0.014700, 0.022700, 0.018300 --0.044000, -0.105300, -0.107900, 0.020600, 0.023500, -0.107400, 0.018200, 0.019600, 0.023800, 0.043300, 0.048200, 0.025100, 0.039800, 0.039300 --0.040000, -0.083200, -0.101000, 0.130900, 0.123300, -0.082900, 0.130800, 0.110900, 0.109100, 0.050500, 0.061500, 0.097400, 0.061400, 0.046700 --0.005800, -0.058500, -0.056600, 0.153000, 0.149100, -0.041400, 0.153800, 0.150300, 0.141700, 0.068300, 0.070100, 0.150200, 0.070800, 0.077400 -0.006500, -0.037700, -0.008600, 0.175600, 0.174100, -0.032800, 0.175100, 0.168900, 0.175800, 0.082800, 0.087700, 0.166600, 0.092200, 0.093800 -0.015700, 0.239800, 0.245500, 0.197500, 0.211700, 0.240000, 0.200700, 0.181600, 0.205100, 0.114400, 0.100900, 0.227800, 0.139400, 0.115900 -0.020300, 0.261400, 0.256500, 0.277000, 0.288300, 0.249600, 0.294000, 0.296100, 0.298200, 0.187300, 0.186300, 0.286300, 0.188900, 0.164500 -0.032700, 0.278500, 0.276900, 0.314000, 0.301300, 0.287900, 0.311000, 0.312800, 0.318300, 0.198400, 0.208900, 0.309300, 0.198400, 0.193700 -0.059800, 0.292700, 0.305300, 0.325700, 0.317500, 0.306200, 0.332200, 0.327700, 0.343800, 0.211100, 0.215000, 0.327600, 0.233400, 0.219500 -0.064700, 0.375400, 0.368200, 0.343100, 0.334300, 0.383000, 0.348800, 0.353300, 0.353400, 0.236600, 0.235800, 0.351700, 0.245500, 0.242500 -0.075300, 0.410700, 0.406400, 0.356000, 0.367200, 0.391400, 0.363200, 0.362000, 0.360800, 0.270100, 0.259700, 0.361200, 0.259800, 0.271200 -0.075800, 0.418100, 0.419900, 0.384400, 0.397500, 0.416000, 0.376500, 0.392600, 0.378500, 0.295500, 0.287600, 0.389000, 0.277200, 0.313800 -0.082900, 0.431400, 0.440200, 0.472800, 0.462600, 0.435700, 0.456300, 0.470900, 0.468500, 0.665500, 0.665600, 0.435800, 0.662000, 0.633300 -0.092600, 0.448000, 0.451800, 0.491600, 0.479800, 0.449000, 0.480200, 0.484500, 0.477600, 0.679600, 0.692600, 0.475300, 0.675500, 0.679900 -0.101500, 0.469000, 0.464000, 0.503300, 0.503000, 0.468500, 0.502300, 0.509000, 0.499700, 0.711100, 0.702500, 0.496000, 0.697400, 0.699200 -0.122300, 0.474800, 0.479200, 0.524500, 0.516300, 0.472400, 0.515900, 0.528700, 0.520800, 0.725000, 0.726500, 0.529100, 0.715300, 0.708500 -0.130500, 0.488500, 0.495600, 0.535200, 0.544100, 0.496200, 0.534500, 0.538800, 0.526300, 0.736600, 0.738000, 0.537900, 0.736500, 0.729000 -0.135900, 0.501800, 0.504700, 0.549900, 0.549900, 0.518200, 0.553500, 0.555600, 0.555300, 0.753900, 0.747200, 0.568400, 0.747500, 0.752200 -0.145200, 0.520800, 0.515200, 0.556900, 0.574200, 0.525000, 0.569700, 0.568300, 0.573000, 0.758600, 0.751100, 0.578800, 0.762100, 0.760100 -0.188100, 0.536700, 0.534600, 0.585500, 0.587000, 0.540600, 0.593200, 0.577300, 0.596000, 0.778600, 0.767700, 0.605100, 0.771800, 0.782300 -0.220300, 0.554300, 0.570600, 0.665500, 0.650900, 0.572200, 0.667900, 0.657500, 0.675100, 0.785100, 0.783000, 0.642700, 0.794000, 0.797000 -1.032400, 0.662700, 0.659700, 0.696100, 0.684300, 0.656200, 0.682300, 0.665900, 0.685000, 0.805600, 0.805100, 0.686000, 0.812300, 0.809400 -1.057100, 0.786900, 0.789800, 0.707600, 0.691600, 0.793200, 0.693300, 0.695400, 0.695000, 0.822700, 0.818500, 0.698300, 0.828100, 0.838100 -1.075200, 0.825600, 0.825700, 0.718100, 0.707100, 0.813900, 0.705300, 0.713200, 0.712700, 0.841300, 0.841000, 0.707200, 0.846700, 0.849700 -1.097400, 0.849000, 0.837600, 0.730800, 0.730200, 0.829700, 0.727400, 0.727600, 0.729600, 0.879600, 0.884400, 0.736400, 0.873900, 0.887500 -1.102100, 0.864100, 0.865900, 0.735500, 0.747400, 0.871100, 0.749700, 0.748100, 0.746200, 0.901700, 0.895200, 0.749400, 0.882800, 0.896600 -1.116400, 0.946600, 0.933500, 0.749100, 0.772200, 0.936300, 0.758800, 0.759100, 0.759400, 0.913400, 0.903600, 0.758400, 0.911900, 0.910200 -1.125600, 0.981200, 0.970200, 0.766700, 0.780800, 0.984800, 0.776700, 0.783600, 0.781300, 0.930600, 0.926900, 0.785100, 0.924700, 0.925800 -1.150100, 0.997800, 0.989600, 0.877700, 0.856200, 0.988400, 0.862100, 0.870700, 0.860100, 0.938400, 0.940700, 0.864800, 0.937200, 0.937500 -1.155700, 1.009100, 1.011500, 0.905200, 0.897500, 0.997400, 0.904300, 0.891600, 0.883300, 0.950200, 0.955100, 0.881000, 0.948000, 0.956500 -1.193200, 1.016800, 1.021800, 0.933800, 0.930100, 1.018600, 0.911400, 0.917300, 0.907900, 0.967600, 0.976900, 0.923900, 0.960900, 0.977100 -1.212200, 1.035100, 1.040500, 0.943100, 0.942600, 1.032900, 0.940000, 0.944300, 0.951200, 0.986700, 0.985400, 0.937200, 0.988900, 0.987400 -1.221800, 1.053800, 1.068400, 1.190500, 1.182200, 1.053700, 1.193900, 1.182500, 1.170400, 1.001100, 0.989300, 1.173600, 1.003000, 0.996800 -1.515600, 1.068100, 1.086300, 1.206700, 1.191800, 1.094700, 1.211900, 1.200000, 1.192800, 1.007500, 1.009800, 1.190500, 1.010700, 1.011600 -1.552000, 1.139000, 1.127700, 1.223200, 1.206900, 1.137900, 1.223000, 1.217100, 1.221900, 1.018800, 1.027800, 1.221300, 1.022000, 1.031100 -1.567400, 1.155300, 1.151000, 1.230600, 1.228900, 1.154800, 1.233700, 1.225200, 1.235700, 1.029100, 1.049500, 1.237700, 1.073200, 1.037400 -1.578200, 1.176100, 1.169400, 1.236200, 1.245200, 1.174800, 1.249800, 1.254500, 1.247200, 1.121200, 1.127500, 1.241300, 1.118800, 1.126500 -1.590200, 1.196400, 1.195400, 1.254300, 1.265800, 1.188000, 1.264700, 1.261800, 1.263800, 1.147800, 1.149200, 1.256200, 1.156200, 1.141200 -1.595900, 1.208800, 1.206500, 1.268800, 1.277500, 1.212500, 1.283700, 1.273300, 1.275300, 1.175500, 1.181100, 1.272900, 1.174100, 1.172600 -1.608400, 1.236500, 1.236400, 1.280800, 1.283600, 1.238800, 1.288300, 1.290100, 1.287400, 1.267500, 1.279000, 1.298600, 1.261600, 1.278400 -1.615900, 1.262800, 1.248600, 1.299900, 1.298300, 1.255600, 1.300700, 1.297700, 1.297600, 1.281200, 1.285900, 1.310000, 1.282100, 1.287400 -1.625700, 1.281500, 1.267600, 1.312300, 1.339700, 1.283300, 1.318800, 1.329300, 1.311100, 1.303900, 1.300000, 1.331600, 1.301400, 1.298700 -1.633300, 1.365700, 1.358400, 1.395900, 1.389400, 1.359300, 1.382700, 1.403000, 1.378700, 1.322200, 1.329400, 1.373800, 1.315000, 1.317800 -1.640000, 1.384600, 1.382400, 1.410300, 1.413900, 1.379000, 1.403000, 1.408900, 1.405400, 1.338700, 1.341500, 1.405700, 1.348600, 1.333800 -1.647400, 1.402600, 1.409600, 1.427400, 1.418700, 1.402300, 1.435800, 1.422400, 1.423200, 1.362300, 1.356500, 1.420700, 1.371500, 1.362300 -1.656600, 1.428700, 1.432000, 1.436400, 1.436500, 1.431400, 1.443400, 1.440800, 1.437700, 1.379000, 1.368400, 1.428000, 1.381500, 1.392300 -1.659400, 1.647200, 1.652600, 1.448200, 1.470500, 1.655300, 1.448200, 1.469300, 1.450200, 1.463000, 1.446600, 1.451300, 1.457000, 1.455500 -1.661100, 1.681200, 1.685900, 1.468300, 1.485900, 1.696800, 1.467300, 1.477700, 1.478000, 1.480700, 1.477400, 1.477900, 1.471100, 1.483600 -1.682000, 1.716500, 1.707500, 1.486200, 1.495700, 1.703900, 1.488300, 1.486400, 1.492700, 1.503800, 1.500200, 1.508200, 1.502500, 1.494600 -1.687200, 1.734000, 1.735700, 1.505000, 1.511800, 1.726600, 1.515000, 1.499900, 1.524400, 1.525000, 1.521900, 1.522400, 1.513100, 1.514500 -1.706300, 1.754300, 1.743900, 1.614600, 1.617500, 1.740800, 1.615400, 1.602600, 1.616300, 1.536400, 1.536000, 1.613500, 1.541500, 1.534200 -1.720700, 1.764900, 1.749100, 1.638400, 1.628600, 1.752300, 1.642100, 1.639900, 1.636400, 1.551000, 1.554800, 1.635800, 1.567800, 1.545900 -1.730500, 1.793200, 1.771200, 1.745400, 1.743300, 1.774500, 1.760300, 1.766400, 1.768400, 1.626000, 1.631100, 1.743800, 1.631100, 1.624900 -1.731500, 1.805100, 1.793500, 1.778000, 1.767600, 1.806200, 1.773800, 1.769300, 1.780700, 1.649600, 1.649700, 1.755400, 1.643200, 1.650400 -1.735000, 1.866300, 1.867000, 1.784700, 1.792100, 1.847500, 1.783200, 1.795300, 1.792600, 1.666200, 1.662900, 1.783300, 1.658800, 1.671100 -1.747800, 1.890300, 1.886300, 1.805000, 1.796700, 1.883000, 1.804200, 1.800400, 1.801200, 1.685200, 1.671900, 1.816700, 1.683600, 1.687100 -1.751400, 1.898900, 1.889300, 1.818200, 1.809700, 1.892700, 1.821300, 1.819400, 1.812300, 1.696300, 1.688500, 1.840900, 1.696600, 1.691800 -1.769200, 1.911700, 1.907700, 1.838300, 1.839800, 1.919500, 1.832000, 1.842600, 1.834000, 1.706800, 1.700300, 1.848500, 1.698700, 1.709500 -1.775100, 1.917200, 1.936600, 1.934400, 1.907000, 1.940500, 1.927700, 1.928800, 1.898100, 1.713400, 1.727000, 1.901400, 1.718500, 1.714100 -1.792300, 1.941300, 1.939500, 1.944800, 1.929700, 1.947500, 1.938900, 1.940000, 1.920000, 1.721100, 1.736800, 1.934100, 1.732300, 1.737200 -1.806900, 1.964100, 1.962700, 1.958000, 1.933200, 1.971100, 1.954800, 1.946900, 1.960400, 1.749000, 1.758000, 1.950400, 1.757900, 1.749900 -1.812800, 1.981400, 1.996500, 1.967800, 1.968200, 1.998400, 1.962900, 1.972600, 1.965700, 1.825500, 1.831400, 1.955000, 1.824000, 1.825300 -1.819700, 2.078300, 2.073800, 1.975600, 1.978400, 2.064500, 1.983500, 1.985000, 1.978800, 1.850800, 1.840500, 1.973800, 1.841400, 1.841600 -2.103700, 2.100600, 2.098400, 1.983000, 1.987500, 2.089700, 1.994600, 1.994000, 1.990500, 1.862600, 1.868900, 1.988300, 1.861000, 1.864300 -2.112000, 2.116400, 2.125700, 2.001900, 2.005700, 2.134000, 2.008100, 2.005500, 2.006500, 1.884900, 1.886200, 2.010000, 1.892000, 1.879800 -2.132100, 2.134800, 2.147900, 2.006300, 2.031300, 2.142600, 2.019300, 2.025200, 2.036400, 1.913500, 1.904600, 2.015600, 1.909000, 1.904200 -2.148400, 2.197900, 2.211600, 2.025800, 2.042200, 2.216200, 2.028700, 2.036600, 2.049200, 1.944900, 1.930100, 2.049200, 1.927700, 1.937300 -2.151700, 2.230700, 2.243800, 2.049300, 2.053700, 2.227400, 2.038000, 2.042800, 2.056900, 2.149800, 2.152500, 2.066600, 2.142000, 2.146600 -2.167700, 2.250900, 2.252900, 2.116000, 2.114200, 2.254700, 2.104200, 2.115200, 2.098100, 2.164200, 2.158900, 2.087600, 2.159400, 2.168000 -2.171900, 2.257400, 2.265700, 2.135200, 2.130900, 2.262600, 2.126200, 2.125700, 2.119600, 2.173200, 2.179400, 2.112400, 2.179000, 2.172900 -2.180500, 2.269700, 2.281500, 2.140100, 2.144800, 2.280700, 2.136000, 2.143100, 2.138800, 2.189900, 2.191500, 2.128000, 2.186300, 2.193600 -2.182700, 2.285100, 2.288700, 2.152800, 2.146200, 2.293400, 2.155600, 2.152400, 2.149600, 2.215300, 2.212500, 2.135800, 2.193100, 2.200700 -2.197100, 2.309300, 2.295500, 2.164300, 2.162800, 2.304900, 2.166600, 2.161300, 2.162500, 2.223400, 2.223500, 2.159200, 2.227700, 2.217400 -2.219000, 2.331100, 2.315200, 2.172900, 2.170100, 2.316100, 2.174900, 2.172700, 2.183100, 2.230200, 2.244500, 2.178800, 2.237900, 2.242100 -2.220500, 2.371900, 2.384400, 2.193400, 2.183500, 2.373900, 2.191500, 2.180900, 2.189600, 2.243700, 2.257400, 2.190100, 2.249600, 2.247200 -2.238300, 2.397800, 2.404000, 2.195900, 2.204900, 2.390500, 2.198600, 2.194900, 2.203100, 2.266300, 2.263100, 2.200000, 2.260600, 2.263200 -2.244000, 2.415700, 2.410600, 2.225100, 2.217800, 2.410000, 2.205900, 2.200900, 2.221200, 2.277700, 2.273500, 2.226500, 2.277500, 2.268200 -2.251900, 2.424700, 2.432000, 2.230000, 2.239400, 2.416300, 2.227600, 2.223000, 2.236800, 2.289800, 2.286700, 2.243900, 2.302100, 2.291600 -2.268400, 2.430500, 2.435900, 2.250000, 2.250000, 2.434000, 2.236300, 2.241400, 2.246000, 2.303100, 2.313100, 2.264000, 2.316400, 2.310100 -2.276200, 2.437600, 2.449900, 2.255500, 2.270900, 2.442200, 2.265200, 2.248400, 2.265100, 2.379200, 2.379500, 2.290300, 2.374000, 2.370700 -2.284700, 2.456500, 2.455300, 2.633600, 2.622900, 2.456300, 2.625200, 2.639600, 2.630400, 2.389100, 2.401100, 2.623200, 2.396200, 2.393500 -2.297500, 2.461800, 2.468800, 2.650500, 2.647400, 2.461900, 2.647100, 2.655600, 2.655600, 2.415600, 2.411300, 2.646000, 2.420800, 2.423900 -2.301300, 2.478000, 2.478300, 2.671700, 2.662100, 2.469900, 2.666800, 2.671500, 2.664700, 2.438800, 2.434100, 2.658500, 2.438400, 2.441400 -2.315100, 2.488700, 2.490400, 2.690300, 2.675700, 2.492900, 2.676300, 2.681900, 2.677100, 2.454400, 2.454000, 2.675200, 2.451500, 2.458800 -2.333000, 2.493500, 2.502800, 2.700600, 2.702000, 2.502100, 2.700600, 2.696300, 2.685100, 2.473500, 2.466600, 2.685000, 2.477800, 2.481000 -2.337700, 2.507900, 2.506700, 2.704400, 2.711500, 2.510600, 2.710300, 2.706600, 2.698800, 2.572000, 2.569600, 2.704800, 2.578600, 2.561300 -2.356800, 2.528400, 2.520000, 2.716100, 2.725500, 2.525600, 2.722700, 2.714800, 2.727200, 2.591400, 2.589800, 2.718000, 2.594300, 2.593500 -2.666900, 2.545100, 2.529600, 2.732100, 2.739300, 2.537300, 2.732100, 2.736900, 2.729400, 2.614700, 2.605700, 2.739200, 2.613700, 2.621900 -2.684800, 2.547900, 2.554400, 2.745800, 2.763300, 2.547800, 2.738900, 2.754000, 2.745300, 2.713100, 2.727800, 2.765300, 2.708400, 2.723700 -2.694300, 2.565100, 2.572700, 2.818500, 2.800300, 2.579000, 2.806800, 2.797900, 2.803400, 2.739100, 2.738700, 2.788200, 2.735300, 2.739500 -2.699700, 2.598100, 2.606500, 2.830300, 2.821000, 2.606000, 2.825700, 2.827400, 2.815600, 2.759700, 2.754100, 2.812800, 2.747800, 2.751700 -2.708300, 2.619800, 2.623500, 2.847300, 2.828600, 2.616900, 2.841800, 2.841800, 2.836300, 2.783000, 2.772100, 2.838300, 2.783700, 2.766600 -2.719200, 2.636600, 2.632200, 2.863400, 2.840700, 2.640000, 2.857100, 2.845400, 2.843200, 2.787900, 2.799700, 2.841500, 2.785300, 2.806200 -2.728200, 2.646000, 2.650700, 2.871000, 2.861000, 2.663100, 2.861900, 2.857600, 2.866300, 2.805400, 2.803800, 2.864000, 2.817600, 2.820700 -2.731800, 2.672800, 2.674600, 2.877400, 2.864000, 2.676000, 2.873800, 2.868300, 2.879100, 2.885600, 2.893800, 2.874400, 2.885400, 2.868400 -2.734900, 2.695600, 2.689400, 2.882400, 2.882200, 2.696400, 2.888300, 2.871600, 2.886000, 2.908700, 2.906200, 2.885100, 2.907500, 2.901700 -2.752700, 2.705700, 2.706800, 2.886700, 2.891500, 2.709100, 2.894600, 2.889500, 2.891200, 2.924800, 2.917700, 2.898100, 2.940000, 2.925900 -2.756800, 2.740100, 2.729800, 2.894800, 2.912800, 2.732400, 2.904500, 2.894500, 2.897900, 2.938000, 2.938800, 2.913600, 2.949700, 2.948800 -2.764900, 2.813800, 2.804100, 2.899900, 2.917200, 2.788300, 2.913700, 2.908500, 2.920100, 2.983400, 2.974100, 2.923100, 2.970400, 2.981400 -2.777100, 2.821200, 2.822000, 2.919500, 2.932300, 2.825400, 2.926900, 2.930100, 2.924300, 2.999200, 2.995400, 2.938200, 2.998500, 3.009300 -2.784200, 2.837900, 2.836000, 2.934800, 2.945800, 2.845500, 2.937000, 2.933900, 2.947100, 3.063000, 3.046900, 2.947100, 3.057000, 3.045400 -2.790600, 2.862800, 2.857900, 2.944900, 2.959300, 2.871100, 2.949600, 2.949600, 2.959800, 3.072200, 3.064500, 2.958600, 3.067800, 3.069600 -2.802500, 2.878700, 2.901100, 2.955400, 2.966900, 2.881900, 2.959800, 2.954400, 2.973500, 3.085200, 3.083300, 2.983700, 3.079600, 3.080800 -2.814100, 3.115200, 3.116400, 3.039700, 3.031000, 3.107000, 3.029800, 3.027700, 3.028100, 3.090700, 3.102200, 3.020700, 3.099200, 3.092100 -2.831900, 3.125800, 3.135800, 3.057700, 3.051500, 3.117700, 3.051000, 3.047500, 3.051700, 3.105400, 3.112600, 3.032100, 3.107900, 3.109400 -2.833000, 3.135800, 3.140700, 3.069300, 3.072900, 3.133900, 3.062300, 3.069500, 3.067500, 3.120500, 3.126700, 3.063400, 3.117800, 3.125200 -2.845700, 3.152900, 3.155600, 3.081200, 3.091300, 3.144800, 3.085300, 3.090600, 3.091300, 3.136100, 3.136000, 3.078400, 3.128000, 3.134400 -2.855800, 3.160900, 3.166700, 3.098000, 3.100500, 3.159400, 3.102600, 3.105500, 3.107300, 3.146500, 3.144800, 3.108900, 3.134700, 3.152300 -2.867200, 3.175200, 3.175900, 3.116800, 3.135600, 3.172900, 3.122200, 3.119000, 3.123800, 3.162600, 3.151900, 3.144400, 3.151500, 3.155600 -2.875300, 3.181200, 3.188500, 3.200500, 3.199000, 3.180100, 3.195700, 3.196900, 3.210600, 3.169600, 3.171000, 3.203200, 3.167200, 3.168700 -2.909300, 3.198800, 3.194000, 3.218100, 3.211600, 3.200700, 3.218400, 3.223900, 3.222500, 3.179400, 3.194600, 3.220100, 3.186000, 3.186300 -3.205300, 3.203400, 3.205900, 3.233900, 3.224400, 3.209700, 3.229200, 3.239000, 3.242300, 3.195600, 3.208000, 3.234600, 3.219600, 3.203200 -3.210700, 3.222700, 3.220100, 3.256600, 3.257300, 3.224500, 3.244700, 3.264300, 3.247000, 3.276900, 3.283700, 3.250300, 3.274900, 3.269800 -3.228900, 3.240800, 3.231500, 3.267800, 3.264700, 3.234200, 3.263900, 3.274900, 3.259000, 3.303800, 3.297700, 3.264300, 3.295200, 3.299800 -3.231400, 3.252700, 3.241200, 3.274000, 3.287400, 3.258500, 3.285000, 3.285500, 3.273200, 3.324500, 3.320800, 3.285800, 3.333000, 3.323600 -3.414000, 3.318700, 3.299100, 3.324900, 3.329500, 3.305400, 3.326800, 3.341400, 3.318900, 3.543100, 3.524000, 3.316300, 3.526900, 3.536400 -3.419000, 3.330900, 3.321200, 3.344200, 3.339700, 3.330100, 3.347800, 3.347200, 3.336000, 3.556500, 3.555100, 3.340000, 3.539900, 3.554000 -3.428800, 3.340800, 3.335000, 3.372500, 3.369000, 3.344300, 3.381700, 3.362600, 3.377900, 3.568900, 3.581600, 3.367500, 3.578200, 3.579000 -3.442100, 3.354500, 3.344500, 3.390200, 3.373500, 3.351000, 3.389900, 3.389000, 3.391600, 3.615000, 3.607000, 3.388000, 3.607800, 3.610000 -3.728100, 3.361000, 3.354800, 3.406200, 3.398700, 3.365100, 3.411700, 3.406600, 3.408100, 3.633000, 3.624400, 3.400300, 3.638000, 3.625600 -3.735800, 3.368700, 3.367200, 3.416400, 3.402300, 3.369700, 3.425600, 3.419500, 3.420800, 3.644800, 3.641000, 3.412100, 3.643700, 3.645000 -3.742400, 3.381300, 3.378600, 3.433300, 3.429300, 3.376800, 3.433000, 3.430400, 3.433800, 3.663600, 3.658700, 3.428200, 3.672600, 3.656300 -3.747800, 3.385300, 3.384400, 3.439500, 3.436100, 3.393600, 3.440800, 3.440700, 3.442000, 3.676400, 3.685600, 3.439500, 3.680700, 3.682500 -3.758200, 3.394400, 3.391400, 3.452000, 3.466800, 3.397900, 3.446100, 3.450200, 3.452800, 3.689500, 3.694600, 3.469300, 3.702900, 3.700100 -3.771100, 3.414400, 3.404400, 3.465900, 3.478100, 3.408300, 3.473700, 3.473900, 3.465100, 3.724500, 3.715600, 3.481300, 3.726100, 3.737800 -3.776100, 3.419600, 3.425200, 3.532400, 3.530800, 3.422100, 3.533100, 3.535300, 3.526300, 3.745900, 3.754300, 3.537300, 3.743100, 3.758800 -3.793700, 3.434900, 3.452700, 3.544000, 3.548000, 3.455300, 3.547700, 3.542000, 3.546100, 3.768500, 3.768800, 3.546700, 3.758000, 3.763900 -3.803400, 3.659000, 3.673300, 3.560100, 3.562200, 3.664400, 3.562300, 3.566700, 3.563000, 3.779500, 3.775700, 3.566500, 3.769100, 3.778000 -3.809300, 3.675800, 3.688200, 3.586800, 3.574700, 3.666300, 3.581500, 3.577400, 3.584000, 3.791200, 3.790700, 3.579800, 3.788100, 3.790800 -3.820000, 3.691800, 3.700200, 3.598400, 3.590100, 3.692700, 3.588500, 3.594300, 3.593500, 3.795800, 3.800800, 3.586800, 3.802900, 3.801000 -3.838000, 3.712800, 3.721400, 3.612800, 3.602800, 3.706900, 3.602200, 3.607100, 3.602200, 3.820700, 3.805100, 3.611000, 3.809600, 3.813100 -3.847100, 3.720300, 3.729900, 3.619900, 3.621100, 3.730200, 3.619900, 3.623500, 3.616400, 3.831000, 3.823200, 3.625400, 3.825900, 3.826200 -3.852900, 3.737500, 3.735700, 3.628200, 3.627800, 3.737200, 3.630600, 3.629600, 3.630900, 3.839900, 3.838800, 3.634700, 3.840700, 3.829000 -3.854400, 3.757700, 3.745100, 3.641300, 3.647200, 3.743000, 3.636400, 3.639600, 3.646900, 3.849600, 3.851000, 3.647000, 3.848600, 3.846000 -3.863700, 3.775500, 3.769300, 3.664100, 3.665100, 3.759700, 3.663800, 3.665900, 3.658200, 3.860300, 3.865300, 3.667200, 3.859100, 3.852800 -3.873200, 3.819600, 3.817100, 3.696000, 3.697700, 3.817600, 3.705800, 3.703300, 3.692900, 3.870800, 3.869400, 3.682700, 3.871600, 3.867700 -3.893600, 3.843800, 3.846200, 3.708300, 3.710300, 3.841300, 3.710200, 3.713900, 3.713700, 3.875700, 3.884200, 3.701500, 3.888800, 3.886600 -3.898000, 3.855300, 3.851600, 3.776900, 3.764800, 3.851300, 3.781200, 3.769300, 3.776500, 3.891600, 3.898900, 3.763000, 3.905000, 3.901900 -3.905100, 3.869800, 3.864500, 3.801900, 3.812600, 3.860900, 3.804700, 3.801700, 3.799600, 3.912100, 3.914200, 3.803900, 3.922800, 3.911200 -3.930100, 3.899900, 3.877000, 3.898000, 3.905700, 3.871600, 3.905700, 3.904700, 3.907900, 3.973000, 3.966300, 3.907000, 3.974800, 3.976100 -3.939600, 3.904000, 3.888400, 3.917700, 3.921200, 3.888700, 3.913000, 3.916200, 3.922400, 3.978300, 3.985100, 3.919600, 3.976900, 3.983300 -3.946400, 3.907300, 3.899800, 3.996600, 3.987900, 3.902700, 3.998700, 3.993900, 4.000600, 4.015400, 4.011900, 3.989200, 4.005800, 4.000900 -3.963400, 3.917700, 3.912000, 4.022400, 4.016500, 3.913700, 4.013300, 4.014300, 4.023200, 4.027100, 4.022200, 4.013800, 4.037600, 4.019700 -4.150600, 3.926700, 3.933100, 4.036100, 4.040700, 3.932900, 4.029300, 4.042300, 4.031600, 4.045000, 4.047700, 4.021900, 4.044200, 4.039200 -4.167800, 3.939700, 3.939800, 4.041200, 4.064500, 3.942800, 4.053800, 4.058200, 4.053500, 4.072800, 4.070700, 4.053700, 4.065000, 4.064500 -4.186500, 3.949700, 3.951000, 4.071500, 4.081100, 3.955200, 4.067600, 4.078100, 4.072300, 4.116700, 4.111000, 4.072000, 4.104300, 4.111200 -4.194600, 3.970600, 3.970400, 4.090600, 4.088900, 3.971000, 4.095600, 4.087600, 4.099200, 4.133600, 4.139300, 4.099200, 4.138700, 4.138100 -4.199600, 4.013500, 4.019200, 4.201500, 4.202300, 4.000800, 4.203500, 4.195800, 4.199000, 4.143900, 4.149200, 4.198200, 4.160500, 4.156000 -4.206300, 4.042000, 4.039900, 4.231100, 4.226700, 4.027700, 4.227000, 4.224600, 4.215200, 4.182200, 4.200200, 4.215000, 4.184700, 4.190100 -4.220900, 4.062600, 4.047300, 4.243100, 4.238800, 4.040800, 4.236600, 4.229600, 4.231700, 4.208200, 4.214700, 4.234100, 4.217000, 4.208800 -4.221900, 4.067000, 4.061400, 4.250500, 4.246200, 4.056200, 4.245100, 4.241400, 4.244700, 4.233200, 4.233200, 4.249700, 4.232300, 4.237500 -4.228600, 4.072700, 4.075100, 4.259900, 4.256400, 4.083900, 4.258200, 4.258600, 4.249700, 4.250800, 4.252500, 4.262100, 4.252800, 4.250400 -4.240500, 4.084000, 4.087800, 4.269400, 4.270600, 4.095800, 4.274400, 4.269900, 4.273500, 4.269800, 4.275500, 4.273400, 4.262300, 4.265600 -4.242400, 4.092200, 4.101700, 4.280000, 4.277700, 4.102200, 4.281300, 4.285500, 4.285800, 4.294500, 4.297200, 4.278600, 4.292900, 4.286600 -4.247900, 4.098500, 4.103500, 4.295200, 4.286400, 4.117000, 4.293100, 4.295700, 4.296200, 4.306100, 4.305400, 4.289300, 4.302000, 4.305900 -4.255200, 4.113600, 4.112300, 4.304000, 4.304500, 4.124500, 4.302300, 4.300400, 4.303700, 4.323800, 4.316100, 4.303100, 4.314100, 4.320300 -4.260300, 4.121300, 4.126900, 4.318600, 4.307800, 4.135800, 4.314100, 4.315300, 4.311800, 4.329400, 4.329200, 4.307400, 4.324400, 4.339100 -4.278800, 4.129200, 4.140700, 4.330500, 4.327500, 4.144500, 4.325800, 4.322600, 4.327700, 4.341000, 4.339200, 4.328300, 4.337900, 4.349100 -4.285700, 4.147800, 4.153400, 4.334400, 4.339300, 4.173200, 4.333100, 4.335300, 4.333000, 4.352100, 4.355600, 4.336700, 4.352600, 4.352100 -4.293600, 4.176100, 4.177500, 4.346800, 4.352300, 4.193100, 4.341600, 4.341500, 4.344500, 4.370400, 4.373400, 4.351400, 4.369600, 4.366700 -4.296300, 4.515700, 4.512500, 4.354200, 4.360300, 4.508800, 4.363600, 4.360700, 4.357000, 4.376100, 4.382000, 4.370900, 4.389600, 4.379100 -4.301100, 4.544100, 4.532700, 4.366000, 4.373000, 4.522500, 4.380800, 4.377900, 4.370400, 4.392000, 4.398900, 4.378000, 4.398600, 4.396500 -4.309700, 4.548100, 4.545400, 4.379200, 4.391400, 4.554400, 4.390900, 4.383600, 4.391600, 4.404400, 4.408700, 4.401900, 4.416200, 4.407400 -4.333000, 4.568300, 4.564100, 4.503700, 4.509200, 4.567500, 4.506900, 4.499000, 4.495200, 4.453700, 4.444000, 4.491600, 4.442100, 4.428100 -4.347800, 4.578200, 4.575400, 4.553100, 4.565900, 4.587200, 4.566900, 4.571500, 4.576700, 4.471600, 4.462900, 4.564600, 4.464700, 4.458200 -4.350600, 4.585900, 4.594500, 4.581700, 4.576100, 4.595400, 4.585600, 4.585800, 4.585500, 4.477100, 4.480300, 4.570200, 4.479400, 4.476100 -4.365400, 4.614600, 4.625400, 4.598200, 4.585400, 4.614500, 4.605700, 4.596500, 4.595400, 4.494700, 4.498700, 4.588700, 4.484800, 4.492200 -4.430800, 4.645600, 4.638500, 4.610300, 4.610100, 4.652000, 4.621700, 4.626500, 4.609400, 4.508000, 4.508000, 4.609900, 4.502700, 4.504400 -4.438700, 4.761100, 4.747200, 4.634400, 4.619300, 4.736600, 4.635600, 4.638500, 4.631300, 4.514800, 4.521600, 4.636900, 4.511400, 4.517200 -4.453800, 4.769400, 4.764800, 4.642300, 4.641500, 4.755400, 4.643200, 4.656900, 4.641600, 4.522400, 4.533200, 4.648000, 4.518800, 4.524700 -4.469200, 4.791000, 4.772500, 4.656100, 4.655500, 4.786500, 4.663500, 4.663000, 4.659000, 4.531700, 4.541300, 4.659400, 4.531800, 4.530300 -4.480900, 4.798800, 4.799600, 4.681200, 4.673600, 4.798200, 4.674800, 4.676600, 4.662400, 4.540400, 4.547200, 4.671400, 4.543500, 4.541800 -4.486000, 4.801200, 4.811600, 4.694200, 4.692100, 4.810900, 4.694300, 4.690100, 4.684600, 4.558200, 4.561000, 4.679600, 4.559700, 4.560600 -4.494400, 4.815000, 4.816900, 4.702100, 4.700100, 4.822200, 4.695700, 4.703000, 4.707600, 4.577800, 4.563600, 4.699600, 4.569000, 4.572400 -4.496200, 4.821500, 4.831100, 4.728700, 4.717700, 4.826400, 4.708700, 4.720400, 4.718300, 4.580300, 4.571300, 4.718700, 4.575500, 4.579700 -4.509200, 4.833800, 4.840300, 4.733000, 4.727600, 4.846000, 4.721400, 4.724600, 4.725600, 4.589500, 4.586800, 4.727600, 4.584900, 4.591300 -4.510500, 4.901200, 4.895800, 4.740600, 4.747200, 4.900800, 4.737700, 4.738200, 4.742400, 4.595200, 4.599600, 4.746900, 4.603200, 4.603400 -4.517800, 4.931600, 4.905600, 4.755500, 4.753700, 4.922500, 4.760300, 4.752800, 4.763200, 4.603100, 4.607300, 4.753600, 4.606200, 4.611800 -4.526800, 4.941400, 4.928500, 4.770500, 4.761800, 4.937000, 4.769500, 4.765400, 4.773300, 4.615900, 4.614300, 4.766100, 4.614500, 4.618600 -4.534700, 4.950100, 4.940200, 4.792700, 4.797400, 4.944400, 4.779200, 4.785400, 4.788100, 4.622900, 4.626000, 4.794800, 4.626200, 4.632000 -4.547400, 4.962400, 4.958300, 4.801000, 4.815200, 4.956100, 4.799500, 4.807500, 4.806400, 4.635900, 4.631400, 4.808500, 4.650900, 4.637300 -4.552300, 4.970300, 4.975400, 4.826300, 4.834700, 4.968000, 4.834700, 4.836400, 4.811200, 4.661000, 4.647600, 4.834200, 4.666500, 4.661300 -4.561100, 4.981300, 4.982900, 4.868000, 4.860800, 4.974200, 4.864200, 4.865300, 4.844400, 4.671500, 4.658700, 4.864700, 4.679600, 4.667500 -4.573100, 4.999700, 5.008700, 4.886600, 4.888000, 4.995600, 4.869400, 4.879900, 4.901100, 4.683100, 4.677500, 4.898900, 4.691400, 4.699800 -4.575700, 5.009100, 5.014300, 4.931900, 4.917000, 5.009400, 4.924700, 4.912800, 4.918500, 4.833700, 4.831500, 4.926300, 4.818500, 4.844400 -4.581300, 5.016100, 5.039300, 4.938900, 4.932600, 5.026200, 4.942000, 4.925800, 4.932700, 4.874900, 4.865900, 4.937700, 4.865000, 4.847900 -4.584800, 5.043600, 5.045500, 4.948300, 4.938700, 5.045900, 4.951500, 4.952600, 4.961700, 4.893600, 4.899200, 4.948600, 4.887700, 4.899800 -4.597700, 5.045500, 5.065700, 4.965200, 4.973400, 5.056100, 4.972100, 4.965000, 4.967600, 4.973800, 4.973800, 4.963500, 4.967400, 4.967100 -4.604900, 5.076400, 5.083100, 4.973700, 4.984000, 5.070700, 4.983900, 4.985100, 4.977800, 4.978400, 4.982400, 4.981900, 4.976800, 4.988500 -4.619100, 5.090300, 5.097800, 4.987900, 4.996800, 5.100800, 4.994100, 4.990400, 4.995600, 4.994500, 5.004700, 4.996700, 5.003100, 5.006600 -4.627700, 5.102400, 5.111900, 5.002900, 5.009400, 5.116300, 5.009600, 5.003200, 5.012100, 4.998800, 5.010500, 5.005100, 5.005400, 5.016000 -4.905500, 5.119300, 5.128600, 5.013800, 5.020600, 5.127400, 5.019100, 5.018800, 5.025300, 5.015400, 5.022000, 5.012500, 5.028200, 5.020700 -4.913500, 5.130900, 5.133700, 5.025300, 5.027600, 5.131000, 5.024800, 5.025700, 5.034400, 5.023000, 5.035200, 5.032900, 5.040800, 5.030100 -4.922800, 5.136700, 5.145300, 5.042100, 5.043100, 5.151300, 5.044100, 5.049400, 5.044100, 5.076200, 5.075900, 5.049300, 5.078400, 5.071000 -5.340400, 5.153500, 5.158400, 5.053800, 5.056500, 5.155000, 5.055900, 5.054500, 5.057500, 5.094800, 5.088200, 5.058200, 5.094000, 5.092800 -5.354500, 5.166000, 5.175100, 5.070600, 5.068600, 5.174200, 5.058700, 5.071000, 5.066600, 5.112100, 5.099300, 5.064300, 5.113200, 5.106600 -5.367100, 5.172400, 5.181500, 5.078700, 5.078800, 5.181100, 5.077800, 5.083400, 5.076900, 5.123900, 5.103900, 5.077200, 5.124000, 5.115500 -5.376200, 5.198000, 5.190200, 5.090300, 5.092700, 5.189100, 5.093800, 5.097300, 5.100600, 5.139400, 5.128500, 5.085600, 5.131400, 5.138300 -5.398400, 5.204200, 5.208200, 5.111600, 5.114800, 5.199200, 5.110000, 5.107800, 5.105300, 5.142100, 5.135100, 5.098800, 5.154900, 5.146700 -5.401600, 5.234900, 5.216800, 5.180900, 5.162500, 5.213800, 5.177400, 5.166200, 5.181400, 5.163800, 5.157900, 5.182300, 5.161100, 5.161800 -5.407600, 5.306800, 5.300600, 5.197800, 5.223300, 5.291200, 5.196800, 5.208000, 5.200800, 5.184800, 5.168200, 5.207900, 5.171800, 5.172700 -5.420000, 5.313500, 5.309100, 5.320800, 5.312700, 5.314500, 5.316700, 5.300300, 5.316700, 5.195200, 5.190900, 5.306000, 5.196900, 5.189000 -5.426400, 5.322300, 5.314300, 5.325500, 5.331800, 5.329400, 5.333800, 5.321500, 5.328400, 5.208000, 5.202100, 5.327600, 5.219100, 5.199000 -5.433800, 5.340300, 5.330700, 5.346100, 5.349800, 5.340100, 5.344700, 5.346000, 5.356400, 5.223300, 5.220200, 5.342700, 5.226700, 5.226200 -5.455800, 5.353500, 5.346700, 5.370600, 5.366200, 5.350500, 5.373300, 5.374800, 5.361900, 5.230500, 5.244500, 5.365700, 5.245000, 5.244400 -5.463500, 5.361300, 5.356800, 5.397200, 5.393200, 5.364500, 5.397300, 5.396100, 5.391100, 5.256000, 5.259800, 5.390500, 5.247900, 5.251100 -5.799500, 5.369700, 5.369700, 5.409100, 5.406000, 5.372300, 5.407200, 5.405200, 5.411100, 5.270500, 5.274600, 5.411700, 5.258700, 5.260200 -5.822400, 5.386700, 5.394100, 5.411300, 5.436000, 5.384500, 5.424800, 5.436800, 5.420400, 5.283200, 5.288100, 5.429400, 5.273800, 5.274800 -5.831400, 5.427000, 5.410500, 5.480700, 5.478200, 5.430600, 5.476700, 5.473900, 5.475800, 5.297700, 5.306000, 5.461100, 5.294900, 5.292800 -5.843700, 5.436800, 5.437500, 5.497800, 5.499900, 5.437100, 5.500200, 5.487500, 5.508800, 5.319200, 5.316900, 5.513300, 5.319400, 5.310000 -5.855500, 5.451200, 5.442700, 5.558100, 5.537900, 5.448700, 5.553600, 5.540700, 5.553200, 5.321800, 5.335900, 5.546800, 5.328800, 5.330300 -5.871700, 5.463900, 5.458400, 5.566900, 5.562100, 5.459800, 5.570800, 5.571000, 5.560300, 5.440000, 5.437000, 5.566100, 5.420800, 5.437800 -5.879200, 5.479300, 5.465500, 5.581100, 5.583800, 5.475700, 5.577000, 5.580600, 5.579400, 5.452800, 5.449600, 5.584700, 5.448900, 5.444200 -5.895200, 5.484500, 5.477300, 5.598000, 5.603700, 5.479400, 5.595200, 5.593500, 5.585600, 5.478000, 5.472600, 5.600600, 5.480800, 5.485300 -5.899000, 5.491300, 5.488100, 5.636900, 5.622700, 5.486100, 5.620300, 5.626400, 5.625900, 5.489600, 5.497900, 5.632400, 5.485100, 5.496200 -5.905000, 5.502400, 5.494100, 5.640400, 5.640700, 5.493800, 5.637200, 5.640400, 5.641000, 5.515200, 5.516300, 5.638400, 5.505800, 5.513300 -5.913800, 5.512100, 5.509500, 5.657000, 5.659000, 5.507500, 5.661100, 5.651000, 5.652300, 5.529800, 5.532100, 5.656100, 5.532000, 5.527600 -5.927000, 5.520400, 5.526700, 5.663500, 5.674600, 5.519200, 5.678600, 5.672300, 5.662400, 5.551000, 5.556800, 5.671000, 5.540400, 5.540000 -5.934900, 5.524600, 5.529200, 5.681700, 5.683800, 5.526000, 5.686100, 5.694300, 5.686500, 5.560300, 5.568800, 5.693000, 5.552500, 5.566800 -5.942000, 5.538300, 5.541700, 5.702400, 5.715200, 5.537200, 5.702100, 5.709300, 5.698800, 5.583100, 5.579700, 5.696700, 5.575200, 5.576500 -5.947300, 5.547600, 5.552200, 5.721000, 5.725300, 5.550000, 5.724100, 5.722100, 5.715400, 5.600600, 5.595800, 5.717500, 5.601800, 5.597100 -5.955900, 5.559900, 5.571100, 5.728400, 5.732800, 5.570000, 5.728800, 5.733500, 5.741400, 5.610400, 5.618800, 5.733500, 5.610100, 5.618600 -5.964600, 5.573700, 5.581300, 5.755700, 5.748300, 5.581400, 5.753800, 5.755900, 5.752900, 5.637300, 5.625700, 5.745600, 5.631200, 5.640800 -5.970600, 5.578600, 5.601600, 5.765500, 5.762000, 5.602300, 5.759900, 5.760800, 5.764600, 5.658200, 5.645000, 5.758800, 5.648900, 5.663100 -5.976100, 5.631100, 5.634500, 5.771600, 5.771400, 5.634000, 5.767800, 5.772500, 5.772500, 5.660300, 5.673500, 5.771700, 5.675800, 5.673300 -5.976800, 5.653800, 5.658200, 5.785200, 5.778300, 5.648200, 5.778300, 5.783300, 5.781300, 5.682700, 5.682700, 5.779100, 5.683400, 5.687900 -5.985000, 5.666800, 5.671100, 5.796800, 5.791100, 5.667600, 5.789200, 5.797000, 5.799100, 5.695600, 5.709900, 5.798500, 5.728100, 5.707600 -5.993100, 5.700400, 5.694200, 5.806900, 5.806800, 5.697800, 5.799900, 5.808700, 5.816200, 5.773800, 5.765500, 5.829700, 5.773500, 5.776200 -6.000000, 5.812900, 5.819400, 5.853600, 5.837800, 5.818800, 5.849600, 5.850300, 5.857600, 5.786400, 5.787800, 5.859100, 5.781000, 5.789600 -6.006700, 5.843000, 5.833400, 5.894000, 5.873500, 5.841400, 5.864800, 5.872000, 5.860500, 5.794900, 5.792500, 5.877100, 5.806200, 5.802000 -6.014700, 5.982000, 5.985000, 5.897600, 5.896400, 5.979000, 5.897500, 5.881400, 5.886800, 5.830100, 5.820700, 5.883400, 5.827800, 5.825900 -6.021400, 5.998100, 6.006000, 5.914800, 5.922300, 5.998300, 5.922000, 5.926200, 5.926100, 5.843500, 5.847900, 5.918000, 5.840300, 5.835500 -6.024000, 6.011700, 6.014200, 5.931100, 5.937200, 6.011900, 5.938900, 5.939300, 5.946400, 5.866500, 5.864800, 5.937600, 5.860200, 5.858600 -6.030700, 6.031700, 6.025900, 5.954000, 5.957200, 6.024700, 5.954300, 5.954000, 5.959000, 5.889400, 5.889400, 5.984300, 5.886100, 5.878500 -6.036800, 6.042400, 6.044400, 5.985000, 5.985000, 6.033200, 5.980100, 5.991500, 5.989700, 5.894900, 5.894000, 5.996200, 5.895800, 5.890700 -6.046300, 6.065700, 6.054300, 6.000700, 6.003700, 6.050100, 5.989400, 6.001100, 6.006200, 5.905000, 5.911200, 6.002000, 5.913100, 5.904400 -6.068500, 6.073000, 6.066700, 6.026600, 6.021900, 6.070500, 6.016800, 6.020800, 6.020800, 5.919300, 5.915100, 6.015500, 5.915900, 5.914700 -6.069100, 6.092600, 6.087500, 6.032500, 6.034400, 6.087700, 6.028200, 6.027400, 6.031400, 5.931800, 5.923500, 6.022800, 5.931400, 5.930300 -6.082200, 6.102500, 6.095500, 6.042100, 6.046100, 6.101700, 6.059900, 6.045800, 6.041400, 5.943900, 5.940500, 6.049000, 5.946700, 5.936500 -6.089900, 6.123900, 6.122100, 6.061000, 6.060700, 6.124500, 6.069600, 6.051000, 6.058700, 5.956600, 5.953800, 6.067900, 5.962000, 5.958100 -6.091500, 6.137200, 6.147800, 6.075600, 6.071100, 6.145500, 6.085800, 6.081000, 6.082600, 5.976600, 5.969000, 6.081600, 5.975500, 5.975200 -6.114100, 6.163300, 6.181400, 6.093600, 6.095100, 6.171100, 6.092000, 6.092100, 6.099200, 5.992100, 5.989900, 6.093400, 5.988000, 5.988400 -6.178000, 6.219000, 6.213700, 6.104600, 6.110100, 6.222100, 6.105300, 6.112800, 6.105100, 6.006200, 6.002700, 6.100500, 5.993400, 6.000000 -6.189900, 6.241500, 6.222700, 6.114800, 6.123200, 6.236600, 6.131600, 6.126600, 6.122200, 6.012600, 6.014900, 6.121100, 6.001700, 6.018700 -6.197100, 6.278300, 6.284300, 6.147000, 6.134600, 6.267300, 6.144100, 6.136600, 6.139600, 6.020500, 6.024100, 6.140600, 6.023000, 6.026700 -6.337400, 6.295400, 6.317400, 6.159900, 6.164400, 6.300100, 6.172600, 6.168300, 6.157300, 6.029900, 6.030700, 6.152700, 6.032400, 6.036300 -6.375200, 6.311600, 6.331100, 6.244100, 6.208800, 6.327000, 6.229700, 6.223000, 6.233100, 6.047300, 6.050700, 6.232300, 6.050100, 6.053600 -6.384900, 6.331600, 6.338400, 6.251200, 6.245100, 6.336100, 6.246800, 6.258800, 6.259000, 6.055700, 6.071800, 6.245300, 6.074900, 6.062500 -6.403400, 6.348500, 6.352900, 6.256100, 6.255100, 6.352100, 6.258400, 6.259700, 6.266200, 6.385400, 6.380800, 6.260700, 6.372900, 6.380600 -6.415400, 6.370200, 6.367900, 6.274800, 6.278000, 6.368800, 6.269600, 6.277000, 6.285800, 6.403900, 6.401900, 6.275200, 6.396700, 6.398200 -6.427800, 6.412400, 6.405200, 6.282300, 6.294300, 6.410700, 6.292000, 6.288800, 6.288400, 6.415000, 6.417700, 6.293900, 6.421800, 6.412200 -6.440500, 6.428700, 6.431800, 6.285900, 6.304700, 6.422600, 6.302400, 6.312300, 6.296000, 6.431900, 6.432500, 6.307300, 6.438100, 6.424300 -6.460600, 6.512200, 6.510900, 6.305100, 6.317800, 6.516300, 6.316200, 6.316800, 6.314900, 6.450600, 6.458700, 6.315400, 6.465000, 6.459500 -6.471300, 6.523600, 6.527300, 6.330600, 6.337500, 6.532000, 6.334400, 6.343400, 6.333900, 6.458900, 6.462700, 6.336400, 6.470400, 6.473600 -6.486400, 6.546200, 6.540500, 6.358000, 6.352600, 6.543500, 6.350900, 6.354500, 6.350300, 6.511500, 6.506100, 6.353400, 6.495100, 6.506300 -6.508600, 6.558700, 6.548400, 6.369700, 6.366500, 6.562100, 6.375000, 6.363900, 6.370800, 6.518600, 6.517300, 6.365000, 6.518000, 6.523100 -6.527500, 6.595100, 6.581000, 6.377500, 6.371800, 6.570800, 6.385700, 6.390600, 6.379600, 6.532200, 6.528400, 6.376900, 6.527700, 6.532300 -6.644500, 6.620100, 6.613800, 6.400600, 6.391300, 6.616500, 6.396800, 6.398200, 6.397700, 6.609200, 6.592300, 6.391800, 6.593800, 6.592500 -6.660300, 6.630600, 6.617700, 6.408100, 6.409500, 6.628000, 6.401900, 6.407600, 6.408100, 6.615700, 6.607200, 6.404100, 6.612700, 6.606100 -6.661700, 6.645400, 6.642300, 6.419300, 6.414700, 6.638900, 6.426800, 6.425200, 6.420000, 6.633000, 6.622100, 6.410200, 6.628700, 6.625800 -6.668000, 6.655600, 6.656200, 6.434000, 6.438800, 6.648300, 6.433500, 6.439000, 6.436700, 6.641100, 6.633000, 6.424500, 6.638700, 6.630200 -6.684100, 6.667300, 6.664300, 6.447000, 6.454400, 6.659300, 6.448200, 6.449100, 6.448000, 6.649700, 6.644300, 6.439600, 6.648800, 6.644100 -6.697500, 6.679700, 6.678500, 6.457100, 6.459700, 6.673900, 6.454800, 6.462900, 6.455300, 6.658100, 6.660400, 6.465800, 6.668400, 6.663600 -6.703200, 6.688800, 6.683700, 6.462300, 6.471100, 6.688900, 6.461000, 6.468700, 6.474600, 6.673900, 6.670800, 6.475100, 6.679100, 6.674600 -6.713300, 6.693200, 6.693900, 6.480500, 6.479500, 6.695000, 6.477500, 6.475900, 6.483500, 6.679900, 6.685100, 6.482100, 6.691800, 6.690400 -6.719500, 6.713900, 6.702400, 6.499800, 6.486700, 6.703800, 6.492000, 6.487700, 6.493000, 6.694900, 6.701900, 6.492600, 6.695300, 6.694300 -6.729700, 6.717400, 6.711800, 6.504800, 6.502000, 6.709800, 6.497900, 6.496300, 6.504100, 6.708000, 6.716700, 6.510900, 6.705700, 6.712600 -6.738300, 6.719900, 6.727500, 6.514500, 6.511900, 6.722200, 6.507500, 6.513500, 6.511900, 6.717100, 6.729900, 6.512200, 6.718300, 6.720500 -6.757400, 6.736600, 6.732200, 6.547700, 6.540800, 6.731700, 6.535100, 6.523100, 6.539300, 6.732900, 6.748200, 6.527300, 6.742400, 6.745800 -6.843400, 6.744900, 6.738000, 6.570700, 6.558000, 6.740500, 6.558200, 6.555600, 6.565200, 6.811300, 6.798100, 6.560400, 6.789500, 6.801100 -6.872900, 6.751700, 6.749200, 6.574900, 6.571900, 6.748600, 6.567300, 6.574000, 6.577000, 6.818800, 6.811700, 6.582200, 6.820000, 6.815300 -6.881100, 6.756900, 6.755900, 6.595200, 6.604300, 6.758100, 6.596200, 6.582900, 6.588000, 6.835100, 6.838100, 6.603100, 6.841100, 6.826100 -6.896300, 6.763200, 6.758100, 6.599800, 6.614100, 6.761600, 6.617200, 6.600300, 6.599700, 6.846400, 6.848700, 6.612200, 6.850800, 6.851000 -6.911200, 6.766600, 6.772500, 6.658800, 6.653500, 6.771300, 6.662100, 6.655500, 6.639700, 6.849700, 6.855400, 6.648700, 6.863400, 6.872900 -6.916600, 6.778000, 6.782400, 6.670600, 6.665600, 6.787800, 6.669400, 6.672300, 6.668000, 6.876800, 6.870000, 6.674000, 6.870200, 6.879400 -6.927800, 6.784700, 6.792400, 6.701700, 6.694700, 6.798000, 6.684400, 6.695900, 6.699500, 6.903600, 6.893200, 6.689200, 6.895600, 6.903300 -6.938300, 6.791600, 6.802600, 6.761200, 6.769400, 6.798900, 6.763500, 6.762800, 6.748100, 6.922100, 6.917400, 6.749200, 6.906900, 6.917600 -6.950600, 6.796600, 6.811000, 6.829100, 6.846600, 6.811700, 6.832700, 6.836300, 6.831800, 6.940500, 6.933400, 6.838900, 6.927100, 6.935400 -6.959900, 6.813300, 6.817700, 6.867200, 6.870400, 6.818500, 6.871600, 6.865200, 6.858000, 6.945300, 6.953900, 6.851200, 6.950600, 6.948500 -6.969000, 6.827800, 6.832500, 6.962800, 6.955300, 6.838000, 6.969500, 6.960500, 6.979300, 6.956500, 6.962000, 6.969800, 6.960100, 6.956700 -6.973100, 6.845700, 6.856700, 6.987200, 6.973100, 6.847700, 6.984900, 6.981700, 6.985500, 6.968500, 6.978700, 6.982100, 6.967300, 6.969800 -6.980800, 6.853600, 6.863500, 6.993000, 7.005600, 6.862500, 6.994400, 6.999600, 6.995900, 6.983100, 6.982900, 7.002900, 6.986800, 6.982000 -6.989700, 6.874800, 6.876600, 7.014700, 7.029000, 6.885800, 7.010900, 7.012100, 7.006000, 6.991600, 7.008000, 7.013100, 7.006000, 6.997500 -6.993800, 6.896900, 6.898300, 7.051000, 7.045500, 6.889000, 7.029000, 7.049400, 7.031000, 7.010900, 7.018200, 7.028800, 7.024800, 7.031500 -7.003200, 6.901600, 6.911400, 7.065700, 7.055600, 6.899300, 7.052500, 7.056000, 7.051800, 7.087000, 7.095000, 7.049200, 7.072300, 7.081100 -7.006900, 6.919800, 6.927900, 7.071700, 7.075000, 6.912700, 7.063600, 7.076700, 7.085000, 7.095700, 7.098700, 7.077000, 7.099600, 7.090800 -7.021100, 6.934400, 6.935600, 7.083400, 7.086400, 6.928500, 7.088600, 7.093700, 7.093700, 7.108700, 7.124900, 7.090000, 7.110600, 7.120600 -7.024500, 6.948800, 6.953200, 7.107300, 7.104100, 6.958400, 7.115000, 7.104900, 7.109400, 7.142600, 7.139400, 7.106100, 7.136900, 7.125200 -7.031100, 7.002100, 6.987000, 7.122100, 7.121900, 7.002500, 7.128300, 7.122400, 7.118700, 7.151600, 7.157700, 7.131700, 7.149800, 7.145200 -7.036900, 7.034800, 7.006700, 7.137800, 7.143500, 7.025600, 7.145200, 7.136600, 7.140100, 7.161100, 7.173100, 7.139900, 7.162800, 7.162700 -7.044700, 7.037200, 7.036800, 7.150000, 7.151700, 7.058200, 7.148400, 7.139800, 7.149000, 7.188700, 7.181500, 7.152600, 7.168000, 7.170500 -7.057300, 7.056500, 7.061300, 7.159300, 7.161400, 7.062300, 7.169300, 7.156400, 7.162700, 7.194100, 7.191300, 7.161300, 7.185000, 7.189600 -7.067700, 7.074600, 7.078200, 7.183500, 7.175600, 7.076200, 7.182500, 7.171300, 7.176800, 7.206800, 7.204800, 7.180500, 7.214500, 7.214000 -7.069400, 7.087700, 7.096600, 7.190200, 7.213700, 7.082200, 7.206000, 7.200800, 7.213100, 7.220800, 7.214000, 7.213800, 7.222400, 7.228700 -7.074300, 7.099300, 7.101200, 7.216600, 7.219800, 7.099700, 7.228600, 7.221700, 7.232200, 7.230100, 7.219900, 7.233300, 7.239600, 7.237300 -7.083000, 7.119500, 7.118900, 7.247000, 7.247900, 7.115400, 7.251100, 7.244700, 7.256000, 7.241600, 7.251100, 7.245900, 7.253300, 7.247600 -7.090300, 7.137400, 7.130500, 7.283200, 7.281300, 7.135400, 7.276000, 7.287700, 7.280800, 7.275500, 7.275200, 7.288400, 7.278400, 7.265000 -7.100200, 7.142700, 7.148800, 7.347800, 7.362000, 7.147300, 7.356000, 7.351300, 7.368300, 7.298500, 7.286900, 7.355200, 7.297800, 7.301500 -7.107800, 7.183000, 7.176100, 7.373400, 7.383000, 7.178800, 7.378000, 7.370300, 7.380000, 7.306900, 7.327600, 7.363800, 7.314400, 7.329400 -7.115600, 7.206100, 7.198900, 7.406400, 7.397600, 7.189200, 7.390100, 7.407400, 7.403000, 7.380400, 7.376000, 7.404300, 7.377500, 7.386600 -7.121700, 7.222300, 7.210900, 7.415600, 7.411600, 7.215100, 7.419800, 7.428700, 7.415700, 7.392800, 7.390500, 7.412100, 7.400000, 7.401800 -7.132100, 7.232400, 7.230800, 7.431200, 7.423000, 7.247600, 7.436400, 7.438400, 7.428700, 7.401000, 7.403400, 7.431900, 7.410100, 7.408500 -7.136500, 7.255100, 7.269000, 7.443200, 7.431500, 7.256700, 7.445900, 7.457200, 7.446100, 7.426900, 7.419300, 7.451600, 7.423800, 7.421900 -7.157400, 7.429000, 7.428600, 7.454600, 7.464000, 7.431400, 7.461500, 7.463900, 7.461300, 7.437300, 7.435300, 7.453500, 7.432300, 7.434200 -7.160700, 7.437500, 7.441500, 7.474700, 7.483100, 7.441700, 7.480000, 7.480200, 7.466600, 7.445700, 7.444500, 7.476100, 7.445100, 7.442300 -7.287700, 7.456500, 7.461300, 7.495900, 7.486300, 7.451400, 7.492900, 7.490800, 7.490900, 7.457900, 7.455800, 7.488100, 7.458800, 7.458100 -7.294100, 7.473800, 7.469800, 7.511000, 7.505900, 7.468600, 7.506400, 7.514200, 7.501000, 7.474300, 7.463600, 7.507200, 7.469300, 7.463800 -7.303300, 7.539800, 7.551700, 7.531700, 7.515100, 7.549300, 7.543200, 7.522000, 7.527300, 7.484100, 7.471300, 7.531500, 7.493900, 7.480700 -7.327800, 7.561200, 7.560500, 7.543100, 7.548400, 7.557900, 7.554000, 7.537200, 7.543400, 7.520400, 7.521600, 7.545000, 7.516200, 7.509800 -7.329400, 7.589900, 7.580000, 7.562800, 7.562600, 7.581900, 7.570700, 7.568900, 7.555000, 7.531800, 7.534800, 7.553800, 7.546700, 7.530700 -7.344500, 7.598000, 7.593100, 7.577200, 7.575000, 7.588200, 7.575000, 7.574900, 7.563400, 7.550800, 7.551800, 7.577500, 7.552700, 7.550000 -7.347700, 7.613700, 7.596700, 7.580500, 7.591900, 7.605100, 7.586300, 7.586800, 7.581000, 7.566800, 7.571200, 7.593800, 7.566700, 7.558000 -7.350200, 7.621300, 7.611700, 7.602800, 7.600300, 7.615700, 7.596700, 7.607000, 7.607000, 7.580100, 7.585700, 7.599200, 7.576300, 7.571700 -7.354800, 7.626000, 7.616700, 7.611000, 7.621900, 7.628500, 7.613300, 7.624400, 7.628400, 7.587100, 7.596100, 7.616800, 7.592700, 7.590400 -7.361900, 7.631100, 7.631300, 7.642500, 7.651500, 7.636600, 7.629500, 7.633900, 7.635400, 7.608800, 7.617500, 7.658900, 7.601800, 7.602700 -7.380100, 7.639500, 7.640200, 7.669100, 7.685300, 7.647700, 7.681600, 7.681800, 7.677200, 7.624300, 7.625100, 7.675700, 7.628100, 7.620700 -7.395800, 7.648700, 7.650300, 7.698400, 7.705100, 7.655000, 7.701500, 7.695600, 7.693400, 7.650800, 7.646100, 7.693600, 7.646000, 7.640500 -7.401000, 7.657100, 7.660100, 7.711900, 7.712000, 7.659300, 7.711200, 7.706500, 7.700000, 7.695300, 7.693400, 7.713800, 7.686200, 7.705000 -7.420300, 7.665600, 7.667100, 7.723000, 7.724900, 7.666200, 7.724500, 7.727600, 7.713900, 7.710700, 7.714100, 7.729900, 7.708700, 7.720700 -7.436100, 7.672600, 7.668800, 7.734700, 7.731500, 7.675100, 7.738000, 7.749700, 7.736100, 7.752100, 7.734900, 7.735700, 7.734100, 7.755100 -7.443100, 7.684500, 7.685700, 7.746600, 7.749600, 7.681500, 7.758000, 7.757600, 7.747600, 7.763900, 7.750900, 7.754300, 7.757100, 7.771500 -7.452700, 7.694400, 7.692700, 7.767600, 7.766500, 7.698800, 7.768400, 7.765500, 7.768800, 7.780300, 7.785700, 7.762100, 7.784900, 7.782900 -7.467800, 7.698300, 7.702200, 7.778500, 7.778800, 7.701000, 7.780100, 7.773900, 7.785500, 7.795400, 7.803600, 7.774000, 7.791000, 7.792800 -7.473900, 7.712100, 7.714200, 7.793400, 7.786600, 7.706700, 7.798000, 7.792000, 7.792800, 7.821900, 7.807100, 7.786700, 7.818200, 7.809600 -7.490300, 7.719900, 7.724700, 7.814100, 7.805500, 7.720700, 7.813400, 7.803300, 7.804200, 7.827700, 7.824800, 7.808900, 7.822700, 7.825000 -7.497300, 7.731300, 7.731300, 7.824400, 7.818800, 7.732300, 7.821300, 7.822100, 7.813900, 7.837700, 7.837500, 7.813600, 7.838600, 7.841500 -7.501300, 7.743500, 7.751200, 7.840200, 7.826400, 7.737600, 7.830100, 7.834800, 7.823900, 7.844700, 7.849800, 7.828700, 7.846200, 7.855000 -7.507200, 7.750000, 7.754900, 7.844600, 7.841200, 7.750500, 7.843000, 7.841100, 7.839300, 7.851600, 7.858100, 7.843200, 7.869200, 7.859600 -7.517700, 7.764000, 7.765000, 7.857400, 7.851300, 7.764500, 7.847600, 7.856300, 7.855200, 7.878000, 7.867500, 7.859300, 7.891200, 7.868100 -7.523500, 7.771800, 7.777300, 7.868900, 7.864100, 7.788200, 7.862500, 7.862600, 7.867900, 7.924300, 7.934700, 7.864200, 7.933800, 7.939400 -7.537300, 7.787600, 7.792800, 7.878600, 7.872500, 7.791200, 7.865200, 7.874200, 7.877000, 7.970300, 7.960300, 7.873000, 7.953400, 7.955500 -7.548700, 7.880000, 7.871600, 7.889300, 7.890800, 7.846700, 7.885000, 7.891700, 7.891600, 7.991000, 7.982500, 7.882300, 7.991600, 7.997600 -7.554500, 7.891300, 7.882900, 7.906500, 7.907600, 7.882900, 7.891200, 7.894600, 7.912100, 8.015300, 8.019900, 7.902500, 8.009100, 8.018100 -7.571900, 7.910200, 7.904200, 7.925700, 7.918000, 7.913100, 7.919500, 7.919500, 7.933500, 8.028400, 8.022500, 7.920600, 8.023500, 8.026500 -7.577100, 7.933700, 7.928200, 7.948900, 7.928400, 7.936600, 7.942900, 7.935300, 7.947900, 8.048800, 8.045700, 7.946100, 8.050700, 8.046900 -7.579600, 7.972800, 7.965800, 7.967300, 7.970000, 7.971900, 7.961400, 7.959000, 7.960200, 8.060700, 8.060500, 7.965800, 8.063200, 8.068300 -7.594300, 7.977400, 7.986300, 7.986200, 7.992700, 7.981400, 7.973800, 7.982200, 7.978000, 8.075100, 8.077500, 7.980300, 8.072800, 8.071800 -7.612200, 7.991000, 7.993600, 8.005300, 8.016000, 7.985300, 7.996000, 8.003700, 7.993600, 8.079500, 8.085800, 8.003300, 8.084300, 8.083100 -7.624900, 8.004200, 8.008100, 8.048100, 8.029900, 8.007100, 8.035600, 8.024500, 8.039200, 8.086000, 8.104200, 8.025400, 8.089600, 8.092600 -7.640800, 8.051400, 8.051600, 8.055200, 8.045400, 8.066700, 8.057600, 8.041900, 8.051600, 8.104100, 8.114200, 8.036800, 8.117800, 8.100100 -7.654200, 8.071900, 8.074600, 8.061000, 8.064000, 8.085300, 8.070400, 8.064800, 8.061400, 8.120800, 8.133200, 8.064700, 8.129500, 8.120300 -7.896700, 8.090900, 8.086700, 8.070300, 8.082600, 8.099000, 8.077000, 8.080400, 8.085700, 8.203100, 8.183300, 8.079900, 8.193300, 8.204700 -7.933200, 8.106300, 8.112800, 8.085600, 8.091000, 8.109600, 8.087800, 8.097300, 8.104900, 8.217000, 8.219700, 8.099200, 8.208300, 8.215700 -7.942000, 8.120400, 8.120100, 8.102000, 8.114800, 8.123800, 8.124100, 8.120900, 8.122100, 8.231700, 8.225200, 8.134100, 8.222600, 8.230500 -7.961500, 8.140700, 8.142600, 8.152100, 8.144300, 8.141500, 8.148000, 8.152300, 8.152900, 8.243100, 8.239800, 8.149100, 8.235100, 8.246900 -7.997200, 8.156300, 8.146500, 8.265200, 8.237500, 8.155900, 8.264900, 8.256500, 8.266300, 8.257600, 8.264700, 8.268500, 8.256800, 8.252700 -8.029600, 8.166400, 8.164300, 8.275600, 8.283300, 8.171500, 8.285600, 8.291400, 8.286300, 8.262100, 8.278500, 8.274800, 8.278100, 8.275800 -8.520200, 8.182200, 8.190900, 8.302500, 8.314500, 8.186200, 8.295200, 8.308900, 8.302700, 8.293100, 8.287400, 8.296100, 8.293800, 8.281900 -8.534000, 8.196200, 8.196600, 8.325700, 8.334900, 8.196800, 8.323700, 8.324100, 8.314800, 8.315000, 8.304700, 8.333300, 8.310000, 8.309000 -8.549700, 8.202700, 8.209400, 8.374400, 8.364000, 8.201200, 8.350200, 8.365800, 8.365700, 8.331100, 8.325400, 8.357500, 8.326300, 8.327100 -8.553500, 8.214900, 8.223600, 8.381000, 8.381800, 8.209800, 8.384200, 8.383400, 8.377800, 8.339100, 8.332700, 8.369000, 8.337600, 8.338200 -8.564100, 8.227500, 8.227900, 8.392300, 8.398700, 8.225400, 8.396500, 8.394500, 8.387900, 8.348700, 8.342600, 8.390800, 8.353900, 8.355900 -8.572100, 8.236200, 8.234600, 8.400500, 8.415900, 8.229200, 8.400000, 8.413800, 8.403400, 8.359600, 8.355200, 8.397600, 8.362500, 8.357000 -8.573900, 8.244700, 8.241800, 8.446500, 8.453200, 8.240400, 8.457600, 8.440400, 8.456700, 8.374900, 8.369500, 8.447400, 8.368100, 8.366000 -8.585100, 8.255600, 8.252300, 8.480300, 8.468900, 8.251100, 8.476200, 8.466600, 8.478500, 8.379700, 8.376700, 8.482100, 8.380800, 8.376200 -8.588200, 8.257900, 8.260600, 8.491500, 8.493900, 8.267100, 8.501900, 8.499000, 8.513600, 8.386900, 8.388700, 8.507800, 8.387700, 8.380800 -8.590000, 8.272900, 8.265400, 8.517300, 8.513500, 8.272000, 8.517900, 8.519500, 8.535300, 8.395500, 8.405800, 8.526800, 8.406600, 8.394900 -8.599800, 8.285700, 8.277700, 8.538100, 8.539800, 8.283800, 8.532000, 8.539000, 8.548300, 8.405700, 8.414200, 8.537800, 8.409800, 8.414100 -8.614200, 8.288700, 8.288000, 8.549000, 8.549100, 8.291600, 8.553700, 8.550400, 8.560000, 8.423400, 8.429600, 8.564400, 8.425700, 8.432700 -8.621900, 8.296600, 8.301600, 8.596300, 8.583300, 8.297100, 8.583300, 8.578000, 8.583300, 8.440800, 8.436700, 8.585900, 8.449900, 8.456500 -8.623800, 8.311500, 8.317700, 8.602600, 8.606100, 8.307300, 8.609700, 8.600700, 8.594600, 8.571500, 8.548600, 8.602100, 8.547800, 8.561400 -8.628200, 8.321600, 8.320000, 8.613800, 8.623300, 8.312600, 8.616700, 8.611200, 8.607300, 8.589200, 8.590100, 8.618000, 8.593900, 8.594600 -8.629400, 8.330400, 8.334500, 8.629300, 8.632200, 8.331900, 8.633400, 8.627000, 8.626100, 8.604800, 8.607000, 8.626700, 8.605100, 8.604600 -8.638000, 8.345900, 8.339300, 8.635200, 8.639200, 8.337900, 8.642300, 8.641500, 8.639200, 8.621800, 8.621000, 8.638200, 8.619100, 8.610400 -8.646800, 8.353900, 8.354600, 8.651300, 8.661900, 8.366600, 8.663500, 8.651300, 8.647200, 8.633300, 8.637900, 8.644700, 8.636600, 8.632700 -8.656700, 8.377500, 8.368400, 8.655800, 8.664400, 8.376800, 8.668200, 8.658100, 8.664600, 8.644600, 8.651000, 8.670300, 8.646900, 8.644800 -8.664400, 8.389500, 8.392200, 8.674500, 8.675500, 8.386600, 8.674700, 8.674900, 8.672200, 8.655500, 8.657000, 8.674100, 8.655700, 8.651100 -8.666700, 8.411800, 8.401700, 8.676800, 8.678800, 8.393500, 8.685700, 8.684000, 8.677300, 8.664300, 8.665800, 8.682400, 8.665300, 8.666500 -8.672400, 8.428000, 8.424300, 8.692000, 8.697200, 8.434400, 8.693800, 8.694300, 8.692200, 8.683800, 8.674700, 8.698900, 8.669500, 8.674400 -8.689600, 8.451000, 8.439100, 8.707100, 8.704400, 8.450600, 8.704600, 8.702800, 8.705200, 8.691300, 8.692900, 8.706100, 8.690500, 8.684600 -8.701200, 8.463800, 8.473800, 8.715100, 8.714200, 8.470900, 8.712200, 8.715400, 8.714200, 8.694200, 8.700600, 8.717700, 8.698900, 8.697900 -8.747200, 8.565900, 8.554200, 8.730600, 8.722300, 8.559000, 8.719400, 8.726800, 8.719000, 8.707500, 8.712800, 8.737800, 8.711900, 8.705100 -8.773900, 8.579300, 8.580200, 8.740300, 8.733100, 8.575400, 8.737700, 8.744100, 8.749300, 8.719600, 8.720900, 8.746300, 8.719600, 8.715800 -8.786900, 8.593500, 8.595200, 8.747400, 8.747100, 8.583300, 8.745200, 8.750000, 8.755700, 8.724900, 8.728000, 8.759100, 8.728900, 8.728300 -8.792400, 8.607200, 8.606800, 8.760900, 8.754300, 8.599300, 8.759800, 8.764300, 8.765900, 8.738300, 8.731900, 8.765600, 8.735900, 8.735100 -8.801400, 8.615700, 8.636200, 8.765500, 8.773400, 8.618400, 8.772400, 8.785900, 8.773100, 8.769700, 8.770000, 8.787800, 8.752100, 8.750500 -8.812800, 8.641600, 8.643200, 8.792600, 8.792100, 8.650800, 8.783200, 8.787800, 8.801800, 8.776600, 8.781000, 8.799200, 8.766300, 8.774700 -8.818300, 8.672900, 8.700900, 8.820000, 8.823200, 8.691500, 8.811300, 8.826400, 8.810700, 8.794300, 8.790200, 8.813100, 8.778300, 8.780900 -8.829600, 8.766900, 8.750100, 8.836400, 8.832600, 8.756600, 8.830200, 8.840300, 8.831300, 8.800600, 8.802100, 8.839800, 8.798800, 8.794400 -8.837300, 8.782600, 8.790400, 8.842800, 8.839300, 8.778600, 8.845700, 8.849700, 8.839200, 8.813200, 8.808800, 8.851100, 8.803400, 8.812700 -8.838800, 8.805700, 8.817500, 8.858900, 8.854600, 8.791000, 8.864200, 8.857800, 8.851400, 8.820300, 8.819200, 8.862700, 8.816000, 8.826500 -8.850200, 8.841000, 8.832400, 8.867300, 8.877800, 8.847100, 8.876200, 8.867400, 8.869100, 8.827900, 8.830500, 8.869300, 8.828400, 8.834500 -8.853800, 9.055800, 9.030000, 8.892000, 8.889700, 9.041100, 8.884000, 8.886100, 8.881500, 8.854300, 8.849400, 8.883900, 8.846100, 8.848300 -8.866000, 9.063300, 9.042900, 8.903500, 8.909700, 9.053800, 8.904400, 8.896100, 8.894600, 8.864300, 8.856900, 8.895400, 8.864700, 8.871500 -8.868700, 9.078100, 9.083300, 8.913000, 8.919500, 9.068900, 8.920800, 8.913900, 8.916200, 8.881800, 8.872100, 8.910600, 8.885000, 8.873000 -8.871100, 9.099100, 9.100300, 8.926100, 8.920800, 9.104100, 8.927300, 8.931400, 8.931400, 8.886100, 8.882600, 8.920100, 8.891100, 8.885200 -8.880100, 9.123600, 9.136200, 8.950400, 8.955000, 9.131800, 8.953600, 8.955300, 8.940700, 8.901100, 8.897800, 8.938000, 8.907000, 8.898100 -8.883200, 9.138600, 9.150200, 8.977100, 8.962400, 9.145600, 8.963200, 8.973700, 8.952700, 8.911700, 8.912500, 8.961300, 8.910700, 8.908700 -8.895500, 9.153400, 9.181200, 8.988200, 8.979900, 9.178200, 8.973600, 8.986600, 8.968900, 8.915200, 8.924200, 8.978300, 8.930100, 8.917400 -8.901000, 9.171900, 9.197800, 8.994800, 8.998100, 9.194300, 8.992000, 8.993400, 8.993700, 8.931100, 8.935800, 8.986500, 8.937400, 8.938100 -8.906500, 9.204400, 9.212700, 9.005000, 9.005400, 9.215000, 9.008500, 9.014200, 9.014700, 8.957200, 8.949400, 8.996000, 8.947700, 8.942500 -8.908600, 9.226900, 9.222100, 9.025200, 9.020400, 9.223800, 9.026500, 9.027800, 9.026800, 8.962800, 8.961900, 9.031000, 8.966800, 8.960700 -8.918600, 9.240800, 9.235100, 9.053500, 9.038100, 9.236800, 9.041200, 9.039600, 9.046000, 8.967200, 8.971100, 9.038200, 8.970000, 8.984200 -8.932900, 9.249600, 9.248500, 9.056900, 9.059700, 9.251400, 9.058700, 9.064900, 9.053400, 8.982100, 8.992200, 9.061600, 8.988000, 8.990700 -8.940700, 9.260700, 9.257900, 9.070800, 9.069400, 9.257900, 9.065800, 9.075700, 9.072800, 8.991300, 9.000300, 9.072300, 9.001100, 9.002600 -8.955600, 9.269100, 9.264900, 9.079100, 9.080100, 9.272800, 9.078600, 9.080500, 9.084500, 9.014600, 9.018800, 9.077800, 9.026600, 9.037000 -8.959300, 9.277900, 9.279200, 9.092300, 9.102700, 9.280300, 9.095500, 9.089300, 9.100500, 9.078300, 9.062300, 9.093600, 9.069800, 9.060400 -8.964300, 9.291000, 9.286400, 9.112400, 9.113600, 9.287900, 9.113600, 9.104900, 9.110600, 9.090700, 9.087100, 9.103600, 9.090700, 9.102600 -8.973400, 9.301900, 9.297900, 9.132400, 9.135700, 9.302700, 9.132800, 9.131500, 9.151600, 9.117100, 9.121100, 9.124300, 9.127200, 9.119300 -8.981200, 9.309600, 9.312100, 9.153000, 9.157900, 9.307600, 9.159100, 9.153500, 9.168600, 9.175900, 9.182700, 9.166900, 9.177400, 9.165600 -8.992200, 9.325400, 9.325700, 9.185900, 9.174900, 9.313000, 9.169800, 9.175100, 9.180600, 9.193600, 9.200900, 9.174900, 9.195600, 9.200800 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_01 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_01 deleted file mode 100644 index 87808bb25..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_01 +++ /dev/null @@ -1,461 +0,0 @@ --3.3141 --2.8062 --2.7823 --2.7673 --2.7408 --2.7160 --2.7148 --2.2872 --2.2603 --2.2424 --2.2221 --2.2153 --2.2024 --2.1881 --2.1624 --2.1534 --2.1422 --2.1223 --2.1064 --1.6798 --1.6742 --1.6521 --1.6313 --1.6214 --1.6041 --1.5807 --1.5675 --1.1533 --1.1196 --1.0952 --1.0751 --1.0379 --1.0305 --0.6738 --0.6472 --0.6365 --0.6221 --0.6099 --0.5874 --0.5774 --0.5689 --0.5535 --0.5492 --0.5440 --0.5240 --0.5125 --0.4982 --0.4903 --0.4877 --0.4668 --0.4595 --0.4518 --0.4397 --0.4195 --0.4179 --0.3906 --0.3760 --0.1020 --0.0751 --0.0709 --0.0468 --0.0440 --0.0400 --0.0058 - 0.0065 - 0.0157 - 0.0203 - 0.0327 - 0.0598 - 0.0647 - 0.0753 - 0.0758 - 0.0829 - 0.0926 - 0.1015 - 0.1223 - 0.1305 - 0.1359 - 0.1452 - 0.1881 - 0.2203 - 1.0324 - 1.0571 - 1.0752 - 1.0974 - 1.1021 - 1.1164 - 1.1256 - 1.1501 - 1.1557 - 1.1932 - 1.2122 - 1.2218 - 1.5156 - 1.5520 - 1.5674 - 1.5782 - 1.5902 - 1.5959 - 1.6084 - 1.6159 - 1.6257 - 1.6333 - 1.6400 - 1.6474 - 1.6566 - 1.6594 - 1.6611 - 1.6820 - 1.6872 - 1.7063 - 1.7207 - 1.7305 - 1.7315 - 1.7350 - 1.7478 - 1.7514 - 1.7692 - 1.7751 - 1.7923 - 1.8069 - 1.8128 - 1.8197 - 2.1037 - 2.1120 - 2.1321 - 2.1484 - 2.1517 - 2.1677 - 2.1719 - 2.1805 - 2.1827 - 2.1971 - 2.2190 - 2.2205 - 2.2383 - 2.2440 - 2.2519 - 2.2684 - 2.2762 - 2.2847 - 2.2975 - 2.3013 - 2.3151 - 2.3330 - 2.3377 - 2.3568 - 2.6669 - 2.6848 - 2.6943 - 2.6997 - 2.7083 - 2.7192 - 2.7282 - 2.7318 - 2.7349 - 2.7527 - 2.7568 - 2.7649 - 2.7771 - 2.7842 - 2.7906 - 2.8025 - 2.8141 - 2.8319 - 2.8330 - 2.8457 - 2.8558 - 2.8672 - 2.8753 - 2.9093 - 3.2053 - 3.2107 - 3.2289 - 3.2314 - 3.4140 - 3.4190 - 3.4288 - 3.4421 - 3.7281 - 3.7358 - 3.7424 - 3.7478 - 3.7582 - 3.7711 - 3.7761 - 3.7937 - 3.8034 - 3.8093 - 3.8200 - 3.8380 - 3.8471 - 3.8529 - 3.8544 - 3.8637 - 3.8732 - 3.8936 - 3.8980 - 3.9051 - 3.9301 - 3.9396 - 3.9464 - 3.9634 - 4.1506 - 4.1678 - 4.1865 - 4.1946 - 4.1996 - 4.2063 - 4.2209 - 4.2219 - 4.2286 - 4.2405 - 4.2424 - 4.2479 - 4.2552 - 4.2603 - 4.2788 - 4.2857 - 4.2936 - 4.2963 - 4.3011 - 4.3097 - 4.3330 - 4.3478 - 4.3506 - 4.3654 - 4.4308 - 4.4387 - 4.4538 - 4.4692 - 4.4809 - 4.4860 - 4.4944 - 4.4962 - 4.5092 - 4.5105 - 4.5178 - 4.5268 - 4.5347 - 4.5474 - 4.5523 - 4.5611 - 4.5731 - 4.5757 - 4.5813 - 4.5848 - 4.5977 - 4.6049 - 4.6191 - 4.6277 - 4.9055 - 4.9135 - 4.9228 - 5.3404 - 5.3545 - 5.3671 - 5.3762 - 5.3984 - 5.4016 - 5.4076 - 5.4200 - 5.4264 - 5.4338 - 5.4558 - 5.4635 - 5.7995 - 5.8224 - 5.8314 - 5.8437 - 5.8555 - 5.8717 - 5.8792 - 5.8952 - 5.8990 - 5.9050 - 5.9138 - 5.9270 - 5.9349 - 5.9420 - 5.9473 - 5.9559 - 5.9646 - 5.9706 - 5.9761 - 5.9768 - 5.9850 - 5.9931 - 6.0000 - 6.0067 - 6.0147 - 6.0214 - 6.0240 - 6.0307 - 6.0368 - 6.0463 - 6.0685 - 6.0691 - 6.0822 - 6.0899 - 6.0915 - 6.1141 - 6.1780 - 6.1899 - 6.1971 - 6.3374 - 6.3752 - 6.3849 - 6.4034 - 6.4154 - 6.4278 - 6.4405 - 6.4606 - 6.4713 - 6.4864 - 6.5086 - 6.5275 - 6.6445 - 6.6603 - 6.6617 - 6.6680 - 6.6841 - 6.6975 - 6.7032 - 6.7133 - 6.7195 - 6.7297 - 6.7383 - 6.7574 - 6.8434 - 6.8729 - 6.8811 - 6.8963 - 6.9112 - 6.9166 - 6.9278 - 6.9383 - 6.9506 - 6.9599 - 6.9690 - 6.9731 - 6.9808 - 6.9897 - 6.9938 - 7.0032 - 7.0069 - 7.0211 - 7.0245 - 7.0311 - 7.0369 - 7.0447 - 7.0573 - 7.0677 - 7.0694 - 7.0743 - 7.0830 - 7.0903 - 7.1002 - 7.1078 - 7.1156 - 7.1217 - 7.1321 - 7.1365 - 7.1574 - 7.1607 - 7.2877 - 7.2941 - 7.3033 - 7.3278 - 7.3294 - 7.3445 - 7.3477 - 7.3502 - 7.3548 - 7.3619 - 7.3801 - 7.3958 - 7.4010 - 7.4203 - 7.4361 - 7.4431 - 7.4527 - 7.4678 - 7.4739 - 7.4903 - 7.4973 - 7.5013 - 7.5072 - 7.5177 - 7.5235 - 7.5373 - 7.5487 - 7.5545 - 7.5719 - 7.5771 - 7.5796 - 7.5943 - 7.6122 - 7.6249 - 7.6408 - 7.6542 - 7.8967 - 7.9332 - 7.9420 - 7.9615 - 7.9972 - 8.0296 - 8.5202 - 8.5340 - 8.5497 - 8.5535 - 8.5641 - 8.5721 - 8.5739 - 8.5851 - 8.5882 - 8.5900 - 8.5998 - 8.6142 - 8.6219 - 8.6238 - 8.6282 - 8.6294 - 8.6380 - 8.6468 - 8.6567 - 8.6644 - 8.6667 - 8.6724 - 8.6896 - 8.7012 - 8.7472 - 8.7739 - 8.7869 - 8.7924 - 8.8014 - 8.8128 - 8.8183 - 8.8296 - 8.8373 - 8.8388 - 8.8502 - 8.8538 - 8.8660 - 8.8687 - 8.8711 - 8.8801 - 8.8832 - 8.8955 - 8.9010 - 8.9065 - 8.9086 - 8.9186 - 8.9329 - 8.9407 - 8.9556 - 8.9593 - 8.9643 - 8.9734 - 8.9812 - 8.9922 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_02 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_02 deleted file mode 100644 index 20eddc66a..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_02 +++ /dev/null @@ -1,461 +0,0 @@ --3.2524 --3.0663 --2.7299 --2.6987 --2.6880 --2.6649 --2.5405 --2.5055 --2.4982 --2.4697 --2.3173 --2.1717 --2.1411 --2.1190 --2.1054 --1.9797 --1.9473 --1.9127 --1.9077 --1.7901 --1.7711 --1.7541 --1.7299 --1.7158 --1.2697 --1.2524 --1.2422 --1.2271 --1.2078 --1.1777 --1.1515 --1.1239 --1.0521 --1.0213 --1.0032 --0.9770 --0.8557 --0.8360 --0.8242 --0.7964 --0.6828 --0.6650 --0.6347 --0.6247 --0.5052 --0.4944 --0.4776 --0.4675 --0.4506 --0.4310 --0.4178 --0.4063 --0.3413 --0.3151 --0.2835 --0.2761 --0.2572 --0.2485 --0.2332 --0.2238 --0.1765 --0.1053 --0.0832 --0.0585 --0.0377 - 0.2398 - 0.2614 - 0.2785 - 0.2927 - 0.3754 - 0.4107 - 0.4181 - 0.4314 - 0.4480 - 0.4690 - 0.4748 - 0.4885 - 0.5018 - 0.5208 - 0.5367 - 0.5543 - 0.6627 - 0.7869 - 0.8256 - 0.8490 - 0.8641 - 0.9466 - 0.9812 - 0.9978 - 1.0091 - 1.0168 - 1.0351 - 1.0538 - 1.0681 - 1.1390 - 1.1553 - 1.1761 - 1.1964 - 1.2088 - 1.2365 - 1.2628 - 1.2815 - 1.3657 - 1.3846 - 1.4026 - 1.4287 - 1.6472 - 1.6812 - 1.7165 - 1.7340 - 1.7543 - 1.7649 - 1.7932 - 1.8051 - 1.8663 - 1.8903 - 1.8989 - 1.9117 - 1.9172 - 1.9413 - 1.9641 - 1.9814 - 2.0783 - 2.1006 - 2.1164 - 2.1348 - 2.1979 - 2.2307 - 2.2509 - 2.2574 - 2.2697 - 2.2851 - 2.3093 - 2.3311 - 2.3719 - 2.3978 - 2.4157 - 2.4247 - 2.4305 - 2.4376 - 2.4565 - 2.4618 - 2.4780 - 2.4887 - 2.4935 - 2.5079 - 2.5284 - 2.5451 - 2.5479 - 2.5651 - 2.5981 - 2.6198 - 2.6366 - 2.6460 - 2.6728 - 2.6956 - 2.7057 - 2.7401 - 2.8138 - 2.8212 - 2.8379 - 2.8628 - 2.8787 - 3.1152 - 3.1258 - 3.1358 - 3.1529 - 3.1609 - 3.1752 - 3.1812 - 3.1988 - 3.2034 - 3.2227 - 3.2408 - 3.2527 - 3.3187 - 3.3309 - 3.3408 - 3.3545 - 3.3610 - 3.3687 - 3.3813 - 3.3853 - 3.3944 - 3.4144 - 3.4196 - 3.4349 - 3.6590 - 3.6758 - 3.6918 - 3.7128 - 3.7203 - 3.7375 - 3.7577 - 3.7755 - 3.8196 - 3.8438 - 3.8553 - 3.8698 - 3.8999 - 3.9040 - 3.9073 - 3.9177 - 3.9267 - 3.9397 - 3.9497 - 3.9706 - 4.0135 - 4.0420 - 4.0626 - 4.0670 - 4.0727 - 4.0840 - 4.0922 - 4.0985 - 4.1136 - 4.1213 - 4.1292 - 4.1478 - 4.1761 - 4.5157 - 4.5441 - 4.5481 - 4.5683 - 4.5782 - 4.5859 - 4.6146 - 4.6456 - 4.7611 - 4.7694 - 4.7910 - 4.7988 - 4.8012 - 4.8150 - 4.8215 - 4.8338 - 4.9012 - 4.9316 - 4.9414 - 4.9501 - 4.9624 - 4.9703 - 4.9813 - 4.9997 - 5.0091 - 5.0161 - 5.0436 - 5.0455 - 5.0764 - 5.0903 - 5.1024 - 5.1193 - 5.1309 - 5.1367 - 5.1535 - 5.1660 - 5.1724 - 5.1980 - 5.2042 - 5.2349 - 5.3068 - 5.3135 - 5.3223 - 5.3403 - 5.3535 - 5.3613 - 5.3697 - 5.3867 - 5.4270 - 5.4368 - 5.4512 - 5.4639 - 5.4793 - 5.4845 - 5.4913 - 5.5024 - 5.5121 - 5.5204 - 5.5246 - 5.5383 - 5.5476 - 5.5599 - 5.5737 - 5.5786 - 5.6311 - 5.6538 - 5.6668 - 5.7004 - 5.8129 - 5.8430 - 5.9820 - 5.9981 - 6.0117 - 6.0317 - 6.0424 - 6.0657 - 6.0730 - 6.0926 - 6.1025 - 6.1239 - 6.1372 - 6.1633 - 6.2190 - 6.2415 - 6.2783 - 6.2954 - 6.3116 - 6.3316 - 6.3485 - 6.3702 - 6.4124 - 6.4287 - 6.5122 - 6.5236 - 6.5462 - 6.5587 - 6.5951 - 6.6201 - 6.6306 - 6.6454 - 6.6556 - 6.6673 - 6.6797 - 6.6888 - 6.6932 - 6.7139 - 6.7174 - 6.7199 - 6.7366 - 6.7449 - 6.7517 - 6.7569 - 6.7632 - 6.7666 - 6.7780 - 6.7847 - 6.7916 - 6.7966 - 6.8133 - 6.8278 - 6.8457 - 6.8536 - 6.8748 - 6.8969 - 6.9016 - 6.9198 - 6.9344 - 6.9488 - 7.0021 - 7.0348 - 7.0372 - 7.0565 - 7.0746 - 7.0877 - 7.0993 - 7.1195 - 7.1374 - 7.1427 - 7.1830 - 7.2061 - 7.2223 - 7.2324 - 7.2551 - 7.4290 - 7.4375 - 7.4565 - 7.4738 - 7.5398 - 7.5612 - 7.5899 - 7.5980 - 7.6137 - 7.6213 - 7.6260 - 7.6311 - 7.6395 - 7.6487 - 7.6571 - 7.6656 - 7.6726 - 7.6845 - 7.6944 - 7.6983 - 7.7121 - 7.7199 - 7.7313 - 7.7435 - 7.7500 - 7.7640 - 7.7718 - 7.7876 - 7.8800 - 7.8913 - 7.9102 - 7.9337 - 7.9728 - 7.9774 - 7.9910 - 8.0042 - 8.0514 - 8.0719 - 8.0909 - 8.1063 - 8.1204 - 8.1407 - 8.1563 - 8.1664 - 8.1822 - 8.1962 - 8.2027 - 8.2149 - 8.2275 - 8.2362 - 8.2447 - 8.2556 - 8.2579 - 8.2729 - 8.2857 - 8.2887 - 8.2966 - 8.3115 - 8.3216 - 8.3304 - 8.3459 - 8.3539 - 8.3775 - 8.3895 - 8.4118 - 8.4280 - 8.4510 - 8.4638 - 8.5659 - 8.5793 - 8.5935 - 8.6072 - 8.6157 - 8.6416 - 8.6729 - 8.7669 - 8.7826 - 8.8057 - 8.8410 - 9.0558 - 9.0633 - 9.0781 - 9.0991 - 9.1236 - 9.1386 - 9.1534 - 9.1719 - 9.2044 - 9.2269 - 9.2408 - 9.2496 - 9.2607 - 9.2691 - 9.2779 - 9.2910 - 9.3019 - 9.3096 - 9.3254 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_03 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_03 deleted file mode 100644 index 3663fe901..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_03 +++ /dev/null @@ -1,461 +0,0 @@ --3.2544 --3.0606 --2.7251 --2.7159 --2.6903 --2.6640 --2.5196 --2.5095 --2.5004 --2.4726 --2.3128 --2.1804 --2.1398 --2.1260 --2.1096 --1.9700 --1.9398 --1.9297 --1.9078 --1.7812 --1.7616 --1.7448 --1.7337 --1.7204 --1.2675 --1.2496 --1.2256 --1.2072 --1.2001 --1.1943 --1.1645 --1.1465 --1.0618 --1.0293 --1.0026 --0.9754 --0.8585 --0.8463 --0.8124 --0.7731 --0.6852 --0.6525 --0.6381 --0.6260 --0.5459 --0.5151 --0.4933 --0.4592 --0.4537 --0.4442 --0.3998 --0.3868 --0.3369 --0.3065 --0.2882 --0.2781 --0.2601 --0.2468 --0.2238 --0.2055 --0.1840 --0.1079 --0.1010 --0.0566 --0.0086 - 0.2455 - 0.2565 - 0.2769 - 0.3053 - 0.3682 - 0.4064 - 0.4199 - 0.4402 - 0.4518 - 0.4640 - 0.4792 - 0.4956 - 0.5047 - 0.5152 - 0.5346 - 0.5706 - 0.6597 - 0.7898 - 0.8257 - 0.8376 - 0.8659 - 0.9335 - 0.9702 - 0.9896 - 1.0115 - 1.0218 - 1.0405 - 1.0684 - 1.0863 - 1.1277 - 1.1510 - 1.1694 - 1.1954 - 1.2065 - 1.2364 - 1.2486 - 1.2676 - 1.3584 - 1.3824 - 1.4096 - 1.4320 - 1.6526 - 1.6859 - 1.7075 - 1.7357 - 1.7439 - 1.7491 - 1.7712 - 1.7935 - 1.8670 - 1.8863 - 1.8893 - 1.9077 - 1.9366 - 1.9395 - 1.9627 - 1.9965 - 2.0738 - 2.0984 - 2.1257 - 2.1479 - 2.2116 - 2.2438 - 2.2529 - 2.2657 - 2.2815 - 2.2887 - 2.2955 - 2.3152 - 2.3844 - 2.4040 - 2.4106 - 2.4320 - 2.4359 - 2.4499 - 2.4553 - 2.4688 - 2.4783 - 2.4904 - 2.5028 - 2.5067 - 2.5200 - 2.5296 - 2.5544 - 2.5727 - 2.6065 - 2.6235 - 2.6322 - 2.6507 - 2.6746 - 2.6894 - 2.7068 - 2.7298 - 2.8041 - 2.8220 - 2.8360 - 2.8579 - 2.9011 - 3.1164 - 3.1358 - 3.1407 - 3.1556 - 3.1667 - 3.1759 - 3.1885 - 3.1940 - 3.2059 - 3.2201 - 3.2315 - 3.2412 - 3.2991 - 3.3212 - 3.3350 - 3.3445 - 3.3548 - 3.3672 - 3.3786 - 3.3844 - 3.3914 - 3.4044 - 3.4252 - 3.4527 - 3.6733 - 3.6882 - 3.7002 - 3.7214 - 3.7299 - 3.7357 - 3.7451 - 3.7693 - 3.8171 - 3.8462 - 3.8516 - 3.8645 - 3.8770 - 3.8884 - 3.8998 - 3.9120 - 3.9331 - 3.9398 - 3.9510 - 3.9704 - 4.0192 - 4.0399 - 4.0473 - 4.0614 - 4.0751 - 4.0878 - 4.1017 - 4.1035 - 4.1123 - 4.1269 - 4.1407 - 4.1534 - 4.1775 - 4.5125 - 4.5327 - 4.5454 - 4.5641 - 4.5754 - 4.5945 - 4.6254 - 4.6385 - 4.7472 - 4.7648 - 4.7725 - 4.7996 - 4.8116 - 4.8169 - 4.8311 - 4.8403 - 4.8958 - 4.9056 - 4.9285 - 4.9402 - 4.9583 - 4.9754 - 4.9829 - 5.0087 - 5.0143 - 5.0393 - 5.0455 - 5.0657 - 5.0831 - 5.0978 - 5.1119 - 5.1286 - 5.1337 - 5.1453 - 5.1584 - 5.1751 - 5.1815 - 5.1902 - 5.2082 - 5.2168 - 5.3006 - 5.3091 - 5.3143 - 5.3307 - 5.3467 - 5.3568 - 5.3697 - 5.3941 - 5.4105 - 5.4375 - 5.4427 - 5.4584 - 5.4655 - 5.4773 - 5.4881 - 5.4941 - 5.5095 - 5.5267 - 5.5292 - 5.5417 - 5.5522 - 5.5711 - 5.5813 - 5.6016 - 5.6345 - 5.6582 - 5.6711 - 5.6942 - 5.8194 - 5.8334 - 5.9850 - 6.0060 - 6.0142 - 6.0259 - 6.0444 - 6.0543 - 6.0667 - 6.0875 - 6.0955 - 6.1221 - 6.1478 - 6.1814 - 6.2137 - 6.2227 - 6.2843 - 6.3174 - 6.3311 - 6.3384 - 6.3529 - 6.3679 - 6.4052 - 6.4318 - 6.5109 - 6.5273 - 6.5405 - 6.5484 - 6.5810 - 6.6138 - 6.6177 - 6.6423 - 6.6562 - 6.6643 - 6.6785 - 6.6837 - 6.6939 - 6.7024 - 6.7118 - 6.7275 - 6.7322 - 6.7380 - 6.7492 - 6.7559 - 6.7581 - 6.7725 - 6.7824 - 6.7924 - 6.8026 - 6.8110 - 6.8177 - 6.8325 - 6.8567 - 6.8635 - 6.8766 - 6.8983 - 6.9114 - 6.9279 - 6.9356 - 6.9532 - 6.9870 - 7.0067 - 7.0368 - 7.0613 - 7.0782 - 7.0966 - 7.1012 - 7.1189 - 7.1305 - 7.1488 - 7.1761 - 7.1989 - 7.2109 - 7.2308 - 7.2690 - 7.4286 - 7.4415 - 7.4613 - 7.4698 - 7.5517 - 7.5605 - 7.5800 - 7.5931 - 7.5967 - 7.6117 - 7.6167 - 7.6313 - 7.6402 - 7.6503 - 7.6601 - 7.6671 - 7.6688 - 7.6857 - 7.6927 - 7.7022 - 7.7142 - 7.7247 - 7.7313 - 7.7512 - 7.7549 - 7.7650 - 7.7773 - 7.7928 - 7.8716 - 7.8829 - 7.9042 - 7.9282 - 7.9658 - 7.9863 - 7.9936 - 8.0081 - 8.0516 - 8.0746 - 8.0867 - 8.1128 - 8.1201 - 8.1426 - 8.1465 - 8.1643 - 8.1909 - 8.1966 - 8.2094 - 8.2236 - 8.2279 - 8.2346 - 8.2418 - 8.2523 - 8.2606 - 8.2654 - 8.2777 - 8.2880 - 8.3016 - 8.3177 - 8.3200 - 8.3345 - 8.3393 - 8.3546 - 8.3684 - 8.3922 - 8.4017 - 8.4243 - 8.4391 - 8.4738 - 8.5542 - 8.5802 - 8.5952 - 8.6068 - 8.6362 - 8.6432 - 8.7009 - 8.7501 - 8.7904 - 8.8175 - 8.8324 - 9.0300 - 9.0429 - 9.0833 - 9.1003 - 9.1362 - 9.1502 - 9.1812 - 9.1978 - 9.2127 - 9.2221 - 9.2351 - 9.2485 - 9.2579 - 9.2649 - 9.2792 - 9.2864 - 9.2979 - 9.3121 - 9.3257 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_04 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_04 deleted file mode 100644 index b8d5ea104..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_04 +++ /dev/null @@ -1,461 +0,0 @@ --3.1934 --3.0104 --2.9943 --2.8072 --2.6583 --2.6271 --2.4707 --2.4523 --2.4406 --2.4150 --2.2744 --2.2653 --2.2372 --2.2161 --2.0862 --2.0388 --1.7538 --1.7304 --1.7072 --1.6880 --1.6760 --1.6711 --1.5527 --1.5255 --1.5075 --1.4920 --1.4771 --1.4624 --1.3212 --1.1856 --1.1520 --1.1312 --1.1131 --0.9981 --0.9804 --0.9639 --0.9508 --0.9240 --0.8985 --0.8096 --0.7947 --0.7816 --0.7630 --0.7509 --0.7398 --0.7193 --0.6895 --0.5777 --0.5532 --0.2603 --0.2510 --0.2443 --0.2172 --0.2048 --0.1856 --0.1729 --0.0688 --0.0404 --0.0300 --0.0197 --0.0121 - 0.0206 - 0.1309 - 0.1530 - 0.1756 - 0.1975 - 0.2770 - 0.3140 - 0.3257 - 0.3431 - 0.3560 - 0.3844 - 0.4728 - 0.4916 - 0.5033 - 0.5245 - 0.5352 - 0.5499 - 0.5569 - 0.5855 - 0.6655 - 0.6961 - 0.7076 - 0.7181 - 0.7308 - 0.7355 - 0.7491 - 0.7667 - 0.8777 - 0.9052 - 0.9338 - 0.9431 - 1.1905 - 1.2067 - 1.2232 - 1.2306 - 1.2362 - 1.2543 - 1.2688 - 1.2808 - 1.2999 - 1.3123 - 1.3959 - 1.4103 - 1.4274 - 1.4364 - 1.4482 - 1.4683 - 1.4862 - 1.5050 - 1.6146 - 1.6384 - 1.7454 - 1.7780 - 1.7847 - 1.8050 - 1.8182 - 1.8383 - 1.9344 - 1.9448 - 1.9580 - 1.9678 - 1.9756 - 1.9830 - 2.0019 - 2.0063 - 2.0258 - 2.0493 - 2.1160 - 2.1352 - 2.1401 - 2.1528 - 2.1643 - 2.1729 - 2.1934 - 2.1959 - 2.2251 - 2.2300 - 2.2500 - 2.2555 - 2.6336 - 2.6505 - 2.6717 - 2.6903 - 2.7006 - 2.7044 - 2.7161 - 2.7321 - 2.7458 - 2.8185 - 2.8303 - 2.8473 - 2.8634 - 2.8710 - 2.8774 - 2.8824 - 2.8867 - 2.8948 - 2.8999 - 2.9195 - 2.9348 - 2.9449 - 2.9554 - 3.0397 - 3.0577 - 3.0693 - 3.0812 - 3.0980 - 3.1168 - 3.2005 - 3.2181 - 3.2339 - 3.2566 - 3.2678 - 3.2740 - 3.3249 - 3.3442 - 3.3725 - 3.3902 - 3.4062 - 3.4164 - 3.4333 - 3.4395 - 3.4520 - 3.4659 - 3.5324 - 3.5440 - 3.5601 - 3.5868 - 3.5984 - 3.6128 - 3.6199 - 3.6282 - 3.6413 - 3.6641 - 3.6960 - 3.7083 - 3.7769 - 3.8019 - 3.8980 - 3.9177 - 3.9966 - 4.0224 - 4.0361 - 4.0412 - 4.0715 - 4.0906 - 4.2015 - 4.2311 - 4.2431 - 4.2505 - 4.2599 - 4.2694 - 4.2800 - 4.2952 - 4.3040 - 4.3186 - 4.3305 - 4.3344 - 4.3468 - 4.3542 - 4.3660 - 4.3792 - 4.5037 - 4.5531 - 4.5817 - 4.5982 - 4.6103 - 4.6344 - 4.6423 - 4.6561 - 4.6812 - 4.6942 - 4.7021 - 4.7287 - 4.7330 - 4.7406 - 4.7555 - 4.7705 - 4.7927 - 4.8010 - 4.8263 - 4.8680 - 4.8866 - 4.9319 - 4.9389 - 4.9483 - 4.9652 - 4.9737 - 4.9879 - 5.0029 - 5.0138 - 5.0253 - 5.0421 - 5.0538 - 5.0706 - 5.0787 - 5.0903 - 5.1116 - 5.1809 - 5.1978 - 5.3208 - 5.3255 - 5.3461 - 5.3706 - 5.3972 - 5.4091 - 5.4113 - 5.4807 - 5.4978 - 5.5581 - 5.5669 - 5.5811 - 5.5980 - 5.6369 - 5.6404 - 5.6570 - 5.6635 - 5.6817 - 5.7024 - 5.7210 - 5.7284 - 5.7557 - 5.7655 - 5.7716 - 5.7852 - 5.7968 - 5.8069 - 5.8536 - 5.8940 - 5.8976 - 5.9148 - 5.9311 - 5.9540 - 5.9850 - 6.0007 - 6.0266 - 6.0325 - 6.0421 - 6.0610 - 6.0756 - 6.0936 - 6.1046 - 6.1148 - 6.1470 - 6.1599 - 6.2441 - 6.2512 - 6.2561 - 6.2748 - 6.2823 - 6.2859 - 6.3051 - 6.3306 - 6.3580 - 6.3697 - 6.3775 - 6.4006 - 6.4081 - 6.4193 - 6.4340 - 6.4470 - 6.4571 - 6.4623 - 6.4805 - 6.4998 - 6.5048 - 6.5145 - 6.5477 - 6.5707 - 6.5749 - 6.5952 - 6.5998 - 6.6588 - 6.6706 - 6.7017 - 6.7612 - 6.8291 - 6.8672 - 6.9628 - 6.9872 - 6.9930 - 7.0147 - 7.0510 - 7.0657 - 7.0717 - 7.0834 - 7.1073 - 7.1221 - 7.1378 - 7.1500 - 7.1593 - 7.1835 - 7.1902 - 7.2166 - 7.2470 - 7.2832 - 7.3478 - 7.3734 - 7.4064 - 7.4156 - 7.4312 - 7.4432 - 7.4546 - 7.4747 - 7.4959 - 7.5110 - 7.5317 - 7.5431 - 7.5628 - 7.5772 - 7.5805 - 7.6028 - 7.6110 - 7.6425 - 7.6691 - 7.6984 - 7.7119 - 7.7230 - 7.7347 - 7.7466 - 7.7676 - 7.7785 - 7.7934 - 7.8141 - 7.8244 - 7.8402 - 7.8446 - 7.8574 - 7.8689 - 7.8786 - 7.8893 - 7.9065 - 7.9257 - 7.9489 - 7.9673 - 7.9862 - 8.0053 - 8.0481 - 8.0552 - 8.0610 - 8.0703 - 8.0856 - 8.1020 - 8.1521 - 8.2652 - 8.2756 - 8.3025 - 8.3257 - 8.3744 - 8.3810 - 8.3923 - 8.4005 - 8.4465 - 8.4803 - 8.4915 - 8.5173 - 8.5381 - 8.5490 - 8.5963 - 8.6026 - 8.6138 - 8.6293 - 8.6352 - 8.6513 - 8.6558 - 8.6745 - 8.6768 - 8.6920 - 8.7071 - 8.7151 - 8.7306 - 8.7403 - 8.7474 - 8.7609 - 8.7655 - 8.7926 - 8.8200 - 8.8364 - 8.8428 - 8.8589 - 8.8673 - 8.8920 - 8.9035 - 8.9130 - 8.9261 - 8.9504 - 8.9771 - 8.9882 - 8.9948 - 9.0050 - 9.0252 - 9.0535 - 9.0569 - 9.0708 - 9.0791 - 9.0923 - 9.1124 - 9.1324 - 9.1530 - 9.1859 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_05 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_05 deleted file mode 100644 index 942dfbf9d..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_05 +++ /dev/null @@ -1,461 +0,0 @@ --3.1925 --3.0282 --2.9740 --2.8109 --2.6569 --2.6246 --2.4993 --2.4495 --2.4257 --2.3984 --2.2891 --2.2795 --2.2322 --2.1970 --2.0825 --2.0389 --1.7828 --1.7364 --1.7208 --1.6911 --1.6627 --1.6436 --1.5562 --1.5389 --1.5078 --1.4810 --1.4697 --1.4498 --1.3178 --1.1824 --1.1555 --1.1345 --1.1114 --1.0169 --0.9884 --0.9602 --0.9574 --0.9079 --0.8878 --0.8220 --0.8089 --0.7889 --0.7743 --0.7570 --0.7194 --0.7010 --0.6934 --0.5704 --0.5519 --0.2901 --0.2615 --0.2327 --0.2157 --0.1871 --0.1737 --0.1584 --0.0925 --0.0637 --0.0302 --0.0007 - 0.0085 - 0.0235 - 0.1233 - 0.1491 - 0.1741 - 0.2117 - 0.2883 - 0.3013 - 0.3175 - 0.3343 - 0.3672 - 0.3975 - 0.4626 - 0.4798 - 0.5030 - 0.5163 - 0.5441 - 0.5499 - 0.5742 - 0.5870 - 0.6509 - 0.6843 - 0.6916 - 0.7071 - 0.7302 - 0.7474 - 0.7722 - 0.7808 - 0.8562 - 0.8975 - 0.9301 - 0.9426 - 1.1822 - 1.1918 - 1.2069 - 1.2289 - 1.2452 - 1.2658 - 1.2775 - 1.2836 - 1.2983 - 1.3397 - 1.3894 - 1.4139 - 1.4187 - 1.4365 - 1.4705 - 1.4859 - 1.4957 - 1.5118 - 1.6175 - 1.6286 - 1.7433 - 1.7676 - 1.7921 - 1.7967 - 1.8097 - 1.8398 - 1.9070 - 1.9297 - 1.9332 - 1.9682 - 1.9784 - 1.9875 - 2.0057 - 2.0313 - 2.0422 - 2.0537 - 2.1142 - 2.1309 - 2.1448 - 2.1462 - 2.1628 - 2.1701 - 2.1835 - 2.2049 - 2.2178 - 2.2394 - 2.2500 - 2.2709 - 2.6229 - 2.6474 - 2.6621 - 2.6757 - 2.7020 - 2.7115 - 2.7255 - 2.7393 - 2.7633 - 2.8003 - 2.8210 - 2.8286 - 2.8407 - 2.8610 - 2.8640 - 2.8822 - 2.8915 - 2.9128 - 2.9172 - 2.9323 - 2.9458 - 2.9593 - 2.9669 - 3.0310 - 3.0515 - 3.0729 - 3.0913 - 3.1005 - 3.1356 - 3.1990 - 3.2116 - 3.2244 - 3.2573 - 3.2647 - 3.2874 - 3.3295 - 3.3397 - 3.3690 - 3.3735 - 3.3987 - 3.4023 - 3.4293 - 3.4361 - 3.4668 - 3.4781 - 3.5308 - 3.5480 - 3.5622 - 3.5747 - 3.5901 - 3.6028 - 3.6211 - 3.6278 - 3.6472 - 3.6651 - 3.6977 - 3.7103 - 3.7648 - 3.8126 - 3.9057 - 3.9212 - 3.9879 - 4.0165 - 4.0407 - 4.0645 - 4.0811 - 4.0889 - 4.2023 - 4.2267 - 4.2388 - 4.2462 - 4.2564 - 4.2706 - 4.2777 - 4.2864 - 4.3045 - 4.3078 - 4.3275 - 4.3393 - 4.3523 - 4.3603 - 4.3730 - 4.3914 - 4.5092 - 4.5659 - 4.5761 - 4.5854 - 4.6101 - 4.6193 - 4.6415 - 4.6555 - 4.6736 - 4.6921 - 4.7001 - 4.7177 - 4.7276 - 4.7472 - 4.7537 - 4.7618 - 4.7974 - 4.8152 - 4.8347 - 4.8608 - 4.8880 - 4.9170 - 4.9326 - 4.9387 - 4.9734 - 4.9840 - 4.9968 - 5.0094 - 5.0206 - 5.0276 - 5.0431 - 5.0565 - 5.0686 - 5.0788 - 5.0927 - 5.1148 - 5.1625 - 5.2233 - 5.3127 - 5.3318 - 5.3498 - 5.3662 - 5.3932 - 5.4060 - 5.4360 - 5.4782 - 5.4999 - 5.5379 - 5.5621 - 5.5838 - 5.6037 - 5.6227 - 5.6407 - 5.6590 - 5.6746 - 5.6838 - 5.7152 - 5.7253 - 5.7328 - 5.7483 - 5.7620 - 5.7714 - 5.7783 - 5.7911 - 5.8068 - 5.8378 - 5.8735 - 5.8964 - 5.9223 - 5.9372 - 5.9572 - 5.9850 - 6.0037 - 6.0219 - 6.0344 - 6.0461 - 6.0607 - 6.0711 - 6.0951 - 6.1101 - 6.1232 - 6.1346 - 6.1644 - 6.2088 - 6.2451 - 6.2551 - 6.2780 - 6.2943 - 6.3047 - 6.3178 - 6.3375 - 6.3526 - 6.3665 - 6.3718 - 6.3913 - 6.4095 - 6.4147 - 6.4388 - 6.4544 - 6.4597 - 6.4711 - 6.4795 - 6.4867 - 6.5020 - 6.5119 - 6.5408 - 6.5580 - 6.5719 - 6.6043 - 6.6141 - 6.6535 - 6.6656 - 6.6947 - 6.7694 - 6.8466 - 6.8704 - 6.9553 - 6.9731 - 7.0056 - 7.0290 - 7.0455 - 7.0556 - 7.0750 - 7.0864 - 7.1041 - 7.1219 - 7.1435 - 7.1517 - 7.1614 - 7.1756 - 7.2137 - 7.2198 - 7.2479 - 7.2813 - 7.3620 - 7.3830 - 7.3976 - 7.4116 - 7.4230 - 7.4315 - 7.4640 - 7.4831 - 7.4863 - 7.5059 - 7.5151 - 7.5484 - 7.5626 - 7.5750 - 7.5919 - 7.6003 - 7.6219 - 7.6515 - 7.6853 - 7.7051 - 7.7120 - 7.7249 - 7.7315 - 7.7496 - 7.7665 - 7.7788 - 7.7866 - 7.8055 - 7.8188 - 7.8264 - 7.8412 - 7.8513 - 7.8641 - 7.8725 - 7.8908 - 7.9076 - 7.9180 - 7.9284 - 7.9700 - 7.9927 - 8.0160 - 8.0299 - 8.0454 - 8.0640 - 8.0826 - 8.0910 - 8.1148 - 8.1443 - 8.2375 - 8.2833 - 8.3145 - 8.3349 - 8.3640 - 8.3818 - 8.3987 - 8.4159 - 8.4532 - 8.4689 - 8.4939 - 8.5135 - 8.5398 - 8.5491 - 8.5833 - 8.6061 - 8.6233 - 8.6322 - 8.6392 - 8.6619 - 8.6644 - 8.6755 - 8.6788 - 8.6972 - 8.7044 - 8.7142 - 8.7223 - 8.7331 - 8.7471 - 8.7543 - 8.7734 - 8.7921 - 8.8232 - 8.8326 - 8.8393 - 8.8546 - 8.8778 - 8.8897 - 8.9097 - 8.9195 - 8.9208 - 8.9550 - 8.9624 - 8.9799 - 8.9981 - 9.0054 - 9.0204 - 9.0381 - 9.0597 - 9.0694 - 9.0801 - 9.1027 - 9.1136 - 9.1357 - 9.1579 - 9.1749 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_06 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_06 deleted file mode 100644 index 10024ecc5..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_06 +++ /dev/null @@ -1,461 +0,0 @@ --3.2523 --3.0668 --2.7305 --2.7149 --2.6687 --2.6580 --2.5484 --2.5287 --2.4817 --2.4667 --2.3062 --2.1616 --2.1500 --2.1341 --2.0883 --1.9740 --1.9671 --1.9445 --1.8976 --1.8047 --1.7681 --1.7458 --1.7083 --1.7002 --1.2918 --1.2605 --1.2299 --1.2073 --1.2033 --1.1868 --1.1520 --1.1336 --1.0600 --1.0174 --0.9886 --0.9846 --0.8694 --0.8339 --0.7997 --0.7876 --0.6810 --0.6697 --0.6468 --0.6055 --0.5275 --0.4920 --0.4808 --0.4725 --0.4556 --0.4392 --0.4200 --0.3877 --0.3465 --0.3264 --0.2985 --0.2751 --0.2662 --0.2367 --0.2341 --0.2207 --0.1813 --0.1074 --0.0829 --0.0414 --0.0328 - 0.2400 - 0.2496 - 0.2879 - 0.3062 - 0.3830 - 0.3914 - 0.4160 - 0.4357 - 0.4490 - 0.4685 - 0.4724 - 0.4962 - 0.5182 - 0.5250 - 0.5406 - 0.5722 - 0.6562 - 0.7932 - 0.8139 - 0.8297 - 0.8711 - 0.9363 - 0.9848 - 0.9884 - 0.9974 - 1.0186 - 1.0329 - 1.0537 - 1.0947 - 1.1379 - 1.1548 - 1.1748 - 1.1880 - 1.2125 - 1.2388 - 1.2556 - 1.2833 - 1.3593 - 1.3790 - 1.4023 - 1.4314 - 1.6553 - 1.6968 - 1.7039 - 1.7266 - 1.7408 - 1.7523 - 1.7745 - 1.8062 - 1.8475 - 1.8830 - 1.8927 - 1.9195 - 1.9405 - 1.9475 - 1.9711 - 1.9984 - 2.0645 - 2.0897 - 2.1340 - 2.1426 - 2.2162 - 2.2274 - 2.2547 - 2.2626 - 2.2807 - 2.2934 - 2.3049 - 2.3161 - 2.3739 - 2.3905 - 2.4100 - 2.4163 - 2.4340 - 2.4422 - 2.4563 - 2.4619 - 2.4699 - 2.4929 - 2.5021 - 2.5106 - 2.5256 - 2.5373 - 2.5478 - 2.5790 - 2.6060 - 2.6169 - 2.6400 - 2.6631 - 2.6760 - 2.6964 - 2.7091 - 2.7324 - 2.7883 - 2.8254 - 2.8455 - 2.8711 - 2.8819 - 3.1070 - 3.1177 - 3.1339 - 3.1448 - 3.1594 - 3.1729 - 3.1801 - 3.2007 - 3.2097 - 3.2245 - 3.2342 - 3.2585 - 3.3054 - 3.3301 - 3.3443 - 3.3510 - 3.3651 - 3.3697 - 3.3768 - 3.3936 - 3.3979 - 3.4083 - 3.4221 - 3.4553 - 3.6644 - 3.6663 - 3.6927 - 3.7069 - 3.7302 - 3.7372 - 3.7430 - 3.7597 - 3.8176 - 3.8413 - 3.8513 - 3.8609 - 3.8716 - 3.8887 - 3.9027 - 3.9137 - 3.9329 - 3.9428 - 3.9552 - 3.9710 - 4.0008 - 4.0277 - 4.0408 - 4.0562 - 4.0839 - 4.0958 - 4.1022 - 4.1170 - 4.1245 - 4.1358 - 4.1445 - 4.1732 - 4.1931 - 4.5088 - 4.5225 - 4.5544 - 4.5675 - 4.5872 - 4.5954 - 4.6145 - 4.6520 - 4.7366 - 4.7554 - 4.7865 - 4.7982 - 4.8109 - 4.8222 - 4.8264 - 4.8460 - 4.9008 - 4.9225 - 4.9370 - 4.9444 - 4.9561 - 4.9680 - 4.9742 - 4.9956 - 5.0094 - 5.0262 - 5.0459 - 5.0561 - 5.0707 - 5.1008 - 5.1163 - 5.1274 - 5.1310 - 5.1513 - 5.1550 - 5.1742 - 5.1811 - 5.1891 - 5.1992 - 5.2138 - 5.2912 - 5.3145 - 5.3294 - 5.3401 - 5.3505 - 5.3645 - 5.3723 - 5.3845 - 5.4306 - 5.4371 - 5.4487 - 5.4598 - 5.4757 - 5.4794 - 5.4861 - 5.4938 - 5.5075 - 5.5192 - 5.5260 - 5.5372 - 5.5500 - 5.5700 - 5.5814 - 5.6023 - 5.6340 - 5.6482 - 5.6676 - 5.6978 - 5.8188 - 5.8414 - 5.9790 - 5.9983 - 6.0119 - 6.0247 - 6.0332 - 6.0501 - 6.0705 - 6.0877 - 6.1017 - 6.1245 - 6.1455 - 6.1711 - 6.2221 - 6.2366 - 6.2673 - 6.3001 - 6.3270 - 6.3361 - 6.3521 - 6.3688 - 6.4107 - 6.4226 - 6.5163 - 6.5320 - 6.5435 - 6.5621 - 6.5708 - 6.6165 - 6.6280 - 6.6389 - 6.6483 - 6.6593 - 6.6739 - 6.6889 - 6.6950 - 6.7038 - 6.7098 - 6.7222 - 6.7317 - 6.7405 - 6.7486 - 6.7581 - 6.7616 - 6.7713 - 6.7878 - 6.7980 - 6.7989 - 6.8117 - 6.8185 - 6.8380 - 6.8477 - 6.8625 - 6.8858 - 6.8890 - 6.8993 - 6.9127 - 6.9285 - 6.9584 - 7.0025 - 7.0256 - 7.0582 - 7.0623 - 7.0762 - 7.0822 - 7.0997 - 7.1154 - 7.1354 - 7.1473 - 7.1788 - 7.1892 - 7.2151 - 7.2476 - 7.2567 - 7.4314 - 7.4417 - 7.4514 - 7.4686 - 7.5493 - 7.5579 - 7.5819 - 7.5882 - 7.6051 - 7.6157 - 7.6285 - 7.6366 - 7.6477 - 7.6550 - 7.6593 - 7.6662 - 7.6751 - 7.6815 - 7.6988 - 7.7010 - 7.7067 - 7.7207 - 7.7323 - 7.7376 - 7.7505 - 7.7645 - 7.7882 - 7.7912 - 7.8467 - 7.8829 - 7.9131 - 7.9366 - 7.9719 - 7.9814 - 7.9853 - 8.0071 - 8.0667 - 8.0853 - 8.0990 - 8.1096 - 8.1238 - 8.1415 - 8.1559 - 8.1715 - 8.1862 - 8.1968 - 8.2012 - 8.2098 - 8.2254 - 8.2292 - 8.2404 - 8.2511 - 8.2671 - 8.2720 - 8.2838 - 8.2916 - 8.2971 - 8.3073 - 8.3126 - 8.3319 - 8.3379 - 8.3666 - 8.3768 - 8.3866 - 8.3935 - 8.4344 - 8.4506 - 8.4709 - 8.5590 - 8.5754 - 8.5833 - 8.5993 - 8.6184 - 8.6508 - 8.6915 - 8.7566 - 8.7786 - 8.7910 - 8.8471 - 9.0411 - 9.0538 - 9.0689 - 9.1041 - 9.1318 - 9.1456 - 9.1782 - 9.1943 - 9.2150 - 9.2238 - 9.2368 - 9.2514 - 9.2579 - 9.2728 - 9.2803 - 9.2879 - 9.3027 - 9.3076 - 9.3130 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_07 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_07 deleted file mode 100644 index 6daddc9f4..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_07 +++ /dev/null @@ -1,461 +0,0 @@ --3.1909 --3.0130 --2.9968 --2.8187 --2.6436 --2.6153 --2.4744 --2.4542 --2.4344 --2.4100 --2.2943 --2.2650 --2.2449 --2.2134 --2.0772 --2.0444 --1.7520 --1.7309 --1.7259 --1.7005 --1.6721 --1.6495 --1.5498 --1.5275 --1.5094 --1.4998 --1.4671 --1.4538 --1.3228 --1.1755 --1.1540 --1.1419 --1.1111 --1.0096 --0.9875 --0.9484 --0.9352 --0.9129 --0.9000 --0.8185 --0.8043 --0.7849 --0.7695 --0.7504 --0.7334 --0.7146 --0.6937 --0.5743 --0.5517 --0.2652 --0.2475 --0.2277 --0.2225 --0.2107 --0.1899 --0.1724 --0.0654 --0.0565 --0.0484 --0.0212 - 0.0068 - 0.0182 - 0.1308 - 0.1538 - 0.1751 - 0.2007 - 0.2940 - 0.3110 - 0.3322 - 0.3488 - 0.3632 - 0.3765 - 0.4563 - 0.4802 - 0.5023 - 0.5159 - 0.5345 - 0.5535 - 0.5697 - 0.5932 - 0.6679 - 0.6823 - 0.6933 - 0.7053 - 0.7274 - 0.7497 - 0.7588 - 0.7767 - 0.8621 - 0.9043 - 0.9114 - 0.9400 - 1.1939 - 1.2119 - 1.2230 - 1.2337 - 1.2498 - 1.2647 - 1.2837 - 1.2883 - 1.3007 - 1.3188 - 1.3827 - 1.4030 - 1.4358 - 1.4434 - 1.4482 - 1.4673 - 1.4883 - 1.5150 - 1.6154 - 1.6421 - 1.7603 - 1.7738 - 1.7832 - 1.8042 - 1.8213 - 1.8320 - 1.9277 - 1.9389 - 1.9548 - 1.9629 - 1.9835 - 1.9946 - 2.0081 - 2.0193 - 2.0287 - 2.0380 - 2.1042 - 2.1262 - 2.1360 - 2.1556 - 2.1666 - 2.1749 - 2.1915 - 2.1986 - 2.2059 - 2.2276 - 2.2363 - 2.2652 - 2.6252 - 2.6471 - 2.6668 - 2.6763 - 2.7006 - 2.7103 - 2.7227 - 2.7321 - 2.7389 - 2.8068 - 2.8257 - 2.8418 - 2.8571 - 2.8619 - 2.8738 - 2.8883 - 2.8946 - 2.9045 - 2.9137 - 2.9269 - 2.9370 - 2.9496 - 2.9598 - 3.0298 - 3.0510 - 3.0623 - 3.0853 - 3.1026 - 3.1222 - 3.1957 - 3.2184 - 3.2292 - 3.2447 - 3.2639 - 3.2850 - 3.3268 - 3.3478 - 3.3817 - 3.3899 - 3.4117 - 3.4256 - 3.4330 - 3.4408 - 3.4461 - 3.4737 - 3.5331 - 3.5477 - 3.5623 - 3.5815 - 3.5885 - 3.6022 - 3.6199 - 3.6306 - 3.6364 - 3.6638 - 3.7058 - 3.7102 - 3.7812 - 3.8047 - 3.9057 - 3.9130 - 3.9987 - 4.0133 - 4.0293 - 4.0538 - 4.0676 - 4.0956 - 4.2035 - 4.2270 - 4.2366 - 4.2451 - 4.2582 - 4.2744 - 4.2813 - 4.2931 - 4.3023 - 4.3141 - 4.3258 - 4.3331 - 4.3416 - 4.3636 - 4.3808 - 4.3909 - 4.5069 - 4.5669 - 4.5856 - 4.6057 - 4.6217 - 4.6356 - 4.6432 - 4.6635 - 4.6748 - 4.6943 - 4.6957 - 4.7087 - 4.7214 - 4.7377 - 4.7603 - 4.7695 - 4.7792 - 4.7995 - 4.8347 - 4.8642 - 4.8694 - 4.9247 - 4.9420 - 4.9515 - 4.9721 - 4.9839 - 4.9941 - 5.0096 - 5.0191 - 5.0248 - 5.0441 - 5.0559 - 5.0587 - 5.0778 - 5.0938 - 5.1100 - 5.1774 - 5.1968 - 5.3167 - 5.3338 - 5.3447 - 5.3733 - 5.3973 - 5.4072 - 5.4248 - 5.4767 - 5.5002 - 5.5536 - 5.5708 - 5.5770 - 5.5952 - 5.6203 - 5.6372 - 5.6611 - 5.6786 - 5.6861 - 5.7021 - 5.7241 - 5.7288 - 5.7538 - 5.7599 - 5.7678 - 5.7783 - 5.7892 - 5.7999 - 5.8496 - 5.8648 - 5.8975 - 5.9220 - 5.9389 - 5.9543 - 5.9801 - 5.9894 - 6.0168 - 6.0282 - 6.0599 - 6.0696 - 6.0858 - 6.0920 - 6.1053 - 6.1316 - 6.1441 - 6.1726 - 6.2297 - 6.2468 - 6.2584 - 6.2696 - 6.2920 - 6.3024 - 6.3162 - 6.3344 - 6.3509 - 6.3750 - 6.3857 - 6.3968 - 6.4019 - 6.4268 - 6.4335 - 6.4482 - 6.4548 - 6.4610 - 6.4775 - 6.4920 - 6.4979 - 6.5075 - 6.5351 - 6.5582 - 6.5673 - 6.5962 - 6.6172 - 6.6621 - 6.6694 - 6.6844 - 6.7635 - 6.8327 - 6.8716 - 6.9695 - 6.9849 - 6.9944 - 7.0109 - 7.0290 - 7.0525 - 7.0636 - 7.0886 - 7.1150 - 7.1283 - 7.1452 - 7.1484 - 7.1693 - 7.1825 - 7.2060 - 7.2286 - 7.2511 - 7.2760 - 7.3560 - 7.3780 - 7.3901 - 7.4198 - 7.4364 - 7.4459 - 7.4615 - 7.4800 - 7.4929 - 7.5064 - 7.5432 - 7.5540 - 7.5707 - 7.5750 - 7.5863 - 7.5967 - 7.6133 - 7.6295 - 7.6816 - 7.7015 - 7.7112 - 7.7245 - 7.7380 - 7.7580 - 7.7684 - 7.7801 - 7.7980 - 7.8134 - 7.8213 - 7.8301 - 7.8430 - 7.8476 - 7.8625 - 7.8652 - 7.8850 - 7.8912 - 7.9195 - 7.9429 - 7.9614 - 7.9738 - 7.9960 - 8.0356 - 8.0576 - 8.0704 - 8.0770 - 8.0878 - 8.1241 - 8.1480 - 8.2649 - 8.2856 - 8.2952 - 8.3237 - 8.3502 - 8.3842 - 8.3965 - 8.4000 - 8.4576 - 8.4762 - 8.5019 - 8.5179 - 8.5320 - 8.5537 - 8.5833 - 8.6097 - 8.6167 - 8.6334 - 8.6423 - 8.6635 - 8.6682 - 8.6747 - 8.6857 - 8.6938 - 8.7046 - 8.7122 - 8.7194 - 8.7377 - 8.7452 - 8.7598 - 8.7724 - 8.7832 - 8.8113 - 8.8302 - 8.8457 - 8.8642 - 8.8762 - 8.8840 - 8.9044 - 8.9208 - 8.9273 - 8.9536 - 8.9632 - 8.9736 - 8.9920 - 9.0085 - 9.0265 - 9.0412 - 9.0587 - 9.0658 - 9.0786 - 9.0955 - 9.1136 - 9.1328 - 9.1591 - 9.1698 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_08 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_08 deleted file mode 100644 index 40f5e7d8c..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_08 +++ /dev/null @@ -1,461 +0,0 @@ --3.1908 --3.0204 --2.9877 --2.8212 --2.6426 --2.6162 --2.4827 --2.4481 --2.4288 --2.4109 --2.2885 --2.2690 --2.2438 --2.2130 --2.0807 --2.0544 --1.7508 --1.7371 --1.7036 --1.6848 --1.6681 --1.6559 --1.5505 --1.5281 --1.5117 --1.5043 --1.4943 --1.4550 --1.3203 --1.1639 --1.1564 --1.1342 --1.1074 --1.0020 --0.9765 --0.9591 --0.9484 --0.9219 --0.9130 --0.8088 --0.7926 --0.7801 --0.7590 --0.7520 --0.7352 --0.7140 --0.6994 --0.5813 --0.5614 --0.2685 --0.2517 --0.2353 --0.2228 --0.1850 --0.1784 --0.1684 --0.0707 --0.0657 --0.0405 --0.0133 - 0.0042 - 0.0196 - 0.1109 - 0.1503 - 0.1689 - 0.1816 - 0.2961 - 0.3128 - 0.3277 - 0.3533 - 0.3620 - 0.3926 - 0.4709 - 0.4845 - 0.5090 - 0.5287 - 0.5388 - 0.5556 - 0.5683 - 0.5773 - 0.6575 - 0.6659 - 0.6954 - 0.7132 - 0.7276 - 0.7481 - 0.7591 - 0.7836 - 0.8707 - 0.8916 - 0.9173 - 0.9443 - 1.1825 - 1.2000 - 1.2171 - 1.2252 - 1.2545 - 1.2618 - 1.2733 - 1.2901 - 1.2977 - 1.3293 - 1.4030 - 1.4089 - 1.4224 - 1.4408 - 1.4693 - 1.4777 - 1.4864 - 1.4999 - 1.6026 - 1.6399 - 1.7664 - 1.7693 - 1.7953 - 1.8004 - 1.8194 - 1.8426 - 1.9288 - 1.9400 - 1.9469 - 1.9726 - 1.9850 - 1.9940 - 2.0055 - 2.0252 - 2.0366 - 2.0428 - 2.1152 - 2.1257 - 2.1431 - 2.1524 - 2.1613 - 2.1727 - 2.1809 - 2.1949 - 2.2009 - 2.2230 - 2.2414 - 2.2484 - 2.6396 - 2.6556 - 2.6715 - 2.6819 - 2.6963 - 2.7066 - 2.7148 - 2.7369 - 2.7540 - 2.7979 - 2.8274 - 2.8418 - 2.8454 - 2.8576 - 2.8683 - 2.8716 - 2.8895 - 2.8945 - 2.9085 - 2.9301 - 2.9339 - 2.9496 - 2.9544 - 3.0277 - 3.0475 - 3.0695 - 3.0906 - 3.1055 - 3.1190 - 3.1969 - 3.2239 - 3.2390 - 3.2643 - 3.2749 - 3.2855 - 3.3414 - 3.3472 - 3.3626 - 3.3890 - 3.4066 - 3.4195 - 3.4304 - 3.4407 - 3.4502 - 3.4739 - 3.5353 - 3.5420 - 3.5667 - 3.5774 - 3.5943 - 3.6071 - 3.6235 - 3.6296 - 3.6396 - 3.6659 - 3.7033 - 3.7139 - 3.7693 - 3.8017 - 3.9047 - 3.9162 - 3.9939 - 4.0143 - 4.0423 - 4.0582 - 4.0781 - 4.0876 - 4.1958 - 4.2246 - 4.2296 - 4.2414 - 4.2586 - 4.2699 - 4.2855 - 4.2957 - 4.3004 - 4.3153 - 4.3226 - 4.3353 - 4.3415 - 4.3607 - 4.3779 - 4.3836 - 4.4990 - 4.5715 - 4.5858 - 4.5965 - 4.6265 - 4.6385 - 4.6569 - 4.6630 - 4.6766 - 4.6901 - 4.7030 - 4.7204 - 4.7246 - 4.7382 - 4.7528 - 4.7654 - 4.7854 - 4.8075 - 4.8364 - 4.8653 - 4.8799 - 4.9128 - 4.9258 - 4.9526 - 4.9650 - 4.9851 - 4.9904 - 5.0032 - 5.0188 - 5.0257 - 5.0494 - 5.0545 - 5.0710 - 5.0834 - 5.0973 - 5.1078 - 5.1662 - 5.2080 - 5.3003 - 5.3215 - 5.3460 - 5.3748 - 5.3961 - 5.4052 - 5.4368 - 5.4739 - 5.4875 - 5.5407 - 5.5710 - 5.5806 - 5.5935 - 5.6264 - 5.6404 - 5.6510 - 5.6723 - 5.6943 - 5.7093 - 5.7221 - 5.7335 - 5.7559 - 5.7608 - 5.7725 - 5.7833 - 5.7970 - 5.8087 - 5.8503 - 5.8720 - 5.8814 - 5.9262 - 5.9393 - 5.9540 - 5.9915 - 6.0011 - 6.0208 - 6.0274 - 6.0458 - 6.0510 - 6.0810 - 6.0921 - 6.1128 - 6.1266 - 6.1366 - 6.1683 - 6.2230 - 6.2588 - 6.2597 - 6.2770 - 6.2888 - 6.3123 - 6.3168 - 6.3434 - 6.3545 - 6.3639 - 6.3906 - 6.3982 - 6.4076 - 6.4252 - 6.4390 - 6.4491 - 6.4629 - 6.4687 - 6.4759 - 6.4877 - 6.4963 - 6.5135 - 6.5231 - 6.5556 - 6.5740 - 6.5829 - 6.6003 - 6.6555 - 6.6723 - 6.6959 - 6.7628 - 6.8363 - 6.8652 - 6.9605 - 6.9817 - 6.9996 - 7.0121 - 7.0494 - 7.0560 - 7.0767 - 7.0937 - 7.1049 - 7.1224 - 7.1366 - 7.1398 - 7.1564 - 7.1713 - 7.2008 - 7.2217 - 7.2447 - 7.2877 - 7.3513 - 7.3703 - 7.4074 - 7.4287 - 7.4384 - 7.4572 - 7.4639 - 7.4802 - 7.4908 - 7.5142 - 7.5220 - 7.5372 - 7.5689 - 7.5749 - 7.5868 - 7.6070 - 7.6244 - 7.6339 - 7.6818 - 7.6956 - 7.7065 - 7.7276 - 7.7497 - 7.7576 - 7.7655 - 7.7739 - 7.7920 - 7.8033 - 7.8221 - 7.8348 - 7.8411 - 7.8563 - 7.8626 - 7.8742 - 7.8917 - 7.8946 - 7.9195 - 7.9353 - 7.9590 - 7.9822 - 8.0037 - 8.0245 - 8.0419 - 8.0648 - 8.0804 - 8.0973 - 8.1209 - 8.1523 - 8.2565 - 8.2914 - 8.3089 - 8.3241 - 8.3658 - 8.3834 - 8.3945 - 8.4138 - 8.4404 - 8.4666 - 8.4990 - 8.5195 - 8.5390 - 8.5504 - 8.5780 - 8.6007 - 8.6112 - 8.6270 - 8.6415 - 8.6513 - 8.6581 - 8.6749 - 8.6840 - 8.6943 - 8.7028 - 8.7154 - 8.7268 - 8.7441 - 8.7500 - 8.7643 - 8.7859 - 8.7878 - 8.8264 - 8.8403 - 8.8497 - 8.8578 - 8.8674 - 8.8861 - 8.8961 - 8.9139 - 8.9314 - 8.9553 - 8.9737 - 8.9866 - 8.9934 - 9.0142 - 9.0278 - 9.0396 - 9.0649 - 9.0757 - 9.0805 - 9.0893 - 9.1049 - 9.1315 - 9.1535 - 9.1751 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_09 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_09 deleted file mode 100644 index 8ccd45088..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_09 +++ /dev/null @@ -1,461 +0,0 @@ --3.1930 --3.0089 --2.9966 --2.8129 --2.6489 --2.6217 --2.4750 --2.4547 --2.4364 --2.4150 --2.2880 --2.2731 --2.2352 --2.2103 --2.0710 --2.0459 --1.7616 --1.7457 --1.7079 --1.6919 --1.6789 --1.6404 --1.5602 --1.5249 --1.5148 --1.4914 --1.4695 --1.4435 --1.3181 --1.1801 --1.1554 --1.1427 --1.1174 --1.0066 --0.9843 --0.9582 --0.9486 --0.9295 --0.8859 --0.8288 --0.8020 --0.7911 --0.7605 --0.7424 --0.7279 --0.7064 --0.6825 --0.5957 --0.5491 --0.2926 --0.2482 --0.2253 --0.2176 --0.2029 --0.1902 --0.1639 --0.0765 --0.0484 --0.0281 --0.0199 - 0.0092 - 0.0238 - 0.1091 - 0.1417 - 0.1758 - 0.2051 - 0.2982 - 0.3183 - 0.3438 - 0.3534 - 0.3608 - 0.3785 - 0.4685 - 0.4776 - 0.4997 - 0.5208 - 0.5263 - 0.5553 - 0.5730 - 0.5960 - 0.6751 - 0.6850 - 0.6950 - 0.7127 - 0.7296 - 0.7462 - 0.7594 - 0.7813 - 0.8601 - 0.8833 - 0.9079 - 0.9512 - 1.1704 - 1.1928 - 1.2219 - 1.2357 - 1.2472 - 1.2638 - 1.2753 - 1.2874 - 1.2976 - 1.3111 - 1.3787 - 1.4054 - 1.4232 - 1.4377 - 1.4502 - 1.4780 - 1.4927 - 1.5244 - 1.6163 - 1.6364 - 1.7684 - 1.7807 - 1.7926 - 1.8012 - 1.8123 - 1.8340 - 1.8981 - 1.9200 - 1.9604 - 1.9657 - 1.9788 - 1.9905 - 2.0065 - 2.0364 - 2.0492 - 2.0569 - 2.0981 - 2.1196 - 2.1388 - 2.1496 - 2.1625 - 2.1831 - 2.1896 - 2.2031 - 2.2212 - 2.2368 - 2.2460 - 2.2651 - 2.6304 - 2.6556 - 2.6647 - 2.6771 - 2.6851 - 2.6988 - 2.7272 - 2.7294 - 2.7453 - 2.8034 - 2.8156 - 2.8363 - 2.8432 - 2.8663 - 2.8791 - 2.8860 - 2.8912 - 2.8979 - 2.9201 - 2.9243 - 2.9471 - 2.9598 - 2.9735 - 3.0281 - 3.0517 - 3.0675 - 3.0913 - 3.1073 - 3.1238 - 3.2106 - 3.2225 - 3.2423 - 3.2470 - 3.2590 - 3.2732 - 3.3189 - 3.3360 - 3.3779 - 3.3916 - 3.4081 - 3.4208 - 3.4338 - 3.4420 - 3.4528 - 3.4651 - 3.5263 - 3.5461 - 3.5630 - 3.5840 - 3.5935 - 3.6022 - 3.6164 - 3.6309 - 3.6469 - 3.6582 - 3.6929 - 3.7137 - 3.7765 - 3.7996 - 3.9079 - 3.9224 - 4.0006 - 4.0232 - 4.0316 - 4.0535 - 4.0723 - 4.0992 - 4.1990 - 4.2152 - 4.2317 - 4.2447 - 4.2497 - 4.2735 - 4.2858 - 4.2962 - 4.3037 - 4.3118 - 4.3277 - 4.3330 - 4.3445 - 4.3570 - 4.3704 - 4.3916 - 4.4952 - 4.5767 - 4.5855 - 4.5954 - 4.6094 - 4.6313 - 4.6416 - 4.6590 - 4.6624 - 4.6846 - 4.7076 - 4.7183 - 4.7256 - 4.7424 - 4.7632 - 4.7733 - 4.7881 - 4.8064 - 4.8112 - 4.8444 - 4.9011 - 4.9185 - 4.9327 - 4.9617 - 4.9676 - 4.9778 - 4.9956 - 5.0121 - 5.0253 - 5.0344 - 5.0441 - 5.0575 - 5.0666 - 5.0769 - 5.1006 - 5.1053 - 5.1814 - 5.2008 - 5.3167 - 5.3284 - 5.3564 - 5.3619 - 5.3911 - 5.4111 - 5.4204 - 5.4758 - 5.5088 - 5.5532 - 5.5603 - 5.5794 - 5.5856 - 5.6259 - 5.6410 - 5.6523 - 5.6624 - 5.6865 - 5.6988 - 5.7154 - 5.7414 - 5.7529 - 5.7646 - 5.7725 - 5.7813 - 5.7991 - 5.8162 - 5.8576 - 5.8605 - 5.8868 - 5.9261 - 5.9464 - 5.9590 - 5.9897 - 6.0062 - 6.0208 - 6.0314 - 6.0414 - 6.0587 - 6.0826 - 6.0992 - 6.1051 - 6.1222 - 6.1396 - 6.1573 - 6.2331 - 6.2590 - 6.2662 - 6.2858 - 6.2884 - 6.2960 - 6.3149 - 6.3339 - 6.3503 - 6.3708 - 6.3796 - 6.3977 - 6.4081 - 6.4200 - 6.4367 - 6.4480 - 6.4553 - 6.4746 - 6.4835 - 6.4930 - 6.5041 - 6.5119 - 6.5393 - 6.5652 - 6.5770 - 6.5880 - 6.5997 - 6.6397 - 6.6680 - 6.6995 - 6.7481 - 6.8318 - 6.8580 - 6.9793 - 6.9855 - 6.9959 - 7.0060 - 7.0310 - 7.0518 - 7.0850 - 7.0937 - 7.1094 - 7.1187 - 7.1401 - 7.1490 - 7.1627 - 7.1768 - 7.2131 - 7.2322 - 7.2560 - 7.2808 - 7.3683 - 7.3800 - 7.4030 - 7.4157 - 7.4287 - 7.4461 - 7.4613 - 7.4666 - 7.4909 - 7.5010 - 7.5273 - 7.5434 - 7.5550 - 7.5634 - 7.5810 - 7.6070 - 7.6284 - 7.6354 - 7.6772 - 7.6934 - 7.7000 - 7.7139 - 7.7361 - 7.7476 - 7.7688 - 7.7855 - 7.7928 - 7.8042 - 7.8139 - 7.8239 - 7.8393 - 7.8552 - 7.8679 - 7.8770 - 7.8916 - 7.9121 - 7.9335 - 7.9479 - 7.9602 - 7.9780 - 7.9936 - 8.0392 - 8.0516 - 8.0614 - 8.0857 - 8.1049 - 8.1221 - 8.1529 - 8.2663 - 8.2863 - 8.3027 - 8.3148 - 8.3657 - 8.3778 - 8.3879 - 8.4034 - 8.4567 - 8.4785 - 8.5136 - 8.5353 - 8.5483 - 8.5600 - 8.5833 - 8.5946 - 8.6073 - 8.6261 - 8.6392 - 8.6472 - 8.6646 - 8.6722 - 8.6773 - 8.6922 - 8.7052 - 8.7142 - 8.7190 - 8.7493 - 8.7557 - 8.7659 - 8.7731 - 8.8018 - 8.8107 - 8.8313 - 8.8392 - 8.8514 - 8.8691 - 8.8815 - 8.8946 - 8.9162 - 8.9314 - 8.9407 - 8.9527 - 8.9689 - 8.9937 - 9.0147 - 9.0268 - 9.0460 - 9.0534 - 9.0728 - 9.0845 - 9.1005 - 9.1106 - 9.1516 - 9.1686 - 9.1806 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_10 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_10 deleted file mode 100644 index 35d280e18..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_10 +++ /dev/null @@ -1,461 +0,0 @@ --3.1322 --2.9556 --2.9417 --2.9307 --2.7602 --2.7542 --2.7359 --2.5584 --2.2213 --2.2053 --2.1867 --2.0587 --2.0433 --2.0276 --1.9878 --1.9844 --1.9557 --1.8423 --1.8049 --1.7794 --1.6699 --1.6402 --1.6208 --1.5084 --1.4821 --1.4525 --1.4247 --1.4207 --1.3956 --1.2941 --1.2820 --1.2624 --1.2345 --1.2201 --1.2139 --1.0939 --1.0542 --1.0410 --0.7779 --0.7422 --0.7173 --0.6924 --0.6806 --0.6624 --0.5741 --0.5363 --0.5171 --0.4985 --0.4780 --0.4681 --0.3308 --0.2070 --0.1849 --0.1639 --0.1502 --0.1330 --0.1116 --0.0416 --0.0103 - 0.0105 - 0.0367 - 0.0433 - 0.0505 - 0.0683 - 0.0828 - 0.1144 - 0.1873 - 0.1984 - 0.2111 - 0.2366 - 0.2701 - 0.2955 - 0.6655 - 0.6796 - 0.7111 - 0.7250 - 0.7366 - 0.7539 - 0.7586 - 0.7786 - 0.7851 - 0.8056 - 0.8227 - 0.8413 - 0.8796 - 0.9017 - 0.9134 - 0.9306 - 0.9384 - 0.9502 - 0.9676 - 0.9867 - 1.0011 - 1.0075 - 1.0188 - 1.0291 - 1.1212 - 1.1478 - 1.1755 - 1.2675 - 1.2812 - 1.3039 - 1.3222 - 1.3387 - 1.3623 - 1.3790 - 1.4630 - 1.4807 - 1.5038 - 1.5250 - 1.5364 - 1.5510 - 1.6260 - 1.6496 - 1.6662 - 1.6852 - 1.6963 - 1.7068 - 1.7134 - 1.7211 - 1.7490 - 1.8255 - 1.8508 - 1.8626 - 1.8849 - 1.9135 - 1.9449 - 2.1498 - 2.1642 - 2.1732 - 2.1899 - 2.2153 - 2.2234 - 2.2302 - 2.2437 - 2.2663 - 2.2777 - 2.2898 - 2.3031 - 2.3792 - 2.3891 - 2.4156 - 2.4388 - 2.4544 - 2.4735 - 2.5720 - 2.5914 - 2.6147 - 2.7131 - 2.7391 - 2.7597 - 2.7830 - 2.7879 - 2.8054 - 2.8856 - 2.9087 - 2.9248 - 2.9380 - 2.9834 - 2.9992 - 3.0630 - 3.0722 - 3.0852 - 3.0907 - 3.1054 - 3.1205 - 3.1361 - 3.1465 - 3.1626 - 3.1696 - 3.1794 - 3.1956 - 3.2769 - 3.3038 - 3.3245 - 3.5431 - 3.5565 - 3.5689 - 3.6150 - 3.6330 - 3.6448 - 3.6636 - 3.6764 - 3.6895 - 3.7245 - 3.7459 - 3.7685 - 3.7795 - 3.7912 - 3.7958 - 3.8207 - 3.8310 - 3.8399 - 3.8496 - 3.8603 - 3.8708 - 3.8757 - 3.8916 - 3.9121 - 3.9730 - 3.9783 - 4.0154 - 4.0271 - 4.0450 - 4.0728 - 4.1167 - 4.1336 - 4.1439 - 4.1822 - 4.2082 - 4.2332 - 4.2508 - 4.2698 - 4.2945 - 4.3061 - 4.3238 - 4.3294 - 4.3410 - 4.3521 - 4.3704 - 4.3761 - 4.3920 - 4.4044 - 4.4537 - 4.4716 - 4.4771 - 4.4947 - 4.5080 - 4.5148 - 4.5224 - 4.5317 - 4.5404 - 4.5582 - 4.5778 - 4.5803 - 4.5895 - 4.5952 - 4.6031 - 4.6159 - 4.6229 - 4.6359 - 4.6610 - 4.6715 - 4.6831 - 4.8337 - 4.8749 - 4.8936 - 4.9738 - 4.9784 - 4.9945 - 4.9988 - 5.0154 - 5.0230 - 5.0762 - 5.0948 - 5.1121 - 5.1239 - 5.1394 - 5.1421 - 5.1638 - 5.1848 - 5.1952 - 5.2080 - 5.2233 - 5.2305 - 5.2560 - 5.2705 - 5.2832 - 5.2977 - 5.3192 - 5.3218 - 5.4400 - 5.4528 - 5.4780 - 5.4896 - 5.5152 - 5.5298 - 5.5510 - 5.5603 - 5.5831 - 5.6006 - 5.6104 - 5.6373 - 5.6582 - 5.6603 - 5.6827 - 5.6956 - 5.7738 - 5.7864 - 5.7949 - 5.8301 - 5.8435 - 5.8665 - 5.8894 - 5.8949 - 5.9050 - 5.9193 - 5.9318 - 5.9439 - 5.9566 - 5.9766 - 5.9921 - 6.0062 - 6.0126 - 6.0205 - 6.0299 - 6.0473 - 6.0557 - 6.3854 - 6.4039 - 6.4150 - 6.4319 - 6.4506 - 6.4589 - 6.5115 - 6.5186 - 6.5322 - 6.6092 - 6.6157 - 6.6330 - 6.6411 - 6.6497 - 6.6581 - 6.6739 - 6.6799 - 6.6949 - 6.7080 - 6.7171 - 6.7329 - 6.8113 - 6.8188 - 6.8351 - 6.8464 - 6.8497 - 6.8768 - 6.9036 - 6.9221 - 6.9405 - 6.9453 - 6.9565 - 6.9685 - 6.9831 - 6.9916 - 7.0109 - 7.0870 - 7.0957 - 7.1087 - 7.1426 - 7.1516 - 7.1611 - 7.1887 - 7.1941 - 7.2068 - 7.2208 - 7.2301 - 7.2416 - 7.2755 - 7.2985 - 7.3069 - 7.3804 - 7.3928 - 7.4010 - 7.4269 - 7.4373 - 7.4457 - 7.4579 - 7.4743 - 7.4841 - 7.5204 - 7.5318 - 7.5508 - 7.5668 - 7.5801 - 7.5871 - 7.6088 - 7.6243 - 7.6508 - 7.6953 - 7.7107 - 7.7521 - 7.7639 - 7.7803 - 7.7954 - 7.8219 - 7.8277 - 7.8377 - 7.8447 - 7.8516 - 7.8780 - 7.9243 - 7.9703 - 7.9910 - 8.0153 - 8.0284 - 8.0488 - 8.0607 - 8.0751 - 8.0795 - 8.0860 - 8.1041 - 8.1208 - 8.2031 - 8.2170 - 8.2317 - 8.2431 - 8.2576 - 8.2621 - 8.2931 - 8.3150 - 8.3311 - 8.3391 - 8.3487 - 8.3596 - 8.3749 - 8.3797 - 8.3869 - 8.3955 - 8.4057 - 8.4234 - 8.4408 - 8.5715 - 8.5892 - 8.6048 - 8.6218 - 8.6333 - 8.6446 - 8.6555 - 8.6643 - 8.6838 - 8.6913 - 8.6942 - 8.7075 - 8.7196 - 8.7249 - 8.7383 - 8.7697 - 8.7766 - 8.7943 - 8.8006 - 8.8132 - 8.8203 - 8.8279 - 8.8543 - 8.8643 - 8.8818 - 8.8861 - 8.9011 - 8.9117 - 8.9152 - 8.9311 - 8.9572 - 8.9628 - 8.9672 - 8.9821 - 8.9913 - 9.0146 - 9.0783 - 9.0907 - 9.1171 - 9.1759 - 9.1936 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_11 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_11 deleted file mode 100644 index 2486e75c0..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_11 +++ /dev/null @@ -1,461 +0,0 @@ --3.1312 --2.9733 --2.9412 --2.9083 --2.7832 --2.7474 --2.7228 --2.5631 --2.2393 --2.1977 --2.1663 --2.0647 --2.0407 --2.0253 --1.9904 --1.9752 --1.9658 --1.8450 --1.8154 --1.7861 --1.6650 --1.6501 --1.5973 --1.4897 --1.4783 --1.4563 --1.4357 --1.4244 --1.3990 --1.2914 --1.2838 --1.2591 --1.2463 --1.2253 --1.1935 --1.0966 --1.0744 --1.0365 --0.7668 --0.7458 --0.7123 --0.6947 --0.6758 --0.6608 --0.5725 --0.5550 --0.5388 --0.4903 --0.4669 --0.4538 --0.3380 --0.2047 --0.1887 --0.1707 --0.1614 --0.1256 --0.0970 --0.0290 --0.0141 - 0.0125 - 0.0259 - 0.0482 - 0.0615 - 0.0701 - 0.0877 - 0.1009 - 0.1863 - 0.2089 - 0.2150 - 0.2358 - 0.2597 - 0.2876 - 0.6656 - 0.6926 - 0.7025 - 0.7265 - 0.7380 - 0.7472 - 0.7511 - 0.7677 - 0.7830 - 0.8051 - 0.8185 - 0.8410 - 0.8844 - 0.8952 - 0.9036 - 0.9269 - 0.9407 - 0.9551 - 0.9769 - 0.9854 - 0.9893 - 1.0098 - 1.0278 - 1.0495 - 1.1275 - 1.1492 - 1.1811 - 1.2790 - 1.2859 - 1.3000 - 1.3294 - 1.3415 - 1.3565 - 1.3684 - 1.4466 - 1.4774 - 1.5002 - 1.5219 - 1.5360 - 1.5548 - 1.6311 - 1.6497 - 1.6629 - 1.6719 - 1.6885 - 1.7003 - 1.7270 - 1.7368 - 1.7580 - 1.8314 - 1.8405 - 1.8689 - 1.8862 - 1.9046 - 1.9301 - 2.1525 - 2.1589 - 2.1794 - 2.1915 - 2.2125 - 2.2235 - 2.2445 - 2.2574 - 2.2631 - 2.2735 - 2.2867 - 2.3131 - 2.3795 - 2.4011 - 2.4113 - 2.4341 - 2.4540 - 2.4666 - 2.5696 - 2.5898 - 2.6057 - 2.7278 - 2.7387 - 2.7541 - 2.7721 - 2.7997 - 2.8038 - 2.8938 - 2.9062 - 2.9177 - 2.9388 - 2.9741 - 2.9954 - 3.0469 - 3.0645 - 3.0833 - 3.1022 - 3.1126 - 3.1267 - 3.1360 - 3.1448 - 3.1519 - 3.1710 - 3.1946 - 3.2080 - 3.2837 - 3.2977 - 3.3208 - 3.5240 - 3.5551 - 3.5816 - 3.6070 - 3.6244 - 3.6410 - 3.6587 - 3.6856 - 3.6946 - 3.7156 - 3.7543 - 3.7688 - 3.7757 - 3.7907 - 3.8008 - 3.8051 - 3.8232 - 3.8388 - 3.8510 - 3.8653 - 3.8694 - 3.8842 - 3.8989 - 3.9142 - 3.9663 - 3.9851 - 4.0119 - 4.0222 - 4.0477 - 4.0707 - 4.1110 - 4.1393 - 4.1492 - 4.2002 - 4.2147 - 4.2332 - 4.2525 - 4.2755 - 4.2972 - 4.3054 - 4.3161 - 4.3292 - 4.3392 - 4.3556 - 4.3734 - 4.3820 - 4.3989 - 4.4087 - 4.4440 - 4.4629 - 4.4803 - 4.4987 - 4.5080 - 4.5216 - 4.5332 - 4.5413 - 4.5472 - 4.5610 - 4.5636 - 4.5713 - 4.5868 - 4.5996 - 4.6073 - 4.6143 - 4.6260 - 4.6314 - 4.6476 - 4.6587 - 4.6775 - 4.8315 - 4.8659 - 4.8992 - 4.9738 - 4.9824 - 5.0047 - 5.0105 - 5.0220 - 5.0352 - 5.0759 - 5.0882 - 5.0993 - 5.1039 - 5.1285 - 5.1351 - 5.1579 - 5.1682 - 5.1909 - 5.2021 - 5.2202 - 5.2445 - 5.2598 - 5.2746 - 5.2881 - 5.3060 - 5.3169 - 5.3359 - 5.4370 - 5.4496 - 5.4726 - 5.4979 - 5.5163 - 5.5321 - 5.5568 - 5.5688 - 5.5797 - 5.5958 - 5.6188 - 5.6257 - 5.6450 - 5.6735 - 5.6827 - 5.7099 - 5.7655 - 5.7878 - 5.7925 - 5.8207 - 5.8479 - 5.8648 - 5.8894 - 5.8940 - 5.9112 - 5.9151 - 5.9235 - 5.9405 - 5.9538 - 5.9690 - 5.9899 - 6.0027 - 6.0149 - 6.0241 - 6.0307 - 6.0507 - 6.0718 - 6.3808 - 6.4019 - 6.4177 - 6.4325 - 6.4587 - 6.4627 - 6.5061 - 6.5173 - 6.5284 - 6.5923 - 6.6072 - 6.6221 - 6.6330 - 6.6443 - 6.6604 - 6.6708 - 6.6851 - 6.7019 - 6.7167 - 6.7299 - 6.7482 - 6.7981 - 6.8117 - 6.8381 - 6.8487 - 6.8554 - 6.8700 - 6.8932 - 6.9174 - 6.9334 - 6.9539 - 6.9620 - 6.9787 - 6.9829 - 7.0080 - 7.0182 - 7.0950 - 7.0987 - 7.1249 - 7.1394 - 7.1577 - 7.1731 - 7.1815 - 7.1913 - 7.2048 - 7.2140 - 7.2199 - 7.2511 - 7.2752 - 7.2869 - 7.3276 - 7.3760 - 7.3905 - 7.4034 - 7.4193 - 7.4353 - 7.4445 - 7.4558 - 7.4636 - 7.4713 - 7.5216 - 7.5348 - 7.5518 - 7.5712 - 7.5857 - 7.5961 - 7.6175 - 7.6251 - 7.6461 - 7.6934 - 7.7141 - 7.7349 - 7.7509 - 7.7857 - 7.8036 - 7.8071 - 7.8248 - 7.8375 - 7.8498 - 7.8581 - 7.8675 - 7.9347 - 7.9603 - 7.9825 - 8.0199 - 8.0225 - 8.0457 - 8.0605 - 8.0775 - 8.0858 - 8.1042 - 8.1142 - 8.1332 - 8.1833 - 8.2197 - 8.2252 - 8.2398 - 8.2647 - 8.2785 - 8.2874 - 8.3047 - 8.3254 - 8.3327 - 8.3426 - 8.3552 - 8.3695 - 8.3767 - 8.3887 - 8.4058 - 8.4142 - 8.4296 - 8.4367 - 8.5486 - 8.5901 - 8.6070 - 8.6210 - 8.6379 - 8.6510 - 8.6570 - 8.6658 - 8.6747 - 8.6929 - 8.7006 - 8.7128 - 8.7209 - 8.7280 - 8.7319 - 8.7700 - 8.7810 - 8.7902 - 8.8021 - 8.8088 - 8.8192 - 8.8305 - 8.8494 - 8.8569 - 8.8721 - 8.8826 - 8.8978 - 8.9125 - 8.9242 - 8.9358 - 8.9494 - 8.9619 - 8.9711 - 8.9922 - 9.0003 - 9.0188 - 9.0623 - 9.0871 - 9.1211 - 9.1827 - 9.2009 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_12 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_12 deleted file mode 100644 index e1949bf6b..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_12 +++ /dev/null @@ -1,461 +0,0 @@ --3.1925 --3.0210 --2.9840 --2.8133 --2.6494 --2.6207 --2.4791 --2.4607 --2.4435 --2.3970 --2.2856 --2.2605 --2.2436 --2.2191 --2.0818 --2.0373 --1.7682 --1.7334 --1.7162 --1.6823 --1.6771 --1.6398 --1.5639 --1.5258 --1.5157 --1.4941 --1.4619 --1.4465 --1.3192 --1.1838 --1.1546 --1.1510 --1.1044 --1.0224 --0.9807 --0.9673 --0.9518 --0.9085 --0.8730 --0.8445 --0.8093 --0.7827 --0.7692 --0.7435 --0.7288 --0.7010 --0.6781 --0.5935 --0.5496 --0.2855 --0.2604 --0.2378 --0.2119 --0.1973 --0.1947 --0.1476 --0.0831 --0.0441 --0.0351 --0.0044 - 0.0147 - 0.0251 - 0.0974 - 0.1502 - 0.1666 - 0.2278 - 0.2863 - 0.3093 - 0.3276 - 0.3517 - 0.3612 - 0.3890 - 0.4358 - 0.4753 - 0.4960 - 0.5291 - 0.5379 - 0.5684 - 0.5788 - 0.6051 - 0.6427 - 0.6860 - 0.6983 - 0.7072 - 0.7364 - 0.7494 - 0.7584 - 0.7851 - 0.8648 - 0.8810 - 0.9239 - 0.9372 - 1.1736 - 1.1905 - 1.2213 - 1.2377 - 1.2413 - 1.2562 - 1.2729 - 1.2986 - 1.3100 - 1.3316 - 1.3738 - 1.4057 - 1.4207 - 1.4280 - 1.4513 - 1.4779 - 1.5082 - 1.5224 - 1.6135 - 1.6358 - 1.7438 - 1.7554 - 1.7833 - 1.8167 - 1.8409 - 1.8485 - 1.9014 - 1.9341 - 1.9504 - 1.9550 - 1.9738 - 1.9883 - 2.0100 - 2.0156 - 2.0492 - 2.0666 - 2.0876 - 2.1124 - 2.1280 - 2.1358 - 2.1592 - 2.1788 - 2.1901 - 2.2000 - 2.2265 - 2.2439 - 2.2640 - 2.2903 - 2.6232 - 2.6460 - 2.6585 - 2.6752 - 2.6850 - 2.7048 - 2.7180 - 2.7392 - 2.7653 - 2.7882 - 2.8128 - 2.8383 - 2.8415 - 2.8640 - 2.8744 - 2.8851 - 2.8981 - 2.9136 - 2.9231 - 2.9382 - 2.9471 - 2.9586 - 2.9837 - 3.0207 - 3.0321 - 3.0634 - 3.0784 - 3.1089 - 3.1444 - 3.2032 - 3.2201 - 3.2346 - 3.2503 - 3.2643 - 3.2858 - 3.3163 - 3.3400 - 3.3675 - 3.3880 - 3.4003 - 3.4121 - 3.4282 - 3.4395 - 3.4693 - 3.4813 - 3.5373 - 3.5467 - 3.5665 - 3.5798 - 3.5868 - 3.6110 - 3.6254 - 3.6347 - 3.6470 - 3.6672 - 3.6827 - 3.7015 - 3.7630 - 3.8039 - 3.9070 - 3.9196 - 3.9892 - 4.0138 - 4.0219 - 4.0537 - 4.0720 - 4.0992 - 4.1982 - 4.2150 - 4.2341 - 4.2497 - 4.2621 - 4.2734 - 4.2786 - 4.2893 - 4.3031 - 4.3074 - 4.3283 - 4.3367 - 4.3514 - 4.3709 - 4.3780 - 4.4019 - 4.4916 - 4.5646 - 4.5702 - 4.5887 - 4.6099 - 4.6369 - 4.6480 - 4.6594 - 4.6714 - 4.6796 - 4.6996 - 4.7187 - 4.7276 - 4.7469 - 4.7536 - 4.7661 - 4.7948 - 4.8085 - 4.8342 - 4.8647 - 4.8989 - 4.9263 - 4.9377 - 4.9486 - 4.9635 - 4.9819 - 4.9967 - 5.0051 - 5.0125 - 5.0329 - 5.0493 - 5.0582 - 5.0643 - 5.0772 - 5.0856 - 5.0988 - 5.1823 - 5.2079 - 5.3060 - 5.3276 - 5.3427 - 5.3657 - 5.3905 - 5.4117 - 5.4294 - 5.4611 - 5.5133 - 5.5468 - 5.5661 - 5.5847 - 5.6006 - 5.6324 - 5.6384 - 5.6561 - 5.6710 - 5.6930 - 5.6967 - 5.7175 - 5.7335 - 5.7456 - 5.7588 - 5.7717 - 5.7791 - 5.7985 - 5.8297 - 5.8591 - 5.8771 - 5.8834 - 5.9180 - 5.9376 - 5.9843 - 5.9962 - 6.0020 - 6.0155 - 6.0228 - 6.0490 - 6.0679 - 6.0816 - 6.0934 - 6.1005 - 6.1211 - 6.1406 - 6.1527 - 6.2323 - 6.2453 - 6.2607 - 6.2752 - 6.2939 - 6.3073 - 6.3154 - 6.3364 - 6.3534 - 6.3650 - 6.3769 - 6.3918 - 6.4041 - 6.4102 - 6.4245 - 6.4396 - 6.4658 - 6.4751 - 6.4821 - 6.4926 - 6.5109 - 6.5122 - 6.5273 - 6.5604 - 6.5822 - 6.6031 - 6.6122 - 6.6487 - 6.6740 - 6.6892 - 6.7492 - 6.8389 - 6.8512 - 6.9698 - 6.9821 - 7.0029 - 7.0131 - 7.0288 - 7.0492 - 7.0770 - 7.0900 - 7.1061 - 7.1317 - 7.1399 - 7.1526 - 7.1613 - 7.1805 - 7.2138 - 7.2333 - 7.2459 - 7.2884 - 7.3552 - 7.3638 - 7.4043 - 7.4121 - 7.4319 - 7.4516 - 7.4535 - 7.4761 - 7.4881 - 7.5072 - 7.5315 - 7.5450 - 7.5538 - 7.5775 - 7.5938 - 7.5992 - 7.6168 - 7.6589 - 7.6757 - 7.6936 - 7.7138 - 7.7299 - 7.7357 - 7.7543 - 7.7621 - 7.7740 - 7.7867 - 7.8089 - 7.8136 - 7.8287 - 7.8432 - 7.8593 - 7.8642 - 7.8730 - 7.8823 - 7.9025 - 7.9206 - 7.9461 - 7.9658 - 7.9803 - 8.0033 - 8.0254 - 8.0368 - 8.0647 - 8.0799 - 8.0992 - 8.1341 - 8.1491 - 8.2685 - 8.2748 - 8.2961 - 8.3333 - 8.3575 - 8.3690 - 8.3908 - 8.3976 - 8.4474 - 8.4821 - 8.5078 - 8.5268 - 8.5378 - 8.5644 - 8.5859 - 8.6021 - 8.6180 - 8.6267 - 8.6382 - 8.6447 - 8.6703 - 8.6741 - 8.6824 - 8.6989 - 8.7061 - 8.7177 - 8.7378 - 8.7463 - 8.7591 - 8.7656 - 8.7878 - 8.7992 - 8.8131 - 8.8398 - 8.8511 - 8.8627 - 8.8693 - 8.8839 - 8.8954 - 8.9106 - 8.9201 - 8.9380 - 8.9613 - 8.9783 - 8.9865 - 8.9960 - 9.0310 - 9.0382 - 9.0616 - 9.0723 - 9.0778 - 9.0936 - 9.1036 - 9.1243 - 9.1669 - 9.1749 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_13 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_13 deleted file mode 100644 index 8b83bd300..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_13 +++ /dev/null @@ -1,461 +0,0 @@ --3.1309 --2.9746 --2.9399 --2.9094 --2.7854 --2.7487 --2.7169 --2.5621 --2.2396 --2.2027 --2.1727 --2.0772 --2.0288 --2.0242 --1.9867 --1.9765 --1.9620 --1.8423 --1.8005 --1.7804 --1.6867 --1.6324 --1.6147 --1.5010 --1.4727 --1.4528 --1.4358 --1.4161 --1.3903 --1.3188 --1.2852 --1.2682 --1.2412 --1.2333 --1.1800 --1.0968 --1.0564 --1.0278 --0.7767 --0.7637 --0.7367 --0.7009 --0.6805 --0.6190 --0.5728 --0.5454 --0.5313 --0.4936 --0.4730 --0.4302 --0.3380 --0.2121 --0.1989 --0.1805 --0.1462 --0.1244 --0.1053 --0.0388 --0.0183 --0.0119 - 0.0227 - 0.0398 - 0.0614 - 0.0708 - 0.0922 - 0.1394 - 0.1889 - 0.1984 - 0.2334 - 0.2455 - 0.2598 - 0.2772 - 0.6620 - 0.6755 - 0.6974 - 0.7153 - 0.7365 - 0.7475 - 0.7621 - 0.7718 - 0.7940 - 0.8123 - 0.8281 - 0.8467 - 0.8739 - 0.8828 - 0.9119 - 0.9247 - 0.9372 - 0.9480 - 0.9609 - 0.9889 - 1.0030 - 1.0107 - 1.0220 - 1.0732 - 1.1188 - 1.1562 - 1.1741 - 1.2616 - 1.2821 - 1.3014 - 1.3150 - 1.3486 - 1.3715 - 1.3815 - 1.4570 - 1.4711 - 1.5025 - 1.5131 - 1.5415 - 1.5678 - 1.6311 - 1.6432 - 1.6588 - 1.6836 - 1.6966 - 1.6987 - 1.7185 - 1.7323 - 1.7579 - 1.8240 - 1.8414 - 1.8610 - 1.8920 - 1.9090 - 1.9277 - 2.1420 - 2.1594 - 2.1790 - 2.1863 - 2.1931 - 2.2277 - 2.2379 - 2.2496 - 2.2606 - 2.2775 - 2.3021 - 2.3164 - 2.3740 - 2.3962 - 2.4208 - 2.4384 - 2.4515 - 2.4778 - 2.5786 - 2.5943 - 2.6137 - 2.7084 - 2.7353 - 2.7478 - 2.7837 - 2.7853 - 2.8176 - 2.8854 - 2.9075 - 2.9400 - 2.9497 - 2.9704 - 2.9985 - 3.0570 - 3.0678 - 3.0796 - 3.0992 - 3.1079 - 3.1178 - 3.1280 - 3.1347 - 3.1515 - 3.1672 - 3.1860 - 3.2196 - 3.2749 - 3.2952 - 3.3330 - 3.5269 - 3.5399 - 3.5782 - 3.6078 - 3.6380 - 3.6437 - 3.6726 - 3.6807 - 3.7029 - 3.7261 - 3.7431 - 3.7580 - 3.7691 - 3.7881 - 3.8029 - 3.8096 - 3.8259 - 3.8407 - 3.8486 - 3.8591 - 3.8716 - 3.8888 - 3.9050 - 3.9228 - 3.9748 - 3.9769 - 4.0058 - 4.0376 - 4.0442 - 4.0650 - 4.1043 - 4.1387 - 4.1605 - 4.1847 - 4.2170 - 4.2323 - 4.2528 - 4.2623 - 4.2929 - 4.3020 - 4.3141 - 4.3244 - 4.3379 - 4.3526 - 4.3696 - 4.3896 - 4.3986 - 4.4162 - 4.4421 - 4.4647 - 4.4794 - 4.4848 - 4.5027 - 4.5114 - 4.5188 - 4.5318 - 4.5435 - 4.5597 - 4.5690 - 4.5755 - 4.5849 - 4.6032 - 4.6062 - 4.6145 - 4.6262 - 4.6509 - 4.6665 - 4.6796 - 4.6914 - 4.8185 - 4.8650 - 4.8877 - 4.9674 - 4.9768 - 5.0031 - 5.0054 - 5.0282 - 5.0408 - 5.0784 - 5.0940 - 5.1132 - 5.1240 - 5.1314 - 5.1549 - 5.1611 - 5.1718 - 5.1969 - 5.2191 - 5.2267 - 5.2450 - 5.2479 - 5.2587 - 5.2738 - 5.2949 - 5.3194 - 5.3288 - 5.4208 - 5.4489 - 5.4808 - 5.4851 - 5.5058 - 5.5320 - 5.5404 - 5.5525 - 5.5752 - 5.6018 - 5.6101 - 5.6312 - 5.6489 - 5.6758 - 5.6834 - 5.7281 - 5.7735 - 5.7810 - 5.8062 - 5.8278 - 5.8403 - 5.8602 - 5.8861 - 5.8958 - 5.9131 - 5.9159 - 5.9314 - 5.9467 - 5.9620 - 5.9755 - 5.9880 - 5.9934 - 6.0017 - 6.0230 - 6.0324 - 6.0501 - 6.0749 - 6.3729 - 6.3967 - 6.4218 - 6.4381 - 6.4650 - 6.4704 - 6.4951 - 6.5180 - 6.5277 - 6.5938 - 6.6127 - 6.6287 - 6.6387 - 6.6488 - 6.6684 - 6.6791 - 6.6918 - 6.6953 - 6.7057 - 6.7183 - 6.7424 - 6.7895 - 6.8200 - 6.8411 - 6.8508 - 6.8634 - 6.8702 - 6.8956 - 6.9069 - 6.9271 - 6.9506 - 6.9601 - 6.9673 - 6.9868 - 7.0060 - 7.0248 - 7.0723 - 7.0996 - 7.1106 - 7.1369 - 7.1498 - 7.1628 - 7.1680 - 7.1850 - 7.2145 - 7.2224 - 7.2396 - 7.2533 - 7.2784 - 7.2978 - 7.3144 - 7.3775 - 7.4000 - 7.4101 - 7.4238 - 7.4323 - 7.4451 - 7.4588 - 7.4693 - 7.4939 - 7.5162 - 7.5467 - 7.5527 - 7.5667 - 7.5763 - 7.5927 - 7.6018 - 7.6281 - 7.6460 - 7.6862 - 7.7087 - 7.7341 - 7.7571 - 7.7849 - 7.7910 - 7.8182 - 7.8227 - 7.8386 - 7.8462 - 7.8692 - 7.8912 - 7.9338 - 7.9534 - 7.9916 - 8.0091 - 8.0235 - 8.0507 - 8.0632 - 8.0728 - 8.0843 - 8.0896 - 8.1178 - 8.1295 - 8.1933 - 8.2083 - 8.2226 - 8.2351 - 8.2568 - 8.2781 - 8.2938 - 8.3100 - 8.3263 - 8.3376 - 8.3539 - 8.3625 - 8.3681 - 8.3808 - 8.3877 - 8.4066 - 8.4098 - 8.4257 - 8.4499 - 8.5478 - 8.5939 - 8.6051 - 8.6191 - 8.6366 - 8.6469 - 8.6557 - 8.6653 - 8.6695 - 8.6905 - 8.6989 - 8.7119 - 8.7196 - 8.7289 - 8.7359 - 8.7521 - 8.7663 - 8.7783 - 8.7988 - 8.8034 - 8.8160 - 8.8284 - 8.8461 - 8.8647 - 8.8850 - 8.8911 - 8.9070 - 8.9107 - 8.9301 - 8.9374 - 8.9477 - 8.9668 - 8.9700 - 8.9880 - 9.0011 - 9.0266 - 9.0698 - 9.0907 - 9.1272 - 9.1774 - 9.1956 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_14 b/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_14 deleted file mode 100644 index c4351c7a2..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/eigvals_14 +++ /dev/null @@ -1,461 +0,0 @@ --3.1316 --2.9702 --2.9346 --2.9207 --2.7770 --2.7461 --2.7285 --2.5606 --2.2310 --2.1977 --2.1769 --2.0781 --2.0512 --2.0083 --1.9942 --1.9793 --1.9500 --1.8367 --1.8281 --1.7743 --1.6591 --1.6493 --1.6087 --1.5071 --1.4766 --1.4460 --1.4413 --1.4032 --1.3918 --1.3121 --1.2927 --1.2725 --1.2443 --1.2150 --1.1892 --1.0921 --1.0816 --1.0306 --0.7589 --0.7520 --0.7240 --0.6914 --0.6798 --0.6497 --0.5720 --0.5629 --0.5118 --0.4905 --0.4740 --0.4617 --0.3261 --0.2011 --0.1817 --0.1688 --0.1558 --0.1402 --0.0978 --0.0419 --0.0102 - 0.0034 - 0.0183 - 0.0393 - 0.0467 - 0.0774 - 0.0938 - 0.1159 - 0.1645 - 0.1937 - 0.2195 - 0.2425 - 0.2712 - 0.3138 - 0.6333 - 0.6799 - 0.6992 - 0.7085 - 0.7290 - 0.7522 - 0.7601 - 0.7823 - 0.7970 - 0.8094 - 0.8381 - 0.8497 - 0.8875 - 0.8966 - 0.9102 - 0.9258 - 0.9375 - 0.9565 - 0.9771 - 0.9874 - 0.9968 - 1.0116 - 1.0311 - 1.0374 - 1.1265 - 1.1412 - 1.1726 - 1.2784 - 1.2874 - 1.2987 - 1.3178 - 1.3338 - 1.3623 - 1.3923 - 1.4555 - 1.4836 - 1.4946 - 1.5145 - 1.5342 - 1.5459 - 1.6249 - 1.6504 - 1.6711 - 1.6871 - 1.6918 - 1.7095 - 1.7141 - 1.7372 - 1.7499 - 1.8253 - 1.8416 - 1.8643 - 1.8798 - 1.9042 - 1.9373 - 2.1466 - 2.1680 - 2.1729 - 2.1936 - 2.2007 - 2.2174 - 2.2421 - 2.2472 - 2.2632 - 2.2682 - 2.2916 - 2.3101 - 2.3707 - 2.3935 - 2.4239 - 2.4414 - 2.4588 - 2.4810 - 2.5613 - 2.5935 - 2.6219 - 2.7237 - 2.7395 - 2.7517 - 2.7666 - 2.8062 - 2.8207 - 2.8684 - 2.9017 - 2.9259 - 2.9488 - 2.9814 - 3.0093 - 3.0454 - 3.0696 - 3.0808 - 3.0921 - 3.1094 - 3.1252 - 3.1344 - 3.1523 - 3.1556 - 3.1687 - 3.1863 - 3.2032 - 3.2698 - 3.2998 - 3.3236 - 3.5364 - 3.5540 - 3.5790 - 3.6100 - 3.6256 - 3.6450 - 3.6563 - 3.6825 - 3.7001 - 3.7378 - 3.7588 - 3.7639 - 3.7780 - 3.7908 - 3.8010 - 3.8131 - 3.8262 - 3.8290 - 3.8460 - 3.8528 - 3.8677 - 3.8866 - 3.9019 - 3.9112 - 3.9761 - 3.9833 - 4.0009 - 4.0197 - 4.0392 - 4.0645 - 4.1112 - 4.1381 - 4.1560 - 4.1901 - 4.2088 - 4.2375 - 4.2504 - 4.2656 - 4.2866 - 4.3059 - 4.3203 - 4.3391 - 4.3491 - 4.3521 - 4.3667 - 4.3791 - 4.3965 - 4.4074 - 4.4281 - 4.4582 - 4.4761 - 4.4922 - 4.5044 - 4.5172 - 4.5247 - 4.5303 - 4.5418 - 4.5606 - 4.5724 - 4.5797 - 4.5913 - 4.6034 - 4.6118 - 4.6186 - 4.6320 - 4.6373 - 4.6613 - 4.6675 - 4.6998 - 4.8444 - 4.8479 - 4.8998 - 4.9671 - 4.9885 - 5.0066 - 5.0160 - 5.0207 - 5.0301 - 5.0710 - 5.0928 - 5.1066 - 5.1155 - 5.1383 - 5.1467 - 5.1618 - 5.1727 - 5.1890 - 5.1990 - 5.2262 - 5.2444 - 5.2511 - 5.2602 - 5.2748 - 5.2928 - 5.3100 - 5.3303 - 5.4378 - 5.4442 - 5.4853 - 5.4962 - 5.5133 - 5.5276 - 5.5400 - 5.5668 - 5.5765 - 5.5971 - 5.6186 - 5.6408 - 5.6631 - 5.6733 - 5.6879 - 5.7076 - 5.7762 - 5.7896 - 5.8020 - 5.8259 - 5.8355 - 5.8586 - 5.8785 - 5.8907 - 5.9044 - 5.9147 - 5.9303 - 5.9365 - 5.9581 - 5.9752 - 5.9884 - 6.0000 - 6.0187 - 6.0267 - 6.0363 - 6.0536 - 6.0625 - 6.3806 - 6.3982 - 6.4122 - 6.4243 - 6.4595 - 6.4736 - 6.5063 - 6.5231 - 6.5323 - 6.5925 - 6.6061 - 6.6258 - 6.6302 - 6.6441 - 6.6636 - 6.6746 - 6.6904 - 6.6943 - 6.7126 - 6.7205 - 6.7458 - 6.8011 - 6.8153 - 6.8261 - 6.8510 - 6.8729 - 6.8794 - 6.9033 - 6.9176 - 6.9354 - 6.9485 - 6.9567 - 6.9698 - 6.9820 - 6.9975 - 7.0315 - 7.0811 - 7.0908 - 7.1206 - 7.1252 - 7.1452 - 7.1627 - 7.1705 - 7.1896 - 7.2140 - 7.2287 - 7.2373 - 7.2476 - 7.2650 - 7.3015 - 7.3294 - 7.3866 - 7.4018 - 7.4085 - 7.4219 - 7.4342 - 7.4423 - 7.4581 - 7.4638 - 7.4807 - 7.5098 - 7.5307 - 7.5500 - 7.5580 - 7.5717 - 7.5904 - 7.6027 - 7.6207 - 7.6405 - 7.7050 - 7.7207 - 7.7551 - 7.7715 - 7.7829 - 7.7928 - 7.8096 - 7.8250 - 7.8415 - 7.8550 - 7.8596 - 7.8681 - 7.9394 - 7.9555 - 7.9976 - 8.0181 - 8.0265 - 8.0469 - 8.0683 - 8.0718 - 8.0831 - 8.0926 - 8.1001 - 8.1203 - 8.2047 - 8.2157 - 8.2305 - 8.2469 - 8.2527 - 8.2758 - 8.2819 - 8.3090 - 8.3271 - 8.3382 - 8.3559 - 8.3570 - 8.3660 - 8.3762 - 8.3808 - 8.3949 - 8.4141 - 8.4327 - 8.4565 - 8.5614 - 8.5946 - 8.6046 - 8.6104 - 8.6327 - 8.6448 - 8.6511 - 8.6665 - 8.6744 - 8.6846 - 8.6979 - 8.7051 - 8.7158 - 8.7283 - 8.7351 - 8.7505 - 8.7747 - 8.7809 - 8.7944 - 8.8127 - 8.8265 - 8.8345 - 8.8483 - 8.8715 - 8.8730 - 8.8852 - 8.8981 - 8.9087 - 8.9174 - 8.9381 - 8.9425 - 8.9607 - 8.9842 - 8.9907 - 9.0026 - 9.0370 - 9.0604 - 9.1026 - 9.1193 - 9.1656 - 9.2008 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1/k_weights b/ml-dft-sandia/notebooks/dos2eband/snap_1/k_weights deleted file mode 100644 index 925cfac45..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1/k_weights +++ /dev/null @@ -1 +0,0 @@ -0.0740741, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481, 0.1481481 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_1_888/Al.dos_2g b/ml-dft-sandia/notebooks/dos2eband/snap_1_888/Al.dos_2g deleted file mode 100644 index 19d9589ed..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_1_888/Al.dos_2g +++ /dev/null @@ -1,252 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.800 eV - -10.000 0.4497E-83 0.4497E-84 - -9.900 0.4497E-83 0.8995E-84 - -9.800 0.4497E-83 0.1349E-83 - -9.700 0.4497E-83 0.1799E-83 - -9.600 0.4497E-83 0.2249E-83 - -9.500 0.4497E-83 0.2698E-83 - -9.400 0.4497E-83 0.3148E-83 - -9.300 0.4497E-83 0.3598E-83 - -9.200 0.4497E-83 0.4048E-83 - -9.100 0.4497E-83 0.4497E-83 - -9.000 0.4497E-83 0.4947E-83 - -8.900 0.4497E-83 0.5397E-83 - -8.800 0.4497E-83 0.5846E-83 - -8.700 0.4497E-83 0.6296E-83 - -8.600 0.4497E-83 0.6746E-83 - -8.500 0.4497E-83 0.7196E-83 - -8.400 0.4497E-83 0.7645E-83 - -8.300 0.4497E-83 0.8095E-83 - -8.200 0.4497E-83 0.8545E-83 - -8.100 0.4497E-83 0.8995E-83 - -8.000 0.4497E-83 0.9444E-83 - -7.900 0.4497E-83 0.9894E-83 - -7.800 0.4497E-83 0.1034E-82 - -7.700 0.4497E-83 0.1079E-82 - -7.600 0.4497E-83 0.1124E-82 - -7.500 0.4497E-83 0.1169E-82 - -7.400 0.4497E-83 0.1214E-82 - -7.300 0.4497E-83 0.1259E-82 - -7.200 0.4497E-83 0.1304E-82 - -7.100 0.4497E-83 0.1349E-82 - -7.000 0.4497E-83 0.1394E-82 - -6.900 0.4497E-83 0.1439E-82 - -6.800 0.4497E-83 0.1484E-82 - -6.700 0.4497E-83 0.1529E-82 - -6.600 0.4497E-83 0.1574E-82 - -6.500 0.4497E-83 0.1619E-82 - -6.400 0.4497E-83 0.1664E-82 - -6.300 0.4497E-83 0.1709E-82 - -6.200 0.4497E-83 0.1754E-82 - -6.100 0.4523E-83 0.1799E-82 - -6.000 0.2446E-79 0.2464E-80 - -5.900 0.1367E-73 0.1367E-74 - -5.800 0.4644E-68 0.4644E-69 - -5.700 0.9593E-63 0.9593E-64 - -5.600 0.1205E-57 0.1205E-58 - -5.500 0.9209E-53 0.9209E-54 - -5.400 0.4281E-48 0.4281E-49 - -5.300 0.1211E-43 0.1211E-44 - -5.200 0.2086E-39 0.2087E-40 - -5.100 0.2189E-35 0.2189E-36 - -5.000 0.1399E-31 0.1399E-32 - -4.900 0.5450E-28 0.5452E-29 - -4.800 0.1295E-24 0.1296E-25 - -4.700 0.1879E-21 0.1881E-22 - -4.600 0.1666E-18 0.1668E-19 - -4.500 0.9034E-16 0.9051E-17 - -4.400 0.3000E-13 0.3009E-14 - -4.300 0.6114E-11 0.6144E-12 - -4.200 0.7661E-09 0.7722E-10 - -4.100 0.5918E-07 0.5995E-08 - -4.000 0.2829E-05 0.2889E-06 - -3.900 0.8410E-04 0.8699E-05 - -3.800 0.1565E-02 0.1652E-03 - -3.700 0.1839E-01 0.2004E-02 - -3.600 0.1384E+00 0.1584E-01 - -3.500 0.6801E+00 0.8385E-01 - -3.400 0.2249E+01 0.3087E+00 - -3.300 0.5236E+01 0.8323E+00 - -3.200 0.9145E+01 0.1747E+01 - -3.100 0.1297E+02 0.3044E+01 - -3.000 0.1621E+02 0.4665E+01 - -2.900 0.1894E+02 0.6560E+01 - -2.800 0.2135E+02 0.8694E+01 - -2.700 0.2344E+02 0.1104E+02 - -2.600 0.2521E+02 0.1356E+02 - -2.500 0.2681E+02 0.1624E+02 - -2.400 0.2842E+02 0.1908E+02 - -2.300 0.3006E+02 0.2209E+02 - -2.200 0.3161E+02 0.2525E+02 - -2.100 0.3297E+02 0.2855E+02 - -2.000 0.3420E+02 0.3196E+02 - -1.900 0.3544E+02 0.3551E+02 - -1.800 0.3674E+02 0.3918E+02 - -1.700 0.3805E+02 0.4299E+02 - -1.600 0.3935E+02 0.4692E+02 - -1.500 0.4055E+02 0.5098E+02 - -1.400 0.4163E+02 0.5514E+02 - -1.300 0.4266E+02 0.5941E+02 - -1.200 0.4370E+02 0.6378E+02 - -1.100 0.4481E+02 0.6826E+02 - -1.000 0.4586E+02 0.7284E+02 - -0.900 0.4678E+02 0.7752E+02 - -0.800 0.4773E+02 0.8229E+02 - -0.700 0.4870E+02 0.8716E+02 - -0.600 0.4964E+02 0.9213E+02 - -0.500 0.5063E+02 0.9719E+02 - -0.400 0.5162E+02 0.1024E+03 - -0.300 0.5253E+02 0.1076E+03 - -0.200 0.5348E+02 0.1130E+03 - -0.100 0.5450E+02 0.1184E+03 - 0.000 0.5539E+02 0.1239E+03 - 0.100 0.5623E+02 0.1296E+03 - 0.200 0.5713E+02 0.1353E+03 - 0.300 0.5792E+02 0.1411E+03 - 0.400 0.5861E+02 0.1469E+03 - 0.500 0.5952E+02 0.1529E+03 - 0.600 0.6054E+02 0.1589E+03 - 0.700 0.6128E+02 0.1651E+03 - 0.800 0.6194E+02 0.1713E+03 - 0.900 0.6285E+02 0.1775E+03 - 1.000 0.6371E+02 0.1839E+03 - 1.100 0.6439E+02 0.1904E+03 - 1.200 0.6518E+02 0.1969E+03 - 1.300 0.6613E+02 0.2035E+03 - 1.400 0.6701E+02 0.2102E+03 - 1.500 0.6766E+02 0.2170E+03 - 1.600 0.6829E+02 0.2238E+03 - 1.700 0.6925E+02 0.2307E+03 - 1.800 0.7018E+02 0.2377E+03 - 1.900 0.7069E+02 0.2448E+03 - 2.000 0.7130E+02 0.2519E+03 - 2.100 0.7236E+02 0.2592E+03 - 2.200 0.7331E+02 0.2665E+03 - 2.300 0.7383E+02 0.2739E+03 - 2.400 0.7434E+02 0.2813E+03 - 2.500 0.7528E+02 0.2888E+03 - 2.600 0.7639E+02 0.2965E+03 - 2.700 0.7706E+02 0.3042E+03 - 2.800 0.7746E+02 0.3119E+03 - 2.900 0.7837E+02 0.3198E+03 - 3.000 0.7972E+02 0.3277E+03 - 3.100 0.8060E+02 0.3358E+03 - 3.200 0.8090E+02 0.3439E+03 - 3.300 0.8125E+02 0.3520E+03 - 3.400 0.8185E+02 0.3602E+03 - 3.500 0.8252E+02 0.3684E+03 - 3.600 0.8318E+02 0.3768E+03 - 3.700 0.8375E+02 0.3851E+03 - 3.800 0.8452E+02 0.3936E+03 - 3.900 0.8573E+02 0.4022E+03 - 4.000 0.8676E+02 0.4108E+03 - 4.100 0.8719E+02 0.4196E+03 - 4.200 0.8785E+02 0.4283E+03 - 4.300 0.8917E+02 0.4373E+03 - 4.400 0.9038E+02 0.4463E+03 - 4.500 0.9123E+02 0.4554E+03 - 4.600 0.9237E+02 0.4647E+03 - 4.700 0.9400E+02 0.4741E+03 - 4.800 0.9565E+02 0.4836E+03 - 4.900 0.9704E+02 0.4933E+03 - 5.000 0.9789E+02 0.5031E+03 - 5.100 0.9772E+02 0.5129E+03 - 5.200 0.9685E+02 0.5226E+03 - 5.300 0.9596E+02 0.5322E+03 - 5.400 0.9502E+02 0.5417E+03 - 5.500 0.9398E+02 0.5511E+03 - 5.600 0.9304E+02 0.5604E+03 - 5.700 0.9218E+02 0.5696E+03 - 5.800 0.9125E+02 0.5787E+03 - 5.900 0.9032E+02 0.5877E+03 - 6.000 0.8987E+02 0.5967E+03 - 6.100 0.9024E+02 0.6058E+03 - 6.200 0.9132E+02 0.6149E+03 - 6.300 0.9292E+02 0.6242E+03 - 6.400 0.9474E+02 0.6337E+03 - 6.500 0.9640E+02 0.6433E+03 - 6.600 0.9766E+02 0.6531E+03 - 6.700 0.9868E+02 0.6629E+03 - 6.800 0.9984E+02 0.6729E+03 - 6.900 0.1009E+03 0.6830E+03 - 7.000 0.1009E+03 0.6931E+03 - 7.100 0.9942E+02 0.7030E+03 - 7.200 0.9793E+02 0.7128E+03 - 7.300 0.9811E+02 0.7226E+03 - 7.400 0.9950E+02 0.7326E+03 - 7.500 0.1006E+03 0.7427E+03 - 7.600 0.1014E+03 0.7528E+03 - 7.700 0.1028E+03 0.7631E+03 - 7.800 0.1048E+03 0.7736E+03 - 7.900 0.1064E+03 0.7842E+03 - 8.000 0.1069E+03 0.7949E+03 - 8.100 0.1071E+03 0.8056E+03 - 8.200 0.1077E+03 0.8164E+03 - 8.300 0.1081E+03 0.8272E+03 - 8.400 0.1076E+03 0.8379E+03 - 8.500 0.1073E+03 0.8487E+03 - 8.600 0.1085E+03 0.8595E+03 - 8.700 0.1097E+03 0.8705E+03 - 8.800 0.1091E+03 0.8814E+03 - 8.900 0.1080E+03 0.8922E+03 - 9.000 0.1086E+03 0.9031E+03 - 9.100 0.1107E+03 0.9141E+03 - 9.200 0.1124E+03 0.9254E+03 - 9.300 0.1130E+03 0.9367E+03 - 9.400 0.1128E+03 0.9479E+03 - 9.500 0.1123E+03 0.9592E+03 - 9.600 0.1125E+03 0.9704E+03 - 9.700 0.1145E+03 0.9819E+03 - 9.800 0.1168E+03 0.9936E+03 - 9.900 0.1171E+03 0.1005E+04 - 10.000 0.1155E+03 0.1017E+04 - 10.100 0.1149E+03 0.1028E+04 - 10.200 0.1165E+03 0.1040E+04 - 10.300 0.1186E+03 0.1052E+04 - 10.400 0.1196E+03 0.1064E+04 - 10.500 0.1196E+03 0.1076E+04 - 10.600 0.1194E+03 0.1088E+04 - 10.700 0.1198E+03 0.1100E+04 - 10.800 0.1201E+03 0.1112E+04 - 10.900 0.1174E+03 0.1123E+04 - 11.000 0.1067E+03 0.1134E+04 - 11.100 0.8471E+02 0.1143E+04 - 11.200 0.5473E+02 0.1148E+04 - 11.300 0.2703E+02 0.1151E+04 - 11.400 0.9721E+01 0.1152E+04 - 11.500 0.2452E+01 0.1152E+04 - 11.600 0.4208E+00 0.1152E+04 - 11.700 0.4802E-01 0.1152E+04 - 11.800 0.3576E-02 0.1152E+04 - 11.900 0.1716E-03 0.1152E+04 - 12.000 0.5264E-05 0.1152E+04 - 12.100 0.1027E-06 0.1152E+04 - 12.200 0.1271E-08 0.1152E+04 - 12.300 0.9966E-11 0.1152E+04 - 12.400 0.4948E-13 0.1152E+04 - 12.500 0.1553E-15 0.1152E+04 - 12.600 0.3072E-18 0.1152E+04 - 12.700 0.3815E-21 0.1152E+04 - 12.800 0.2962E-24 0.1152E+04 - 12.900 0.1430E-27 0.1152E+04 - 13.000 0.4276E-31 0.1152E+04 - 13.100 0.7883E-35 0.1152E+04 - 13.200 0.8928E-39 0.1152E+04 - 13.300 0.6196E-43 0.1152E+04 - 13.400 0.2629E-47 0.1152E+04 - 13.500 0.6806E-52 0.1152E+04 - 13.600 0.1074E-56 0.1152E+04 - 13.700 0.1032E-61 0.1152E+04 - 13.800 0.6032E-67 0.1152E+04 - 13.900 0.2144E-72 0.1152E+04 - 14.000 0.4631E-78 0.1152E+04 - 14.100 0.5104E-83 0.1152E+04 - 14.200 0.4497E-83 0.1152E+04 - 14.300 0.4497E-83 0.1152E+04 - 14.400 0.4497E-83 0.1152E+04 - 14.500 0.4497E-83 0.1152E+04 - 14.600 0.4497E-83 0.1152E+04 - 14.700 0.4497E-83 0.1152E+04 - 14.800 0.4497E-83 0.1152E+04 - 14.900 0.4497E-83 0.1152E+04 - 15.000 0.4497E-83 0.1152E+04 diff --git a/ml-dft-sandia/notebooks/dos2eband/snap_2_888/Al.dos_2g b/ml-dft-sandia/notebooks/dos2eband/snap_2_888/Al.dos_2g deleted file mode 100644 index 0c20c93c9..000000000 --- a/ml-dft-sandia/notebooks/dos2eband/snap_2_888/Al.dos_2g +++ /dev/null @@ -1,252 +0,0 @@ -# E (eV) dos(E) Int dos(E) EFermi = 7.797 eV - -10.000 0.4497E-83 0.4497E-84 - -9.900 0.4497E-83 0.8995E-84 - -9.800 0.4497E-83 0.1349E-83 - -9.700 0.4497E-83 0.1799E-83 - -9.600 0.4497E-83 0.2249E-83 - -9.500 0.4497E-83 0.2698E-83 - -9.400 0.4497E-83 0.3148E-83 - -9.300 0.4497E-83 0.3598E-83 - -9.200 0.4497E-83 0.4048E-83 - -9.100 0.4497E-83 0.4497E-83 - -9.000 0.4497E-83 0.4947E-83 - -8.900 0.4497E-83 0.5397E-83 - -8.800 0.4497E-83 0.5846E-83 - -8.700 0.4497E-83 0.6296E-83 - -8.600 0.4497E-83 0.6746E-83 - -8.500 0.4497E-83 0.7196E-83 - -8.400 0.4497E-83 0.7645E-83 - -8.300 0.4497E-83 0.8095E-83 - -8.200 0.4497E-83 0.8545E-83 - -8.100 0.4497E-83 0.8995E-83 - -8.000 0.4497E-83 0.9444E-83 - -7.900 0.4497E-83 0.9894E-83 - -7.800 0.4497E-83 0.1034E-82 - -7.700 0.4497E-83 0.1079E-82 - -7.600 0.4497E-83 0.1124E-82 - -7.500 0.4497E-83 0.1169E-82 - -7.400 0.4497E-83 0.1214E-82 - -7.300 0.4497E-83 0.1259E-82 - -7.200 0.4497E-83 0.1304E-82 - -7.100 0.4497E-83 0.1349E-82 - -7.000 0.4497E-83 0.1394E-82 - -6.900 0.4497E-83 0.1439E-82 - -6.800 0.4497E-83 0.1484E-82 - -6.700 0.4497E-83 0.1529E-82 - -6.600 0.4497E-83 0.1574E-82 - -6.500 0.4497E-83 0.1619E-82 - -6.400 0.4497E-83 0.1664E-82 - -6.300 0.4497E-83 0.1709E-82 - -6.200 0.4497E-83 0.1754E-82 - -6.100 0.4545E-83 0.1799E-82 - -6.000 0.4416E-79 0.4434E-80 - -5.900 0.2414E-73 0.2414E-74 - -5.800 0.8024E-68 0.8024E-69 - -5.700 0.1622E-62 0.1622E-63 - -5.600 0.1993E-57 0.1993E-58 - -5.500 0.1490E-52 0.1490E-53 - -5.400 0.6777E-48 0.6777E-49 - -5.300 0.1876E-43 0.1876E-44 - -5.200 0.3161E-39 0.3161E-40 - -5.100 0.3244E-35 0.3245E-36 - -5.000 0.2029E-31 0.2029E-32 - -4.900 0.7734E-28 0.7736E-29 - -4.800 0.1798E-24 0.1799E-25 - -4.700 0.2553E-21 0.2555E-22 - -4.600 0.2214E-18 0.2217E-19 - -4.500 0.1175E-15 0.1177E-16 - -4.400 0.3817E-13 0.3829E-14 - -4.300 0.7611E-11 0.7650E-12 - -4.200 0.9332E-09 0.9409E-10 - -4.100 0.7056E-07 0.7150E-08 - -4.000 0.3302E-05 0.3373E-06 - -3.900 0.9609E-04 0.9947E-05 - -3.800 0.1752E-02 0.1851E-03 - -3.700 0.2019E-01 0.2204E-02 - -3.600 0.1493E+00 0.1713E-01 - -3.500 0.7223E+00 0.8936E-01 - -3.400 0.2360E+01 0.3254E+00 - -3.300 0.5445E+01 0.8699E+00 - -3.200 0.9435E+01 0.1813E+01 - -3.100 0.1327E+02 0.3141E+01 - -3.000 0.1644E+02 0.4784E+01 - -2.900 0.1909E+02 0.6694E+01 - -2.800 0.2145E+02 0.8839E+01 - -2.700 0.2356E+02 0.1119E+02 - -2.600 0.2536E+02 0.1373E+02 - -2.500 0.2691E+02 0.1642E+02 - -2.400 0.2842E+02 0.1926E+02 - -2.300 0.3006E+02 0.2227E+02 - -2.200 0.3169E+02 0.2544E+02 - -2.100 0.3312E+02 0.2875E+02 - -2.000 0.3436E+02 0.3219E+02 - -1.900 0.3554E+02 0.3574E+02 - -1.800 0.3678E+02 0.3942E+02 - -1.700 0.3806E+02 0.4323E+02 - -1.600 0.3933E+02 0.4716E+02 - -1.500 0.4050E+02 0.5121E+02 - -1.400 0.4157E+02 0.5537E+02 - -1.300 0.4264E+02 0.5963E+02 - -1.200 0.4379E+02 0.6401E+02 - -1.100 0.4498E+02 0.6851E+02 - -1.000 0.4603E+02 0.7311E+02 - -0.900 0.4687E+02 0.7780E+02 - -0.800 0.4771E+02 0.8257E+02 - -0.700 0.4865E+02 0.8743E+02 - -0.600 0.4965E+02 0.9240E+02 - -0.500 0.5068E+02 0.9746E+02 - -0.400 0.5162E+02 0.1026E+03 - -0.300 0.5246E+02 0.1079E+03 - -0.200 0.5341E+02 0.1132E+03 - -0.100 0.5447E+02 0.1187E+03 - 0.000 0.5538E+02 0.1242E+03 - 0.100 0.5621E+02 0.1298E+03 - 0.200 0.5710E+02 0.1355E+03 - 0.300 0.5788E+02 0.1413E+03 - 0.400 0.5856E+02 0.1472E+03 - 0.500 0.5945E+02 0.1531E+03 - 0.600 0.6045E+02 0.1592E+03 - 0.700 0.6120E+02 0.1653E+03 - 0.800 0.6189E+02 0.1715E+03 - 0.900 0.6282E+02 0.1778E+03 - 1.000 0.6369E+02 0.1841E+03 - 1.100 0.6439E+02 0.1906E+03 - 1.200 0.6517E+02 0.1971E+03 - 1.300 0.6611E+02 0.2037E+03 - 1.400 0.6701E+02 0.2104E+03 - 1.500 0.6764E+02 0.2172E+03 - 1.600 0.6826E+02 0.2240E+03 - 1.700 0.6925E+02 0.2309E+03 - 1.800 0.7020E+02 0.2379E+03 - 1.900 0.7069E+02 0.2450E+03 - 2.000 0.7129E+02 0.2521E+03 - 2.100 0.7234E+02 0.2594E+03 - 2.200 0.7326E+02 0.2667E+03 - 2.300 0.7376E+02 0.2741E+03 - 2.400 0.7430E+02 0.2815E+03 - 2.500 0.7527E+02 0.2890E+03 - 2.600 0.7636E+02 0.2967E+03 - 2.700 0.7702E+02 0.3044E+03 - 2.800 0.7747E+02 0.3121E+03 - 2.900 0.7841E+02 0.3199E+03 - 3.000 0.7971E+02 0.3279E+03 - 3.100 0.8056E+02 0.3360E+03 - 3.200 0.8089E+02 0.3441E+03 - 3.300 0.8124E+02 0.3522E+03 - 3.400 0.8182E+02 0.3604E+03 - 3.500 0.8252E+02 0.3686E+03 - 3.600 0.8322E+02 0.3769E+03 - 3.700 0.8381E+02 0.3853E+03 - 3.800 0.8455E+02 0.3938E+03 - 3.900 0.8571E+02 0.4023E+03 - 4.000 0.8673E+02 0.4110E+03 - 4.100 0.8720E+02 0.4197E+03 - 4.200 0.8791E+02 0.4285E+03 - 4.300 0.8920E+02 0.4375E+03 - 4.400 0.9036E+02 0.4465E+03 - 4.500 0.9121E+02 0.4556E+03 - 4.600 0.9238E+02 0.4648E+03 - 4.700 0.9398E+02 0.4742E+03 - 4.800 0.9555E+02 0.4838E+03 - 4.900 0.9687E+02 0.4935E+03 - 5.000 0.9771E+02 0.5033E+03 - 5.100 0.9756E+02 0.5130E+03 - 5.200 0.9671E+02 0.5227E+03 - 5.300 0.9591E+02 0.5323E+03 - 5.400 0.9508E+02 0.5418E+03 - 5.500 0.9407E+02 0.5512E+03 - 5.600 0.9312E+02 0.5605E+03 - 5.700 0.9223E+02 0.5697E+03 - 5.800 0.9128E+02 0.5789E+03 - 5.900 0.9043E+02 0.5879E+03 - 6.000 0.9007E+02 0.5969E+03 - 6.100 0.9045E+02 0.6059E+03 - 6.200 0.9152E+02 0.6151E+03 - 6.300 0.9313E+02 0.6244E+03 - 6.400 0.9493E+02 0.6339E+03 - 6.500 0.9655E+02 0.6436E+03 - 6.600 0.9778E+02 0.6533E+03 - 6.700 0.9875E+02 0.6632E+03 - 6.800 0.9981E+02 0.6732E+03 - 6.900 0.1008E+03 0.6833E+03 - 7.000 0.1007E+03 0.6933E+03 - 7.100 0.9928E+02 0.7033E+03 - 7.200 0.9790E+02 0.7131E+03 - 7.300 0.9808E+02 0.7229E+03 - 7.400 0.9944E+02 0.7328E+03 - 7.500 0.1006E+03 0.7429E+03 - 7.600 0.1015E+03 0.7530E+03 - 7.700 0.1029E+03 0.7633E+03 - 7.800 0.1048E+03 0.7738E+03 - 7.900 0.1063E+03 0.7844E+03 - 8.000 0.1069E+03 0.7951E+03 - 8.100 0.1072E+03 0.8058E+03 - 8.200 0.1078E+03 0.8166E+03 - 8.300 0.1081E+03 0.8274E+03 - 8.400 0.1075E+03 0.8382E+03 - 8.500 0.1073E+03 0.8489E+03 - 8.600 0.1086E+03 0.8598E+03 - 8.700 0.1097E+03 0.8707E+03 - 8.800 0.1090E+03 0.8816E+03 - 8.900 0.1079E+03 0.8924E+03 - 9.000 0.1086E+03 0.9033E+03 - 9.100 0.1107E+03 0.9144E+03 - 9.200 0.1125E+03 0.9256E+03 - 9.300 0.1131E+03 0.9369E+03 - 9.400 0.1128E+03 0.9482E+03 - 9.500 0.1123E+03 0.9594E+03 - 9.600 0.1126E+03 0.9707E+03 - 9.700 0.1145E+03 0.9822E+03 - 9.800 0.1168E+03 0.9938E+03 - 9.900 0.1170E+03 0.1006E+04 - 10.000 0.1155E+03 0.1017E+04 - 10.100 0.1150E+03 0.1029E+04 - 10.200 0.1165E+03 0.1040E+04 - 10.300 0.1185E+03 0.1052E+04 - 10.400 0.1195E+03 0.1064E+04 - 10.500 0.1197E+03 0.1076E+04 - 10.600 0.1195E+03 0.1088E+04 - 10.700 0.1198E+03 0.1100E+04 - 10.800 0.1201E+03 0.1112E+04 - 10.900 0.1173E+03 0.1124E+04 - 11.000 0.1065E+03 0.1134E+04 - 11.100 0.8419E+02 0.1143E+04 - 11.200 0.5400E+02 0.1148E+04 - 11.300 0.2638E+02 0.1151E+04 - 11.400 0.9345E+01 0.1152E+04 - 11.500 0.2313E+01 0.1152E+04 - 11.600 0.3886E+00 0.1152E+04 - 11.700 0.4326E-01 0.1152E+04 - 11.800 0.3131E-02 0.1152E+04 - 11.900 0.1453E-03 0.1152E+04 - 12.000 0.4278E-05 0.1152E+04 - 12.100 0.7946E-07 0.1152E+04 - 12.200 0.9273E-09 0.1152E+04 - 12.300 0.6784E-11 0.1152E+04 - 12.400 0.3108E-13 0.1152E+04 - 12.500 0.8915E-16 0.1152E+04 - 12.600 0.1600E-18 0.1152E+04 - 12.700 0.1794E-21 0.1152E+04 - 12.800 0.1256E-24 0.1152E+04 - 12.900 0.5472E-28 0.1152E+04 - 13.000 0.1481E-31 0.1152E+04 - 13.100 0.2482E-35 0.1152E+04 - 13.200 0.2568E-39 0.1152E+04 - 13.300 0.1636E-43 0.1152E+04 - 13.400 0.6400E-48 0.1152E+04 - 13.500 0.1534E-52 0.1152E+04 - 13.600 0.2249E-57 0.1152E+04 - 13.700 0.2014E-62 0.1152E+04 - 13.800 0.1100E-67 0.1152E+04 - 13.900 0.3658E-73 0.1152E+04 - 14.000 0.7410E-79 0.1152E+04 - 14.100 0.4588E-83 0.1152E+04 - 14.200 0.4497E-83 0.1152E+04 - 14.300 0.4497E-83 0.1152E+04 - 14.400 0.4497E-83 0.1152E+04 - 14.500 0.4497E-83 0.1152E+04 - 14.600 0.4497E-83 0.1152E+04 - 14.700 0.4497E-83 0.1152E+04 - 14.800 0.4497E-83 0.1152E+04 - 14.900 0.4497E-83 0.1152E+04 - 15.000 0.4497E-83 0.1152E+04 diff --git a/ml-dft-sandia/notebooks/mass-density-Al.ipynb b/ml-dft-sandia/notebooks/mass-density-Al.ipynb deleted file mode 100644 index e3a3c7436..000000000 --- a/ml-dft-sandia/notebooks/mass-density-Al.ipynb +++ /dev/null @@ -1,152 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - } - ], - "source": [ - "# Load packages\n", - "import math\n", - "import scipy as sp\n", - "import numpy as np\n", - "from scipy import optimize\n", - "#from scipy import interpolate\n", - "#from scipy.interpolate import InterpolatedUnivariateSpline\n", - "#from scipy import integrate\n", - "%pylab inline\n", - "#from scipy.optimize import fmin, curve_fit\n", - "#import pandas as pd\n", - "#import mpmath as mp\n", - "#from mpmath import polylog\n", - "import seaborn as sns\n", - "from IPython.display import HTML" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Determine mass density" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('Lattice constant:', 16.914007594384106)\n", - "('Volume of supercell [Angstrom^3]:', 4838.821077828514)\n", - "('Volume of supercell [Bohr^3]:', 32654.184089542396)\n", - "('Mass density [g/cc]:', 1.0000000000000007)\n" - ] - } - ], - "source": [ - "# Mass density of Aluminum under ambient conditions: 2.7 g/cc\n", - "amu = 1.660539040E-27 # atomic mass unit in kg\n", - "Angstrom2m = 1.0E-10 # Bohr radius in m\n", - "Angstrom2Bohr=1.88973 # Conversion from Angstrom to Bohr\n", - "Al_amu = 26.981539 # molar mass of Aluminum\n", - "#lattice = 16.914007594384106 # Angstrom\n", - "## lattice constants in Angstrom\n", - "a = lattice #8.582861487 \n", - "b = a\n", - "c = a #8.091999410\n", - "print(\"Lattice constant:\", a)\n", - "alpha = math.radians(90.0) # in radians\n", - "beta = alpha\n", - "gamma = alpha\n", - "## Volume of parallelepiped\n", - "V_Al = a*b*c*math.sqrt(1.0+2.0*math.cos(alpha)*math.cos(beta)*math.cos(gamma)\\\n", - " -math.cos(alpha)**2-math.cos(beta)**2-math.cos(gamma)**2)\n", - "print(\"Volume of supercell [Angstrom^3]:\", V_Al)\n", - "print(\"Volume of supercell [Bohr^3]:\", V_Al*Angstrom2Bohr**3)\n", - "## Compute mass density in g/cm^3\n", - "N_Al = 108\n", - "# number of atoms in the super cell\n", - "rho_Al = N_Al*Al_amu*amu*1000/(V_Al*Angstrom2m**3*100**3)\n", - "print(\"Mass density [g/cc]:\", rho_Al)\n", - "\n", - "# Compare this with the volume in VASP OUTCAR" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Determine lattice constant of cubic lattice for a given mass density" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "def lattice_par(rho_Al):\n", - " # Input : Mass density in g/cc\n", - " # Output: lattice constant in Angstrom\n", - " amu = 1.660539040E-27 # atomic mass unit in kg\n", - " Angstrom2m = 1.0E-10 # Bohr radius in m\n", - " Al_amu = 26.981539 # molar mass of Aluminum\n", - " N_Al = 108\n", - " result = (N_Al*Al_amu*amu*1000/(rho_Al*Angstrom2m**3*100**3))**(1./3.)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16.914007594384106" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lattice_par(1.0)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.16" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/ml-dft-sandia/notebooks/postprocess.ipynb b/ml-dft-sandia/notebooks/postprocess.ipynb deleted file mode 100644 index 97b5d3756..000000000 --- a/ml-dft-sandia/notebooks/postprocess.ipynb +++ /dev/null @@ -1,508 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - } - ], - "source": [ - "# Load packages\n", - "import math\n", - "import scipy as sp\n", - "import numpy as np\n", - "from scipy import optimize\n", - "#from scipy import interpolate\n", - "#from scipy.interpolate import InterpolatedUnivariateSpline\n", - "#from scipy import integrate\n", - "%pylab inline\n", - "#from scipy.optimize import fmin, curve_fit\n", - "import pandas as pd\n", - "#import mpmath as mp\n", - "#from mpmath import polylog\n", - "import seaborn as sns\n", - "from IPython.display import HTML" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Comparison of forces" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Load data files\n", - "filepath='/Users/acangi/WORK/proj/MLMM_LDRD/mlmm-ldrd-data/aluminum/code-comparison/'\n", - "\n", - "## vasp\n", - "raForces_vasp = np.loadtxt(filepath+'forces_vasp.csv', delimiter=',', usecols={0,1,2}, dtype=np.float)\n", - "\n", - "## qe\n", - "raForces_qe = np.loadtxt(filepath+'forces_qe.csv', delimiter=',', usecols={0,1,2}, dtype=np.float)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Convert units\n", - "## Conversion factors\n", - "Rydberg2eV = 13.6056980659\n", - "Bohr2Ang = 0.529177\n", - "\n", - "## Convert qe forces from Ry/Bohr to eV/Angstrom\n", - "raForces_qe_cnvt = raForces_qe*Rydberg2eV/Bohr2Ang\n", - "\n", - "## Difference in forces\n", - "tabDeltaForces = raForces_vasp - raForces_qe_cnvt" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.054608880128638404" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.max(np.abs(tabDeltaForces))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Compute mean and standard deviation\n", - "AD, STD = np.mean(tabDeltaForces), np.std(tabDeltaForces)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Compute absolute mean and absolute standard deviation\n", - "AAD, ASTD = np.mean(abs(tabDeltaForces)), np.std(abs(tabDeltaForces))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(-4.946491356861077e-07, 0.01891805923542814)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "AD, STD" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.01546489428387067, 0.010896330128467564)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#\n", - "AAD, ASTD" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.191582366095191" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Mean absoulte percentage deviation\n", - "AAD/np.max(abs(raForces_qe_cnvt))*100" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
xyz
0-0.022537-0.0223970.017390
10.0190590.023620-0.016686
20.0216340.019195-0.000053
30.023948-0.0200760.043107
40.026041-0.0106500.009122
50.0202400.0137510.023454
6-0.003563-0.002417-0.003920
7-0.0055820.0034360.019703
80.008100-0.000550-0.001811
9-0.0255230.024057-0.030199
100.012439-0.021227-0.021183
110.030189-0.004612-0.008447
12-0.0357460.0432950.019007
130.006569-0.000585-0.011529
140.0079620.0088630.008664
15-0.013066-0.0140630.010798
160.015031-0.022828-0.012386
17-0.030767-0.005241-0.004074
18-0.0155500.0005750.018040
19-0.0214100.017525-0.019255
20-0.008709-0.025105-0.037323
21-0.019928-0.0211550.027445
220.006975-0.0546090.051178
230.0268620.029882-0.001727
240.015763-0.017278-0.017399
250.0029820.002079-0.017018
26-0.0184630.006366-0.004049
270.0199550.0380220.010014
28-0.0222570.017349-0.009230
290.013994-0.003917-0.013153
30-0.0112390.015926-0.008056
31-0.008248-0.017354-0.017320
32-0.005396-0.005860-0.010104
330.000010-0.0057500.004888
340.0090310.007135-0.007747
35-0.0188050.0045980.009809
\n", - "
" - ], - "text/plain": [ - " x y z\n", - "0 -0.022537 -0.022397 0.017390\n", - "1 0.019059 0.023620 -0.016686\n", - "2 0.021634 0.019195 -0.000053\n", - "3 0.023948 -0.020076 0.043107\n", - "4 0.026041 -0.010650 0.009122\n", - "5 0.020240 0.013751 0.023454\n", - "6 -0.003563 -0.002417 -0.003920\n", - "7 -0.005582 0.003436 0.019703\n", - "8 0.008100 -0.000550 -0.001811\n", - "9 -0.025523 0.024057 -0.030199\n", - "10 0.012439 -0.021227 -0.021183\n", - "11 0.030189 -0.004612 -0.008447\n", - "12 -0.035746 0.043295 0.019007\n", - "13 0.006569 -0.000585 -0.011529\n", - "14 0.007962 0.008863 0.008664\n", - "15 -0.013066 -0.014063 0.010798\n", - "16 0.015031 -0.022828 -0.012386\n", - "17 -0.030767 -0.005241 -0.004074\n", - "18 -0.015550 0.000575 0.018040\n", - "19 -0.021410 0.017525 -0.019255\n", - "20 -0.008709 -0.025105 -0.037323\n", - "21 -0.019928 -0.021155 0.027445\n", - "22 0.006975 -0.054609 0.051178\n", - "23 0.026862 0.029882 -0.001727\n", - "24 0.015763 -0.017278 -0.017399\n", - "25 0.002982 0.002079 -0.017018\n", - "26 -0.018463 0.006366 -0.004049\n", - "27 0.019955 0.038022 0.010014\n", - "28 -0.022257 0.017349 -0.009230\n", - "29 0.013994 -0.003917 -0.013153\n", - "30 -0.011239 0.015926 -0.008056\n", - "31 -0.008248 -0.017354 -0.017320\n", - "32 -0.005396 -0.005860 -0.010104\n", - "33 0.000010 -0.005750 0.004888\n", - "34 0.009031 0.007135 -0.007747\n", - "35 -0.018805 0.004598 0.009809" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Difference in forces from vasp and qe [eV/Ang]\n", - "pd.DataFrame(tabDeltaForces, columns=[\"x\", \"y\", \"z\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.16" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 000000000..53b0aa22a --- /dev/null +++ b/pytest.ini @@ -0,0 +1,5 @@ +[pytest] +addopts = --ignore=test/basic_gpu_test.py +testpaths = + test + diff --git a/requirements.txt b/requirements.txt index e81c8aeab..2dea99b1c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,5 +6,5 @@ mpmath numpy optuna scipy -oapackage pandas +tensorboard diff --git a/setup.py b/setup.py index f865679ca..be1d7efab 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup +from setuptools import setup, find_packages # Doing it as suggested here: # https://packaging.python.org/guides/single-sourcing-package-version/ @@ -8,16 +8,34 @@ with open("mala/version.py") as fp: exec(fp.read(), version) +with open("README.md") as f: + readme = f.read() + +with open("LICENSE") as f: + license = f.read() + +extras = { + 'dev': ['bump2version'], + 'opt': ['oapackage'], + 'test': ['pytest'], + 'doc': open('docs/requirements.txt').read().splitlines(), +} + setup( name="mala", version=version["__version__"], - description="Framework for Electronic Structure Learning", - url="https://gitlab.com/hzdr/mala/mala", - author="Lenz Fiedler", - author_email="l.fiedler@hzdr.de", - license="MIT", - packages=["mala"], + description=("Materials Learning Algorithms. " + "A framework for machine learning materials properties from " + "first-principles data."), + long_description=readme, + long_description_content_type='text/markdown', + url="https://github.com/mala-project/mala", + author="MALA developers", + license=license, + packages=find_packages(exclude=("test", "docs", "examples", "install", + "ml-dft-sandia")), zip_safe=False, install_requires=open('requirements.txt').read().splitlines(), + etxras_require=extras, python_requires='<3.9', ) diff --git a/test/basic_gpu_test.py b/test/basic_gpu_test.py index 591a379b7..ab380dfb0 100644 --- a/test/basic_gpu_test.py +++ b/test/basic_gpu_test.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 -"""GPU test +""" +GPU test This is a very basic test of the GPU functionalities of MALA (i.e. pytorch, which MALA relies on). Two things are tested: @@ -9,120 +10,134 @@ a training is performed. It is measured whether or not the utilization of the GPU results in a speed up. """ +import os +import time + import mala from mala import printout -from data_repo_path import get_data_repo_path -import time import numpy as np -data_path = get_data_repo_path()+"Al36/" -test_checkpoint_name = "test" +import pytest +import torch + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") +test_checkpoint_name = "test" -def check_for_gpu(): - test_parameters = mala.Parameters() - test_parameters.use_gpu = True - if test_parameters.use_gpu is False: - return False - return True - - -def test_run(use_gpu): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - - test_parameters = mala.Parameters() - # Currently, the splitting in training, validation and test set are - # done on a "by snapshot" basis. Specify how this is - # done by providing a list containing entries of the form - # "tr", "va" and "te". - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.data.data_splitting_snapshots = ["tr", "tr", "tr", "tr", - "tr", "tr", "va", "te"] - - # Specify the data scaling. - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - - # Specify the used activation function. - test_parameters.network.layer_activations = ["ReLU"] - - # Specify the training parameters. - test_parameters.running.max_number_epochs = 100 - test_parameters.running.mini_batch_size = 40 - test_parameters.running.learning_rate = 0.00001 - test_parameters.running.trainingtype = "Adam" - test_parameters.manual_seed = 1002 - test_parameters.running.use_shuffling_for_samplers = False - test_parameters.use_gpu = use_gpu - - #################### - # DATA - # Add and prepare snapshots for training. - #################### - - data_handler = mala.DataHandler(test_parameters) - - # Add a snapshot we want to use in to the list. - for i in range(0, 6): - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, +# Define the accuracy used in the tests and a parameter to control +# that the GPU acceleration actually does something. +accuracy = 1e-6 +performance_improvement = 1.2 + + +class TestGPUExecution: + """ + Test class for simple GPU execution. + + Tests whether a GPU is available and then the execution on it. + """ + @pytest.mark.skipif(torch.cuda.is_available() is False, + reason="No GPU detected.") + def test_gpu_performance(self): + """ + Test whether GPU training brings performance improvements. + """ + cpu_result = self.__run(False) + gpu_result = self.__run(True) + + # This test is not that well suited for GPU performance + # but we should at least see some kind of speed up. + assert np.isclose(cpu_result[0], gpu_result[0], atol=accuracy) + assert gpu_result[1] > cpu_result[1] / performance_improvement + + @staticmethod + def __run(use_gpu): + """ + Train a network using either GPU or CPU. + + Parameters + ---------- + use_gpu : bool + If True, a GPU will be used, elsewise a CPU will be used for + training. + + Returns + ------- + results : tuple + A tuple containing the the final loss [0] and the execution time + [1]. + + """ + #################### + # PARAMETERS + # All parameters are handled from a central parameters class that + # contains subclasses. + #################### + + test_parameters = mala.Parameters() + # Currently, the splitting in training, validation and test set are + # done on a "by snapshot" basis. Specify how this is + # done by providing a list containing entries of the form + # "tr", "va" and "te". + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "tr", "tr", "tr", + "tr", "tr", "va", "te"] + + # Specify the data scaling. + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + + # Specify the used activation function. + test_parameters.network.layer_activations = ["ReLU"] + + # Specify the training parameters. + test_parameters.running.max_number_epochs = 100 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.manual_seed = 1002 + test_parameters.running.use_shuffling_for_samplers = False + test_parameters.use_gpu = use_gpu + + #################### + # DATA + # Add and prepare snapshots for training. + #################### + + data_handler = mala.DataHandler(test_parameters) + + # Add a snapshot we want to use in to the list. + for i in range(0, 6): + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - data_handler.prepare_data() - printout("Read data: DONE.") - - #################### - # NETWORK SETUP - # Set up the network and trainer we want to use. - # The layer sizes can be specified before reading data, - # but it is safer this way. - #################### - - test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), - 100, - data_handler.get_output_dimension()] - - # Setup network and trainer. - test_network = mala.Network(test_parameters) - test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - starttime = time.time() - test_trainer.train_network() - - return test_trainer.final_test_loss, time.time() - starttime - - -def perform_gpu_test(accuracy=1e-7, performance_improvement=1.2): - cpu_result = test_run(False) - gpu_result = test_run(True) - - # GPU and CPU should deliver the same result. - if np.abs(cpu_result[0] - gpu_result[0]) > accuracy: - printout(cpu_result[0], gpu_result[0]) - return False - - # This test is not that well suited for GPU performance - # but we should at least see some kind of speed up. - printout(cpu_result[1], gpu_result[1]) - if gpu_result[1] > cpu_result[1] / performance_improvement: - printout(cpu_result[1], gpu_result[1]) - return False - return True - - -if __name__ == "__main__": - if check_for_gpu(): - printout("GPU found.") - else: - raise Exception("No GPU on this system.") - if perform_gpu_test(): - printout("GPU test sucessful.") - else: - raise Exception("GPU test failed.") + data_handler.prepare_data() + printout("Read data: DONE.") + + #################### + # NETWORK SETUP + # Set up the network and trainer we want to use. + # The layer sizes can be specified before reading data, + # but it is safer this way. + #################### + + test_parameters.network.layer_sizes = [data_handler. + get_input_dimension(), + 100, + data_handler. + get_output_dimension()] + + # Setup network and trainer. + test_network = mala.Network(test_parameters) + test_trainer = mala.Trainer(test_parameters, test_network, + data_handler) + starttime = time.time() + test_trainer.train_network() + + return test_trainer.final_test_loss, time.time() - starttime diff --git a/test/check_integration_qe/Al.dos.in b/test/check_integration_qe/Al.dos.in deleted file mode 100644 index 7c10ba466..000000000 --- a/test/check_integration_qe/Al.dos.in +++ /dev/null @@ -1,9 +0,0 @@ -&dos - outdir='temp', - prefix='Al', - Emin=-10.0, - Emax=15.0, - DeltaE=0.1, - degauss=0.2, - fildos='Al.dos' -/ diff --git a/test/check_integration_qe/Al.pp.dens.in b/test/check_integration_qe/Al.pp.dens.in deleted file mode 100644 index 908a401a5..000000000 --- a/test/check_integration_qe/Al.pp.dens.in +++ /dev/null @@ -1,10 +0,0 @@ -&inputpp - outdir='temp', - prefix='Al', - plot_num=0, -/ -&plot - iflag=3, - output_format=6, - fileout='Al_dens.cube', -/ diff --git a/test/check_integration_qe/Al.pp.ldos.in b/test/check_integration_qe/Al.pp.ldos.in deleted file mode 100644 index ba0086fb5..000000000 --- a/test/check_integration_qe/Al.pp.ldos.in +++ /dev/null @@ -1,14 +0,0 @@ -&inputpp - outdir='temp', - prefix='Al', - plot_num=3, - emin=-10.0, - emax=15.0, - delta_e=0.1, - degauss_ldos=0.2, -/ -&plot - iflag=3, - output_format=6, - fileout='Al_ldos.cube', -/ diff --git a/test/check_integration_qe/Al.pw.scf.in b/test/check_integration_qe/Al.pw.scf.in deleted file mode 100755 index 588e370dd..000000000 --- a/test/check_integration_qe/Al.pw.scf.in +++ /dev/null @@ -1,74 +0,0 @@ -Al.scf.pw -&CONTROL - calculation='scf' - restart_mode='from_scratch' - tstress=.true. - tprnfor=.true. - prefix='Al' - pseudo_dir='/home/fiedle09/tools/PPs/pbe' - outdir='temp', -/ -&SYSTEM - ibrav=0 - nat=36 - ntyp=1 - nbnd=200 - ecutwfc=100 - ecutrho=400 - occupations='smearing' - smearing='fermi-dirac' - degauss=0.0019 -/ -&ELECTRONS - mixing_mode='plain' - mixing_beta=0.7 - conv_thr=1.0d-8 -/ -ATOMIC_SPECIES - Al 26.981539 Al.pbe-n-rrkjus_psl.1.0.0.UPF - -K_POINTS automatic - 6 6 6 0 0 0 - -CELL_PARAMETERS angstrom - 8.582861487 0.000000000 0.000000000 - 0.000000000 8.582861487 0.000000000 - 0.000000000 0.000000000 8.091999410 - -ATOMIC_POSITIONS {angstrom} -Al 0.00000000 0.00000000 0.00000000 -Al 5.34056471 3.76320368 3.80057551 -Al 7.45085561 3.31178474 1.66230877 -Al 1.93309858 4.10640734 2.77355319 -Al 4.55479859 5.54269445 0.58331323 -Al 5.71092823 4.25719259 6.20098063 -Al 7.66001119 0.95949808 5.74326219 -Al 1.81070895 7.30893851 0.54010633 -Al 3.44829498 1.55865614 3.97194893 -Al 2.78488381 3.85120694 4.66842222 -Al 7.72693528 3.47448257 4.38254264 -Al 6.08779945 6.66208695 5.78649880 -Al 8.49430189 1.91528760 3.06103603 -Al 1.29361043 2.44620504 5.84420713 -Al 1.90001053 1.69908970 1.12227390 -Al 0.34417103 4.75866893 0.66648717 -Al 1.71803816 4.92272922 6.33072605 -Al 8.34187937 6.81520657 5.70183658 -Al 6.26838174 1.62587729 3.19639657 -Al 6.44181760 4.46414710 8.07122158 -Al 5.24348320 2.14031649 7.44241812 -Al 6.04653726 5.13396837 2.41752820 -Al 4.55353305 2.19465176 1.94513159 -Al 1.75534580 0.04719218 5.92958137 -Al 6.69434873 0.91377057 0.73014103 -Al 5.48248044 1.94272031 5.21594438 -Al 2.93579541 3.55269467 7.97142182 -Al 4.66115561 0.15453846 1.84388587 -Al 2.95537223 6.69875903 2.40171344 -Al 1.57353273 8.50054163 2.73750269 -Al 6.43043243 7.93469589 3.35256941 -Al 3.58936469 1.07649279 6.35476431 -Al 3.96998353 5.62877051 4.32698848 -Al 4.06376270 7.94404057 4.73643159 -Al 7.21316133 6.77772530 0.30594854 -Al 8.34260745 6.26794230 2.85903375 diff --git a/test/checkpoint_hyperopt_tests.py b/test/checkpoint_hyperopt_tests.py index 6d028a177..bf51fc112 100644 --- a/test/checkpoint_hyperopt_tests.py +++ b/test/checkpoint_hyperopt_tests.py @@ -1,135 +1,149 @@ +import os + import mala from mala import printout -from data_repo_path import get_data_repo_path import numpy as np -data_path = get_data_repo_path()+"Al36/" -checkpoint_name = "test_ho" +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + +checkpoint_name = "test_ho" -def original_setup(n_trials): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - test_parameters = mala.Parameters() - # Currently, the splitting in training, validation and test set are - # done on a "by snapshot" basis. Specify how this is - # done by providing a list containing entries of the form - # "tr", "va" and "te". - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] - - # Specify the data scaling. - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - - # Specify the training parameters. - test_parameters.running.max_number_epochs = 10 - test_parameters.running.mini_batch_size = 40 - test_parameters.running.learning_rate = 0.00001 - test_parameters.running.trainingtype = "Adam" - - # Specify the number of trials, the hyperparameter optimizer should run - # and the type of hyperparameter. - test_parameters.hyperparameters.n_trials = n_trials - test_parameters.hyperparameters.hyper_opt_method = "optuna" - test_parameters.hyperparameters.checkpoints_each_trial = 5 - test_parameters.hyperparameters.checkpoint_name = checkpoint_name - test_parameters.manual_seed = 1002 - - #################### - # DATA - # Add and prepare snapshots for training. - #################### - data_handler = mala.DataHandler(test_parameters) - - # Add all the snapshots we want to use in to the list. - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - data_handler.prepare_data() - printout("Read data: DONE.") - - #################### - # HYPERPARAMETER OPTIMIZATION - # In order to perform a hyperparameter optimization, - # one has to simply create a hyperparameter optimizer - # and let it perform a "study". - # Before such a study can be done, one has to add all the parameters - # of interest. - #################### - - test_hp_optimizer = mala.HyperOptInterface(test_parameters, data_handler) - - # Learning rate will be optimized. - test_hp_optimizer.add_hyperparameter("float", "learning_rate", - 0.0000001, 0.01) - - # Number of neurons per layer will be optimized. - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, 100) - test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, 100) - - # Choices for activation function at each layer will be optimized. - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_00", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_01", - choices=["ReLU", "Sigmoid"]) - test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_02", - choices=["ReLU", "Sigmoid"]) - - # Perform hyperparameter optimization. - printout("Starting Hyperparameter optimization.") - # test_hp_optimizer.perform_study() - # test_hp_optimizer.set_optimal_parameters() - # printout("Hyperparameter optimization: DONE.") - - # #################### - # # TRAINING - # # Train with these new parameters. - # #################### - # - # test_network = mala.Network(test_parameters) - # test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - # printout("Network setup: DONE.") - # test_trainer.train_network() - # printout("Training: DONE.") - return test_hp_optimizer - - -def resume_checkpoint(): - loaded_params, new_datahandler, new_hyperopt = \ - mala.HyperOptOptuna.resume_checkpoint(checkpoint_name) - return new_hyperopt - - -def run_hyperopt_checkpoint_test(accuracy=1e-14): - # First run the entire test. - hyperopt = original_setup(9) - hyperopt.perform_study() - original_final_test_value = hyperopt.study.best_trial.value - - # Now do the same, but cut at epoch 22 and see if it recovers the - # correct result. - hyperopt = original_setup(9) - hyperopt.perform_study() - hyperopt = resume_checkpoint() - hyperopt.perform_study() - new_final_test_value = hyperopt.study.best_trial.value - - if np.abs(original_final_test_value-new_final_test_value) > accuracy: - print("test_general did not suceed.", original_final_test_value, - new_final_test_value) - return False - return True - - -if __name__ == "__main__": - test1 = run_hyperopt_checkpoint_test() - printout("Checkpoint test - success?:", test1) +# Define the accuracy used in the tests. +accuracy = 1e-14 + + +class TestHyperoptCheckpointing: + """Tests the checkpointing capabilities of the hyperparam optimization.""" + + def test_hyperopt_checkpoint(self): + # First run the entire test. + hyperopt = self.__original_setup(9) + hyperopt.perform_study() + original_final_test_value = hyperopt.study.best_trial.value + + # Now do the same, but cut at epoch 22 and see if it recovers the + # correct result. + hyperopt = self.__original_setup(9) + hyperopt.perform_study() + hyperopt = self.__resume_checkpoint() + hyperopt.perform_study() + new_final_test_value = hyperopt.study.best_trial.value + + assert np.isclose(original_final_test_value, new_final_test_value, + atol=accuracy) + + @staticmethod + def __original_setup(n_trials): + """ + Perform original setup for HyperOpt. + + Parameters + ---------- + n_trials : int + Number of trials to perform. + + Returns + ------- + hyperopt: mala.network.hyper_opt_base.HyperOptBase: + The hyperopt object. + + """ + #################### + # PARAMETERS + # All parameters are handled from a central parameters class that + # contains subclasses. + #################### + test_parameters = mala.Parameters() + # Currently, the splitting in training, validation and test set are + # done on a "by snapshot" basis. Specify how this is + # done by providing a list containing entries of the form + # "tr", "va" and "te". + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + + # Specify the data scaling. + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + + # Specify the training parameters. + test_parameters.running.max_number_epochs = 10 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + + # Specify the number of trials, the hyperparameter optimizer should run + # and the type of hyperparameter. + test_parameters.hyperparameters.n_trials = n_trials + test_parameters.hyperparameters.hyper_opt_method = "optuna" + test_parameters.hyperparameters.checkpoints_each_trial = 5 + test_parameters.hyperparameters.checkpoint_name = checkpoint_name + test_parameters.manual_seed = 1002 + + #################### + # DATA + # Add and prepare snapshots for training. + #################### + data_handler = mala.DataHandler(test_parameters) + + # Add all the snapshots we want to use in to the list. + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + printout("Read data: DONE.") + + #################### + # HYPERPARAMETER OPTIMIZATION + # In order to perform a hyperparameter optimization, + # one has to simply create a hyperparameter optimizer + # and let it perform a "study". + # Before such a study can be done, one has to add all the parameters + # of interest. + #################### + + test_hp_optimizer = mala.HyperOptInterface(test_parameters, + data_handler) + + # Learning rate will be optimized. + test_hp_optimizer.add_hyperparameter("float", "learning_rate", + 0.0000001, 0.01) + + # Number of neurons per layer will be optimized. + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, 100) + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, 100) + + # Choices for activation function at each layer will be optimized. + test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_00", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_01", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + + # Perform hyperparameter optimization. + printout("Starting Hyperparameter optimization.") + + return test_hp_optimizer + + @staticmethod + def __resume_checkpoint(): + """ + Resume a HyperOpt from a checkpoint. + + Returns + ------- + hyperopt: mala.network.hyper_opt_base.HyperOptBase: + The hyperopt object. + + """ + loaded_params, new_datahandler, new_hyperopt = \ + mala.HyperOptOptuna.resume_checkpoint(checkpoint_name) + return new_hyperopt + diff --git a/test/checkpoint_training_tests.py b/test/checkpoint_training_tests.py index f7464b3eb..ba3c58ed2 100644 --- a/test/checkpoint_training_tests.py +++ b/test/checkpoint_training_tests.py @@ -1,176 +1,211 @@ +import os + import mala from mala import printout import numpy as np -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") test_checkpoint_name = "test" +# Define the accuracy used in the tests. +accuracy = 1e-14 + + +class TestTrainingCheckpoint: + """Tests the checkpointing capabilities of the NN training.""" + + def test_general(self): + """Test that training checkpointing works in general.""" + # First run the entire test. + trainer = self.__original_setup(test_checkpoint_name, 40) + trainer.train_network() + original_final_test_loss = trainer.final_test_loss + + # Now do the same, but cut at epoch 22 and see if it recovers the + # correct result. + trainer = self.__original_setup(test_checkpoint_name, 22) + trainer.train_network() + trainer = self.__resume_checkpoint(test_checkpoint_name, 40) + trainer.train_network() + new_final_test_loss = trainer.final_test_loss + assert np.isclose(original_final_test_loss, new_final_test_loss, + atol=accuracy) + + def test_learning_rate(self): + """Test that the learning rate scheduler is correctly checkpointed.""" + # First run the entire test. + trainer = self.__original_setup(test_checkpoint_name, 40, + learning_rate_scheduler="ReduceLROnPlateau", + learning_rate=0.1) + trainer.train_network() + original_learning_rate = trainer.optimizer.param_groups[0]['lr'] + + # Now do the same, but cut at epoch 22 and see if it recovers the + # correct result. + trainer = self.__original_setup(test_checkpoint_name, 22, + learning_rate_scheduler="ReduceLROnPlateau", + learning_rate=0.1) + trainer.train_network() + trainer = self.__resume_checkpoint(test_checkpoint_name, 40) + trainer.train_network() + new_learning_rate = trainer.optimizer.param_groups[0]['lr'] + assert np.isclose(original_learning_rate, new_learning_rate, + atol=accuracy) + + def test_early_stopping(self): + """Test that the early stopping mechanism is correctly checkpointed.""" + # First run the entire test. + trainer = self.__original_setup(test_checkpoint_name, 40, + early_stopping_epochs=30, + learning_rate=0.1) + trainer.train_network() + original_nr_epochs = trainer.last_epoch + + # Now do the same, but cut at epoch 22 and see if it recovers the + # correct result. + trainer = self.__original_setup(test_checkpoint_name, 22, + early_stopping_epochs=30, + learning_rate=0.1) + trainer.train_network() + trainer = self.__resume_checkpoint(test_checkpoint_name, 40) + trainer.train_network() + last_nr_epochs = trainer.last_epoch + + # integer comparison! + assert original_nr_epochs == last_nr_epochs + + @staticmethod + def __original_setup(checkpoint_name, maxepochs, + learning_rate_scheduler=None, + early_stopping_epochs=0, learning_rate=0.00001): + """ + Sets up a NN training. + + Parameters + ---------- + checkpoint_name : string + Name of the checkpoint to be used. + + maxepochs : int + Maximum number of epochs. + + learning_rate_scheduler : string + Type of learning rate scheduler. + + early_stopping_epochs : int + Number of early stopping epochs. + + learning_rate : float + Learning rate to be used. + + Returns + ------- + trainer : mala.network.trainer.Trainer + The trainer object created with the specified parameters. + """ + #################### + # PARAMETERS + # All parameters are handled from a central parameters class that + # contains subclasses. + #################### + + test_parameters = mala.Parameters() + # Currently, the splitting in training, validation and test set are + # done on a "by snapshot" basis. Specify how this is + # done by providing a list containing entries of the form + # "tr", "va" and "te". + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + + # Specify the data scaling. + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + + # Specify the used activation function. + test_parameters.network.layer_activations = ["ReLU"] + + # Specify the training parameters. + test_parameters.running.max_number_epochs = maxepochs + test_parameters.running.mini_batch_size = 38 + test_parameters.running.learning_rate = learning_rate + test_parameters.running.trainingtype = "Adam" + test_parameters.running.learning_rate_scheduler = learning_rate_scheduler + test_parameters.running.learning_rate_decay = 0.1 + test_parameters.running.learning_rate_patience = 30 + test_parameters.running.early_stopping_epochs = early_stopping_epochs + test_parameters.running.early_stopping_threshold = -0.1 + test_parameters.running.checkpoints_each_epoch = 5 + test_parameters.running.checkpoint_name = checkpoint_name + test_parameters.manual_seed = 1002 + test_parameters.running.use_shuffling_for_samplers = False + + #################### + # DATA + # Add and prepare snapshots for training. + #################### + + data_handler = mala.DataHandler(test_parameters) + + # Add a snapshot we want to use in to the list. + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + printout("Read data: DONE.") + + #################### + # NETWORK SETUP + # Set up the network and trainer we want to use. + # The layer sizes can be specified before reading data, + # but it is safer this way. + #################### + + test_parameters.network.layer_sizes = [data_handler. + get_input_dimension(), + 100, + data_handler. + get_output_dimension()] + + # Setup network and trainer. + test_network = mala.Network(test_parameters) + test_trainer = mala.Trainer(test_parameters, test_network, + data_handler) + + return test_trainer + + @staticmethod + def __resume_checkpoint(checkpoint_name, actual_max_epochs): + """ + Resumes a training from checkpoint. + + Parameters + ---------- + checkpoint_name : string + Name of the checkpoint to be used. + + actual_max_epochs : int + Maximum number of epochs to be used in total after recovering + checkpoint. + + Returns + ------- + trainer : mala.network.trainer.Trainer + The trainer object created with the specified parameters. + """ + + loaded_params, loaded_network, \ + new_datahandler, new_trainer = \ + mala.Trainer.resume_checkpoint(checkpoint_name) + loaded_params.running.max_number_epochs = actual_max_epochs + return new_trainer + + + -def original_setup(checkpoint_name, maxepochs, learning_rate_scheduler=None, - early_stopping_epochs=0, learning_rate=0.00001): - #################### - # PARAMETERS - # All parameters are handled from a central parameters class that - # contains subclasses. - #################### - - test_parameters = mala.Parameters() - # Currently, the splitting in training, validation and test set are - # done on a "by snapshot" basis. Specify how this is - # done by providing a list containing entries of the form - # "tr", "va" and "te". - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] - - # Specify the data scaling. - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - - # Specify the used activation function. - test_parameters.network.layer_activations = ["ReLU"] - - # Specify the training parameters. - test_parameters.running.max_number_epochs = maxepochs - test_parameters.running.mini_batch_size = 38 - test_parameters.running.learning_rate = learning_rate - test_parameters.running.trainingtype = "Adam" - test_parameters.running.learning_rate_scheduler = learning_rate_scheduler - test_parameters.running.learning_rate_decay = 0.1 - test_parameters.running.learning_rate_patience = 30 - test_parameters.running.early_stopping_epochs = early_stopping_epochs - test_parameters.running.early_stopping_threshold = -0.1 - test_parameters.running.checkpoints_each_epoch = 5 - test_parameters.running.checkpoint_name = checkpoint_name - test_parameters.manual_seed = 1002 - test_parameters.running.use_shuffling_for_samplers = False - - #################### - # DATA - # Add and prepare snapshots for training. - #################### - - data_handler = mala.DataHandler(test_parameters) - - # Add a snapshot we want to use in to the list. - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - data_handler.prepare_data() - printout("Read data: DONE.") - - #################### - # NETWORK SETUP - # Set up the network and trainer we want to use. - # The layer sizes can be specified before reading data, - # but it is safer this way. - #################### - - test_parameters.network.layer_sizes = [data_handler.get_input_dimension(), - 100, - data_handler.get_output_dimension()] - - # Setup network and trainer. - test_network = mala.Network(test_parameters) - test_trainer = mala.Trainer(test_parameters, test_network, data_handler) - - return test_trainer - - -def resume_checkpoint(checkpoint_name, actual_max_epochs): - loaded_params, loaded_network, \ - new_datahandler, new_trainer = \ - mala.Trainer.resume_checkpoint(checkpoint_name) - loaded_params.running.max_number_epochs = actual_max_epochs - return new_trainer - - -def test_general(accuracy=1e-14): - # First run the entire test. - trainer = original_setup(test_checkpoint_name, 40) - trainer.train_network() - original_final_test_loss = trainer.final_test_loss - - # Now do the same, but cut at epoch 22 and see if it recovers the - # correct result. - trainer = original_setup(test_checkpoint_name, 22) - trainer.train_network() - trainer = resume_checkpoint(test_checkpoint_name, 40) - trainer.train_network() - new_final_test_loss = trainer.final_test_loss - - if np.abs(original_final_test_loss-new_final_test_loss) > accuracy: - print("test_general did not suceed.", original_final_test_loss, - new_final_test_loss) - return False - return True - - -def test_learning_rate(accuracy=1e-14): - # First run the entire test. - trainer = original_setup(test_checkpoint_name, 40, - learning_rate_scheduler="ReduceLROnPlateau", - learning_rate=0.1) - trainer.train_network() - original_learning_rate = trainer.optimizer.param_groups[0]['lr'] - - # Now do the same, but cut at epoch 22 and see if it recovers the - # correct result. - trainer = original_setup(test_checkpoint_name, 22, - learning_rate_scheduler="ReduceLROnPlateau", - learning_rate=0.1) - trainer.train_network() - trainer = resume_checkpoint(test_checkpoint_name, 40) - trainer.train_network() - new_learning_rate = trainer.optimizer.param_groups[0]['lr'] - if np.abs(original_learning_rate-new_learning_rate) > accuracy: - print("test_learning_rate did not suceed.", original_learning_rate, - new_learning_rate) - return False - return True - - -def test_early_stopping(): - # First run the entire test. - trainer = original_setup(test_checkpoint_name, 40, - early_stopping_epochs=30, - learning_rate=0.1) - trainer.train_network() - original_nr_epochs = trainer.last_epoch - - # Now do the same, but cut at epoch 22 and see if it recovers the - # correct result. - trainer = original_setup(test_checkpoint_name, 22, - early_stopping_epochs=30, - learning_rate=0.1) - trainer.train_network() - trainer = resume_checkpoint(test_checkpoint_name, 40) - trainer.train_network() - last_nr_epochs = trainer.last_epoch - - # integer comparison! - if original_nr_epochs != last_nr_epochs: - print("test_early_stopping did not suceed.", original_nr_epochs, - last_nr_epochs) - return False - return True - - -def run_checkpoint_tests(): - if test_general() is False: - return False - if test_learning_rate() is False: - return False - if test_early_stopping() is False: - return False - return True - - -if __name__ == "__main__": - test1 = run_checkpoint_tests() - printout("Checkpoint test - success?:", test1) diff --git a/test/hyperopt_test.py b/test/hyperopt_test.py new file mode 100644 index 000000000..e5115aae9 --- /dev/null +++ b/test/hyperopt_test.py @@ -0,0 +1,260 @@ +import os + +import mala +import numpy as np + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + +# Control how much the loss should be better after hyperopt compared to +# before. This value is fairly high, but we're training on absolutely +# minimal amounts of data. +desired_loss_improvement_factor = 2 + +# Different HO methods will lead to different results, but they should be +# approximately the same. +desired_std_ho = 0.1 + + +class TestHyperparameterOptimization: + """Tests the basic hyperparameter optimization routines.""" + + def test_hyperopt(self): + """Test a regular, optuna based hyperparameter optimization.""" + + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.running.max_number_epochs = 20 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.hyperparameters.n_trials = 20 + test_parameters.hyperparameters.hyper_opt_method = "optuna" + + # Load data. + data_handler = mala.DataHandler(test_parameters) + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + + # Perform the hyperparameter optimization. + test_hp_optimizer = mala.HyperOptInterface(test_parameters, + data_handler) + test_hp_optimizer.add_hyperparameter("float", "learning_rate", + 0.0000001, 0.01) + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, + 100) + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, + 100) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_00", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_01", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.perform_study() + test_hp_optimizer.set_optimal_parameters() + + # + # To see if the hyperparameter optimization actually worked, + # check if the best trial is better then the worst trial + # by a certain factor. + performed_trials_values = test_hp_optimizer.study. \ + trials_dataframe()["value"] + assert desired_loss_improvement_factor * \ + min(performed_trials_values) < \ + max(performed_trials_values) + + def test_different_ho_methods(self): + results = [] + result, last_study = self.__optimize_hyperparameters("optuna") + results.append(result) + results.append(self.__optimize_hyperparameters("oat")) + results.append(self. + __optimize_hyperparameters("notraining", + input_creator_notraining= + "oat")) + results.append(self. + __optimize_hyperparameters("notraining", + input_creator_notraining= + "optuna", + last_optuna_study= + last_study)) + assert np.std(results) < desired_std_ho + + def test_distributed_hyperopt(self): + # Remove the previous data base. + try: + os.remove("test_ho.db") + except FileNotFoundError: + pass + + # Set up parameters + test_parameters = mala.Parameters() + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.running.max_number_epochs = 5 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.hyperparameters.n_trials = 20 + test_parameters.hyperparameters.hyper_opt_method = "optuna" + test_parameters.hyperparameters.study_name = "test_ho" + test_parameters.hyperparameters.rdb_storage = 'sqlite:///test_ho.db' + + # Load data + data_handler = mala.DataHandler(test_parameters) + + # Add all the snapshots we want to use in to the list. + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + + # Create and perform hyperparameter optimization. + test_hp_optimizer = mala.HyperOptInterface(test_parameters, + data_handler) + test_hp_optimizer.add_hyperparameter("float", "learning_rate", + 0.0000001, 0.01) + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_00", 10, + 100) + test_hp_optimizer.add_hyperparameter("int", "ff_neurons_layer_01", 10, + 100) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_00", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_01", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.perform_study() + test_hp_optimizer.set_optimal_parameters() + performed_trials_values = test_hp_optimizer.study. \ + trials_dataframe()["value"] + assert desired_loss_improvement_factor * \ + min(performed_trials_values) < \ + max(performed_trials_values) + + @staticmethod + def __optimize_hyperparameters(hyper_optimizer, + input_creator_notraining="oat", + last_optuna_study=None): + """Perform a hyperparameter optimization with the specified method.""" + + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.running.max_number_epochs = 20 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.hyperparameters.n_trials = 8 + test_parameters.hyperparameters.hyper_opt_method = hyper_optimizer + + # Load data. + data_handler = mala.DataHandler(test_parameters) + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + + # Perform the actual hyperparameter optimization. + test_hp_optimizer = mala.HyperOptInterface(test_parameters, + data_handler) + test_parameters.network.layer_sizes = [ + data_handler.get_input_dimension(), + 100, 100, + data_handler.get_output_dimension()] + + # Add hyperparameters we want to have optimized to the list. + # If we do a notraining run currently we need to create an input array + # using one of the other two possible hyperparameter optimizers. + tmp_hp_optimizer = None + if hyper_optimizer == "oat" or hyper_optimizer == "optuna": + test_hp_optimizer.add_hyperparameter("categorical", "trainingtype", + choices=["Adam", "SGD"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_00", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_01", + choices=["ReLU", "Sigmoid"]) + test_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + elif hyper_optimizer == "notraining": + tmp_parameters = test_parameters + if input_creator_notraining == "optuna" and last_optuna_study is None: + input_creator_notraining = "oat" + tmp_parameters.hyperparameters.hyper_opt_method = \ + input_creator_notraining + tmp_hp_optimizer = mala.HyperOptInterface(tmp_parameters, + data_handler) + tmp_hp_optimizer.add_hyperparameter("categorical", "trainingtype", + choices=["Adam", "SGD"]) + tmp_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_00", + choices=["ReLU", "Sigmoid"]) + tmp_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_01", + choices=["ReLU", "Sigmoid"]) + tmp_hp_optimizer.add_hyperparameter("categorical", + "layer_activation_02", + choices=["ReLU", "Sigmoid"]) + + # Perform hyperparameter optimization. + if hyper_optimizer == "oat" or hyper_optimizer == "optuna": + test_hp_optimizer.perform_study() + if hyper_optimizer == "optuna": + last_optuna_study = test_hp_optimizer.get_trials_from_study() + elif hyper_optimizer == "notraining": + if input_creator_notraining == "optuna": + test_hp_optimizer.perform_study(trial_list=last_optuna_study) + else: + test_hp_optimizer.perform_study(trial_list= + tmp_hp_optimizer.get_orthogonal_array()) + test_hp_optimizer.set_optimal_parameters() + + # Train the final network. + test_network = mala.Network(test_parameters) + test_trainer = mala.Trainer(test_parameters, test_network, + data_handler) + test_trainer.train_network() + test_parameters.show() + if hyper_optimizer == "optuna": + return test_trainer.final_test_loss, last_optuna_study + else: + return test_trainer.final_test_loss diff --git a/test/inference_test.py b/test/inference_test.py index 1ad088a17..1d814dfe5 100644 --- a/test/inference_test.py +++ b/test/inference_test.py @@ -1,119 +1,254 @@ -from mala.common.parameters import Parameters -from mala.datahandling.data_handler import DataHandler -from mala.datahandling.data_scaler import DataScaler -from mala.network.network import Network -from mala.network.tester import Tester -from mala.common.parameters import printout +import importlib +import os + +import pytest import numpy as np -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" -param_path = get_data_repo_path()+"example05_data/" -params_path = param_path+"ex05_params.pkl" -network_path = param_path+"ex05_network.pth" -input_scaler_path = param_path+"ex05_iscaler.pkl" -output_scaler_path = param_path+"ex05_oscaler.pkl" - - -def test_inference(accuracy_prediction=1e-16, accuracy_actual=1e-16, - use_lazy_loading=False): - # First we load Parameters and network. - new_parameters = Parameters.load_from_file(params_path, no_snapshots=True) - new_parameters.data.data_splitting_snapshots = ["te", "te", "te"] - new_parameters.data.use_lazy_loading = use_lazy_loading - new_parameters.running.mini_batch_size = 9 - new_parameters.running.mini_batch_size = 46 - new_parameters.running.mini_batch_size = 46 - - new_network = Network.load_from_file(new_parameters, network_path) - - # We use a data handler object to read the data we want to investigate. - # We need to make sure that the same scaling is used. - iscaler = DataScaler.load_from_file(input_scaler_path) - oscaler = DataScaler.load_from_file(output_scaler_path) - inference_data_handler = DataHandler(new_parameters, - input_data_scaler=iscaler, - output_data_scaler=oscaler) - inference_data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry") - inference_data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry") - inference_data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry") - - inference_data_handler.prepare_data() - - for n in [46, 99, 500, 1977]: - new_parameters.running.mini_batch_size = n +from mala import Parameters, DataHandler, DataScaler, Network, Tester, \ + Trainer, Predictor + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") +param_path = os.path.join(data_repo_path, "workflow_test/") +beryllium_path = os.path.join(os.path.join(data_repo_path, "Be2"), + "training_data") +params_path = param_path+"workflow_test_params.pkl" +network_path = param_path+"workflow_test_network.pth" +input_scaler_path = param_path+"workflow_test_iscaler.pkl" +output_scaler_path = param_path+"workflow_test_oscaler.pkl" +accuracy_strict = 1e-16 +accuracy_coarse = 5e-7 + + +class TestInference: + """Tests several inference/accuracy related parts.""" + + def test_unit_conversion(self): + """Test that RAM inexpensive unit conversion works.""" + new_parameters = Parameters.load_from_file(params_path, + no_snapshots=True) + new_parameters.data.data_splitting_snapshots = ["te"] + new_parameters.data.use_lazy_loading = False + new_parameters.running.mini_batch_size = 50 + + new_network = Network.load_from_file(new_parameters, network_path) + + # We use a data handler object to read the data we want to investigate. + # We need to make sure that the same scaling is used. + iscaler = DataScaler.load_from_file(input_scaler_path) + oscaler = DataScaler.load_from_file(output_scaler_path) + inference_data_handler = DataHandler(new_parameters, + input_data_scaler=iscaler, + output_data_scaler=oscaler) + inference_data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", + data_path, + "Al_debug_2k_nr0.out.npy", + data_path, + output_units="1/Ry") + + inference_data_handler.prepare_data() + + # Confirm that unit conversion does not introduce any errors. + + from_file_1 = inference_data_handler.target_calculator.\ + convert_units(np.load(os.path.join(data_path, "Al_debug_2k_nr" + str(0) + ".out.npy")), + in_units="1/Ry") + from_file_2 = np.load(os.path.join(data_path, "Al_debug_2k_nr" + str(0) + ".out.npy"))\ + * inference_data_handler.target_calculator.convert_units(1, in_units="1/Ry") + + assert from_file_1.sum() == from_file_2.sum() + + def test_inference_ram(self): + """ + Test inference accuracy (for RAM based trainings). + + What is explicitly tested is that the scaling and rescaling do not + change the values too drastically. During inference (or at least + in the test case) this is done. + """ + # Without lazy loading, there is a bigger numerical error in the actual + # outputs. This is due to the fact that we scale and rescale data on 32 + # byte float arrays; lazy loading is therefore drastically advised for + # inference/testing purposes. + batchsizes = [46, 99, 500, 1977] + for batchsize in batchsizes: + actual_ldos, from_file, predicted_ldos, raw_predicted_outputs =\ + self.__run(use_lazy_loading=False, batchsize=batchsize) + assert np.isclose(actual_ldos.sum(), from_file.sum(), + atol=accuracy_coarse) + + def test_inference_lazy_loading(self): + """ + Test inference accuracy (for lazy loading based trainings). + + What is explicitly tested is that the scaling and rescaling do not + change the values too drastically. During inference (or at least + in the test case) this is done. + """ + # Without lazy loading, there is a bigger numerical error in the actual + # outputs. This is due to the fact that we scale and rescale data on 32 + # byte float arrays; lazy loading is therefore drastically advised for + # inference/testing purposes. + batchsizes = [46, 99, 500, 1977] + for batchsize in batchsizes: + actual_ldos, from_file, predicted_ldos, raw_predicted_outputs = \ + self.__run(use_lazy_loading=True, batchsize=batchsize) + assert np.isclose(actual_ldos.sum(), from_file.sum(), + atol=accuracy_strict) + + @pytest.mark.skipif(importlib.util.find_spec("lammps") is None, + reason="LAMMPS is currently not part of the pipeline.") + def test_predictions(self): + """ + Test that Predictor class and Tester class give the same results. + + They in principle do the same, but use slightly different routines + under the hood. To test this, a small network is trained, and + afterwards, objects from bot classes are used to predict the + number of electrons and band energy. + """ + #################### + # Set up and train a network to be used for the tests. + #################### + + test_parameters = Parameters() + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va"] + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.network.layer_activations = ["ReLU"] + test_parameters.running.max_number_epochs = 100 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.targets.target_type = "LDOS" + test_parameters.targets.ldos_gridsize = 11 + test_parameters.targets.ldos_gridspacing_ev = 2.5 + test_parameters.targets.ldos_gridoffset_ev = -5 + test_parameters.running.inference_data_grid = [18, 18, 27] + test_parameters.descriptors.descriptor_type = "SNAP" + test_parameters.descriptors.twojmax = 10 + test_parameters.descriptors.rcutfac = 4.67637 + + data_handler = DataHandler(test_parameters) + data_handler.add_snapshot("Be_snapshot1.in.npy", beryllium_path, + "Be_snapshot1.out.npy", beryllium_path) + data_handler.add_snapshot("Be_snapshot2.in.npy", beryllium_path, + "Be_snapshot2.out.npy", beryllium_path) + data_handler.prepare_data() + + test_parameters.network.layer_sizes = [ + data_handler.get_input_dimension(), + 100, + data_handler.get_output_dimension()] + test_network = Network(test_parameters) + test_trainer = Trainer(test_parameters, test_network, + data_handler) + test_trainer.train_network() + + #################### + # Now, first use the Tester class to make a prediction. + #################### + + test_parameters.data.use_lazy_loading = True + inference_data_handler = DataHandler(test_parameters, + input_data_scaler=data_handler. + input_data_scaler, + output_data_scaler=data_handler. + output_data_scaler) + inference_data_handler.clear_data() + test_parameters.data.data_splitting_snapshots = ["te"] + inference_data_handler.add_snapshot("Be_snapshot3.in.npy", + beryllium_path, + "Be_snapshot3.out.npy", + beryllium_path) + inference_data_handler.prepare_data(reparametrize_scaler=False) + + tester = Tester(test_parameters, test_network, inference_data_handler) + actual_ldos, predicted_ldos = tester.test_snapshot(0) + ldos_calculator = inference_data_handler.target_calculator + ldos_calculator.read_additional_calculation_data("qe.out", os.path.join( + beryllium_path, + "Be_snapshot3.out")) + + band_energy_tester_class = ldos_calculator.get_band_energy(predicted_ldos) + nr_electrons_tester_class = ldos_calculator.\ + get_number_of_electrons(predicted_ldos) + + #################### + # Now, use the predictor class to make the same prediction. + #################### + + predictor = Predictor(test_parameters, test_network, + inference_data_handler) + predicted_ldos = predictor.predict_from_qeout(os.path.join( + beryllium_path, + "Be_snapshot3.out")) + + # In order for the results to be the same, we have to use the same + # parameters. + inference_data_handler. \ + target_calculator.\ + read_additional_calculation_data("qe.out", os.path.join( + beryllium_path, + "Be_snapshot3.out")) + + nr_electrons_predictor_class = inference_data_handler.\ + target_calculator.get_number_of_electrons(predicted_ldos) + band_energy_predictor_class = inference_data_handler.\ + target_calculator.get_band_energy(predicted_ldos) + + assert np.isclose(band_energy_predictor_class, + band_energy_tester_class, + atol=accuracy_strict) + assert np.isclose(nr_electrons_predictor_class, + nr_electrons_tester_class, + atol=accuracy_strict) + + @staticmethod + def __run(use_lazy_loading=False, batchsize=46): + # First we load Parameters and network. + new_parameters = Parameters.load_from_file(params_path, + no_snapshots=True) + new_parameters.data.data_splitting_snapshots = ["te"] + new_parameters.data.use_lazy_loading = use_lazy_loading + new_parameters.running.mini_batch_size = batchsize + + new_network = Network.load_from_file(new_parameters, network_path) + + # We use a data handler object to read the data we want to investigate. + # We need to make sure that the same scaling is used. + iscaler = DataScaler.load_from_file(input_scaler_path) + oscaler = DataScaler.load_from_file(output_scaler_path) + inference_data_handler = DataHandler(new_parameters, + input_data_scaler=iscaler, + output_data_scaler=oscaler) + inference_data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", + data_path, + "Al_debug_2k_nr0.out.npy", + data_path, + output_units="1/Ry") + + inference_data_handler.prepare_data() + tester = Tester(new_parameters, new_network, inference_data_handler) - for i in range(0, inference_data_handler.nr_snapshots): - # Get values with current framework. - actual_ldos, predicted_ldos = tester.test_snapshot(i) - - # Confirm that unit conversion does not introduce any errors. - from_file_1 = inference_data_handler.target_calculator.\ - convert_units(np.load(data_path+"Al_debug_2k_nr"+str(i) + - ".out.npy"), in_units="1/Ry") - from_file_2 = np.load(data_path+"Al_debug_2k_nr"+str(i) + - ".out.npy")*inference_data_handler.\ - target_calculator.convert_units(1, in_units="1/Ry") - error = np.abs(from_file_1.sum()-from_file_2.sum()) - if error > 0: - printout("Accuracy not met for unit coversion with error" - " being {0}".format(error)) - printout("Batchsize: {0}, lazy loading: {1}". - format(n, new_parameters.data.use_lazy_loading)) - - # Compare actual_ldos with file directly. - # This is the only comparison that counts. - from_file = inference_data_handler.target_calculator.\ - convert_units(np.load(data_path+"Al_debug_2k_nr" + - str(i)+".out.npy"), in_units="1/Ry") - error = np.abs(actual_ldos.sum()-from_file.sum()) - if error > accuracy_actual: - printout("Accuracy not met for raw data with error " - "being {0}".format(error)) - printout("Batchsize: {0}, lazy loading: {1}". - format(n, new_parameters.data.use_lazy_loading)) - return False - - # Test if prediction still works. - raw_predicted_outputs = np.load(data_path+"Al_debug_2k_nr"+str(i) + - ".in.npy") - raw_predicted_outputs = inference_data_handler.\ - raw_numpy_to_converted_scaled_tensor(raw_predicted_outputs, - "in", "None") - raw_predicted_outputs = new_network.\ - do_prediction(raw_predicted_outputs) - raw_predicted_outputs = inference_data_handler.output_data_scaler.\ - inverse_transform(raw_predicted_outputs, as_numpy=True) - error = np.abs(predicted_ldos.sum()-raw_predicted_outputs.sum()) - if error > accuracy_prediction: - printout("Accuracy not met for prediction with error " - "being {0}".format(error)) - printout("Parameters are batchsize: {0}, lazy loading: {1}". - format(n, new_parameters.data.use_lazy_loading)) - return False - - return True - - -def run_inference_test(): - # Without lazy loading, there is a bigger numerical error in the actual - # outputs. This is due to the fact that we scale and rescale data on 32 - # byte float arrays; lazy loading is therefore drastically advised for - # inference/testing purposes. - if test_inference(accuracy_prediction=5e-7, accuracy_actual=5e-7, - use_lazy_loading=False) is False: - return False - if test_inference(accuracy_prediction=0, accuracy_actual=0, - use_lazy_loading=True) is False: - return False - return True - - -if __name__ == "__main__": - test1 = run_inference_test() - printout("Inference test - success?:", test1) + + # Get values with current framework. + actual_ldos, predicted_ldos = tester.test_snapshot(0) + + # Compare actual_ldos with file directly. + # This is the only comparison that counts. + from_file = inference_data_handler.target_calculator.\ + convert_units(np.load(os.path.join(data_path, "Al_debug_2k_nr" + str(0)+".out.npy")), + in_units="1/Ry") + + # Test if prediction still works. + raw_predicted_outputs = np.load(os.path.join(data_path, "Al_debug_2k_nr" + str(0) + ".in.npy")) + raw_predicted_outputs = inference_data_handler.\ + raw_numpy_to_converted_scaled_tensor(raw_predicted_outputs, + "in", "None") + raw_predicted_outputs = new_network.\ + do_prediction(raw_predicted_outputs) + raw_predicted_outputs = inference_data_handler.output_data_scaler.\ + inverse_transform(raw_predicted_outputs, as_numpy=True) + + return actual_ldos, from_file, predicted_ldos, raw_predicted_outputs diff --git a/test/installation_test.py b/test/installation_test.py new file mode 100644 index 000000000..efb56fd55 --- /dev/null +++ b/test/installation_test.py @@ -0,0 +1,31 @@ +import os + +import mala +import numpy as np + + +class TestInstallation: + """Verifies the installation.""" + + def test_installation(self): + """Test the MALA installation.""" + test_parameters = mala.Parameters() + test_descriptors = mala.DescriptorInterface(test_parameters) + test_targets = mala.TargetInterface(test_parameters) + test_handler = mala.DataHandler(test_parameters, + descriptor_calculator=test_descriptors, + target_calculator=test_targets) + test_network = mala.Network(test_parameters) + test_hpoptimizer = mala.HyperOptInterface(test_parameters, + test_handler) + + # If this test fails, then it will throw an exception way before. + assert True + + def test_data_repo(self): + """Test whether the data repo is set up properly""" + from data_repo_path import data_repo_path + test_array = np.load(os.path.join(data_repo_path, + "linking_tester.npy")) + assert np.array_equal(test_array, [1, 2, 3, 4]) + diff --git a/test/integration_test.py b/test/integration_test.py new file mode 100644 index 000000000..e77f20910 --- /dev/null +++ b/test/integration_test.py @@ -0,0 +1,192 @@ +import os + +from mala import LDOS, Density, DOS, Parameters, printout +from mala.targets.calculation_helpers import * +import numpy as np +import scipy as sp +import pytest + +from data_repo_path import data_repo_path + +# In order to test the integration capabilities of MALA we need a +# QuantumEspresso +# calculation containing the following: +# 1. Outfile from the run +# 2. LDOS cube files. +# 3. Density cube file. +# 4. A DOS file. +# Scripts to reproduce the data files used in this test script can be found +# in the data repo. + +data_path = os.path.join(data_repo_path, "Be2") +path_to_out = os.path.join(data_path, "Be.pw.scf.out") +path_to_ldos_npy = os.path.join(data_path, "Be_ldos.npy") +path_to_dos_npy = os.path.join(data_path, "Be_dos.npy") +path_to_dens_npy = os.path.join(data_path, "Be_dens.npy") + +# We can read from numpy arrays or directly from QE data. +# In the later case, numpy arrays will be saved for the subsqeuent run. +numpy_arrays = True + +# Define the parameters used for the experiments. +test_parameters = Parameters() +test_parameters.targets.ldos_gridsize = 11 +test_parameters.targets.ldos_gridspacing_ev = 2.5 +test_parameters.targets.ldos_gridoffset_ev = -5 + +# Define the accuracy used in the tests. +accuracy = 1e-6 +accuracy_dos = 1e-4 +accuracy_ldos = 0.2 + + +class TestMALAIntegration: + """ + Test class for MALA's integation routines. + + Tests different integrations that would normally be performed by code. + """ + def test_analytical_integration(self): + """ + Test whether the analytical integration works in principle. + """ + # Values used for the test. + energies = np.array([6.83, 7.11]) + gridsize = 2 + e_fermi = 7.0 + temp = 298 + + # Calculate the analytical values. + beta = 1 / (kB * temp) + x = beta * (energies - e_fermi) + fi_0 = np.zeros(gridsize, dtype=np.float64) + fi_1 = np.zeros(gridsize, dtype=np.float64) + fi_2 = np.zeros(gridsize, dtype=np.float64) + for i in range(0, gridsize): + + # Calculate beta and x + fi_0[i] = get_f0_value(x[i], beta) + fi_1[i] = get_f1_value(x[i], beta) + fi_2[i] = get_f2_value(x[i], beta) + aint_0 = fi_0[1] - fi_0[0] + aint_1 = fi_1[1] - fi_1[0] + aint_2 = fi_2[1] - fi_2[0] + + # Calculate the numerically approximated values. + qint_0, abserr = sp.integrate.quad( + lambda e: fermi_function_eV(e, e_fermi, temp), + energies[0], energies[-1]) + qint_1, abserr = sp.integrate.quad( + lambda e: (e - e_fermi) * fermi_function_eV(e, e_fermi, temp), + energies[0], energies[-1]) + qint_2, abserr = sp.integrate.quad( + lambda e: (e - e_fermi) ** 2 * fermi_function_eV(e, e_fermi, temp), + energies[0], energies[-1]) + + # Calculate the errors. + error0 = np.abs(aint_0 - qint_0) + error1 = np.abs(aint_1 - qint_1) + error2 = np.abs(aint_2 - qint_2) + + # Analyze the errors. + assert np.isclose(error0, 0, atol=accuracy) + assert np.isclose(error1, 0, atol=accuracy) + assert np.isclose(error2, 0, atol=accuracy) + + def test_qe_dens_to_nr_of_electrons(self): + """ + Test integration of density on real space grid. + + The integral of the density of the real space grid should yield the + number of electrons. + """ + # Create a calculator. + dens_calculator = Density(test_parameters) + dens_calculator.read_additional_calculation_data("qe.out", path_to_out) + + # Read the input data. + density_dft = np.load(path_to_dens_npy) + + # Calculate the quantities we want to compare. + nr_mala = dens_calculator.get_number_of_electrons(density_dft) + nr_dft = dens_calculator.number_of_electrons + + # Calculate relative error. + rel_error = np.abs(nr_mala-nr_dft) / nr_dft + printout("Relative error number of electrons: ", rel_error) + + # Check against the constraints we put upon ourselves. + assert np.isclose(rel_error, 0, atol=accuracy) + + @pytest.mark.skipif(os.path.isfile(path_to_ldos_npy) is False, + reason="No LDOS file in data repo found.") + def test_qe_ldos_to_density(self): + """ + Test integration of local density of states on energy grid. + + The integral of the LDOS over energy grid should yield the density. + """ + # Create a calculator.abs() + ldos_calculator = LDOS(test_parameters) + ldos_calculator.read_additional_calculation_data("qe.out", path_to_out) + + # Read the input data. + density_dft = np.load(path_to_dens_npy) + ldos_dft = np.load(path_to_ldos_npy) + + # Calculate the quantities we want to compare. + self_consistent_fermi_energy = ldos_calculator.\ + get_self_consistent_fermi_energy_ev(ldos_dft) + density_mala = ldos_calculator.\ + get_density(ldos_dft, fermi_energy_ev=self_consistent_fermi_energy) + density_mala_sum = density_mala.sum() + density_dft_sum = density_dft.sum() + + # Calculate relative error. + rel_error = np.abs(density_mala_sum-density_dft_sum) / density_dft_sum + printout("Relative error for sum of density: ", rel_error) + + # Check against the constraints we put upon ourselves. + assert np.isclose(rel_error, 0, atol=accuracy) + + @pytest.mark.skipif(os.path.isfile(path_to_ldos_npy) is False, + reason="No LDOS file in data repo found.") + def test_qe_ldos_to_dos(self): + """ + Test integration of local density of states on real space grid. + + The integral of the LDOS over real space grid should yield the DOS. + """ + ldos_calculator = LDOS(test_parameters) + ldos_calculator.read_additional_calculation_data("qe.out", path_to_out) + dos_calculator = DOS(test_parameters) + dos_calculator.read_additional_calculation_data("qe.out", path_to_out) + + # Read the input data. + ldos_dft = np.load(path_to_ldos_npy) + dos_dft = np.load(path_to_dos_npy) + + # Calculate the quantities we want to compare. + dos_mala = ldos_calculator.get_density_of_states(ldos_dft) + dos_mala_sum = dos_mala.sum() + dos_dft_sum = dos_dft.sum() + rel_error = np.abs(dos_mala_sum-dos_dft_sum) / dos_dft_sum + printout("Relative error for sum of DOS: ", rel_error) + + # Check against the constraints we put upon ourselves. + assert np.isclose(rel_error, 0, atol=accuracy_ldos) + + def test_pwevaldos_vs_ppdos(self): + """Check pp.x DOS vs. pw.x DOS (from eigenvalues in outfile).""" + dos_calculator = DOS(test_parameters) + dos_calculator.read_additional_calculation_data("qe.out", path_to_out) + + dos_from_pp = np.load(path_to_dos_npy) + + # Calculate the quantities we want to compare. + dos_from_dft = dos_calculator.read_from_qe_out() + dos_pp_sum = dos_from_pp.sum() + dos_dft_sum = dos_from_dft.sum() + rel_error = np.abs(dos_dft_sum-dos_pp_sum) / dos_pp_sum + + assert np.isclose(rel_error, 0, atol=accuracy_dos) diff --git a/test/lazy_loading_basic.py b/test/lazy_loading_basic.py deleted file mode 100644 index d889a1f13..000000000 --- a/test/lazy_loading_basic.py +++ /dev/null @@ -1,164 +0,0 @@ -from mala.common.parameters import Parameters -from mala.common.printout import printout -from mala.datahandling.data_handler import DataHandler -import torch -import numpy as np - -# This test compares the data scaling using the regular scaling procedure and -# the lazy-loading one (incremental fitting). -from mala.network.network import Network -from mala.network.trainer import Trainer -from data_repo_path import get_data_repo_path -data_path_Al = get_data_repo_path()+"Al36/" - - -def test_lazy_loading_basic(data_path="../examples/data/", accuracy=0.001): - #################### - # PARAMETERS - #################### - test_parameters = Parameters() - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.descriptors.twojmax = 11 - test_parameters.targets.ldos_gridsize = 10 - test_parameters.network.layer_activations = ["LeakyReLU"] - test_parameters.running.max_number_epochs = 3 - test_parameters.running.mini_batch_size = 512 - test_parameters.running.learning_rate = 0.00001 - test_parameters.running.trainingtype = "Adam" - test_parameters.comment = "Lazy loading test." - test_parameters.network.nn_type = "feed-forward" - test_parameters.running.use_gpu = True - test_parameters.data.use_lazy_loading = False - - #################### - # DATA - #################### - - dataset_tester = [] - results = [] - training_tester = [] - for scalingtype in ["standard", "normal", "feature-wise-standard", - "feature-wise-normal"]: - comparison = [scalingtype] - for ll_type in [True, False]: - this_result = [] - if ll_type: - this_result.append("lazy-loading") - else: - this_result.append("RAM") - test_parameters.data.use_lazy_loading = ll_type - test_parameters.data.input_rescaling_type = scalingtype - test_parameters.data.output_rescaling_type = scalingtype - data_handler = DataHandler(test_parameters) - data_handler.clear_data() - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="va") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="te") - data_handler.prepare_data() - if scalingtype == "standard": - # The lazy-loading STD equation (and to a smaller amount the - # mean equation) is having some small accurcay issue that - # I presume to be due to numerical constraints. To make a - # meaningful comparison it is wise to scale the value here. - this_result.append(data_handler.input_data_scaler.total_mean / - data_handler.nr_training_data) - this_result.append(data_handler.input_data_scaler.total_std / - data_handler.nr_training_data) - this_result.append(data_handler.output_data_scaler.total_mean / - data_handler.nr_training_data) - this_result.append(data_handler.output_data_scaler.total_std / - data_handler.nr_training_data) - if scalingtype == "normal": - torch.manual_seed(2002) - this_result.append(data_handler.input_data_scaler.total_max) - this_result.append(data_handler.input_data_scaler.total_min) - this_result.append(data_handler.output_data_scaler.total_max) - this_result.append(data_handler.output_data_scaler.total_min) - dataset_tester.append((data_handler.training_data_set[3998]) - [0].sum() + - (data_handler.training_data_set[3999]) - [0].sum() + - (data_handler.training_data_set[4000]) - [0].sum() + - (data_handler.training_data_set[4001]) - [0].sum()) - test_parameters.network.layer_sizes = \ - [data_handler.get_input_dimension(), 100, - data_handler.get_output_dimension()] - - # Setup network and trainer. - test_network = Network(test_parameters) - test_trainer = Trainer(test_parameters, test_network, - data_handler) - training_tester.append(test_trainer.final_test_loss - - test_trainer.initial_test_loss) - - if scalingtype == "feature-wise-standard": - # The lazy-loading STD equation (and to a smaller amount the - # mean equation) is having some small accurcay issue that - # I presume to be due to numerical constraints. To make a - # meaningful comparison it is wise to scale the value here. - this_result.append(torch.mean(data_handler.input_data_scaler. - means)/data_handler.grid_size) - this_result.append(torch.mean(data_handler.input_data_scaler. - stds)/data_handler.grid_size) - this_result.append(torch.mean(data_handler.output_data_scaler. - means)/data_handler.grid_size) - this_result.append(torch.mean(data_handler.output_data_scaler. - stds)/data_handler.grid_size) - if scalingtype == "feature-wise-normal": - this_result.append(torch.mean(data_handler.input_data_scaler. - maxs)) - this_result.append(torch.mean(data_handler.input_data_scaler. - mins)) - this_result.append(torch.mean(data_handler.output_data_scaler. - maxs)) - this_result.append(torch.mean(data_handler.output_data_scaler. - mins)) - - comparison.append(this_result) - results.append(comparison) - - for entry in results: - val1 = entry[1][1]-entry[2][1] - val2 = entry[1][2]-entry[2][2] - val3 = entry[1][3]-entry[2][3] - val4 = entry[1][4]-entry[2][4] - if val1 > accuracy or val2 > accuracy or val3 > accuracy or val4 > \ - accuracy: - printout(entry[0]) - printout(val1, val2, val3, val4) - return False - if torch.abs(dataset_tester[0] - dataset_tester[1]) > accuracy: - printout(dataset_tester[0], dataset_tester[1]) - return False - if np.abs(training_tester[0] - training_tester[1]) > accuracy: - printout(training_tester[0], training_tester[1]) - return False - - return True - - -if __name__ == "__main__": - test1 = test_lazy_loading_basic(data_path=data_path_Al) - printout("Check if lazy loading and RAM implementation get the same " - "results? - success?:", test1) diff --git a/test/lazy_loading_horovod_benchmark.py b/test/lazy_loading_horovod_benchmark.py deleted file mode 100644 index 66802ec3d..000000000 --- a/test/lazy_loading_horovod_benchmark.py +++ /dev/null @@ -1,123 +0,0 @@ -from mala.common.parameters import Parameters -from mala.common.printout import printout -from mala.datahandling.data_handler import DataHandler -from mala.network.network import Network -from mala.network.trainer import Trainer -import numpy as np -import time -from data_repo_path import get_data_repo_path -data_path_Al = get_data_repo_path()+"Al36/" - -# This is a benchmark comparing the usage of horovod, lazy loading and RAM -# based storage,. - - -def lazy_loading_horovod_benchmark(data_path="../examples/data/", - accuracy=0.0005): - - #################### - # PARAMETERS - #################### - test_parameters = Parameters() - test_parameters.data.input_rescaling_type = "feature-wise-standard" - test_parameters.data.output_rescaling_type = "normal" - test_parameters.data.data_splitting_type = "by_snapshot" - test_parameters.network.layer_activations = ["LeakyReLU"] - test_parameters.running.max_number_epochs = 20 - test_parameters.running.mini_batch_size = 500 - test_parameters.running.trainingtype = "Adam" - test_parameters.comment = "Horovod / lazy loading benchmark." - test_parameters.network.nn_type = "feed-forward" - test_parameters.manual_seed = 2021 - - #################### - # DATA - #################### - results = [] - for hvduse in [False, True]: - for ll in [True, False]: - start_time = time.time() - test_parameters.running.learning_rate = 0.00001 - test_parameters.data.use_lazy_loading = ll - test_parameters.use_horovod = hvduse - data_handler = DataHandler(test_parameters) - data_handler.clear_data() - data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, - "Al_debug_2k_nr0.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="tr") - data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, - "Al_debug_2k_nr1.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="va") - data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, - "Al_debug_2k_nr2.out.npy", data_path, - output_units="1/Ry", - add_snapshot_as="te") - - data_handler.prepare_data() - test_parameters.network.layer_sizes = \ - [data_handler.get_input_dimension(), 100, - data_handler.get_output_dimension()] - - # Setup network and trainer. - test_network = Network(test_parameters) - test_trainer = Trainer(test_parameters, test_network, data_handler) - - hvdstring = "no horovod" - if hvduse: - hvdstring = "horovod" - - llstring = "data in RAM" - if ll: - llstring = "using lazy loading" - - results.append([hvdstring, llstring, test_trainer. - initial_test_loss, test_trainer.final_test_loss, - time.time() - start_time]) - - diff = [] - # For 4 local processes I get: - # Test: no horovod , using lazy loading - # Initial loss: 0.1342976689338684 - # Final loss: 0.10587086156010628 - # Time: 3.743736743927002 - # Test: no horovod , data in RAM - # Initial loss: 0.13430887088179588 - # Final loss: 0.10572846792638302 - # Time: 1.825883388519287 - # Test: horovod , using lazy loading - # Initial loss: 0.1342976726591587 - # Final loss: 0.10554153844714165 - # Time: 4.513132572174072 - # Test: horovod , data in RAM - # Initial loss: 0.13430887088179588 - # Final loss: 0.1053303349763155 - # Time: 3.2193074226379395 - - for r in results: - printout("Test: ", r[0], ", ", r[1]) - printout("Initial loss: ", r[2]) - printout("Final loss: ", r[3]) - printout("Time: ", r[4]) - diff.append(r[3]-r[2]) - diff = np.array(diff) - - # The loss improvements should be comparable. - if np.std(diff) > accuracy: - printout(np.std(diff)) - return False - return True - - -if __name__ == "__main__": - test1 = lazy_loading_horovod_benchmark(data_path=data_path_Al) - printout("Benchmark of lazy loading, horovod and ? - success?:", test1) diff --git a/test/lazy_loading_test.py b/test/lazy_loading_test.py new file mode 100644 index 000000000..b3d805712 --- /dev/null +++ b/test/lazy_loading_test.py @@ -0,0 +1,284 @@ +import importlib +import os +import time + +from mala import Parameters, printout, DataHandler, Network, Trainer +import numpy as np +import torch +import pytest + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + +# This test compares the data scaling using the regular scaling procedure and +# the lazy-loading one (incremental fitting). + +accuracy_strict = 1e-3 +accuracy_coarse = 1e-3 + + +class TestLazyLoading: + """Tests different aspects surrounding lazy loading.""" + + def test_scaling(self): + """ + Test that the scaling works approximately the same for RAM and LL. + + The are some numerical differences that simply occur, but we can still + check that the scaling results are mostly identical. + """ + #################### + # PARAMETERS + #################### + test_parameters = Parameters() + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.descriptors.twojmax = 11 + test_parameters.targets.ldos_gridsize = 10 + test_parameters.network.layer_activations = ["LeakyReLU"] + test_parameters.running.max_number_epochs = 3 + test_parameters.running.mini_batch_size = 512 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + test_parameters.comment = "Lazy loading test." + test_parameters.network.nn_type = "feed-forward" + test_parameters.running.use_gpu = True + test_parameters.data.use_lazy_loading = False + + #################### + # DATA + #################### + + dataset_tester = [] + results = [] + training_tester = [] + for scalingtype in ["standard", "normal", "feature-wise-standard", + "feature-wise-normal"]: + comparison = [scalingtype] + for ll_type in [True, False]: + this_result = [] + if ll_type: + this_result.append("lazy-loading") + else: + this_result.append("RAM") + test_parameters.data.use_lazy_loading = ll_type + test_parameters.data.input_rescaling_type = scalingtype + test_parameters.data.output_rescaling_type = scalingtype + data_handler = DataHandler(test_parameters) + data_handler.clear_data() + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry", + add_snapshot_as="va") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry", + add_snapshot_as="te") + data_handler.prepare_data() + if scalingtype == "standard": + # The lazy-loading STD equation (and to a smaller amount the + # mean equation) is having some small accurcay issue that + # I presume to be due to numerical constraints. To make a + # meaningful comparison it is wise to scale the value here. + this_result.append(data_handler.input_data_scaler.total_mean / + data_handler.nr_training_data) + this_result.append(data_handler.input_data_scaler.total_std / + data_handler.nr_training_data) + this_result.append(data_handler.output_data_scaler.total_mean / + data_handler.nr_training_data) + this_result.append(data_handler.output_data_scaler.total_std / + data_handler.nr_training_data) + elif scalingtype == "normal": + torch.manual_seed(2002) + this_result.append(data_handler.input_data_scaler.total_max) + this_result.append(data_handler.input_data_scaler.total_min) + this_result.append(data_handler.output_data_scaler.total_max) + this_result.append(data_handler.output_data_scaler.total_min) + dataset_tester.append((data_handler.training_data_set[3998]) + [0].sum() + + (data_handler.training_data_set[3999]) + [0].sum() + + (data_handler.training_data_set[4000]) + [0].sum() + + (data_handler.training_data_set[4001]) + [0].sum()) + test_parameters.network.layer_sizes = \ + [data_handler.get_input_dimension(), 100, + data_handler.get_output_dimension()] + + # Setup network and trainer. + test_network = Network(test_parameters) + test_trainer = Trainer(test_parameters, test_network, + data_handler) + test_trainer.train_network() + training_tester.append(test_trainer.final_test_loss - + test_trainer.initial_test_loss) + + elif scalingtype == "feature-wise-standard": + # The lazy-loading STD equation (and to a smaller amount the + # mean equation) is having some small accurcay issue that + # I presume to be due to numerical constraints. To make a + # meaningful comparison it is wise to scale the value here. + this_result.append(torch.mean(data_handler.input_data_scaler. + means)/data_handler.grid_size) + this_result.append(torch.mean(data_handler.input_data_scaler. + stds)/data_handler.grid_size) + this_result.append(torch.mean(data_handler.output_data_scaler. + means)/data_handler.grid_size) + this_result.append(torch.mean(data_handler.output_data_scaler. + stds)/data_handler.grid_size) + elif scalingtype == "feature-wise-normal": + this_result.append(torch.mean(data_handler.input_data_scaler. + maxs)) + this_result.append(torch.mean(data_handler.input_data_scaler. + mins)) + this_result.append(torch.mean(data_handler.output_data_scaler. + maxs)) + this_result.append(torch.mean(data_handler.output_data_scaler. + mins)) + + comparison.append(this_result) + results.append(comparison) + + for entry in results: + assert np.isclose(entry[1][1], entry[2][1], atol=accuracy_coarse) + assert np.isclose(entry[1][2], entry[2][2], atol=accuracy_coarse) + assert np.isclose(entry[1][3], entry[2][3], atol=accuracy_coarse) + assert np.isclose(entry[1][4], entry[2][4], atol=accuracy_coarse) + assert np.isclose(entry[1][1], entry[2][1], atol=accuracy_coarse) + + assert np.isclose(dataset_tester[0], dataset_tester[1], + atol=accuracy_coarse) + assert np.isclose(training_tester[0], training_tester[1], + atol=accuracy_coarse) + + @pytest.mark.skipif(importlib.util.find_spec("horovod") is None, + reason="Horovod is currently not part of the pipeline") + def test_performance_horovod(self): + + #################### + # PARAMETERS + #################### + test_parameters = Parameters() + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.network.layer_activations = ["LeakyReLU"] + test_parameters.running.max_number_epochs = 20 + test_parameters.running.mini_batch_size = 500 + test_parameters.running.trainingtype = "Adam" + test_parameters.comment = "Horovod / lazy loading benchmark." + test_parameters.network.nn_type = "feed-forward" + test_parameters.manual_seed = 2021 + + #################### + # DATA + #################### + results = [] + for hvduse in [False, True]: + for ll in [True, False]: + start_time = time.time() + test_parameters.running.learning_rate = 0.00001 + test_parameters.data.use_lazy_loading = ll + test_parameters.use_horovod = hvduse + data_handler = DataHandler(test_parameters) + data_handler.clear_data() + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", + data_path, + "Al_debug_2k_nr0.out.npy", + data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", + data_path, + "Al_debug_2k_nr1.out.npy", + data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", + data_path, + "Al_debug_2k_nr2.out.npy", + data_path, + output_units="1/Ry", + add_snapshot_as="tr") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", + data_path, + "Al_debug_2k_nr1.out.npy", + data_path, + output_units="1/Ry", + add_snapshot_as="va") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", + data_path, + "Al_debug_2k_nr2.out.npy", + data_path, + output_units="1/Ry", + add_snapshot_as="te") + + data_handler.prepare_data() + test_parameters.network.layer_sizes = \ + [data_handler.get_input_dimension(), 100, + data_handler.get_output_dimension()] + + # Setup network and trainer. + test_network = Network(test_parameters) + test_trainer = Trainer(test_parameters, test_network, + data_handler) + test_trainer.train_network() + + hvdstring = "no horovod" + if hvduse: + hvdstring = "horovod" + + llstring = "data in RAM" + if ll: + llstring = "using lazy loading" + + results.append([hvdstring, llstring, + test_trainer.initial_test_loss, + test_trainer.final_test_loss, + time.time() - start_time]) + + diff = [] + # For 4 local processes I get: + # Test: no horovod , using lazy loading + # Initial loss: 0.1342976689338684 + # Final loss: 0.10587086156010628 + # Time: 3.743736743927002 + # Test: no horovod , data in RAM + # Initial loss: 0.13430887088179588 + # Final loss: 0.10572846792638302 + # Time: 1.825883388519287 + # Test: horovod , using lazy loading + # Initial loss: 0.1342976726591587 + # Final loss: 0.10554153844714165 + # Time: 4.513132572174072 + # Test: horovod , data in RAM + # Initial loss: 0.13430887088179588 + # Final loss: 0.1053303349763155 + # Time: 3.2193074226379395 + + for r in results: + printout("Test: ", r[0], ", ", r[1]) + printout("Initial loss: ", r[2]) + printout("Final loss: ", r[3]) + printout("Time: ", r[4]) + diff.append(r[3] - r[2]) + + diff = np.array(diff) + + # The loss improvements should be comparable. + assert np.std(diff) < accuracy_strict + diff --git a/test/mala_integration.py b/test/mala_integration.py deleted file mode 100644 index 873d3565e..000000000 --- a/test/mala_integration.py +++ /dev/null @@ -1,206 +0,0 @@ -import scipy as sp -from mala.targets.calculation_helpers import * -import numpy as np -from mala.targets.ldos import LDOS -from mala.targets.density import Density -from mala.targets.dos import DOS -from mala.common.parameters import Parameters -from mala.common.parameters import printout -from data_repo_path import get_data_repo_path - -# In order to test the integration capabilities of MALA we need a -# QuantumEspresso -# calculation containing the following: -# 1. Outfile from the run -# 2. LDOS cube files. -# 3. Density cube file. -# 4. A DOS file. -# In the check_integration_qe subfolder, input scripts can be found for a -# simple test calculation (the results of this calculation have been used -# to develop this script). It uses an Al supercell with 36 atoms and a -# 6x6x6 k-grid. - -data_path = get_data_repo_path()+"Al36/" -path_to_out = data_path+"Al.pw.scf.out" -path_to_ldos_qe = [data_path, "tmp.pp*Al_ldos.cube"] -path_to_dos_qe = [data_path, "Al.dos"] -path_to_dens_qe = [data_path, "Al_dens.cube"] -path_to_ldos_npy = data_path+"Al_ldos.npy" -path_to_dos_npy = data_path+"Al_dos.npy" -path_to_dens_npy = data_path+"Al_dens.npy" - -# We can read from numpy arrays or directly from QE data. -# In the later case, numpy arrays will be saved for the subsqeuent run. -numpy_arrays = True - - -# Define the parameters used for the experiments. -test_parameters = Parameters() -test_parameters.targets.ldos_gridsize = 250 -test_parameters.targets.ldos_gridspacing_ev = 0.1 -test_parameters.targets.ldos_gridoffset_ev = -10 - - -# Test our implementation of the analytical integration of [1] -def check_analytical_integration(accuracy): - - # Values used for the test. - energies = np.array([6.83, 7.11]) - gridsize = 2 - e_fermi = 7.0 - temp = 298 - - # Calculate the analytical values. - beta = 1 / (kB * temp) - x = beta * (energies - e_fermi) - fi_0 = np.zeros(gridsize, dtype=np.float64) - fi_1 = np.zeros(gridsize, dtype=np.float64) - fi_2 = np.zeros(gridsize, dtype=np.float64) - for i in range(0, gridsize): - - # Calculate beta and x - fi_0[i] = get_f0_value(x[i], beta) - fi_1[i] = get_f1_value(x[i], beta) - fi_2[i] = get_f2_value(x[i], beta) - aint_0 = fi_0[1] - fi_0[0] - aint_1 = fi_1[1] - fi_1[0] - aint_2 = fi_2[1] - fi_2[0] - - # Calculate the numerically approximated values. - qint_0, abserr = sp.integrate.quad( - lambda e: fermi_function_eV(e, e_fermi, temp), - energies[0], energies[-1]) - qint_1, abserr = sp.integrate.quad( - lambda e: (e - e_fermi) * fermi_function_eV(e, e_fermi, temp), - energies[0], energies[-1]) - qint_2, abserr = sp.integrate.quad( - lambda e: (e - e_fermi) ** 2 * fermi_function_eV(e, e_fermi, temp), - energies[0], energies[-1]) - - # Calculate the errors. - error0 = np.abs(aint_0 - qint_0) - error1 = np.abs(aint_1 - qint_1) - error2 = np.abs(aint_2 - qint_2) - - # Analyze the errors. - if error0 > accuracy or error1 > accuracy or error2 > accuracy: - return False - return True - - -# Integrate the QE density (Al.dens) over spatial grid. Does this yield the -# correct number of electrons? -def qe_dens_to_nr_of_electrons(accuracy): - # Create a calculator. - dens_calculator = Density(test_parameters) - dens_calculator.read_additional_calculation_data("qe.out", path_to_out) - - # Read the input data. - if numpy_arrays: - density_dft = np.load(path_to_dens_npy) - else: - density_dft = dens_calculator.read_from_cube(path_to_dens_qe[1], - path_to_dens_qe[0]) - np.save(path_to_dens_npy, density_dft) - - # Calculate the quantities we want to compare. - nr_mala = dens_calculator.get_number_of_electrons(density_dft) - nr_dft = dens_calculator.number_of_electrons - - # Calculate relative error. - rel_error = np.abs(nr_mala-nr_dft) / nr_dft - printout("Relative error number of electrons: ", rel_error) - - # Check against the constraints we put upon ourselves. - if rel_error < accuracy: - return True - else: - return False - - -# Integrate QE LDOS over energy grid. Does this yield the correct density -# (when compared to Al.dens)? -def qe_ldos_to_density(accuracy): - # Create a calculator.abs() - ldos_calculator = LDOS(test_parameters) - ldos_calculator.read_additional_calculation_data("qe.out", path_to_out) - - # Read the input data. - density_dft = np.load(path_to_dens_npy) - if numpy_arrays: - ldos_dft = np.load(path_to_ldos_npy) - else: - ldos_dft = ldos_calculator.read_from_cube(path_to_ldos_qe[1], - path_to_ldos_qe[0]) - - # LDOS is in 1/Ry. DOS is in 1/eV. - ldos_dft = ldos_calculator.convert_units(ldos_dft, "1/Ry") - np.save(path_to_ldos_npy, ldos_dft) - - # Calculate the quantities we want to compare. - density_mala = ldos_calculator.get_density(ldos_dft) - density_mala_sum = density_mala.sum() - density_dft_sum = density_dft.sum() - - # Calculate relative error. - rel_error = np.abs(density_mala_sum-density_dft_sum) / density_dft_sum - printout("Relative error for sum of density: ", rel_error) - - # Check against the constraints we put upon ourselves. - if rel_error < accuracy: - return True - else: - return False - - -# Integrate the QE LDOS over spatial grid. Does this yield the corrected LDOS -# (when compared to Al.dos)? -def qe_ldos_to_dos(accuracy): - # Create the necessary calculators. - ldos_calculator = LDOS(test_parameters) - ldos_calculator.read_additional_calculation_data("qe.out", path_to_out) - dos_calculator = DOS(test_parameters) - dos_calculator.read_additional_calculation_data("qe.out", path_to_out) - - # Read the input data. - ldos_dft = np.load(path_to_ldos_npy) - if numpy_arrays: - dos_dft = np.load(path_to_dos_npy) - else: - # DOS is in 1/eV so no conversion necessary. - dos_dft = dos_calculator.read_from_qe_dos_txt(path_to_dos_qe[1], - path_to_dos_qe[0]) - np.save(path_to_dos_npy, dos_dft) - - # Calculate the quantities we want to compare. - dos_mala = ldos_calculator.get_density_of_states(ldos_dft) - dos_mala_sum = dos_mala.sum() - dos_dft_sum = dos_dft.sum() - rel_error = np.abs(dos_mala_sum-dos_dft_sum) / dos_dft_sum - printout("Relative error for sum of DOS: ", rel_error) - - # Check against the constraints we put upon ourselves. - if rel_error < accuracy: - return True - else: - return False - - -if __name__ == "__main__": - - # Run the tests. - test1 = check_analytical_integration(0.0000001) - printout("Check if analytical integration works in theory - success?:", - test1) - - test1 = qe_dens_to_nr_of_electrons(0.0000001) - printout("Integrate QE density over spatial grid and get correct number " - "of electrons compared to QE - success?:", test1) - - test1 = qe_ldos_to_density(0.0000001) - printout("Integrate QE LDOS over energy grid and get correct density " - "compared to QE - succes?:", test1) - - test1 = qe_ldos_to_dos(0.0000001) - printout("Integrate QE LDOS over spatial grid and get correct DOS " - "compared to QE - success:", test1) diff --git a/test/mala_tests.py b/test/mala_tests.py deleted file mode 100644 index 338d95152..000000000 --- a/test/mala_tests.py +++ /dev/null @@ -1,113 +0,0 @@ -from mala_integration import check_analytical_integration, \ - qe_dens_to_nr_of_electrons, qe_ldos_to_density, qe_ldos_to_dos -from tensor_memory import test_tensor_memory -from lazy_loading_basic import test_lazy_loading_basic -from lazy_loading_horovod_benchmark import lazy_loading_horovod_benchmark -from mala.common.parameters import printout -from data_repo_path import get_data_repo_path -from inference_test import run_inference_test -from checkpoint_training_tests import run_checkpoint_tests -from checkpoint_hyperopt_tests import run_hyperopt_checkpoint_test -data_path = get_data_repo_path()+"Al36/" - - -'''' -mala_tests: Central hub for all subroutine tests for mala. -''' -standard_accuracy = 10**-10 - -###################### -# Memory tests (obsolete). -###################### - -if test_tensor_memory(data_path+"Al_debug_2k_nr0.in.npy", standard_accuracy): - printout("test_tensor_memory suceeded.") -else: - raise Exception("test_tensor_memory failed.") - -###################### -# Integration tests. -###################### - -if check_analytical_integration(standard_accuracy): - printout("check_analytical_integration suceeded.") -else: - raise Exception("check_analytical_integration failed.") - -# These tests operate on a coarser accuracy - -if qe_dens_to_nr_of_electrons(standard_accuracy*(10**3)): - printout("qe_dens_to_nr_of_electrons suceeded.") -else: - raise Exception("qe_dens_to_nr_of_electrons failed.") -try: - if qe_ldos_to_density(standard_accuracy*(10**7)): - printout("qe_ldos_to_density suceeded.") - else: - raise Exception("qe_ldos_to_density failed.") - if qe_ldos_to_dos(standard_accuracy*(10**4)): - printout("qe_ldos_to_dos suceeded.") - else: - raise Exception("qe_ldos_to_dos failed.") -except FileNotFoundError: - printout("Could not test LDOS integration because of " - "missing LDOS data.") - - -###################### -# Total energy test. -###################### - -# Find a way to access the total energy module form a runner. -# from total_energy_tester import test_total_energy -# if test_total_energy(): -# printout("test_total_energy suceeded.") -# else: -# raise Exception("test_total_energy failed.") - -###################### -# Scaling test. -###################### - -if test_lazy_loading_basic(data_path=data_path): - printout("test_lazy_loading suceeded.") -else: - raise Exception("test_lazy_loading failed.") - -###################### -# Lazy loading and horovod tests. This cannot yet be included in the -# automated test suite because we don't install horovod there. -###################### - -try: - if lazy_loading_horovod_benchmark(data_path=data_path): - printout("test_lazy_loading suceeded.") -except NameError: - printout("Could not perform lazy loading horovod test, most likely because" - " horovod was not installed.") -except ModuleNotFoundError: - printout("Could not perform lazy loading horovod test, most likely because" - " horovod was not installed.") - -###################### -# Inference tests. -###################### - -if run_inference_test(): - printout("run_inference_test test suceeded.") -else: - raise Exception("run_inference_test failed.") - -###################### -# Checkpoint tests. -###################### - -if run_checkpoint_tests(): - printout("run_checkpoint_tests test suceeded.") -else: - raise Exception("run_checkpoint_tests failed.") - -if run_checkpoint_tests(): - printout("run_hyperopt_checkpoint_test test suceeded.") -else: - raise Exception("run_hyperopt_checkpoint_test failed.") diff --git a/test/tensor_memory.py b/test/tensor_memory.py index 57a0824d8..66f6d4be5 100644 --- a/test/tensor_memory.py +++ b/test/tensor_memory.py @@ -1,65 +1,71 @@ +import os + import numpy as np import torch from torch.utils.data import TensorDataset from torch.utils.data import DataLoader -from mala.common.parameters import printout -from data_repo_path import get_data_repo_path -data_path = get_data_repo_path()+"Al36/" - - -def test_tensor_memory(file, accuracy): - - # Load an array as a numpy array - loaded_array_raw = np.load(file) - - # Get dimensions of numpy array. - dimension = np.shape(loaded_array_raw) - datacount = dimension[0] * dimension[1] * dimension[2] - - # Reshape as datacount x featurelength - loaded_array_raw = loaded_array_raw.astype(np.float32) - loaded_array = loaded_array_raw.reshape([datacount, dimension[3]]) - - # Check if reshaping allocated new memory. - loaded_array_raw *= 10 - test1 = np.abs(np.sum(loaded_array) - np.sum(loaded_array_raw)) - if test1 > accuracy: - return False - - # simulate data splitting. - index1 = int(80 / 100 * np.shape(loaded_array)[0]) - torch_tensor = torch.from_numpy(loaded_array[0:index1]).float() - - # Check if tensor and array are still the same. - test1 = torch.abs(torch.sum(torch_tensor-loaded_array[0:index1])) - if test1 > accuracy: - return False - - # Simulate data operation. - loaded_array *= 10 - - # Check if tensor and array are still the same. - test1 = torch.abs(torch.sum(torch_tensor-loaded_array[0:index1])) - if test1 > accuracy: - return False - - # Simulate Tensor data handling in pytorch workflow. - data_set = TensorDataset(torch_tensor, torch_tensor) - data_loader = DataLoader(data_set, batch_size=index1) - - # Perform data operation again. - loaded_array *= 10 - for (x, y) in data_loader: - test1 = torch.abs(torch.sum(x - loaded_array[0:index1])) - - if test1 > accuracy: - return False - return True - -if __name__ == "__main__": - test_result = test_tensor_memory(data_path+"Al_debug_2k_nr0.in.npy", - 0.000001) - printout("Check if numpy->tensor works without copying - success?:", - test_result) +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") + +# Define the accuracy used in the tests. +accuracy = 1e-5 + + +class TestTensorMemory: + """ + Tests/Tries out how memory referencing/copying between np and torch works. + + This test does not necessarily have to be run all the time, I thought of + it more as something that comes in handy when debugging while something + breaks after an update. MALA relies on the following assumptions to + be true. + """ + def test_tensor_memory(self): + + # Load an array as a numpy array + loaded_array_raw = np.load(os.path.join(data_path, + "Al_debug_2k_nr0.in.npy")) + + # Get dimensions of numpy array. + dimension = np.shape(loaded_array_raw) + datacount = dimension[0] * dimension[1] * dimension[2] + + # Reshape as datacount x featurelength + loaded_array_raw = loaded_array_raw.astype(np.float32) + loaded_array = loaded_array_raw.reshape([datacount, dimension[3]]) + + # Check if reshaping allocated new memory. + loaded_array_raw *= 10 + assert np.isclose(np.sum(loaded_array), np.sum(loaded_array_raw), + accuracy) + + # simulate data splitting. + index1 = int(80 / 100 * np.shape(loaded_array)[0]) + torch_tensor = torch.from_numpy(loaded_array[0:index1]).float() + + # Check if tensor and array are still the same. + assert np.isclose(torch.sum(torch_tensor), + torch.sum(loaded_array[0:index1]), + accuracy) + + # Simulate data operation. + loaded_array *= 10 + + # Check if tensor and array are still the same. + test1 = torch.abs(torch.sum(torch_tensor-loaded_array[0:index1])) + assert np.isclose(torch.sum(torch_tensor), + torch.sum(loaded_array[0:index1]), + accuracy) + + # Simulate Tensor data handling in pytorch workflow. + data_set = TensorDataset(torch_tensor, torch_tensor) + data_loader = DataLoader(data_set, batch_size=index1) + + # Perform data operation again. + loaded_array *= 10 + for (x, y) in data_loader: + assert np.isclose(torch.sum(x), + torch.sum(loaded_array[0:index1]), + accuracy) diff --git a/test/total_energy_tester.py b/test/total_energy_tester.py deleted file mode 100644 index 7f9390dd9..000000000 --- a/test/total_energy_tester.py +++ /dev/null @@ -1,32 +0,0 @@ -import total_energy as te -import numpy as np - - -def test_total_energy(): - te.initialize() - nnr = te.get_nnr() - nspin = te.get_nspin() - # ngm = te.get_ngm() - nat = te.get_nat() - te.print_energies() - - positions = te.get_positions(nat) - positions = positions + 0.01*np.random.random([3, nat]) - te.set_positions(positions, nat) - te.print_energies() - - rho_of_r = te.get_rho_of_r(nnr, nspin) - total_rho = np.sum(rho_of_r) - rho_of_r = rho_of_r + 1.0e-3 - rho_of_r = rho_of_r * total_rho / np.sum(rho_of_r) - te.set_rho_of_r(rho_of_r, nnr, nspin) - te.print_energies() - e_rho_times_v_hxc, e_hartree, e_xc, e_ewald = te.get_energies() - print(e_rho_times_v_hxc, e_hartree, e_xc, e_ewald) - return True - - -if __name__ == "__main__": - - # Run the tests. - test_total_energy() diff --git a/test/workflow_test.py b/test/workflow_test.py new file mode 100644 index 000000000..5cd816f52 --- /dev/null +++ b/test/workflow_test.py @@ -0,0 +1,335 @@ +import importlib +import os + +import mala +import numpy as np +import pytest + +from data_repo_path import data_repo_path +data_path = os.path.join(data_repo_path, "Al36") +data_path_ldos = os.path.join(data_repo_path, "Be2") +# Control how much the loss should be better after training compared to +# before. This value is fairly high, but we're training on absolutely +# minimal amounts of data. +desired_loss_improvement_factor = 1 + +# Control the accuracies for the postprocessing routines. +accuracy_electrons = 1e-11 +accuracy_total_energy = 1.5 +accuracy_band_energy = 1 +accuracy_predictions = 5e-2 + + +class TestFullWorkflow: + """Tests an entire MALA workflow.""" + + def test_network_training(self): + """Test whether MALA can train a NN.""" + + test_trainer = self.__simple_training() + assert desired_loss_improvement_factor * \ + test_trainer.initial_test_loss > test_trainer.final_test_loss + + @pytest.mark.skipif(importlib.util.find_spec("lammps") is None, + reason="LAMMPS is currently not part of the pipeline.") + def test_preprocessing(self): + """ + Test whether MALA can preprocess data. + + This means reading the LDOS from cube files and calculating + SNAP descriptors. + The data necessary for this is currently not in the data repo! + """ + + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.descriptors.descriptor_type = "SNAP" + test_parameters.descriptors.twojmax = 6 + test_parameters.descriptors.rcutfac = 4.67637 + test_parameters.data.descriptors_contain_xyz = True + test_parameters.targets.target_type = "LDOS" + test_parameters.targets.ldos_gridsize = 11 + test_parameters.targets.ldos_gridspacing_ev = 2.5 + test_parameters.targets.ldos_gridoffset_ev = -5 + + # Create a DataConverter, and add snapshots to it. + data_converter = mala.DataConverter(test_parameters) + data_converter.add_snapshot_qeout_cube("Be.pw.scf.out", data_path_ldos, + os.path.join("cubes", "tmp.pp*Be_ldos.cube"), + data_path_ldos, + output_units="1/Ry") + + data_converter.convert_snapshots("./", naming_scheme="Be_snapshot*") + + # Compare against + input_data = np.load("Be_snapshot0.in.npy") + input_data_shape = np.shape(input_data) + assert input_data_shape[0] == 18 and input_data_shape[1] == 18 and \ + input_data_shape[2] == 27 and input_data_shape[3] == 33 + + output_data = np.load("Be_snapshot0.out.npy") + output_data_shape = np.shape(output_data) + assert output_data_shape[0] == 18 and output_data_shape[1] == 18 and\ + output_data_shape[2] == 27 and output_data_shape[3] == 11 + + def test_postprocessing_from_dos(self): + """ + Test whether MALA can postprocess data (DOS). + + This means calculating band energy and number of electrons from + LDOS. Total energy is tested further below. + """ + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.targets.target_type = "DOS" + test_parameters.targets.ldos_gridsize = 250 + test_parameters.targets.ldos_gridspacing_ev = 0.1 + test_parameters.targets.ldos_gridoffset_ev = -10 + + # Create a target calculator to perform postprocessing. + dos = mala.TargetInterface(test_parameters) + dos.read_additional_calculation_data("qe.out", os.path.join( + data_path, "Al.pw.scf.out")) + dos_data = np.load(os.path.join(data_path, "Al_dos.npy")) + + # Calculate energies + self_consistent_fermi_energy = dos. \ + get_self_consistent_fermi_energy_ev(dos_data) + number_of_electrons = dos. \ + get_number_of_electrons(dos_data, fermi_energy_eV= + self_consistent_fermi_energy) + band_energy = dos.get_band_energy(dos_data, + fermi_energy_eV= + self_consistent_fermi_energy) + + assert np.isclose(number_of_electrons, dos.number_of_electrons, + atol=accuracy_electrons) + assert np.isclose(band_energy, dos.band_energy_dft_calculation, + atol=accuracy_band_energy) + + def test_postprocessing(self): + """ + Test whether MALA can postprocess data (from LDOS) + + This means calculating band energy and number of electrons from + LDOS. Total energy is tested further below. + """ + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.targets.target_type = "LDOS" + test_parameters.targets.ldos_gridsize = 11 + test_parameters.targets.ldos_gridspacing_ev = 2.5 + test_parameters.targets.ldos_gridoffset_ev = -5 + + # Create a target calculator to perform postprocessing. + ldos = mala.TargetInterface(test_parameters) + ldos.read_additional_calculation_data("qe.out", os.path.join( + data_path_ldos, + "Be.pw.scf.out")) + ldos_data = np.load(os.path.join(data_path_ldos, "Be_ldos.npy")) + + # Calculate energies + self_consistent_fermi_energy = ldos. \ + get_self_consistent_fermi_energy_ev(ldos_data) + number_of_electrons = ldos. \ + get_number_of_electrons(ldos_data, fermi_energy_eV= + self_consistent_fermi_energy) + band_energy = ldos.get_band_energy(ldos_data, + fermi_energy_eV= + self_consistent_fermi_energy) + + assert np.isclose(number_of_electrons, ldos.number_of_electrons, + atol=accuracy_electrons) + assert np.isclose(band_energy, ldos.band_energy_dft_calculation, + atol=accuracy_band_energy) + + @pytest.mark.skipif(importlib.util.find_spec("total_energy") is None, + reason="QE is currently not part of the pipeline.") + def test_total_energy_from_dos_density(self): + """ + Test whether MALA can calculate the total energy using the DOS+Density. + + This means calculating energies from the DOS and density. + """ + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.targets.target_type = "LDOS" + test_parameters.targets.ldos_gridsize = 11 + test_parameters.targets.ldos_gridspacing_ev = 2.5 + test_parameters.targets.ldos_gridoffset_ev = -5 + test_parameters.targets.pseudopotential_path = data_path_ldos + # Create a target calculator to perform postprocessing. + ldos = mala.TargetInterface(test_parameters) + ldos.read_additional_calculation_data("qe.out", os.path.join( + data_path_ldos, "Be.pw.scf.out")) + dos_data = np.load(os.path.join(data_path_ldos, "Be_dos.npy")) + dens_data = np.load(os.path.join(data_path_ldos, "Be_dens.npy")) + dos = mala.DOS.from_ldos(ldos) + + # Calculate energies + self_consistent_fermi_energy = dos. \ + get_self_consistent_fermi_energy_ev(dos_data) + + total_energy = ldos.get_total_energy(dos_data=dos_data, + density_data=dens_data, + fermi_energy_eV= + self_consistent_fermi_energy) + assert np.isclose(total_energy, ldos.total_energy_dft_calculation, + atol=accuracy_total_energy) + + @pytest.mark.skipif(importlib.util.find_spec("total_energy") is None, + reason="QE is currently not part of the pipeline.") + def test_total_energy_from_ldos(self): + """ + Test whether MALA can calculate the total energy using the LDOS. + + This means calculating energies from the LDOS. + """ + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.targets.target_type = "LDOS" + test_parameters.targets.ldos_gridsize = 11 + test_parameters.targets.ldos_gridspacing_ev = 2.5 + test_parameters.targets.ldos_gridoffset_ev = -5 + test_parameters.targets.pseudopotential_path = data_path_ldos + + # Create a target calculator to perform postprocessing. + ldos = mala.TargetInterface(test_parameters) + ldos.read_additional_calculation_data("qe.out", os.path.join( + data_path_ldos, + "Be.pw.scf.out")) + ldos_data = np.load(os.path.join(data_path_ldos, "Be_ldos.npy")) + + # Calculate energies + self_consistent_fermi_energy = ldos. \ + get_self_consistent_fermi_energy_ev(ldos_data) + total_energy = ldos.get_total_energy(ldos_data, + fermi_energy_eV= + self_consistent_fermi_energy) + assert np.isclose(total_energy, ldos.total_energy_dft_calculation, + atol=accuracy_total_energy) + + def test_training_with_postprocessing(self): + """Test if a trained network can be loaded for postprocessing.""" + self.__simple_training(save_network=True) + self.__use_trained_network() + + def test_training_with_postprocessing_data_repo(self): + """ + Test if a trained network can be loaded for postprocessing. + + For this test, a network from the data repo will be loaded. + If this does not work, it's most likely because someting in the MALA + parameters changed. + """ + self.__simple_training(save_network=True) + self.__use_trained_network(os.path.join(data_repo_path, + "workflow_test/")) + + @staticmethod + def __simple_training(save_network=False): + """Perform a simple training and save it, if necessary.""" + # Set up parameters. + test_parameters = mala.Parameters() + test_parameters.data.data_splitting_type = "by_snapshot" + test_parameters.data.data_splitting_snapshots = ["tr", "va", "te"] + test_parameters.data.input_rescaling_type = "feature-wise-standard" + test_parameters.data.output_rescaling_type = "normal" + test_parameters.network.layer_activations = ["ReLU"] + test_parameters.running.max_number_epochs = 400 + test_parameters.running.mini_batch_size = 40 + test_parameters.running.learning_rate = 0.00001 + test_parameters.running.trainingtype = "Adam" + + # Load data. + data_handler = mala.DataHandler(test_parameters) + data_handler.add_snapshot("Al_debug_2k_nr0.in.npy", data_path, + "Al_debug_2k_nr0.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr1.in.npy", data_path, + "Al_debug_2k_nr1.out.npy", data_path, + output_units="1/Ry") + data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", data_path, + "Al_debug_2k_nr2.out.npy", data_path, + output_units="1/Ry") + data_handler.prepare_data() + + # Train a network. + test_parameters.network.layer_sizes = [ + data_handler.get_input_dimension(), + 100, + data_handler.get_output_dimension()] + + # Setup network and trainer. + test_network = mala.Network(test_parameters) + test_trainer = mala.Trainer(test_parameters, test_network, + data_handler) + test_trainer.train_network() + + # Save, if necessary. + if save_network: + params_path = "workflow_test_params.pkl" + network_path = "workflow_test_network.pth" + input_scaler_path = "workflow_test_iscaler.pkl" + output_scaler_path = "workflow_test_oscaler.pkl" + test_parameters.save(params_path) + test_network.save_network(network_path) + data_handler.input_data_scaler.save(input_scaler_path) + data_handler.output_data_scaler.save(output_scaler_path) + + return test_trainer + + @staticmethod + def __use_trained_network(save_path="./"): + """Use a trained network to make a prediction.""" + + params_path = os.path.join(save_path, "workflow_test_params.pkl") + network_path = os.path.join(save_path, "workflow_test_network.pth") + input_scaler_path = os.path.join(save_path, "workflow_test_iscaler.pkl") + output_scaler_path = os.path.join(save_path, "workflow_test_oscaler.pkl") + + # Load parameters, network and data scalers. + new_parameters = mala.Parameters.load_from_file(params_path, + no_snapshots=True) + new_parameters.targets.target_type = "LDOS" + new_parameters.targets.ldos_gridsize = 250 + new_parameters.targets.ldos_gridspacing_ev = 0.1 + new_parameters.targets.ldos_gridoffset_ev = -10 + new_parameters.data.use_lazy_loading = True + new_network = mala.Network.load_from_file(new_parameters, network_path) + iscaler = mala.DataScaler.load_from_file(input_scaler_path) + oscaler = mala.DataScaler.load_from_file(output_scaler_path) + + # Load data. + inference_data_handler = mala.DataHandler(new_parameters, + input_data_scaler=iscaler, + output_data_scaler=oscaler) + new_parameters.data.data_splitting_snapshots = ["te"] + inference_data_handler.add_snapshot("Al_debug_2k_nr2.in.npy", + data_path, + "Al_debug_2k_nr2.out.npy", + data_path, + output_units="1/Ry") + inference_data_handler.prepare_data(reparametrize_scaler=False) + + # Instantiate and use a Tester object. + tester = mala.Tester(new_parameters, new_network, + inference_data_handler) + actual_ldos, predicted_ldos = tester.test_snapshot(0) + ldos_calculator = inference_data_handler.target_calculator + ldos_calculator.read_additional_calculation_data("qe.out", os.path.join( + data_path, + "Al.pw.scf.out")) + band_energy_predicted = ldos_calculator.get_band_energy(predicted_ldos) + band_energy_actual = ldos_calculator.get_band_energy(actual_ldos) + nr_electrons_predicted = ldos_calculator.\ + get_number_of_electrons(predicted_ldos) + nr_electrons_actual = ldos_calculator.\ + get_number_of_electrons(actual_ldos) + + # Check whether the prediction is accurate enough. + assert np.isclose(band_energy_predicted, band_energy_actual, + atol=accuracy_predictions) + assert np.isclose(nr_electrons_predicted, nr_electrons_actual, + atol=accuracy_predictions) +