diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6810030143..9b20a8dd75 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -35,6 +35,12 @@ jobs: python -m pip install --upgrade pip pip install .[strict,docs] + - name: Copy tutorials + run: | + cp -r tutorials docs/ + jupyter nbconvert --to markdown docs/tutorials/*.ipynb + jupyter nbconvert --to markdown docs/tutorials/*/*.ipynb + - name: Build run: sphinx-build docs docs_build diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index cafdc811bb..58d36f0190 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -58,7 +58,7 @@ jobs: - name: Install conda dependencies run: | - micromamba install -n a2 -c conda-forge enumlib packmol bader openbabel openff-toolkit==0.16.2 openff-interchange==0.3.22 --yes + micromamba install -n a2 -c conda-forge enumlib packmol bader --yes - name: Install dependencies run: | @@ -87,7 +87,8 @@ jobs: # However this `splitting-algorithm` means that tests cannot depend sensitively on the order they're executed in. run: | micromamba activate a2 - pytest --splits 3 --group ${{ matrix.split }} --durations-path tests/.pytest-split-durations --splitting-algorithm least_duration --ignore=tests/ase --cov=atomate2 --cov-report=xml + pytest --splits 3 --group ${{ matrix.split }} --durations-path tests/.pytest-split-durations --splitting-algorithm least_duration --ignore=tests/ase --ignore=tests/openff_md --ignore=tests/openmm_md --cov=atomate2 --cov-report=xml + - uses: codecov/codecov-action@v1 if: matrix.python-version == '3.10' && github.repository == 'materialsproject/atomate2' @@ -96,6 +97,62 @@ jobs: name: coverage${{ matrix.split }} file: ./coverage.xml + test-openff: + # prevent this action from running on forks + if: github.repository == 'materialsproject/atomate2' + + services: + local_mongodb: + image: mongo:4.0 + ports: + - 27017:27017 + + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} # enables conda/mamba env activation by reading bash profile + strategy: + matrix: + python-version: ["3.10","3.11","3.12"] + + steps: + - name: Check out repo + uses: actions/checkout@v4 + + - name: Set up micromamba + uses: mamba-org/setup-micromamba@main + + - name: Create mamba environment + run: | + micromamba create -n a2 python=${{ matrix.python-version }} --yes + + - name: Install uv + run: micromamba run -n a2 pip install uv + + - name: Install conda dependencies + run: | + micromamba install -n a2 -c conda-forge enumlib packmol bader openbabel openff-toolkit==0.16.2 openff-interchange==0.3.22 --yes + + - name: Install dependencies + run: | + micromamba activate a2 + python -m pip install --upgrade pip + uv pip install .[strict-openff,tests] + + - name: Install pymatgen from master if triggered by pymatgen repo dispatch + if: github.event_name == 'repository_dispatch' && github.event.action == 'pymatgen-ci-trigger' + run: | + micromamba activate a2 + uv pip install --upgrade 'git+https://github.com/materialsproject/pymatgen@${{ github.event.client_payload.pymatgen_ref }}' + + - name: Test split ${{ matrix.split }} + env: + MP_API_KEY: ${{ secrets.MP_API_KEY }} + + run: | + micromamba activate a2 + pytest tests/{openff_md,openmm_md} + test-notebooks-and-ase: # prevent this action from running on forks if: github.repository == 'materialsproject/atomate2' @@ -150,7 +207,7 @@ jobs: - name: Test Notebooks run: | micromamba activate a2 - pytest --nbmake ./tutorials --ignore=./tutorials/openmm_tutorial.ipynb + pytest --nbmake ./tutorials --ignore=./tutorials/openmm_tutorial.ipynb --ignore=./tutorials/force_fields - name: Test ASE env: @@ -165,6 +222,81 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml + test-force-field-notebook: + # prevent this action from running on forks + if: github.repository == 'materialsproject/atomate2' + + services: + local_mongodb: + image: mongo:4.0 + ports: + - 27017:27017 + + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} # enables conda/mamba env activation by reading bash profile + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12"] + + steps: + - name: Check out repo + uses: actions/checkout@v4 + + - name: Set up micromamba + uses: mamba-org/setup-micromamba@main + + - name: Create mamba environment + run: | + micromamba create -n a2 python=${{ matrix.python-version }} --yes + + - name: Install uv + run: micromamba run -n a2 pip install uv + + - name: Install conda dependencies + run: | + micromamba install -n a2 -c conda-forge enumlib packmol bader openbabel openff-toolkit==0.16.2 openff-interchange==0.3.22 --yes + + - name: Install dependencies + run: | + micromamba activate a2 + python -m pip install --upgrade pip + mkdir -p ~/.abinit/pseudos + cp -r tests/test_data/abinit/pseudos/ONCVPSP-PBE-SR-PDv0.4 ~/.abinit/pseudos + uv pip install .[strict,strict-forcefields,tests,abinit] + uv pip install torch-runstats + uv pip install --no-deps nequip==0.5.6 + + - name: Install pymatgen from master if triggered by pymatgen repo dispatch + if: github.event_name == 'repository_dispatch' && github.event.action == 'pymatgen-ci-trigger' + run: | + micromamba activate a2 + uv pip install --upgrade 'git+https://github.com/materialsproject/pymatgen@${{ github.event.client_payload.pymatgen_ref }}' + + - name: Forcefield tutorial + env: + MP_API_KEY: ${{ secrets.MP_API_KEY }} + + # regenerate durations file with `pytest --store-durations --durations-path tests/.pytest-split-durations` + # Note the use of `--splitting-algorithm least_duration`. + # This helps prevent a test split having no tests to run, and then the GH action failing, see: + # https://github.com/jerry-git/pytest-split/issues/95 + # However this `splitting-algorithm` means that tests cannot depend sensitively on the order they're executed in. + run: | + micromamba activate a2 + pytest --nbmake ./tutorials/force_fields + + + - uses: codecov/codecov-action@v1 + if: matrix.python-version == '3.10' && github.repository == 'materialsproject/atomate2' + with: + token: ${{ secrets.CODECOV_TOKEN }} + name: coverage + file: ./coverage.xml + + + docs: runs-on: ubuntu-latest @@ -186,7 +318,7 @@ jobs: run: sphinx-build docs docs_build automerge: - needs: [lint, test-non-ase, test-notebooks-and-ase, docs] + needs: [lint, test-non-ase, test-notebooks-and-ase, test-force-field-notebook, docs] runs-on: ubuntu-latest permissions: diff --git a/.gitignore b/.gitignore index d1f252c4f3..2500a708d8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ docs/_build/* docs/_build/*/* docs/_build/*/*/* docs_build/* +docs/tutorials/* +docs/tutorials/*/* # C extensions *.so diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe2a771a13..44b0ec977e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,6 +7,7 @@ repos: hooks: - id: ruff args: [--fix] + exclude: tutorials/grueneisen_workflow.ipynb - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 diff --git a/README.md b/README.md index 34c3923b03..ed9498f250 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ started: - [Introduction to running workflows][running-workflows] - [Using atomate2 with FireWorks][atomate2_fireworks] +- [Overview of key concepts][key-concepts] - [List of VASP workflows][vasp_workflows] ## Need help? @@ -151,6 +152,7 @@ A journal submission of `atomate2` is undergoing peer review. In the meantime, p [contributors]: https://materialsproject.github.io/atomate2/about/contributors.html [license]: https://raw.githubusercontent.com/materialsproject/atomate2/main/LICENSE [running-workflows]: https://materialsproject.github.io/atomate2/user/running-workflows.html +[key-concepts]: https://materialsproject.github.io/atomate2/user/key_concepts_overview.html#key-concepts-in-atomate2-job-flow-makers-inputset-taskdocument-and-builder [atomate2_fireworks]: https://materialsproject.github.io/atomate2/user/fireworks.html [vasp_workflows]: https://materialsproject.github.io/atomate2/user/codes/vasp.html [RelaxBandStructure]: https://materialsproject.github.io/atomate2/user/codes/vasp.html#relax-and-band-structure diff --git a/docs/index.md b/docs/index.md index a8a0382698..a40f5a5d39 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,10 +4,12 @@ user/index user/install user/running-workflows +user/key_concepts_overview user/docs-schemas-emmet user/fireworks user/atomate-1-vs-2 user/codes/index +tutorials/tutorials ``` ```{toctree} diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index d9788e1a98..4601c0afb5 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -248,7 +248,23 @@ adjust them if necessary. The default might not be strict enough for your specific case. ``` -### Gruneisen parameter workflow +You can use the following code to start the default VASP version of the workflow: +```py +from atomate2.vasp.flows.phonons import PhononMaker +from pymatgen.core.structure import Structure + +structure = Structure( + lattice=[[0, 2.13, 2.13], [2.13, 0, 2.13], [2.13, 2.13, 0]], + species=["Mg", "O"], + coords=[[0, 0, 0], [0.5, 0.5, 0.5]], +) + +phonon_flow = PhononMaker(min_length=15.0, store_force_constants=False).make( + structure=structure +) +``` + +### Grüneisen parameter workflow Calculates mode-dependent Grüneisen parameters with the help of Phonopy. @@ -258,8 +274,25 @@ shrunk by 1 % (default) of its volume. Subsequently, supercells with one displaced atom are generated for all the three structures (ground state, expanded and shrunk volume) and accurate forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. -The dynamical matrices of three structures are then used as an input to the phonopy Grueneisen api -to compute mode-dependent Grueneisen parameters. +The dynamical matrices of three structures are then used as an input to the phonopy Grüneisen api +to compute mode-dependent Grüneisen parameters. + +A Grüneisen workflow for VASP can be started as follows: +```python +from atomate2.vasp.flows.gruneisen import GruneisenMaker +from pymatgen.core.structure import Structure + + +structure = Structure( + lattice=[[0, 2.13, 2.13], [2.13, 0, 2.13], [2.13, 2.13, 0]], + species=["Mg", "O"], + coords=[[0, 0, 0], [0.5, 0.5, 0.5]], +) + +gruneisen_flow = GruneisenMaker( + kpath_scheme="seekpath", vol=0.01, mesh=(15, 15, 15) +).make(structure=structure) +``` ### Quasi-harmonic Workflow @@ -268,13 +301,52 @@ First, a tight relaxation is performed. Subsequently, several optimizations at d volumes are performed. At each of the volumes, an additional phonon run is performed as well. Afterwards, equation of state fits are performed with phonopy. +The following script allows you to start the default workflow for VASP with some adjusted parameters: +```python +from atomate2.vasp.flows.qha import QhaMaker +from pymatgen.core.structure import Structure + + +structure = Structure( + lattice=[[0, 2.13, 2.13], [2.13, 0, 2.13], [2.13, 2.13, 0]], + species=["Mg", "O"], + coords=[[0, 0, 0], [0.5, 0.5, 0.5]], +) + +qha_flow = QhaMaker( + linear_strain=(-0.10, 0.10), + number_of_frames=10, +).make(structure=structure) +``` + ### Equation of State Workflow -An equation of state (EOS) workflow is implemented. First, a tight relaxation is performed. Subsequently, several optimizations at different constant +An equation of state (EOS) workflow has the following structure: First, a tight relaxation is performed. +Subsequently, several optimizations at different constant volumes are performed. Additional static calculations might be performed afterwards to arrive at more accurate energies. Then, an EOS fit is performed with pymatgen. -The output of the workflow is, by default, a dictionary containing the energy and volume data generated with DFT, in addition to fitted equation of state parameters for all models currently available in pymatgen (Murnaghan, Birch-Murnaghan, Poirier-Tarantola, and Vinet/UBER). +You can start the workflow as follows: +```python +from atomate2.vasp.flows.eos import EosMaker +from pymatgen.core.structure import Structure + + +structure = Structure( + lattice=[[0, 2.13, 2.13], [2.13, 0, 2.13], [2.13, 2.13, 0]], + species=["Mg", "O"], + coords=[[0, 0, 0], [0.5, 0.5, 0.5]], +) + +eos_flow = EosMaker( + linear_strain=(-0.10, 0.10), + number_of_frames=10, +).make(structure=structure) +``` + +The output of the workflow is a dictionary by default containing the energy and volume data generated with DFT, +in addition to fitted equation of state parameters for all models currently available in pymatgen +(Murnaghan, Birch-Murnaghan, Poirier-Tarantola, and Vinet/UBER). #### Materials Project-compliant workflows @@ -352,8 +424,85 @@ lobster = update_user_incar_settings(lobster, {"NPAR": 4}) run_locally(lobster, create_folders=True, store=SETTINGS.JOB_STORE) ``` -It is, however, computationally very beneficial to define two different types of job scripts for the VASP and Lobster runs, as VASP and Lobster runs are parallelized differently (MPI vs. OpenMP). -[FireWorks](https://github.com/materialsproject/fireworks) allows one to run the VASP and Lobster jobs with different job scripts. Please check out the [jobflow documentation on FireWorks](https://materialsproject.github.io/jobflow/tutorials/8-fireworks.html#setting-the-manager-configs) for more information. +There are currently three different ways available to run the workflow efficiently, as VASP and LOBSTER rely on a different parallelization (MPI vs. OpenMP). +One can use a job script (with some restrictions), or [Jobflow-remote](https://matgenix.github.io/jobflow-remote/) / [Fireworks](https://github.com/materialsproject/fireworks) for high-throughput runs. + + +#### Running the LOBSTER workflow without database and with one job script only + +It is possible to run the VASP-LOBSTER workflow efficiently with a minimal setup. +In this case, you will run the VASP calculations on the same node as the LOBSTER calculations. +In between, the different computations you will switch from MPI to OpenMP parallelization. + +For example, for a node with 48 cores, you could use an adapted version of the following SLURM script: + +```bash +#!/bin/bash +#SBATCH -J vasplobsterjob +#SBATCH -o ./%x.%j.out +#SBATCH -e ./%x.%j.err +#SBATCH -D ./ +#SBATCH --mail-type=END +#SBATCH --mail-user=you@you.de +#SBATCH --time=24:00:00 +#SBATCH --nodes=1 +#This needs to be adapted if you run with different cores +#SBATCH --ntasks=48 + +# ensure you load the modules to run VASP, e.g., module load vasp +module load my_vasp_module +# please activate the required conda environment +conda activate my_environment +cd my_folder +# the following script needs to contain the workflow +python xyz.py +``` + +The `LOBSTER_CMD` now needs an additional export of the number of threads. + +```yaml +VASP_CMD: <> +LOBSTER_CMD: OMP_NUM_THREADS=48 <> +``` + + +#### Jobflow-remote +Please refer first to the general documentation of jobflow-remote: [https://matgenix.github.io/jobflow-remote/](https://matgenix.github.io/jobflow-remote/). + +```py +from atomate2.vasp.flows.lobster import VaspLobsterMaker +from pymatgen.core.structure import Structure +from jobflow_remote import submit_flow, set_run_config +from atomate2.vasp.powerups import update_user_incar_settings + +structure = Structure( + lattice=[[0, 2.13, 2.13], [2.13, 0, 2.13], [2.13, 2.13, 0]], + species=["Mg", "O"], + coords=[[0, 0, 0], [0.5, 0.5, 0.5]], +) + +lobster = VaspLobsterMaker().make(structure) + +resources = {"nodes": 3, "partition": "micro", "time": "00:55:00", "ntasks": 144} + +resources_lobster = {"nodes": 1, "partition": "micro", "time": "02:55:00", "ntasks": 48} +lobster = set_run_config(lobster, name_filter="lobster", resources=resources_lobster) + +lobster = update_user_incar_settings(lobster, {"NPAR": 4}) +submit_flow(lobster, worker="my_worker", resources=resources, project="my_project") +``` + +The `LOBSTER_CMD` also needs an export of the threads. + +```yaml +VASP_CMD: <> +LOBSTER_CMD: OMP_NUM_THREADS=48 <> +``` + + + +#### Fireworks +Please first refer to the general documentation on running atomate2 workflows with fireworks: [https://materialsproject.github.io/atomate2/user/fireworks.html](https://materialsproject.github.io/atomate2/user/fireworks.html) Specifically, you might want to change the `_fworker` for the LOBSTER runs and define a separate `lobster` worker within FireWorks: @@ -389,6 +538,16 @@ lpad = LaunchPad.auto_load() lpad.add_wf(wf) ``` + +The `LOBSTER_CMD` can now be adapted to not include the number of threads: + +```yaml +VASP_CMD: <> +LOBSTER_CMD: <> +``` + +#### Analyzing outputs + Outputs from the automatic analysis with LobsterPy can easily be extracted from the database and also plotted: ```py @@ -425,42 +584,6 @@ for number, (key, cohp) in enumerate( plotter.save_plot(f"plots_cation_anion_bonds{number}.pdf") ``` -#### Running the LOBSTER workflow without database and with one job script only - -It is also possible to run the VASP-LOBSTER workflow with a minimal setup. -In this case, you will run the VASP calculations on the same node as the LOBSTER calculations. -In between, the different computations you will switch from MPI to OpenMP parallelization. - -For example, for a node with 48 cores, you could use an adapted version of the following SLURM script: - -```bash -#!/bin/bash -#SBATCH -J vasplobsterjob -#SBATCH -o ./%x.%j.out -#SBATCH -e ./%x.%j.err -#SBATCH -D ./ -#SBATCH --mail-type=END -#SBATCH --mail-user=you@you.de -#SBATCH --time=24:00:00 -#SBATCH --nodes=1 -#This needs to be adapted if you run with different cores -#SBATCH --ntasks=48 - -# ensure you load the modules to run VASP, e.g., module load vasp -module load my_vasp_module -# please activate the required conda environment -conda activate my_environment -cd my_folder -# the following script needs to contain the workflow -python xyz.py -``` - -The `LOBSTER_CMD` now needs an additional export of the number of threads. - -```yaml -VASP_CMD: <> -LOBSTER_CMD: OMP_NUM_THREADS=48 <> -``` (modifying_input_sets)= Modifying input sets diff --git a/docs/user/key_concepts_overview.md b/docs/user/key_concepts_overview.md index 100cef25fc..0bf644a082 100644 --- a/docs/user/key_concepts_overview.md +++ b/docs/user/key_concepts_overview.md @@ -2,7 +2,7 @@ # Key concepts in atomate2: `Job` & `Flow` `Makers`, `InputSet`, `TaskDocument`, and `Builder` -# Introduction +## Introduction This tutorial will give you a comprehensive high-level overview of the key concepts in atomate2, diving into the important features of `Job` and `Flow` makers, as well as `InputSets`, `TaskDocuments`, and `Builders`. ## `Job` and `Flow` makers @@ -94,11 +94,11 @@ Oftentimes, such flows then involve dynamic jobs. For the phonon calculations th In this particular case, the flow maker `BasePhononMaker` is also inheriting from `ABC` (Abstract Base Classes). -# InputSet +## InputSet An `InputSet` is a convenient way to provide a collection of input data for one or more input files as dict-like container. They set the backbone framework to handle the input settings for a variety of computational codes, like e.g. VASP, Q-Chem, LAMMPS, CP2K and ABINIT. -## Basics +### Basics The [pymatgen](https://github.com/materialsproject/pymatgen) class `InputSet` is a core class to manage and write the input files for the several computational codes to a file location the user specifies. There are predefined "recipes" for generating `InputSets` tailored to specific tasks like structural relaxation or the band structure calculation and more, that are provided as `InputGenerator` classes. @@ -137,7 +137,7 @@ class InputSet(MSONable, MutableMapping): It is essential to emphasize that all `InputSet` must implement the `from_directory` classmethod. -## Examples +### Examples Diving into the specifics for the `VaspInputSet` will demonstrate you some important features of an input set. @@ -173,15 +173,15 @@ If necessary, it is also possible to specify optional files. The `VaspInputSet` The corresponding input generator is the `VaspInputGenerator`. -# TaskDocument +## TaskDocument A `TaskDocument` (often shorted to TaskDoc) is a dictionary object that makes it feasible to collect all the information of the respective computational chemistry calculation run. -## Basics +### Basics `TaskDocuments` are schemas that contain and store all the information of a calculation run, like the (resulting) structure, input data (`InputDoc`), output data (`OutputDoc`), task directory name (`dir_name`) and many more items depending on the respective prerequisites of the computational software that is used. Task documents are a very practical way to transfer (input and output) data between two different jobs. For instance, when you need the structure or path to the (current) job directory in the subsequent step, you can pass it in form of `taskdoc.structure` and `taskdoc.dir_name`, with `taskdoc` as an example instance of the task document class in question. -## Technical Aspects +### Technical Aspects In atomate2, the `TaskDocument` objects inherit from the [emmet](https://github.com/materialsproject/emmet/) classes `StructureMetadata` or `MoleculeMetadata`. @@ -191,7 +191,7 @@ class StructureMetadata(EmmetBaseModel): ``` They contain the structure or molecule metadata, tailored to the variety of computational software. -## Examples +### Examples Let's take the `ForceFieldTaskDocument` as an illustrative example for task documents, inheriting from the `StructureMetadata` class. @@ -263,16 +263,16 @@ class TaskDocument(StructureMetadata, MoleculeMetadata): ``` Now, the TaskDoc stores structure or molecule metadata like `structure`, CP2K-specific items like `included_objects` or `cp2k_objects` and more items. -# Builder +## Builder The `Builder` object is provided by the [maggma](https://github.com/materialsproject/maggma/) toolkit and serves as a data processing step. -## Basics +### Basics `Builders` offer an interface for writing data transformations: you can get items from a `Store`, process and manipulate the input data and prepare an output document, as well as update and add the processed items to the target store(s). -## Technical Aspects +### Technical Aspects The `Builder` and `Store` are the core classes of maggma and give the user tools to build data pipelines from different types of data sources. @@ -299,7 +299,7 @@ class Builder(MSONable, metaclass=ABCMeta): ``` The `Builder` class has three main functionalities that are `get_items` to retrieve data from the source store(s), `process_item` to handle the input items and create an output document to be then added to the target store(s) by `update_target`. -## Examples +### Examples Atomate2 supplies us with the `ElasticBuilder` that is a handy example for a `Builder`: ``` @@ -330,6 +330,6 @@ Then during the data and item processing stage, the deformations will be grouped Finally, the builder compiles the processed items into an ElasticDocument from the group of tasks, and adds the new elastic documents to the elasticity store. -# Exercises +## Exercises Construct a flow for a `DoubleRelaxMaker` (a workflow consisting of two relax jobs) based on the `CHGNetRelaxMaker`. Then add a final non-SCF static job using the `CHGNetStaticMaker`. Compare your result with the [DoubleRelaxMaker for VASP](https://materialsproject.github.io/atomate2/reference/atomate2.vasp.flows.core.DoubleRelaxMaker.html#atomate2.vasp.flows.core.DoubleRelaxMaker). Try to replicate one of the other [VASP workflows](https://materialsproject.github.io/atomate2/user/codes/vasp.html#list-of-vasp-workflows) as well! diff --git a/pyproject.toml b/pyproject.toml index 0dfadb588c..9993055d39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ dependencies = [ "custodian>=2024.4.18", "emmet-core>=0.84.3rc3", "jobflow>=0.1.11", - "monty>=2024.7.30", + "monty>=2024.12.10", "numpy", "pydantic-settings>=2.0.3", "pydantic>=2.0.1", @@ -82,6 +82,7 @@ docs = [ "sphinx-copybutton==0.5.2", "sphinx==8.1.3", "sphinx_design==0.6.1", + "jupyterlab==4.3.4", ] dev = ["pre-commit>=2.12.1"] tests = [ @@ -103,27 +104,31 @@ strict = [ "ijson==3.3.0", "jobflow==0.1.19", "lobsterpy==0.4.9", - "mdanalysis==2.7.0", - "monty==2024.10.21", - "mp-api==0.43.0", + "monty==2025.1.9", + "mp-api==0.45.3", "numpy", - "openmm-mdanalysis-reporter==0.1.0", - "openmm==8.1.1", "phonopy==2.30.1", "pydantic-settings==2.7.0", "pydantic==2.9.2", "pymatgen-analysis-defects==2024.10.22", - "pymatgen==2024.11.13", + "pymatgen==2025.2.18", "pymongo==4.10.1", "python-ulid==3.0.0", "seekpath==2.1.0", "tblite==0.3.0; python_version < '3.12'", "typing-extensions==4.12.2", ] +strict-openff = [ + "mdanalysis==2.7.0", + "monty==2024.12.10", + "openmm-mdanalysis-reporter==0.1.0", + "openmm==8.1.1", + "pymatgen==2024.11.13", +] strict-forcefields = [ "calorine==3.0", "chgnet==0.4.0", - "mace-torch>=0.3.6", + "mace-torch==0.3.10", "matgl==1.1.3", "quippy-ase==0.9.14; python_version < '3.12'", "sevenn==0.10.3", diff --git a/src/atomate2/ase/schemas.py b/src/atomate2/ase/schemas.py index d75d249688..913482ed1c 100644 --- a/src/atomate2/ase/schemas.py +++ b/src/atomate2/ase/schemas.py @@ -247,10 +247,12 @@ def from_ase_task_doc( Additional keyword args passed to :obj:`.AseStructureTaskDoc()`. """ task_document_kwargs.update( - {k: getattr(ase_task_doc, k) for k in _task_doc_translation_keys} + {k: getattr(ase_task_doc, k) for k in _task_doc_translation_keys}, + structure=ase_task_doc.mol_or_struct, + ) + return cls.from_structure( + meta_structure=ase_task_doc.mol_or_struct, **task_document_kwargs ) - task_document_kwargs["structure"] = ase_task_doc.mol_or_struct - return cls(**task_document_kwargs) class AseMoleculeTaskDoc(MoleculeMetadata): diff --git a/src/atomate2/common/flows/eos.py b/src/atomate2/common/flows/eos.py index 03fe6749cf..6c333733f3 100644 --- a/src/atomate2/common/flows/eos.py +++ b/src/atomate2/common/flows/eos.py @@ -39,7 +39,7 @@ class CommonEosMaker(Maker): Maker to relax deformed structures for the EOS fit. static_maker : .Maker | None Maker to generate statics after each relaxation, defaults to None. - strain : tuple[float] + linear_strain : tuple[float] Percentage linear strain to apply as a deformation, default = -5% to 5%. number_of_frames : int Number of strain calculations to do for EOS fit, default = 6. @@ -95,6 +95,12 @@ def make(self, structure: Structure, prev_dir: str | Path = None) -> Flow: ) relax_flow.name = "EOS equilibrium relaxation" + try: + if len(relax_flow.jobs) > 1: + for job in relax_flow.jobs: + job.append_name(" EOS equilibrium relaxation") + except AttributeError: + pass flow_output["initial_relax"] = { "E0": relax_flow.output.output.energy, "V0": relax_flow.output.structure.volume, @@ -153,6 +159,12 @@ def make(self, structure: Structure, prev_dir: str | Path = None) -> Flow: prev_dir=prev_dir, ) relax_job.name += f" deformation {frame_idx}" + try: + if len(relax_job.jobs) > 1: + for job in relax_job.jobs: + job.append_name(f" deformation {frame_idx}") + except AttributeError: + pass jobs["relax"].append(relax_job) if self.static_maker: diff --git a/src/atomate2/common/jobs/utils.py b/src/atomate2/common/jobs/utils.py index c305a85ed2..3bc92583d6 100644 --- a/src/atomate2/common/jobs/utils.py +++ b/src/atomate2/common/jobs/utils.py @@ -2,14 +2,20 @@ from __future__ import annotations +import os from typing import TYPE_CHECKING from jobflow import Response, job +from monty.os.path import zpath +from pymatgen.command_line.bader_caller import bader_analysis_from_path from pymatgen.symmetry.analyzer import SpacegroupAnalyzer from atomate2 import SETTINGS if TYPE_CHECKING: + from collections.abc import Sequence + from pathlib import Path + from pymatgen.core import Structure @@ -137,3 +143,62 @@ def retrieve_structure_from_materials_project( output=structure, stored_data={"task_id": task_id, "database_version": database_version}, ) + + +@job +def remove_workflow_files( + directories: Sequence[str], file_names: Sequence[str], allow_zpath: bool = True +) -> list[str]: + """ + Remove files from previous jobs. + + For example, at the end of an MP flow, WAVECAR files are generated + that take up a lot of disk space. + This utility can automatically remove them following a workflow. + + Parameters + ---------- + makers : Sequence[Maker, Flow, Job] + Jobs in the flow on which to remove files. + file_names : Sequence[str] + The list of file names to remove, ex. ["WAVECAR"] rather than a full path + allow_zpath : bool = True + Whether to allow checking for gzipped output using `monty.os.zpath` + + Returns + ------- + list[str] : list of removed files + """ + abs_paths = [os.path.abspath(dir_name.split(":")[-1]) for dir_name in directories] + + removed_files = [] + for job_dir in abs_paths: + for file in file_names: + file_name = os.path.join(job_dir, file) + if allow_zpath: + file_name = zpath(file_name) + + if os.path.isfile(file_name): + removed_files.append(file_name) + os.remove(file_name) + + return removed_files + + +@job +def bader_analysis(dir_name: str | Path, suffix: str | None = None) -> dict: + """Run Bader charge analysis as a job. + + Parameters + ---------- + dir_name : str or Path + The name of the directory to run Bader in. + suffix : str or None (default) + Suffixes of the files to filter by. + + Returns + ------- + dict of bader charge analysis which is JSONable. + """ + dir_name = os.path.abspath(str(dir_name).split(":")[-1]) + return bader_analysis_from_path(dir_name, suffix=suffix or "") diff --git a/src/atomate2/common/schemas/qha.py b/src/atomate2/common/schemas/qha.py index e85b173012..0f5acad6e2 100644 --- a/src/atomate2/common/schemas/qha.py +++ b/src/atomate2/common/schemas/qha.py @@ -37,8 +37,8 @@ class PhononQHADoc(StructureMetadata, extra="allow"): # type: ignore[call-arg] ) helmholtz_volume: Optional[list[list[float]]] = Field( None, - description="Free energies at temperatures and volumes." - "shape (temperatures, volumes)", + description="Free energies (eV) at temperatures and volumes (Angstrom^3)." + "shape (temperatures, volumes)", # TODO: add units here ) volume_temperature: Optional[list[float]] = Field( None, diff --git a/src/atomate2/common/utils.py b/src/atomate2/common/utils.py index ce7e0c4da8..d8e3c1bc43 100644 --- a/src/atomate2/common/utils.py +++ b/src/atomate2/common/utils.py @@ -194,3 +194,18 @@ def parse_additional_json(dir_name: Path) -> dict[str, Any]: if key not in ("custodian", "transformations", "FW"): additional_json[key] = loadfn(filename, cls=None) return additional_json + + +def _recursive_get_dir_names(jobs: list, dir_names: list) -> None: + """Recursively get all `output.dir_name` from a list of jobs. + + Parameters + ---------- + jobs : list of jobs, Makers, Flows, etc. + dir_names : a list to add the `dir_name`'s to. + """ + for a_job in jobs: + if (sub_jobs := getattr(a_job, "jobs", None)) is not None: + _recursive_get_dir_names(sub_jobs, dir_names) + else: + dir_names.append(a_job.output.dir_name) diff --git a/src/atomate2/forcefields/__init__.py b/src/atomate2/forcefields/__init__.py index 59e25c1beb..0db73e5bef 100644 --- a/src/atomate2/forcefields/__init__.py +++ b/src/atomate2/forcefields/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations +import warnings from enum import Enum from typing import TYPE_CHECKING @@ -12,7 +13,10 @@ class MLFF(Enum): # TODO inherit from StrEnum when 3.11+ """Names of ML force fields.""" - MACE = "MACE" + MACE = "MACE" # This is MACE-MP-0 (medium), deprecated + MACE_MP_0 = "MACE-MP-0" + MACE_MPA_0 = "MACE-MPA-0" + MACE_MP_0B3 = "MACE-MP-0b3" GAP = "GAP" M3GNet = "M3GNet" CHGNet = "CHGNet" @@ -27,7 +31,7 @@ def _missing_(cls, value: Any) -> Any: if isinstance(value, str): value = value.split("MLFF.")[-1] for member in cls: - if member.value == value: + if member.name == value: return member return None @@ -45,7 +49,21 @@ def _get_formatted_ff_name(force_field_name: str | MLFF) -> str: ------- str : the name of the forcefield from MLFF """ - if isinstance(force_field_name, str) and force_field_name in MLFF.__members__: + if isinstance(force_field_name, str): # ensure `force_field_name` uses enum format - force_field_name = MLFF(force_field_name) - return str(force_field_name) + if force_field_name in MLFF.__members__: + force_field_name = MLFF[force_field_name] + elif force_field_name in [v.value for v in MLFF]: + force_field_name = MLFF(force_field_name) + force_field_name = str(force_field_name) + if force_field_name in {"MLFF.MACE", "MACE"}: + warnings.warn( + "Because the default MP-trained MACE model is constantly evolving, " + "we no longer recommend using `MACE` or `MLFF.MACE` to specify " + "a MACE model. For reproducibility purposes, specifying `MACE` " + "will still default to MACE-MP-0 (medium), which is identical to " + "specifying `MLFF.MACE_MP_0`.", + category=UserWarning, + stacklevel=2, + ) + return force_field_name diff --git a/src/atomate2/forcefields/flows/elastic.py b/src/atomate2/forcefields/flows/elastic.py index df2cc945cf..61c9882dcf 100644 --- a/src/atomate2/forcefields/flows/elastic.py +++ b/src/atomate2/forcefields/flows/elastic.py @@ -127,8 +127,7 @@ def from_force_field_name( **(mlff_kwargs or {}), "force_field_name": _get_formatted_ff_name(force_field_name), } - return cls( - name=f"{str(force_field_name).split('MLFF.')[-1]} elastic", + kwargs.update( bulk_relax_maker=ForceFieldRelaxMaker( relax_cell=True, **default_kwargs, @@ -137,5 +136,8 @@ def from_force_field_name( relax_cell=False, **default_kwargs, ), + ) + return cls( + name=f"{str(force_field_name).split('MLFF.')[-1]} elastic", **kwargs, ) diff --git a/src/atomate2/forcefields/flows/eos.py b/src/atomate2/forcefields/flows/eos.py index 21b39a75ec..1a257e01ca 100644 --- a/src/atomate2/forcefields/flows/eos.py +++ b/src/atomate2/forcefields/flows/eos.py @@ -8,13 +8,15 @@ from monty.dev import deprecated from atomate2.common.flows.eos import CommonEosMaker -from atomate2.forcefields import MLFF, _get_formatted_ff_name +from atomate2.forcefields import _get_formatted_ff_name from atomate2.forcefields.jobs import ForceFieldRelaxMaker if TYPE_CHECKING: from jobflow import Maker from typing_extensions import Self + from atomate2.forcefields import MLFF + @dataclass class ForceFieldEosMaker(CommonEosMaker): @@ -74,7 +76,7 @@ def from_force_field_name( relax_initial_structure: bool = True Whether to relax the initial structure before performing an EOS fit. **kwargs - Additional kwargs to pass to ElasticMaker + Additional kwargs to pass to ForceFieldEosMaker Returns @@ -82,17 +84,20 @@ def from_force_field_name( ForceFieldEosMaker """ force_field_name = _get_formatted_ff_name(force_field_name) - return cls( - name=f"{force_field_name.split('MLFF.')[-1]} EOS Maker", - initial_relax_maker=( - ForceFieldRelaxMaker(force_field_name=force_field_name) - if relax_initial_structure - else None - ), + if relax_initial_structure: + kwargs.update( + initial_relax_maker=ForceFieldRelaxMaker( + force_field_name=force_field_name + ) + ) + kwargs.update( eos_relax_maker=ForceFieldRelaxMaker( force_field_name=force_field_name, relax_cell=False ), static_maker=None, + ) + return cls( + name=f"{force_field_name.split('MLFF.')[-1]} EOS Maker", **kwargs, ) @@ -202,12 +207,14 @@ class M3GNetEosMaker(CommonEosMaker): @deprecated( replacement=ForceFieldEosMaker, deadline=(2025, 1, 1), - message='Use ForceFieldEosMaker.from_force_field_name(force_field_name = "MACE")', + message=( + 'Use ForceFieldEosMaker.from_force_field_name(force_field_name = "MACE-MP-0")' + ), ) @dataclass class MACEEosMaker(CommonEosMaker): """ - Generate equation of state data using the MACE ML forcefield. + Generate equation of state data using the MACE-MP-0 ML forcefield. First relax a structure using relax_maker. Then perform a series of deformations on the relaxed structure, and @@ -238,13 +245,13 @@ class MACEEosMaker(CommonEosMaker): TODO: remove this when clash is fixed """ - name: str = "MACE EOS Maker" + name: str = "MACE-MP-0 EOS Maker" initial_relax_maker: Maker = field( - default_factory=lambda: ForceFieldRelaxMaker(force_field_name="MACE") + default_factory=lambda: ForceFieldRelaxMaker(force_field_name="MACE-MP-0") ) eos_relax_maker: Maker = field( default_factory=lambda: ForceFieldRelaxMaker( - force_field_name="MACE", relax_cell=False + force_field_name="MACE-MP-0", relax_cell=False ) ) static_maker: Maker = None diff --git a/src/atomate2/forcefields/flows/phonons.py b/src/atomate2/forcefields/flows/phonons.py index ffff2934c8..75a79c6f71 100644 --- a/src/atomate2/forcefields/flows/phonons.py +++ b/src/atomate2/forcefields/flows/phonons.py @@ -3,12 +3,18 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Literal +from typing import TYPE_CHECKING, Literal from atomate2 import SETTINGS from atomate2.common.flows.phonons import BasePhononMaker +from atomate2.forcefields import _get_formatted_ff_name from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +if TYPE_CHECKING: + from typing_extensions import Self + + from atomate2.forcefields import MLFF + @dataclass class PhononMaker(BasePhononMaker): @@ -119,7 +125,7 @@ class PhononMaker(BasePhononMaker): use_symmetrized_structure: Literal["primitive", "conventional"] | None = None bulk_relax_maker: ForceFieldRelaxMaker | None = field( default_factory=lambda: ForceFieldRelaxMaker( - force_field_name="CHGNet", relax_kwargs={"fmax": 0.00001} + force_field_name="CHGNet", relax_kwargs={"fmax": 1e-5} ) ) static_energy_maker: ForceFieldStaticMaker | None = field( @@ -146,3 +152,45 @@ def prev_calc_dir_argname(self) -> None: calculations are performed for each ordering (relax -> static) """ return + + @classmethod + def from_force_field_name( + cls, + force_field_name: str | MLFF, + relax_initial_structure: bool = True, + **kwargs, + ) -> Self: + """ + Create a phonon flow from a forcefield name. + + Parameters + ---------- + force_field_name : str or .MLFF + The name of the force field. + relax_initial_structure: bool = True + Whether to relax the initial structure before performing an EOS fit. + **kwargs + Additional kwargs to pass to PhononMaker + + + Returns + ------- + PhononMaker + """ + force_field_name = _get_formatted_ff_name(force_field_name) + if relax_initial_structure: + kwargs.update( + bulk_relax_maker=ForceFieldRelaxMaker( + force_field_name=force_field_name, relax_kwargs={"fmax": 1e-5} + ) + ) + kwargs.update( + static_energy_maker=ForceFieldStaticMaker( + force_field_name=force_field_name + ), + phonon_displacement_maker=ForceFieldStaticMaker( + force_field_name=force_field_name + ), + born_maker=None, + ) + return cls(name=f"{force_field_name.split('MLFF.')[-1]} Phonon Maker", **kwargs) diff --git a/src/atomate2/forcefields/flows/qha.py b/src/atomate2/forcefields/flows/qha.py index da93c2e79c..082c57bb8b 100644 --- a/src/atomate2/forcefields/flows/qha.py +++ b/src/atomate2/forcefields/flows/qha.py @@ -3,17 +3,23 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Literal +from typing import TYPE_CHECKING, Literal from atomate2.common.flows.qha import CommonQhaMaker +from atomate2.forcefields import _get_formatted_ff_name from atomate2.forcefields.flows.phonons import PhononMaker from atomate2.forcefields.jobs import ForceFieldRelaxMaker +if TYPE_CHECKING: + from typing_extensions import Self + + from atomate2.forcefields import MLFF + @dataclass -class CHGNetQhaMaker(CommonQhaMaker): +class ForceFieldQhaMaker(CommonQhaMaker): """ - Perform quasi-harmonic approximation. + Perform quasi-harmonic approximation with a machine learning forcefield. First relax a structure using relax_maker. Then perform a series of deformations on the relaxed structure, and @@ -59,18 +65,10 @@ class CHGNetQhaMaker(CommonQhaMaker): """ - name: str = "CHGNet QHA Maker" - initial_relax_maker: ForceFieldRelaxMaker | None = field( - default_factory=lambda: ForceFieldRelaxMaker(force_field_name="CHGNet") - ) - eos_relax_maker: ForceFieldRelaxMaker | None = field( - default_factory=lambda: ForceFieldRelaxMaker( - force_field_name="CHGNet", relax_cell=False, relax_kwargs={"fmax": 0.00001} - ) - ) - phonon_maker: PhononMaker = field( - default_factory=lambda: PhononMaker(bulk_relax_maker=None) - ) + name: str = "Forcefield QHA Maker" + initial_relax_maker: ForceFieldRelaxMaker | None = None + eos_relax_maker: ForceFieldRelaxMaker | None = None + phonon_maker: PhononMaker = None linear_strain: tuple[float, float] = (-0.05, 0.05) number_of_frames: int = 6 pressure: float | None = None @@ -91,3 +89,116 @@ def prev_calc_dir_argname(self) -> None: calculations are performed for each ordering (relax -> static) """ return + + @classmethod + def from_force_field_name( + cls, + force_field_name: str | MLFF, + relax_initial_structure: bool = True, + run_eos_flow: bool = True, + **kwargs, + ) -> Self: + """ + Create a QHA flow from a forcefield name. + + Parameters + ---------- + force_field_name : str or .MLFF + The name of the force field. + relax_initial_structure: bool = True + Whether to relax the initial structure before performing an EOS fit. + run_eos_flow : bool = True + Whether to perform an EOS fit. + **kwargs + Additional kwargs to pass to ForceFieldEosMaker + + + Returns + ------- + ForceFieldQhaMaker + """ + force_field_name = _get_formatted_ff_name(force_field_name) + if relax_initial_structure: + kwargs.update( + initial_relax_maker=ForceFieldRelaxMaker( + force_field_name=force_field_name + ), + ) + if run_eos_flow: + kwargs.update( + eos_relax_maker=ForceFieldRelaxMaker( + force_field_name=force_field_name, + relax_cell=False, + relax_kwargs={"fmax": 1e-5}, + ) + ) + return cls( + phonon_maker=PhononMaker.from_force_field_name( + force_field_name=force_field_name, relax_initial_structure=False + ), + name=f"{force_field_name.split('MLFF.')[-1]} QHA Maker", + **kwargs, + ) + + +@dataclass +class CHGNetQhaMaker(ForceFieldQhaMaker): + """ + Perform quasi-harmonic approximation using CHGNet. + + First relax a structure using relax_maker. + Then perform a series of deformations on the relaxed structure, and + then compute harmonic phonons for each deformed structure. + Finally, compute Gibb's free energy. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + initial_relax_maker: .ForceFieldRelaxMaker | None + Maker to relax the input structure. + eos_relax_maker: .ForceFieldRelaxMaker | None + Maker to relax deformed structures for the EOS fit. + The volume has to be fixed! + phonon_maker: .PhononMaker + Maker to compute phonons. The volume has to be fixed! + The beforehand relaxation could be switched off. + linear_strain: tuple[float, float] + Percentage linear strain to apply as a deformation, default = -5% to 5%. + number_of_frames: int + Number of strain calculations to do for EOS fit, default = 6. + t_max: float | None + Maximum temperature until which the QHA will be performed + pressure: float | None + Pressure at which the QHA will be performed (default None, no pressure) + skip_analysis: bool + Skips the analysis step and only performs EOS and phonon computations. + ignore_imaginary_modes: bool + By default, volumes where the harmonic phonon approximation shows imaginary + will be ignored + eos_type: supported_eos + Equation of State type used for the fitting. Defaults to vinet. + min_length: float + min length of the supercell that will be built + max_length: float + max length of the supercell that will be built + prefer_90_degrees: bool + if set to True, supercell algorithm will first try to find a supercell + with 3 90 degree angles + get_supercell_size_kwargs: dict + kwargs that will be passed to get_supercell_size to determine supercell size + + """ + + name: str = "CHGNet QHA Maker" + phonon_maker: PhononMaker = field( + default_factory=lambda: PhononMaker(bulk_relax_maker=None) + ) + initial_relax_maker: ForceFieldRelaxMaker | None = field( + default_factory=lambda: ForceFieldRelaxMaker(force_field_name="CHGNet") + ) + eos_relax_maker: ForceFieldRelaxMaker | None = field( + default_factory=lambda: ForceFieldRelaxMaker( + force_field_name="CHGNet", relax_cell=False, relax_kwargs={"fmax": 1e-5} + ) + ) diff --git a/src/atomate2/forcefields/jobs.py b/src/atomate2/forcefields/jobs.py index f2307e3a50..5ab0e71488 100644 --- a/src/atomate2/forcefields/jobs.py +++ b/src/atomate2/forcefields/jobs.py @@ -34,6 +34,10 @@ MLFF.M3GNet: {"stress_weight": _GPa_to_eV_per_A3}, MLFF.NEP: {"model_filename": "nep.txt"}, MLFF.GAP: {"args_str": "IP GAP", "param_filename": "gap.xml"}, + MLFF.MACE: {"model": "medium"}, + MLFF.MACE_MP_0: {"model": "medium"}, + MLFF.MACE_MPA_0: {"model": "medium-mpa-0"}, + MLFF.MACE_MP_0B3: {"model": "medium-0b3"}, } @@ -536,12 +540,15 @@ class NequipStaticMaker(ForceFieldStaticMaker): @deprecated( replacement=ForceFieldRelaxMaker, deadline=(2025, 1, 1), - message="To use MACE, set `force_field_name = 'MACE'` in ForceFieldRelaxMaker.", + message=( + "To use MACE-MP-0, set `force_field_name = 'MACE-MP-0'` " + "in ForceFieldRelaxMaker." + ), ) @dataclass class MACERelaxMaker(ForceFieldRelaxMaker): """ - Maker to perform a relaxation using the MACE ML force field. + Maker to perform a relaxation using the MACE-MP-0 medium ML force field. Parameters ---------- @@ -572,8 +579,8 @@ class MACERelaxMaker(ForceFieldRelaxMaker): Additional keyword args passed to :obj:`.ForceFieldTaskDocument()`. """ - name: str = f"{MLFF.MACE} relax" - force_field_name: str | MLFF = MLFF.MACE + name: str = f"{MLFF.MACE_MP_0} relax" + force_field_name: str | MLFF = MLFF.MACE_MP_0 relax_cell: bool = True fix_symmetry: bool = False symprec: float = 1e-2 @@ -586,12 +593,15 @@ class MACERelaxMaker(ForceFieldRelaxMaker): @deprecated( replacement=ForceFieldStaticMaker, deadline=(2025, 1, 1), - message="To use MACE, set `force_field_name = 'MACE'` in ForceFieldStaticMaker.", + message=( + "To use MACE-MP-0, set `force_field_name = 'MACE_MP_0'` " + "in ForceFieldStaticMaker." + ), ) @dataclass class MACEStaticMaker(ForceFieldStaticMaker): """ - Maker to calculate forces and stresses using the MACE force field. + Maker to calculate forces and stresses using the MACE-MP-0 force field. Parameters ---------- @@ -609,8 +619,8 @@ class MACEStaticMaker(ForceFieldStaticMaker): Additional keyword args passed to :obj:`.ForceFieldTaskDocument()`. """ - name: str = f"{MLFF.MACE} static" - force_field_name: str | MLFF = MLFF.MACE + name: str = f"{MLFF.MACE_MP_0} static" + force_field_name: str | MLFF = MLFF.MACE_MP_0 task_document_kwargs: dict = field(default_factory=dict) diff --git a/src/atomate2/forcefields/md.py b/src/atomate2/forcefields/md.py index 4984e8c574..c46330cd52 100644 --- a/src/atomate2/forcefields/md.py +++ b/src/atomate2/forcefields/md.py @@ -199,14 +199,16 @@ class NEPMDMaker(ForceFieldMDMaker): @deprecated( replacement=ForceFieldMDMaker, deadline=(2025, 1, 1), - message="To use MACE, set `force_field_name = 'MACE'` in ForceFieldMDMaker.", + message=( + "To use MACE-MP-0, set `force_field_name = 'MACE_MP_0'` in ForceFieldMDMaker." + ), ) @dataclass class MACEMDMaker(ForceFieldMDMaker): - """Perform an MD run with MACE.""" + """Perform an MD run with MACE-MP-0.""" - name: str = f"{MLFF.MACE} MD" - force_field_name: str | MLFF = MLFF.MACE + name: str = f"{MLFF.MACE_MP_0} MD" + force_field_name: str | MLFF = MLFF.MACE_MP_0 calculator_kwargs: dict = field( default_factory=lambda: {"default_dtype": "float32"} ) diff --git a/src/atomate2/forcefields/schemas.py b/src/atomate2/forcefields/schemas.py index ed5ef6e6f5..14f737ec09 100644 --- a/src/atomate2/forcefields/schemas.py +++ b/src/atomate2/forcefields/schemas.py @@ -139,6 +139,9 @@ def from_ase_compatible_result( MLFF.M3GNet: "matgl", MLFF.CHGNet: "chgnet", MLFF.MACE: "mace-torch", + MLFF.MACE_MP_0: "mace-torch", + MLFF.MACE_MPA_0: "mace-torch", + MLFF.MACE_MP_0B3: "mace-torch", MLFF.GAP: "quippy-ase", MLFF.Nequip: "nequip", } diff --git a/src/atomate2/forcefields/utils.py b/src/atomate2/forcefields/utils.py index 043b7b037a..4ef4a4b30f 100644 --- a/src/atomate2/forcefields/utils.py +++ b/src/atomate2/forcefields/utils.py @@ -43,7 +43,7 @@ def ase_calculator(calculator_meta: str | dict, **kwargs: Any) -> Calculator | N calculator = None if isinstance(calculator_meta, str | MLFF) and calculator_meta in map(str, MLFF): - calculator_name = MLFF(calculator_meta.split("MLFF.")[-1]) + calculator_name = MLFF[calculator_meta.split("MLFF.")[-1]] if calculator_name == MLFF.CHGNet: from chgnet.model.dynamics import CHGNetCalculator @@ -58,7 +58,9 @@ def ase_calculator(calculator_meta: str | dict, **kwargs: Any) -> Calculator | N potential = matgl.load_model(path) calculator = PESCalculator(potential, **kwargs) - elif calculator_name == MLFF.MACE: + elif calculator_name in map( + MLFF, ("MACE", "MACE-MP-0", "MACE-MPA-0", "MACE-MP-0b3") + ): from mace.calculators import MACECalculator, mace_mp model = kwargs.get("model") diff --git a/src/atomate2/lobster/schemas.py b/src/atomate2/lobster/schemas.py index ae4352669e..d67a2782d1 100644 --- a/src/atomate2/lobster/schemas.py +++ b/src/atomate2/lobster/schemas.py @@ -597,6 +597,7 @@ def from_directory( "bva_comp": True, **calc_quality_kwargs, } + cal_quality_dict = Analysis.get_lobster_calc_quality_summary( path_to_poscar=structure_path, path_to_vasprun=vasprun_path, @@ -844,34 +845,32 @@ def from_directory( calc_quality_text = None describe = None describe_ionic = None - if analyze_outputs: - if ( - icohplist_path.exists() - and cohpcar_path.exists() - and charge_path.exists() - ): - ( - condensed_bonding_analysis, - describe, - sb_all, - ) = CondensedBondingAnalysis.from_directory( - dir_name, - save_cohp_plots=save_cohp_plots, - plot_kwargs=plot_kwargs, - lobsterpy_kwargs=lobsterpy_kwargs, - which_bonds="all", - ) - ( - condensed_bonding_analysis_ionic, - describe_ionic, - sb_ionic, - ) = CondensedBondingAnalysis.from_directory( - dir_name, - save_cohp_plots=save_cohp_plots, - plot_kwargs=plot_kwargs, - lobsterpy_kwargs=lobsterpy_kwargs, - which_bonds="cation-anion", - ) + + if analyze_outputs and ( + icohplist_path.exists() and cohpcar_path.exists() and charge_path.exists() + ): + ( + condensed_bonding_analysis, + describe, + sb_all, + ) = CondensedBondingAnalysis.from_directory( + dir_name, + save_cohp_plots=save_cohp_plots, + plot_kwargs=plot_kwargs, + lobsterpy_kwargs=lobsterpy_kwargs, + which_bonds="all", + ) + ( + condensed_bonding_analysis_ionic, + describe_ionic, + sb_ionic, + ) = CondensedBondingAnalysis.from_directory( + dir_name, + save_cohp_plots=save_cohp_plots, + plot_kwargs=plot_kwargs, + lobsterpy_kwargs=lobsterpy_kwargs, + which_bonds="cation-anion", + ) # Get lobster calculation quality summary data calc_quality_summary = CalcQualitySummary.from_directory( @@ -971,7 +970,9 @@ def from_directory( if describe_ionic is not None else None, strongest_bonds_cation_anion=sb_ionic, - calc_quality_summary=calc_quality_summary, + calc_quality_summary=calc_quality_summary + if calc_quality_summary is not None + else None, calc_quality_text=" ".join(calc_quality_text) if calc_quality_text is not None else None, diff --git a/src/atomate2/utils/testing/aims.py b/src/atomate2/utils/testing/aims.py new file mode 100644 index 0000000000..4f66e922f8 --- /dev/null +++ b/src/atomate2/utils/testing/aims.py @@ -0,0 +1,154 @@ +"""Utilities for testing FHI-aims calculations.""" + +from __future__ import annotations + +import logging +from pathlib import Path +from typing import TYPE_CHECKING, Any, Final, Literal + +from jobflow import CURRENT_JOB +from monty.os.path import zpath as monty_zpath +from pymatgen.io.aims.sets.base import AimsInputGenerator + +import atomate2.aims.jobs.base +import atomate2.aims.run + +if TYPE_CHECKING: + from collections.abc import Callable, Generator, Sequence + + from pymatgen.io.aims.sets import AimsInputSet + from pytest import MonkeyPatch + +logger = logging.getLogger("atomate2") + + +_VFILES: Final = ("control.in",) +_REF_PATHS: dict[str, str | Path] = {} +_FAKE_RUN_AIMS_KWARGS: dict[str, dict] = {} + + +def zpath(path: str | Path) -> Path: + """Return the path of a zip file. + + Returns an existing (zipped or unzipped) file path given the unzipped + version. If no path exists, returns the unmodified path. + """ + return Path(monty_zpath(str(path))) + + +def monkeypatch_aims( + monkeypatch: MonkeyPatch, ref_path: Path +) -> Generator[Callable[[Any, Any], Any], None, None]: + """Allow one to mock (fake) running FHI-aims. + + To use the fixture successfully, the following steps must be followed: + 1. "mock_aims" should be included as an argument to any test that would like to use + its functionally. + 2. For each job in your workflow, you should prepare a reference directory + containing two folders "inputs" (containing the reference input files expected + to be produced by write_aims_input_set) and "outputs" (containing the expected + output files to be produced by run_aims). These files should reside in a + subdirectory of "tests/test_data/aims". + 3. Create a dictionary mapping each job name to its reference directory. Note that + you should supply the reference directory relative to the "tests/test_data/aims" + folder. For example, if your calculation has one job named "static" and the + reference files are present in "tests/test_data/aims/Si_static", the dictionary + would look like: ``{"static": "Si_static"}``. + 4. Optional (does not work yet): create a dictionary mapping each job name to + custom keyword arguments that will be supplied to fake_run_aims. + This way you can configure which control.in settings are expected for each job. + For example, if your calculation has one job named "static" and you wish to + validate that "xc" is set correctly in the control.in, your dictionary would + look like + ``{"static": {"input_settings": {"relativistic": "atomic_zora scalar"}}``. + 5. Inside the test function, call `mock_aims(ref_paths, fake_aims_kwargs)`, where + ref_paths is the dictionary created in step 3 and fake_aims_kwargs is the + dictionary created in step 4. + 6. Run your aims job after calling `mock_aims`. + + For examples, see the tests in tests/aims/jobs/core.py. + """ + + def mock_run_aims(*args, **kwargs) -> None: # noqa: ARG001 + name = CURRENT_JOB.job.name + try: + ref_dir = ref_path / _REF_PATHS[name] + except KeyError: + raise ValueError( + f"no reference directory found for job {name!r}; " + f"reference paths received={_REF_PATHS}" + ) from None + fake_run_aims(ref_dir, **_FAKE_RUN_AIMS_KWARGS.get(name, {})) + + get_input_set_orig = AimsInputGenerator.get_input_set + + def mock_get_input_set(self: AimsInputGenerator, *args, **kwargs) -> AimsInputSet: + return get_input_set_orig(self, *args, **kwargs) + + monkeypatch.setattr(atomate2.aims.run, "run_aims", mock_run_aims) + monkeypatch.setattr(atomate2.aims.jobs.base, "run_aims", mock_run_aims) + monkeypatch.setattr(AimsInputGenerator, "get_input_set", mock_get_input_set) + + def _run(ref_paths: dict, fake_run_aims_kwargs: dict | None = None) -> None: + _REF_PATHS.update(ref_paths) + _FAKE_RUN_AIMS_KWARGS.update(fake_run_aims_kwargs or {}) + + yield _run + + monkeypatch.undo() + _REF_PATHS.clear() + _FAKE_RUN_AIMS_KWARGS.clear() + + +def fake_run_aims( + ref_path: str | Path, + input_settings: Sequence[str] | None = None, # noqa: ARG001 + check_inputs: Sequence[Literal["control.in"]] = _VFILES, # noqa: ARG001 + clear_inputs: bool = False, +) -> None: + """ + Emulate running aims and validate aims input files. + + Parameters + ---------- + ref_path + Path to reference directory with aims input files in the folder named 'inputs' + and output files in the folder named 'outputs'. + input_settings + A list of input settings to check. + check_inputs + A list of aims input files to check. Supported options are "aims.inp" + clear_inputs + Whether to clear input files before copying in the reference aims outputs. + """ + logger.info("Running fake aims.") + + ref_path = Path(ref_path) + + logger.info("Verified inputs successfully") + + if clear_inputs: + clear_aims_inputs() + + copy_aims_outputs(ref_path) + + # pretend to run aims by copying pre-generated outputs from reference dir + logger.info("Generated fake aims outputs") + + +def clear_aims_inputs() -> None: + """Clean up FHI-aims input files.""" + for aims_file in ("control.in", "geometry.in", "parameters.json"): + if Path(aims_file).exists(): + Path(aims_file).unlink() + logger.info("Cleared aims inputs") + + +def copy_aims_outputs(ref_path: str | Path) -> None: + """Copy FHI-aims output files from the reference directory.""" + import shutil + + output_path = Path(ref_path) / "outputs" + for output_file in output_path.iterdir(): + if output_file.is_file(): + shutil.copy(output_file, ".") diff --git a/src/atomate2/utils/testing/lobster.py b/src/atomate2/utils/testing/lobster.py new file mode 100644 index 0000000000..9808deb90f --- /dev/null +++ b/src/atomate2/utils/testing/lobster.py @@ -0,0 +1,197 @@ +"""Utilities for testing LOBSTER calculations.""" + +from __future__ import annotations + +import logging +import shutil +from pathlib import Path +from typing import TYPE_CHECKING + +import pytest +from pymatgen.io.lobster import Lobsterin + +import atomate2.lobster.jobs +import atomate2.lobster.run + +if TYPE_CHECKING: + from collections.abc import Callable, Generator, Sequence + +logger = logging.getLogger("atomate2") + +_LFILES = "lobsterin" +_DFT_FILES = ("WAVECAR", "POSCAR", "INCAR", "KPOINTS", "POTCAR") +_LOBS_REF_PATHS: dict[str, str | Path] = {} +_FAKE_RUN_LOBSTER_KWARGS: dict[str, dict[str, Sequence]] = {} + + +@pytest.fixture(scope="session") +def lobster_test_dir(test_dir: str | Path) -> Path: + """Fixture to provide the test directory for LOBSTER tests. + + Args: + test_dir: The base test directory. + + Returns + ------- + Path: The test directory for LOBSTER tests. + """ + return Path(test_dir) / "lobster" + + +def monkeypatch_lobster( + monkeypatch: pytest.MonkeyPatch, lobster_test_dir: Path +) -> Generator[ + Callable[[dict[str, str | Path], dict[str, dict[str, Sequence]]], None], + None, + None, +]: + """Monkeypatch LOBSTER run calls for testing purposes. + + This generator can be used as a context manager or pytest fixture ("mock_lobster"). + It replaces calls to run_lobster with a mock function that copies reference files + instead of running LOBSTER. + + The primary idea is that instead of running LOBSTER to + generate the output files, reference files will be copied + into the directory instead. This ensures that the calculation + inputs are generated correctly and that the outputs are + parsed properly. + + To use the fixture successfully, follow these steps: + 1. Include "mock_lobster" as an argument to any test that + would like to use its functionality. + 2. For each job in your workflow, prepare a reference + directory containing two folders: + "inputs" (containing the reference input files expected + to be produced by Lobsterin.standard_calculations_from_vasp_files) + and "outputs" (containing the expected + output files to be produced by run_lobster). + These files should reside in a subdirectory + of "tests/test_data/lobster". + 3. Create a dictionary mapping each job name + to its reference directory. Note that you should + supply the reference directory relative + to the "tests/test_data/lobster" folder. For example, + if your calculation has one job named + "lobster_run_0" and the reference files are present in + "tests/test_data/lobster/Si_lobster_run_0", + the dictionary would look like: + {"lobster_run_0": "Si_lobster_run_0"}. + 4. Optionally, create a dictionary mapping each + job name to custom keyword arguments that will be + supplied to fake_run_lobster. This way you can + configure which lobsterin settings are expected + for each job. For example, if your calculation + has one job named "lobster_run_0" and you wish + to validate that "basisfunctions" is set correctly + in the lobsterin, your dictionary would look like: + {"lobster_run_0": {"lobsterin_settings": + {"basisfunctions": Ba 5p 5s 6s}}. + 5. Inside the test function, call + `mock_lobster(ref_paths, fake_lobster_kwargs)`, + where ref_paths is the + dictionary created in step 3 and + fake_lobster_kwargs is the dictionary created in step 4. + 6. Run your LOBSTER job after calling `mock_lobster`. + + Args: + monkeypatch (pytest.MonkeyPatch): + The pytest monkeypatch fixture. + lobster_test_dir (Path): + The directory containing reference files for LOBSTER tests. + """ + + def mock_run_lobster(*_args, **_kwargs) -> None: + from jobflow import CURRENT_JOB + + name = CURRENT_JOB.job.name + ref_path = lobster_test_dir / _LOBS_REF_PATHS[name] + fake_run_lobster(ref_path, **_FAKE_RUN_LOBSTER_KWARGS.get(name, {})) + + monkeypatch.setattr(atomate2.lobster.run, "run_lobster", mock_run_lobster) + monkeypatch.setattr(atomate2.lobster.jobs, "run_lobster", mock_run_lobster) + + def _run( + ref_paths: dict[str, str | Path], + fake_run_lobster_kwargs: dict[str, dict[str, Sequence]], + ) -> None: + _LOBS_REF_PATHS.update(ref_paths) + _FAKE_RUN_LOBSTER_KWARGS.update(fake_run_lobster_kwargs) + + yield _run + + monkeypatch.undo() + _LOBS_REF_PATHS.clear() + + +def fake_run_lobster( + ref_path: str | Path, + check_lobster_inputs: Sequence[str] = _LFILES, + check_dft_inputs: Sequence[str] = _DFT_FILES, + lobsterin_settings: Sequence[str] = (), +) -> None: + """ + Emulate running LOBSTER and validate LOBSTER input files. + + Parameters + ---------- + ref_path + Path to reference directory with VASP input files in the folder named 'inputs' + and output files in the folder named 'outputs'. + check_lobster_inputs + A list of lobster input files to check. Supported options are "lobsterin.gz". + check_dft_inputs + A list of VASP files that need to be copied to start the LOBSTER runs. + lobsterin_settings + A list of LOBSTER settings to check. + """ + logger.info("Running fake LOBSTER.") + ref_path = Path(ref_path) + + # Checks if DFT files have been copied + for file in check_dft_inputs: + Path(file).exists() + logger.info("Verified copying of VASP files successfully") + # zipped or not zipped? + if "lobsterin" in check_lobster_inputs: + verify_inputs(ref_path, lobsterin_settings) + + logger.info("Verified LOBSTER inputs successfully") + + copy_lobster_outputs(ref_path) + + # pretend to run LOBSTER by copying pre-generated outputs from reference dir + logger.info("ran fake LOBSTER, generated outputs") + + +def verify_inputs(ref_path: str | Path, lobsterin_settings: Sequence[str]) -> None: + """Verify LOBSTER input files against reference settings. + + Args: + ref_path (str | Path): Path to the reference directory containing input files. + lobsterin_settings (Sequence[str]): A list of LOBSTER settings to check. + """ + user = Lobsterin.from_file("lobsterin") + + # Check lobsterin + ref = Lobsterin.from_file(Path(ref_path) / "inputs" / "lobsterin") + + for key in lobsterin_settings: + ref_val, user_val = ref.get(key), user.get(key) + if ref_val != user_val: + raise ValueError( + f"lobsterin value of {key} is inconsistent, got {user_val} but " + f"expected {ref_val}!" + ) + + +def copy_lobster_outputs(ref_path: str | Path) -> None: + """Copy LOBSTER output files from the reference directory to the current directory. + + Args: + ref_path (str | Path): Path to the reference directory containing output files. + """ + output_path = Path(ref_path) / "outputs" + for output_file in output_path.iterdir(): + if output_file.is_file(): + shutil.copy(output_file, ".") diff --git a/src/atomate2/vasp/flows/eos.py b/src/atomate2/vasp/flows/eos.py index 41b31ac149..9dacac20ba 100644 --- a/src/atomate2/vasp/flows/eos.py +++ b/src/atomate2/vasp/flows/eos.py @@ -83,7 +83,7 @@ class EosMaker(CommonEosMaker): Maker to relax deformed structures for the EOS fit. static_maker : .Maker | None Maker to generate statics after each relaxation, defaults to None. - strain : tuple[float] + linear_strain : tuple[float] Percentage linear strain to apply as a deformation, default = -5% to 5%. number_of_frames : int Number of strain calculations to do for EOS fit, default = 6. diff --git a/src/atomate2/vasp/flows/mp.py b/src/atomate2/vasp/flows/mp.py index 76bce471aa..d2a0490883 100644 --- a/src/atomate2/vasp/flows/mp.py +++ b/src/atomate2/vasp/flows/mp.py @@ -15,10 +15,15 @@ from jobflow import Flow, Maker from pymatgen.io.vasp.sets import LobsterSet +from atomate2.common.jobs.utils import remove_workflow_files +from atomate2.common.utils import _recursive_get_dir_names from atomate2.lobster.jobs import LobsterMaker from atomate2.vasp.flows.core import DoubleRelaxMaker from atomate2.vasp.flows.lobster import VaspLobsterMaker from atomate2.vasp.jobs.mp import ( + MP24PreRelaxMaker, + MP24RelaxMaker, + MP24StaticMaker, MPGGARelaxMaker, MPGGAStaticMaker, MPMetaGGARelaxMaker, @@ -29,6 +34,7 @@ logger = logging.getLogger(__name__) if TYPE_CHECKING: + from collections.abc import Sequence from pathlib import Path from pymatgen.core.structure import Structure @@ -194,6 +200,95 @@ def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow return Flow(jobs=jobs, output=output, name=self.name) +@dataclass +class MP24DoubleRelaxMaker(DoubleRelaxMaker): + """MP24 PBEsol + r2SCAN double relaxation workflow. + + Parameters + ---------- + name : str + Name of the flows produced by this maker. + relax_maker1 : .BaseVaspMaker + Maker to generate the first relaxation. + relax_maker2 : .BaseVaspMaker + Maker to generate the second relaxation. + """ + + name: str = "MP24 double relax" + relax_maker1: Maker | None = field(default_factory=MP24PreRelaxMaker) + relax_maker2: Maker = field( + default_factory=lambda: MP24RelaxMaker( + copy_vasp_kwargs={"additional_vasp_files": ("WAVECAR", "CHGCAR")} + ) + ) + + +@dataclass +class MP24DoubleRelaxStaticMaker(Maker): + """MP24 workflow to relax a structure with r2SCAN. + + Optionally, files can be automatically cleaned following completion + of the workflow. By default, WAVECAR files are removed. + + Parameters + ---------- + name : str + Name of the flows produced by this maker. + relax_maker : .BaseVaspMaker + Maker to generate the relaxation. + static_maker : .BaseVaspMaker + Maker to generate the static calculation before the relaxation. + clean_files : Sequence of str or None + If a list of strings, names of files to remove following the workflow. + By default, this removes the WAVECAR files (gzipped or not). + """ + + name: str = "MP24 r2SCAN workflow" + relax_maker: Maker = field(default_factory=MP24DoubleRelaxMaker) + static_maker: Maker = field( + default_factory=lambda: MP24StaticMaker( + copy_vasp_kwargs={"additional_vasp_files": ("WAVECAR", "CHGCAR")} + ) + ) + clean_files: Sequence[str] | None = ("WAVECAR",) + + def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow: + """Relax a structure with r2SCAN. + + Parameters + ---------- + structure : .Structure + A pymatgen structure object. + prev_dir : str or Path or None + A previous VASP calculation directory to copy output files from. + + Returns + ------- + Flow + A flow containing the MP relaxation workflow. + """ + relax_flow = self.relax_maker.make(structure=structure, prev_dir=prev_dir) + + static_job = self.static_maker.make( + structure=relax_flow.output.structure, prev_dir=relax_flow.output.dir_name + ) + + jobs = [relax_flow, static_job] + + self.clean_files = self.clean_files or [] + if len(self.clean_files) > 0: + directories: list[str] = [] + _recursive_get_dir_names(jobs, directories) + cleanup = remove_workflow_files( + directories=directories, + file_names=self.clean_files, + allow_zpath=True, + ) + jobs += [cleanup] + + return Flow(jobs=jobs, output=static_job.output, name=self.name) + + # update potcars to 54, use correct W potcar # use staticmaker for compatibility @dataclass diff --git a/src/atomate2/vasp/jobs/mp.py b/src/atomate2/vasp/jobs/mp.py index 3a1cdbcee6..617c0c1363 100644 --- a/src/atomate2/vasp/jobs/mp.py +++ b/src/atomate2/vasp/jobs/mp.py @@ -12,6 +12,8 @@ from typing import TYPE_CHECKING from pymatgen.io.vasp.sets import ( + MP24RelaxSet, + MP24StaticSet, MPRelaxSet, MPScanRelaxSet, MPScanStaticSet, @@ -232,3 +234,118 @@ class MPMetaGGAStaticMaker(BaseVaspMaker): }, ) ) + + +@dataclass +class MP24PreRelaxMaker(BaseVaspMaker): + """ + Maker to create MP2024 pre-relaxation jobs with PBEsol. + + Parameters + ---------- + name : str + The job name. + input_set_generator : .VaspInputGenerator + A generator used to make the input set. + write_input_set_kwargs : dict + Keyword arguments that will get passed to :obj:`.write_vasp_input_set`. + copy_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.copy_vasp_outputs`. + run_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.run_vasp`. + task_document_kwargs : dict + Keyword arguments that will get passed to :obj:`.TaskDoc.from_directory`. + stop_children_kwargs : dict + Keyword arguments that will get passed to :obj:`.should_stop_children`. + write_additional_data : dict + Additional data to write to the current directory. Given as a dict of + {filename: data}. Note that if using FireWorks, dictionary keys cannot contain + the "." character which is typically used to denote file extensions. To avoid + this, use the ":" character, which will automatically be converted to ".". E.g. + ``{"my_file:txt": "contents of the file"}``. + """ + + name: str = "MP24 PBEsol pre-relaxation" + input_set_generator: VaspInputGenerator = field( + default_factory=lambda: MP24RelaxSet( + xc_functional="PBEsol", user_incar_settings={"LWAVE": True} + ) + ) + + +@dataclass +class MP24RelaxMaker(BaseVaspMaker): + """ + Maker to create MP2024 relaxation jobs with r2SCAN. + + Parameters + ---------- + name : str + The job name. + input_set_generator : .VaspInputGenerator + A generator used to make the input set. + write_input_set_kwargs : dict + Keyword arguments that will get passed to :obj:`.write_vasp_input_set`. + copy_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.copy_vasp_outputs`. + run_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.run_vasp`. + task_document_kwargs : dict + Keyword arguments that will get passed to :obj:`.TaskDoc.from_directory`. + stop_children_kwargs : dict + Keyword arguments that will get passed to :obj:`.should_stop_children`. + write_additional_data : dict + Additional data to write to the current directory. Given as a dict of + {filename: data}. Note that if using FireWorks, dictionary keys cannot contain + the "." character which is typically used to denote file extensions. To avoid + this, use the ":" character, which will automatically be converted to ".". E.g. + ``{"my_file:txt": "contents of the file"}``. + """ + + name: str = "MP24 r2SCAN relaxation" + input_set_generator: VaspInputGenerator = field( + default_factory=lambda: MP24RelaxSet( + xc_functional="r2SCAN", user_incar_settings={"LWAVE": True} + ) + ) + + +@dataclass +class MP24StaticMaker(BaseVaspMaker): + """ + Maker to create MP2024 static jobs with r2SCAN. + + Parameters + ---------- + name : str + The job name. + input_set_generator : .VaspInputGenerator + A generator used to make the input set. + write_input_set_kwargs : dict + Keyword arguments that will get passed to :obj:`.write_vasp_input_set`. + copy_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.copy_vasp_outputs`. + run_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.run_vasp`. + task_document_kwargs : dict + Keyword arguments that will get passed to :obj:`.TaskDoc.from_directory`. + stop_children_kwargs : dict + Keyword arguments that will get passed to :obj:`.should_stop_children`. + write_additional_data : dict + Additional data to write to the current directory. Given as a dict of + {filename: data}. Note that if using FireWorks, dictionary keys cannot contain + the "." character which is typically used to denote file extensions. To avoid + this, use the ":" character, which will automatically be converted to ".". E.g. + ``{"my_file:txt": "contents of the file"}``. + """ + + name: str = "MP24 r2SCAN static" + input_set_generator: VaspInputGenerator = field( + default_factory=lambda: MP24StaticSet( + xc_functional="r2SCAN", + user_incar_settings={ + "LELF": True, # want to save this data? + "KPAR": 1, # b/c LELF = True mandates KPAR = 1 + }, + ) + ) diff --git a/src/atomate2/vasp/sets/matpes.py b/src/atomate2/vasp/sets/matpes.py deleted file mode 100644 index 8886bfb479..0000000000 --- a/src/atomate2/vasp/sets/matpes.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Module defining MatPES input set generators. - -In case of questions, contact @janosh or @shyuep. -""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import TYPE_CHECKING - -from monty.dev import deprecated -from pymatgen.io.vasp.sets import MatPESStaticSet - -if TYPE_CHECKING: - from typing import Literal - - -@deprecated(replacement=MatPESStaticSet, deadline=(2025, 1, 1)) -@dataclass -class MatPesGGAStaticSetGenerator(MatPESStaticSet): - """Class to generate MP-compatible VASP GGA static input sets.""" - - xc_functional: Literal["R2SCAN", "PBE", "PBE+U"] = "PBE" - auto_ismear: bool = False - auto_kspacing: bool = False - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - -@deprecated( - replacement=MatPESStaticSet, - deadline=(2025, 1, 1), - message="Be sure to use `xc_functional = 'R2SCAN'` when instantiating the class.", -) -@dataclass -class MatPesMetaGGAStaticSetGenerator(MatPESStaticSet): - """Class to generate MP-compatible VASP meta-GGA static input sets.""" - - xc_functional: Literal["R2SCAN", "PBE", "PBE+U"] = "R2SCAN" - auto_ismear: bool = False - auto_kspacing: bool = False - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - @property - def incar_updates(self) -> dict: - """Get updates to the INCAR for this calculation type. - - Returns - ------- - dict - A dictionary of updates to apply. - """ - return {"GGA": None} # unset GGA diff --git a/src/atomate2/vasp/sets/mp.py b/src/atomate2/vasp/sets/mp.py deleted file mode 100644 index 6150916fc4..0000000000 --- a/src/atomate2/vasp/sets/mp.py +++ /dev/null @@ -1,144 +0,0 @@ -""" -Module defining Materials Project input set generators. - -Reference: https://doi.org/10.1103/PhysRevMaterials.6.013801 - -In case of questions, consult @Andrew-S-Rosen, @esoteric-ephemera or @janosh. -""" - -from __future__ import annotations - -from dataclasses import dataclass - -from monty.dev import deprecated -from pymatgen.io.vasp.sets import ( - MPRelaxSet, - MPScanRelaxSet, - MPScanStaticSet, - MPStaticSet, -) - - -@deprecated(replacement=MPRelaxSet, deadline=(2025, 1, 1)) -@dataclass -class MPGGARelaxSetGenerator(MPRelaxSet): - """Class to generate MP-compatible VASP GGA relaxation input sets. - - reciprocal_density (int): For static calculations, we usually set the - reciprocal density by volume. This is a convenience arg to change - that, rather than using user_kpoints_settings. Defaults to 100, - which is ~50% more than that of standard relaxation calculations. - small_gap_multiply ([float, float]): If the gap is less than - 1st index, multiply the default reciprocal_density by the 2nd - index. - **kwargs: kwargs supported by RelaxSetGenerator. - """ - - auto_ismear: bool = False - auto_kspacing: bool = False - inherit_incar: bool | None = False - bandgap_tol: float = None - force_gamma: bool = True - auto_metal_kpoints: bool = True - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - -@deprecated(replacement=MPStaticSet, deadline=(2025, 1, 1)) -@dataclass -class MPGGAStaticSetGenerator(MPStaticSet): - """Class to generate MP-compatible VASP GGA static input sets.""" - - auto_ismear: bool = False - auto_kspacing: bool = False - bandgap_tol: float = None - inherit_incar: bool | None = False - force_gamma: bool = True - auto_metal_kpoints: bool = True - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - -@deprecated(replacement=MPScanStaticSet, deadline=(2025, 1, 1)) -@dataclass -class MPMetaGGAStaticSetGenerator(MPScanStaticSet): - """Class to generate MP-compatible VASP GGA static input sets.""" - - auto_ismear: bool = False - auto_kspacing: bool = True - bandgap_tol: float = 1e-4 - inherit_incar: bool | None = False - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - @property - def incar_updates(self) -> dict: - """Get updates to the INCAR for this calculation type. - - Returns - ------- - dict - A dictionary of updates to apply. - """ - return super().incar_updates | { - "ALGO": "FAST", - "GGA": None, # unset GGA, shouldn't be set anyway but best be sure - "LCHARG": True, - "LWAVE": False, - "LVHAR": False, # this is not needed - "LELF": False, # prevents KPAR > 1 - } - - -@deprecated(replacement=MPScanRelaxSet, deadline=(2025, 1, 1)) -@dataclass -class MPMetaGGARelaxSetGenerator(MPScanRelaxSet): - """Class to generate MP-compatible VASP metaGGA relaxation input sets. - - Parameters - ---------- - config_dict: dict - The config dict. - bandgap_tol: float - Tolerance for metallic bandgap. If bandgap < bandgap_tol, KSPACING will be 0.22, - otherwise it will increase with bandgap up to a max of 0.44. - """ - - bandgap_tol: float = 1e-4 - auto_ismear: bool = False - auto_kspacing: bool = True - inherit_incar: bool | None = False - symprec: float | None = None - - def __post_init__(self) -> None: - """Raise deprecation warning and validate.""" - if self.symprec is not None: - self.sym_prec = self.symprec - super().__post_init__() - - @property - def incar_updates(self) -> dict: - """Get updates to the INCAR for this calculation type. - - Returns - ------- - dict - A dictionary of updates to apply. - """ - # unset GGA, shouldn't be set anyway but doesn't hurt to be sure - return {"LCHARG": True, "LWAVE": True, "GGA": None, "LELF": False} diff --git a/tests/aims/test_flows/test_anharmonic_quantification.py b/tests/aims/test_flows/test_anharmonic_quantification.py index d754829117..d6c5aa2477 100644 --- a/tests/aims/test_flows/test_anharmonic_quantification.py +++ b/tests/aims/test_flows/test_anharmonic_quantification.py @@ -1,6 +1,9 @@ +from pathlib import Path + import numpy as np import pytest from jobflow import run_locally +from pymatgen.core import SETTINGS, Structure from pymatgen.io.aims.sets.core import SocketIOSetGenerator, StaticSetGenerator from atomate2.aims.flows.anharmonicity import AnharmonicityMaker @@ -11,8 +14,11 @@ PhononDisplacementMakerSocket, ) +si_structure_file = Path(__file__).parents[2] / "test_data/structures/Si_diamond.cif" + -def test_anharmonic_quantification_oneshot(si, clean_dir, mock_aims, species_dir): +def test_anharmonic_quantification_oneshot(clean_dir, mock_aims, species_dir): + si = Structure.from_file(si_structure_file) # mapping from job name to directory containing test files ref_paths = { "Relaxation calculation": "phonon-relax-si", @@ -21,94 +27,63 @@ def test_anharmonic_quantification_oneshot(si, clean_dir, mock_aims, species_dir "phonon static aims anharmonicity quant. 1/1": "anharm-os-si", } + SETTINGS["AIMS_SPECIES_DIR"] = species_dir / "tight" # settings passed to fake_run_aims; adjust these to check for certain input settings fake_run_aims_kwargs = {} # automatically use fake FHI-aims mock_aims(ref_paths, fake_run_aims_kwargs) - parameters = { - "species_dir": (species_dir / "light").as_posix(), - "rlsy_symmetry": "all", - "sc_accuracy_rho": 1e-06, - "sc_accuracy_forces": 0.0001, - "relativistic": "atomic_zora scalar", - } - - parameters_phonon_disp = dict(compute_forces=True, **parameters) - parameters_phonon_disp["rlsy_symmetry"] = None - phonon_maker = PhononMaker( - bulk_relax_maker=RelaxMaker.full_relaxation( - user_params=parameters, user_kpoints_settings={"density": 5.0} - ), - static_energy_maker=StaticMaker( - input_set_generator=StaticSetGenerator( - user_params=parameters, user_kpoints_settings={"density": 5.0} - ) - ), + min_length=3.0, + generate_frequencies_eigenvectors_kwargs={"tstep": 100}, + create_thermal_displacements=True, + store_force_constants=True, + born_maker=None, use_symmetrized_structure="primitive", - phonon_displacement_maker=PhononDisplacementMaker( - input_set_generator=StaticSetGenerator( - user_params=parameters_phonon_disp, - user_kpoints_settings={"density": 5.0}, - ) - ), ) maker = AnharmonicityMaker( phonon_maker=phonon_maker, ) maker.name = "anharmonicity" - flow = maker.make(si, supercell_matrix=np.ones((3, 3)) - 2 * np.eye(3)) + flow = maker.make( + si, + supercell_matrix=np.ones((3, 3)) - 2 * np.eye(3), + one_shot_approx=True, + seed=1234, + ) # run the flow or job and ensure that it finished running successfully responses = run_locally(flow, create_folders=True, ensure_success=True) dct = responses[flow.job_uuids[-1]][1].output.sigma_dict - assert np.round(dct["one-shot"], 3) == 0.104 + assert np.round(dct["one-shot"], 3) == 0.120 + +def test_anharmonic_quantification_full(clean_dir, mock_aims, species_dir): + si = Structure.from_file(si_structure_file) -def test_anharmonic_quantification_full(si, clean_dir, mock_aims, species_dir): ref_paths = { - "Relaxation calculation": "phonon-relax-si-full", - "phonon static aims 1/1": "phonon-disp-si-full", - "SCF Calculation": "phonon-energy-si-full", + "Relaxation calculation": "phonon-relax-si", + "phonon static aims 1/1": "phonon-disp-si", + "SCF Calculation": "phonon-energy-si", "phonon static aims anharmonicity quant. 1/1": "anharm-si-full", } + SETTINGS["AIMS_SPECIES_DIR"] = species_dir / "tight" # settings passed to fake_run_aims; adjust these to check for certain input settings fake_run_aims_kwargs = {} # automatically use fake FHI-aims mock_aims(ref_paths, fake_run_aims_kwargs) - parameters = { - "species_dir": (species_dir / "light").as_posix(), - "rlsy_symmetry": "all", - "sc_accuracy_rho": 1e-06, - "sc_accuracy_forces": 0.0001, - "relativistic": "atomic_zora scalar", - } - - parameters_phonon_disp = dict(compute_forces=True, **parameters) - parameters_phonon_disp["rlsy_symmetry"] = None - phonon_maker = PhononMaker( - bulk_relax_maker=RelaxMaker.full_relaxation( - user_params=parameters, user_kpoints_settings={"density": 5.0} - ), - static_energy_maker=StaticMaker( - input_set_generator=StaticSetGenerator( - user_params=parameters, user_kpoints_settings={"density": 5.0} - ) - ), + min_length=3.0, + generate_frequencies_eigenvectors_kwargs={"tstep": 100}, + create_thermal_displacements=True, + store_force_constants=True, + born_maker=None, use_symmetrized_structure="primitive", - phonon_displacement_maker=PhononDisplacementMaker( - input_set_generator=StaticSetGenerator( - user_params=parameters_phonon_disp, - user_kpoints_settings={"density": 5.0}, - ) - ), ) maker = AnharmonicityMaker( @@ -125,7 +100,8 @@ def test_anharmonic_quantification_full(si, clean_dir, mock_aims, species_dir): # run the flow or job and ensure that it finished running successfully responses = run_locally(flow, create_folders=True, ensure_success=True) dct = responses[flow.job_uuids[-1]][1].output.sigma_dict - assert pytest.approx(dct["full"], 0.001) == 0.12012 + + assert pytest.approx(dct["full"], 0.001) == 0.144264 def test_mode_resolved_anharmonic_quantification(si, clean_dir, mock_aims, species_dir): diff --git a/tests/aims/test_flows/test_eos.py b/tests/aims/test_flows/test_eos.py index e0170739f9..a363d59520 100644 --- a/tests/aims/test_flows/test_eos.py +++ b/tests/aims/test_flows/test_eos.py @@ -13,8 +13,8 @@ # mapping from job name to directory containing test files ref_paths = { - "Relaxation calculation 1": "double-relax-si/relax-1", - "Relaxation calculation 2": "double-relax-si/relax-2", + "Relaxation calculation 1 EOS equilibrium relaxation": "double-relax-si/relax-1", + "Relaxation calculation 2 EOS equilibrium relaxation": "double-relax-si/relax-2", "Relaxation calculation (fixed cell) deformation 0": "eos-si/0", "Relaxation calculation (fixed cell) deformation 1": "eos-si/1", "Relaxation calculation (fixed cell) deformation 2": "eos-si/2", diff --git a/tests/aims/test_flows/test_phonon_workflow.py b/tests/aims/test_flows/test_phonon_workflow.py index d837c3a5c5..1ffdaed9c6 100644 --- a/tests/aims/test_flows/test_phonon_workflow.py +++ b/tests/aims/test_flows/test_phonon_workflow.py @@ -1,18 +1,21 @@ """Test various makers""" import json +from pathlib import Path import pytest +si_structure_file = Path(__file__).parents[2] / "test_data/structures/Si_diamond.cif" -def test_phonon_flow(si, clean_dir, mock_aims, species_dir): + +def test_phonon_flow(clean_dir, mock_aims, species_dir): import numpy as np from jobflow import run_locally - from pymatgen.io.aims.sets.core import StaticSetGenerator + from pymatgen.core import Structure from atomate2.aims.flows.phonons import PhononMaker - from atomate2.aims.jobs.core import RelaxMaker, StaticMaker - from atomate2.aims.jobs.phonons import PhononDisplacementMaker + + si = Structure.from_file(si_structure_file) # mapping from job name to directory containing test files ref_paths = { @@ -26,26 +29,15 @@ def test_phonon_flow(si, clean_dir, mock_aims, species_dir): # automatically use fake FHI-aims mock_aims(ref_paths, fake_run_aims_kwargs) - - parameters = { - "k_grid": [2, 2, 2], - "species_dir": (species_dir / "light").as_posix(), - } # generate job - parameters_phonon_disp = dict(compute_forces=True, **parameters) maker = PhononMaker( - bulk_relax_maker=RelaxMaker.full_relaxation(user_params=parameters), - static_energy_maker=StaticMaker( - input_set_generator=StaticSetGenerator(user_params=parameters) - ), + min_length=3.0, + generate_frequencies_eigenvectors_kwargs={"tstep": 100}, + create_thermal_displacements=True, + store_force_constants=True, + born_maker=None, use_symmetrized_structure="primitive", - phonon_displacement_maker=PhononDisplacementMaker( - input_set_generator=StaticSetGenerator( - user_params=parameters_phonon_disp, - user_kpoints_settings={"density": 5.0, "even": True}, - ) - ), ) maker.name = "phonons" flow = maker.make(si, supercell_matrix=np.ones((3, 3)) - 2 * np.eye(3)) @@ -84,11 +76,11 @@ def test_phonon_flow(si, clean_dir, mock_aims, species_dir): assert output.born is None assert not output.has_imaginary_modes - assert output.temperatures == list(range(0, 500, 10)) + assert output.temperatures == list(range(0, 500, 100)) assert output.heat_capacities[0] == 0.0 - assert np.round(output.heat_capacities[-1], 2) == 23.06 + assert np.round(output.heat_capacities[-1], 2) == 21.95 assert output.phonopy_settings.schema_json() == json.dumps(phonopy_settings_schema) - assert np.round(output.phonon_bandstructure.bands[-1, 0], 2) == 14.41 + assert np.round(output.phonon_bandstructure.bands[-1, 0], 2) == 15.1 @pytest.mark.skip(reason="Currently not mocked and needs FHI-aims binary") diff --git a/tests/forcefields/flows/test_phonon.py b/tests/forcefields/flows/test_phonon.py index d28ae6b864..340e70164a 100644 --- a/tests/forcefields/flows/test_phonon.py +++ b/tests/forcefields/flows/test_phonon.py @@ -1,6 +1,7 @@ import os from pathlib import Path +import pytest from jobflow import run_locally from numpy.testing import assert_allclose from pymatgen.core.structure import Structure @@ -16,10 +17,13 @@ from atomate2.forcefields.flows.phonons import PhononMaker -def test_phonon_wf_force_field(clean_dir, si_structure: Structure, tmp_path: Path): +@pytest.mark.parametrize("from_name", [False, True]) +def test_phonon_wf_force_field( + clean_dir, si_structure: Structure, tmp_path: Path, from_name: bool +): # TODO brittle due to inability to adjust dtypes in CHGNetRelaxMaker - flow = PhononMaker( + phonon_kwargs = dict( use_symmetrized_structure="conventional", create_thermal_displacements=False, store_force_constants=False, @@ -29,7 +33,14 @@ def test_phonon_wf_force_field(clean_dir, si_structure: Structure, tmp_path: Pat "filename_bs": (filename_bs := f"{tmp_path}/phonon_bs_test.png"), "filename_dos": (filename_dos := f"{tmp_path}/phonon_dos_test.pdf"), }, - ).make(si_structure) + ) + + if from_name: + phonon_maker = PhononMaker.from_force_field_name("CHGNet", **phonon_kwargs) + else: + phonon_maker = PhononMaker(**phonon_kwargs) + + flow = phonon_maker.make(si_structure) # run the flow or job and ensure that it finished running successfully responses = run_locally(flow, create_folders=True, ensure_success=True) diff --git a/tests/forcefields/test_jobs.py b/tests/forcefields/test_jobs.py index 0dbb765311..5473933e5f 100644 --- a/tests/forcefields/test_jobs.py +++ b/tests/forcefields/test_jobs.py @@ -319,6 +319,27 @@ def test_mace_relax_maker( assert output1.output.n_steps == 7 +def test_mace_mpa_0_relax_maker( + si_structure: Structure, +): + job = ForceFieldRelaxMaker( + force_field_name="MACE_MPA_0", + steps=25, + relax_kwargs={"fmax": 0.005}, + ).make(si_structure) + # run the flow or job and ensure that it finished running successfully + responses = run_locally(job, ensure_success=True) + + # validating the outputs of the job + output = responses[job.uuid][1].output + + assert output.ase_calculator_name == "MLFF.MACE_MPA_0" + assert output.output.energy == pytest.approx(-10.829493522644043) + assert output.output.structure.volume == pytest.approx(40.87471552602735) + assert len(output.output.ionic_steps) == 4 + assert output.structure.volume == output.output.structure.volume + + def test_gap_static_maker(si_structure: Structure, test_dir): importorskip("quippy") diff --git a/tests/forcefields/test_md.py b/tests/forcefields/test_md.py index 3686b54a5e..a5d958bf63 100644 --- a/tests/forcefields/test_md.py +++ b/tests/forcefields/test_md.py @@ -1,6 +1,7 @@ """Tests for forcefield MD flows.""" import sys +from contextlib import nullcontext from pathlib import Path import numpy as np @@ -40,19 +41,24 @@ def test_maker_initialization(): from atomate2.forcefields import MLFF for mlff in MLFF.__members__: - assert ForceFieldMDMaker(force_field_name=MLFF(mlff)) == ForceFieldMDMaker( - force_field_name=mlff - ) - assert ForceFieldMDMaker(force_field_name=str(MLFF(mlff))) == ForceFieldMDMaker( - force_field_name=mlff - ) + context_mgr = nullcontext() + if mlff == "MACE": + context_mgr = pytest.warns(UserWarning, match="default MP-trained MACE") + + with context_mgr: + assert ForceFieldMDMaker(force_field_name=MLFF(mlff)) == ForceFieldMDMaker( + force_field_name=mlff + ) + assert ForceFieldMDMaker( + force_field_name=str(MLFF(mlff)) + ) == ForceFieldMDMaker(force_field_name=mlff) @pytest.mark.parametrize("ff_name", MLFF) def test_ml_ff_md_maker( ff_name, si_structure, sr_ti_o3_structure, al2_au_structure, test_dir, clean_dir ): - if ff_name == MLFF.Forcefield: + if ff_name in map(MLFF, ("Forcefield", "MACE")): return # nothing to test here, MLFF.Forcefield is just a generic placeholder if ff_name == MLFF.GAP and sys.version_info >= (3, 12): pytest.skip( @@ -66,7 +72,9 @@ def test_ml_ff_md_maker( ref_energies_per_atom = { MLFF.CHGNet: -5.280157089233398, MLFF.M3GNet: -5.387282371520996, - MLFF.MACE: -5.311369895935059, + MLFF.MACE_MP_0: -5.311369895935059, + MLFF.MACE_MPA_0: -5.40242338180542, + MLFF.MACE_MP_0B3: -5.403963088989258, MLFF.GAP: -5.391255755606209, MLFF.NEP: -3.966232215741286, MLFF.Nequip: -8.84670181274414, diff --git a/tests/test_data/aims/anharm-os-si/inputs/control.in.gz b/tests/test_data/aims/anharm-os-si/inputs/control.in.gz index b4c50b37b5..ffd6163bb6 100644 Binary files a/tests/test_data/aims/anharm-os-si/inputs/control.in.gz and b/tests/test_data/aims/anharm-os-si/inputs/control.in.gz differ diff --git a/tests/test_data/aims/anharm-os-si/inputs/geometry.in.gz b/tests/test_data/aims/anharm-os-si/inputs/geometry.in.gz index e8029232c3..72959cc351 100644 Binary files a/tests/test_data/aims/anharm-os-si/inputs/geometry.in.gz and b/tests/test_data/aims/anharm-os-si/inputs/geometry.in.gz differ diff --git a/tests/test_data/aims/anharm-os-si/inputs/parameters.json b/tests/test_data/aims/anharm-os-si/inputs/parameters.json index de5c9ac739..6015ee83dd 100644 --- a/tests/test_data/aims/anharm-os-si/inputs/parameters.json +++ b/tests/test_data/aims/anharm-os-si/inputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [2, 2, 2], "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/anharm-os-si/outputs/aims.out.gz b/tests/test_data/aims/anharm-os-si/outputs/aims.out.gz index 123fb590e1..b09da0c01c 100644 Binary files a/tests/test_data/aims/anharm-os-si/outputs/aims.out.gz and b/tests/test_data/aims/anharm-os-si/outputs/aims.out.gz differ diff --git a/tests/test_data/aims/anharm-os-si/outputs/anharmonicity_info.json b/tests/test_data/aims/anharm-os-si/outputs/anharmonicity_info.json index f0f7a26934..88d87b3c54 100644 --- a/tests/test_data/aims/anharm-os-si/outputs/anharmonicity_info.json +++ b/tests/test_data/aims/anharm-os-si/outputs/anharmonicity_info.json @@ -1 +1 @@ -{"phonon_supercell": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.63035228, 0.0, 0.0], [0.0, 5.63035228, 0.0], [0.0, 0.0, 5.63035228]], "pbc": [true, true, true], "a": 5.63035228, "b": 5.63035228, "c": 5.63035228, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 178.48704764790898}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [2.81517614, 2.81517614, 2.81517614], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.0, 0.0], "xyz": [2.81517614, 0.0, 0.0], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.5, 0.0], "xyz": [0.0, 2.81517614, 0.0], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.0, 0.5], "xyz": [0.0, 0.0, 2.81517614], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.75, 0.75, 0.75], "xyz": [4.22276421, 4.22276421, 4.22276421], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.75, 0.25, 0.25], "xyz": [4.22276421, 1.40758807, 1.40758807], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25, 0.75, 0.25], "xyz": [1.40758807, 4.22276421, 1.40758807], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25, 0.25, 0.7499999999999998], "xyz": [1.40758807, 1.40758807, 4.222764209999999], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}], "@version": null}, "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.63035228, 0.0, 0.0], [0.0, 5.63035228, 0.0], [0.0, 0.0, 5.63035228]], "pbc": [true, true, true], "a": 5.63035228, "b": 5.63035228, "c": 5.63035228, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 178.48704764790898}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.49374823377812344, 0.48564909986966526, 0.485047585979811], "xyz": [2.7799764937986304, 2.7343755167311175, 2.730988781629925], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5130146891002212, 0.005884392295259312, 0.0023669371523735673], "xyz": [2.8884534244489215, 0.033131201576027704, 0.013326689992483223], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.00751497794686757, 0.5108655885681261, 0.011164906126850234], "xyz": [0.042311973217295545, 2.8763532313680913, 0.06286235466729719], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [-0.022437115063317584, 0.004317816277259099, 0.5110876444964201], "xyz": [-0.1263288619533725, 0.02431082672128688, 2.8776034844702485], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7432062381470166, 0.7404902945097736, 0.7320619651139088], "xyz": [4.184512937461278, 4.169221218010975, 4.121766754380377], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7533137503654376, 0.25194683879077645, 0.2396570768167799], "xyz": [4.241421791925393, 1.4185494582244407, 1.3493537688734918], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2505748123907438, 0.7615845175328404, 0.2607933404660819], "xyz": [1.4108244662547966, 4.287989124703728, 1.4683583791020205], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.26106441333490726, 0.2392614521562999, 0.7578205438477746], "xyz": [1.4698846148470577, 1.347126262664334, 4.266796626884158], "properties": {}, "label": "Si"}], "@version": null}} +{"phonon_supercell": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.4728425099999995, -5.299999998875649e-07, -5.299999997100167e-07], [3.8999999985023237e-07, 5.47284385, 1.499999997100167e-07], [3.8999999985023237e-07, 1.4999999953246856e-07, 5.472843849999999]], "pbc": [true, true, true], "a": 5.472842510000051, "b": 5.472843850000016, "c": 5.472843850000015, "alpha": 89.99999685926807, "beta": 90.00000146567628, "gamma": 90.00000146567628, "volume": 163.9226872572833}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.9999999963455917, 1.8272031987689702e-09, 1.8272031987689706e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.47284249, -5.199999998875648e-07, -5.199999997100167e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.9999999963455917, 0.5000000018272032, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.47284288, 2.7364214799999997, 2.7364214799999997]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 1.8272031987689702e-09, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, -1.800000001775482e-07, 2.73642167]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 0.5000000018272032, 1.8272032775712432e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, 2.7364216700000004, -1.799999995687275e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000031976074, 0.24999999680239404, 0.24999999862959768], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682108399999997, 1.36821085, 1.3682108599999998]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000031976074, 0.749999996802394, 0.7499999986295977], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682112299999996, 4.10463285, 4.104632859999999]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976074, 0.24999999680239404, 0.7499999986295977], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999999, 1.36821066, 4.104632519999999]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976074, 0.749999996802394, 0.24999999862959754], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999999, 4.10463251, 1.368210669999999]}], "@version": null}, "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.4728425099999995, -5.299999998875649e-07, -5.299999997100167e-07], [3.8999999985023237e-07, 5.47284385, 1.499999997100167e-07], [3.8999999985023237e-07, 1.4999999953246856e-07, 5.472843849999999]], "pbc": [true, true, true], "a": 5.472842510000051, "b": 5.472843850000016, "c": 5.472843850000015, "alpha": 89.99999685926807, "beta": 90.00000146567628, "gamma": 90.00000146567628, "volume": 163.9226872572833}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.9985188409264792, -0.008046886648461682, 0.015892874809812864], "properties": {}, "label": "Si", "xyz": [5.464736362718298, -0.04403988093673499, 0.08697869173968585]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.9882288549217909, 0.49401620995410467, 0.4961084388434613], "properties": {}, "label": "Si", "xyz": [5.408421272973213, 2.7036731271026033, 2.715123568798677]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.48757569609981405, 0.01949235244504969, 0.5087958628460837], "properties": {}, "label": "Si", "xyz": [2.668425202490307, 0.10667841910518298, 2.7845600533913664]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5178344843370254, 0.5008600160415273, -0.010988575334358852], "properties": {}, "label": "Si", "xyz": [2.8340267700734634, 2.741128382403211, -0.06013895626218182]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.24586392905113802, 0.25827860433269495, 0.23589673376356873], "properties": {}, "label": "Si", "xyz": [1.3455747553150736, 1.4135183763854007, 1.2910258970469426]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25091573066109185, 0.7578733006909151, 0.7459087814516997], "properties": {}, "label": "Si", "xyz": [1.3732228636647454, 4.147722211666455, 4.082242267924586]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7673777016215453, 0.23129777727891931, 0.7419795202021882], "properties": {}, "label": "Si", "xyz": [4.199737686238635, 1.2658563224863493, 4.06073768194898]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7436847613891062, 0.7462286217744066, 0.2664063659757164], "properties": {}, "label": "Si", "xyz": [4.070069971097152, 4.083992369180068, 1.4580001594124181]}], "@version": null}} diff --git a/tests/test_data/aims/anharm-os-si/outputs/parameters.json b/tests/test_data/aims/anharm-os-si/outputs/parameters.json index de5c9ac739..6015ee83dd 100644 --- a/tests/test_data/aims/anharm-os-si/outputs/parameters.json +++ b/tests/test_data/aims/anharm-os-si/outputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [2, 2, 2], "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/anharm-si-full/inputs/control.in.gz b/tests/test_data/aims/anharm-si-full/inputs/control.in.gz index cc01a19fe3..2b513fab4c 100644 Binary files a/tests/test_data/aims/anharm-si-full/inputs/control.in.gz and b/tests/test_data/aims/anharm-si-full/inputs/control.in.gz differ diff --git a/tests/test_data/aims/anharm-si-full/inputs/geometry.in.gz b/tests/test_data/aims/anharm-si-full/inputs/geometry.in.gz index e73298b2a7..513d23e07c 100644 Binary files a/tests/test_data/aims/anharm-si-full/inputs/geometry.in.gz and b/tests/test_data/aims/anharm-si-full/inputs/geometry.in.gz differ diff --git a/tests/test_data/aims/anharm-si-full/inputs/parameters.json b/tests/test_data/aims/anharm-si-full/inputs/parameters.json index c7d9c13acf..6015ee83dd 100644 --- a/tests/test_data/aims/anharm-si-full/inputs/parameters.json +++ b/tests/test_data/aims/anharm-si-full/inputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "species_dir": "/Users/kevinbeck/Software/fhi-aims.231212/species_defaults/defaults_2020/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "k_grid": [6, 6, 6]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/anharm-si-full/outputs/aims.out.gz b/tests/test_data/aims/anharm-si-full/outputs/aims.out.gz index 61d8e73475..156125685e 100644 Binary files a/tests/test_data/aims/anharm-si-full/outputs/aims.out.gz and b/tests/test_data/aims/anharm-si-full/outputs/aims.out.gz differ diff --git a/tests/test_data/aims/anharm-si-full/outputs/anharmonicity_info.json b/tests/test_data/aims/anharm-si-full/outputs/anharmonicity_info.json index af31a5c5c9..ffa2dbc7e4 100644 --- a/tests/test_data/aims/anharm-si-full/outputs/anharmonicity_info.json +++ b/tests/test_data/aims/anharm-si-full/outputs/anharmonicity_info.json @@ -1 +1 @@ -{"phonon_supercell": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.478082219999999, 1.4401214794753278e-16, 1.4401214794753278e-16], [1.4401214794753278e-16, 5.478082219999999, -1.4401214794753278e-16], [-1.4401214794753278e-16, -1.4401214794753278e-16, 5.478082219999999]], "pbc": [true, true, true], "a": 5.478082219999999, "b": 5.478082219999999, "c": 5.478082219999999, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 164.39387735575988}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.49999999999999994, 0.49999999999999994], "xyz": [2.7390411099999996, 2.739041109999999, 2.739041109999999], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.0, 0.0], "xyz": [2.7390411099999996, 7.200607397376639e-17, 7.200607397376639e-17], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.49999999999999994, 0.0], "xyz": [7.200607397376638e-17, 2.739041109999999, -7.200607397376638e-17], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.0, 0.5], "xyz": [-7.200607397376639e-17, -7.200607397376639e-17, 2.7390411099999996], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000009127282, 0.7500000009127281, 0.7500000009127281], "xyz": [4.108561669999999, 4.108561669999999, 4.108561669999999], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000009127282, 0.2500000009127281, 0.2500000009127281], "xyz": [4.108561669999999, 1.3695205599999996, 1.3695205599999996], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000009127281, 0.7500000009127281, 0.2500000009127281], "xyz": [1.3695205599999996, 4.108561669999999, 1.3695205599999993], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000009127281, 0.2500000009127281, 0.7500000009127281], "xyz": [1.3695205599999996, 1.3695205599999996, 4.108561669999999], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}], "@version": null}, "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.478082219999999, 1.4401214794753278e-16, 1.4401214794753278e-16], [1.4401214794753278e-16, 5.478082219999999, -1.4401214794753278e-16], [-1.4401214794753278e-16, -1.4401214794753278e-16, 5.478082219999999]], "pbc": [true, true, true], "a": 5.478082219999999, "b": 5.478082219999999, "c": 5.478082219999999, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 164.39387735575988}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.5033814269460988, 0.4898345972954423, 0.5017213312342542], "xyz": [2.757564844831652, 2.683354198185022, 2.7484707040290983], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.4850612386422233, 0.006626812482041313, -0.015002620853887734], "xyz": [2.6572053470171397, 0.03630222363314465, -0.08218559055308354], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [-0.004886845547831505, 0.4982168956317095, 0.013162939551013119], "xyz": [-0.026770541707461855, 2.7292731176636633, 0.07210766511733967], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.024405502909412482, -0.00363802143242516, 0.48424477709614505], "xyz": [0.1336953515582107, -0.019929380524947263, 2.652732703538255], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7547665497265663, 0.7705863413460221, 0.7513535648613142], "xyz": [4.134673216307848, 4.221335335502494, 4.115976604600381], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.751749007191243, 0.23569376414988366, 0.2593260839167812], "xyz": [4.118142870197, 1.291149818754351, 1.4206096094867469], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2561649173443829, 0.7363369449885615, 0.2510035951500672], "xyz": [1.4032924790920334, 4.033714326270957, 1.3750183317476612], "properties": {}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.22935820643881724, 0.2663426691896768, 0.7541903326952251], "xyz": [1.256443112703574, 1.4590470405153102, 4.131516652033596], "properties": {}, "label": "Si"}], "@version": null}} +{"phonon_supercell": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.4728425099999995, -5.299999998875649e-07, -5.299999997100167e-07], [3.8999999985023237e-07, 5.47284385, 1.499999997100167e-07], [3.8999999985023237e-07, 1.4999999953246856e-07, 5.472843849999999]], "pbc": [true, true, true], "a": 5.472842510000051, "b": 5.472843850000016, "c": 5.472843850000015, "alpha": 89.99999685926807, "beta": 90.00000146567628, "gamma": 90.00000146567628, "volume": 163.9226872572833}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.9999999963455917, 1.8272031987689702e-09, 1.8272031987689706e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.47284249, -5.199999998875648e-07, -5.199999997100167e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.9999999963455917, 0.5000000018272032, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.47284288, 2.7364214799999997, 2.7364214799999997]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 1.8272031987689702e-09, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, -1.800000001775482e-07, 2.73642167]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 0.5000000018272032, 1.8272032775712432e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, 2.7364216700000004, -1.799999995687275e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000031976074, 0.24999999680239404, 0.24999999862959768], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682108399999997, 1.36821085, 1.3682108599999998]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000031976074, 0.749999996802394, 0.7499999986295977], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682112299999996, 4.10463285, 4.104632859999999]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976074, 0.24999999680239404, 0.7499999986295977], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999999, 1.36821066, 4.104632519999999]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976074, 0.749999996802394, 0.24999999862959754], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999999, 4.10463251, 1.368210669999999]}], "@version": null}, "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.4728425099999995, -5.299999998875649e-07, -5.299999997100167e-07], [3.8999999985023237e-07, 5.47284385, 1.499999997100167e-07], [3.8999999985023237e-07, 1.4999999953246856e-07, 5.472843849999999]], "pbc": [true, true, true], "a": 5.472842510000051, "b": 5.472843850000016, "c": 5.472843850000015, "alpha": 89.99999685926807, "beta": 90.00000146567628, "gamma": 90.00000146567628, "volume": 163.9226872572833}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [1.0134399436102801, -0.021885138089777732, -0.0050637405836669895], "properties": {}, "label": "Si", "xyz": [5.546397194212282, -0.1197744812837719, -0.02771360191725782]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.9922370306706629, 0.4978576207289813, 0.5079519609168845], "properties": {}, "label": "Si", "xyz": [5.430357393716314, 2.724696568089406, 2.779941314192429]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5178370841417463, 0.011768834812206402, 0.4882399695940333], "properties": {}, "label": "Si", "xyz": [2.8340410023488296, 0.0644087940059904, 2.6720608422285625]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.47666893556826806, 0.5086435127226547, 0.0003767300872749785], "properties": {}, "label": "Si", "xyz": [2.608734212292363, 2.7837262678685515, 0.002061608603243877]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.24445292010564007, 0.2460943550033905, 0.2587888243570351], "properties": {}, "label": "Si", "xyz": [1.3378525297522204, 1.3468358865582983, 1.4163107331852351]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2545749419356777, 0.7607616530173642, 0.7424374704438748], "properties": {}, "label": "Si", "xyz": [1.3932491504540163, 4.163529710472816, 4.063244323317845]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7463991002391577, 0.26096208142046917, 0.7619074421820904], "properties": {}, "label": "Si", "xyz": [4.0849251241337265, 1.428204441079807, 4.169800102768273]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7543900396246163, 0.7357970746838447, 0.24536134472683613], "properties": {}, "label": "Si", "xyz": [4.128658260629967, 4.026902132008951, 1.3428240370588351]}], "@version": null}} diff --git a/tests/test_data/aims/anharm-si-full/outputs/parameters.json b/tests/test_data/aims/anharm-si-full/outputs/parameters.json index c7d9c13acf..6015ee83dd 100644 --- a/tests/test_data/aims/anharm-si-full/outputs/parameters.json +++ b/tests/test_data/aims/anharm-si-full/outputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "species_dir": "/Users/kevinbeck/Software/fhi-aims.231212/species_defaults/defaults_2020/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "k_grid": [6, 6, 6]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/phonon-disp-si/inputs/control.in.gz b/tests/test_data/aims/phonon-disp-si/inputs/control.in.gz index 097d12af61..32298f125e 100644 Binary files a/tests/test_data/aims/phonon-disp-si/inputs/control.in.gz and b/tests/test_data/aims/phonon-disp-si/inputs/control.in.gz differ diff --git a/tests/test_data/aims/phonon-disp-si/inputs/geometry.in.gz b/tests/test_data/aims/phonon-disp-si/inputs/geometry.in.gz index e22212887d..f820696426 100644 Binary files a/tests/test_data/aims/phonon-disp-si/inputs/geometry.in.gz and b/tests/test_data/aims/phonon-disp-si/inputs/geometry.in.gz differ diff --git a/tests/test_data/aims/phonon-disp-si/inputs/parameters.json b/tests/test_data/aims/phonon-disp-si/inputs/parameters.json index 5d4f5ed0e5..6015ee83dd 100644 --- a/tests/test_data/aims/phonon-disp-si/inputs/parameters.json +++ b/tests/test_data/aims/phonon-disp-si/inputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "compute_forces": true, "k_grid": [2, 2, 2]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/phonon-disp-si/outputs/aims.out.gz b/tests/test_data/aims/phonon-disp-si/outputs/aims.out.gz index 0f831f2187..8812b8bbf0 100644 Binary files a/tests/test_data/aims/phonon-disp-si/outputs/aims.out.gz and b/tests/test_data/aims/phonon-disp-si/outputs/aims.out.gz differ diff --git a/tests/test_data/aims/phonon-disp-si/outputs/parameters.json b/tests/test_data/aims/phonon-disp-si/outputs/parameters.json index 5d4f5ed0e5..6015ee83dd 100644 --- a/tests/test_data/aims/phonon-disp-si/outputs/parameters.json +++ b/tests/test_data/aims/phonon-disp-si/outputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "compute_forces": true, "k_grid": [2, 2, 2]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "compute_forces": true, "k_grid": [6, 6, 6]} diff --git a/tests/test_data/aims/phonon-disp-si/outputs/phonon_info.json b/tests/test_data/aims/phonon-disp-si/outputs/phonon_info.json index 94f55e346c..c9cb1eec42 100644 --- a/tests/test_data/aims/phonon-disp-si/outputs/phonon_info.json +++ b/tests/test_data/aims/phonon-disp-si/outputs/phonon_info.json @@ -1 +1 @@ -{"displacement_number": 0, "original_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[0.0, 2.81517614, 2.81517614], [2.81517614, -0.0, 2.81517614], [2.81517614, 2.81517614, 0.0]], "pbc": [true, true, true], "a": 3.9812602776571393, "b": 3.9812602776571393, "c": 3.9812602776571393, "alpha": 60.00000000000001, "beta": 60.00000000000001, "gamma": 60.00000000000001, "volume": 44.621761911977245}, "properties": {"energy": -15800.2255448798, "free_energy": -15800.2255448798, "stress": [[-0.027220979244700003, -0.0, -0.0], [-0.0, -0.027220979244700003, -0.0], [-0.0, -0.0, -0.027220979244700003]], "fermi_energy": -5.01952424, "vbm": -5.2411018, "cbm": -4.40326691, "gap": 0.83783489, "direct_gap": 2.22120016}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [2.81517614, 2.81517614, 2.81517614], "properties": {"force": [1.0817294977102e-28, 1.69020234017219e-29, 1.45357401254809e-28]}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.75, 0.75, 0.75], "xyz": [4.22276421, 4.22276421, 4.22276421], "properties": {"force": [-1.0817294977102e-28, -1.69020234017219e-29, -1.45357401254809e-28]}, "label": "Si"}], "@version": null}, "supercell_matrix": [[-1, 1, 1], [1, -1, 1], [1, 1, -1]], "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.63035228, 0.0, 0.0], [0.0, 5.63035228, 0.0], [0.0, 0.0, 5.63035228]], "pbc": [true, true, true], "a": 5.63035228, "b": 5.63035228, "c": 5.63035228, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 178.48704764790898}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [0.5017760878010283, 0.5, 0.5], "xyz": [2.8251761400000004, 2.81517614, 2.81517614], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.5, 0.0, 0.0], "xyz": [2.81517614, 0.0, 0.0], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.5, 0.0], "xyz": [0.0, 2.81517614, 0.0], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.0, 0.0, 0.5], "xyz": [0.0, 0.0, 2.81517614], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.75, 0.75, 0.75], "xyz": [4.22276421, 4.22276421, 4.22276421], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.75, 0.25, 0.25], "xyz": [4.22276421, 1.40758807, 1.40758807], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25, 0.75, 0.25], "xyz": [1.40758807, 4.22276421, 1.40758807], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25, 0.25, 0.7499999999999999], "xyz": [1.40758807, 1.40758807, 4.222764209999999], "properties": {"phonopy_masses": 28.0855}, "label": "Si"}], "@version": null}} +{"displacement_number": 0, "original_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[3.9e-07, 2.736422, 2.736422], [2.73642145, -1.9e-07, 2.73642166], [2.73642145, 2.73642166, -1.9e-07]], "pbc": [true, true, true], "a": 3.869885104776129, "b": 3.869884475451082, "c": 3.8698844754510815, "alpha": 60.000007132323184, "beta": 59.99999631295268, "gamma": 59.999996312952696, "volume": 40.98067181432083}, "properties": {"energy": -15802.6983526782, "free_energy": -15802.6983526782, "stress": [[-0.0040535066209, -3.20435306e-05, -3.20435306e-05], [-3.20435306e-05, -0.0041336154474, 6.40870612e-05], [-3.20435306e-05, 6.40870612e-05, -0.0041336154474]], "fermi_energy": -5.9611745, "n_iter": 35, "vbm": -6.00452055, "cbm": -5.37358567, "gap": 0.63093488, "direct_gap": 2.54968312}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [7.308814758216037e-09, -3.654408360678096e-09, -3.6544083606780963e-09], "properties": {"force": [1.21618943040346e-06, -6.62759722823302e-07, -6.28996124925763e-07]}, "label": "Si", "xyz": [-2e-08, 1e-08, 1e-08]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.24999999223438435, 0.250000005024811, 0.25000000137040373], "properties": {"force": [-1.21618943040346e-06, 6.62759722823302e-07, 6.28996124925763e-07]}, "label": "Si", "xyz": [1.3682108399999997, 1.36821085, 1.36821086]}], "@version": null}, "supercell_matrix": [[-1, 1, 1], [1, -1, 1], [1, 1, -1]], "displaced_structure": {"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[5.4728425099999995, -5.299999998875649e-07, -5.299999997100167e-07], [3.8999999985023237e-07, 5.47284385, 1.499999997100167e-07], [3.8999999985023237e-07, 1.4999999953246856e-07, 5.472843849999999]], "pbc": [true, true, true], "a": 5.472842510000051, "b": 5.472843850000016, "c": 5.472843850000015, "alpha": 89.99999685926807, "beta": 90.00000146567628, "gamma": 90.00000146567628, "volume": 163.9226872572833}, "properties": {}, "sites": [{"species": [{"element": "Si", "occu": 1}], "abc": [1.0018272003957225, 1.8272031987689758e-09, 1.8272031987689624e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.48284249, -5.209684180339287e-07, -5.209684178560561e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.9999999963455918, 0.5000000018272031, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [5.472842880000001, 2.736421479999999, 2.7364214799999997]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 1.827203198768964e-09, 0.5000000018272032], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, -1.8000000017754824e-07, 2.73642167]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.49999999634559167, 0.5000000018272032, 1.8272032775712366e-09], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [2.73642143, 2.7364216700000004, -1.7999999956872753e-07]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.2500000031976074, 0.24999999680239401, 0.24999999862959768], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682108399999997, 1.3682108499999999, 1.3682108599999998]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.25000000319760735, 0.7499999968023939, 0.7499999986295975], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [1.3682112299999993, 4.104632849999999, 4.104632859999998]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976072, 0.24999999680239404, 0.7499999986295975], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999998, 1.36821066, 4.104632519999998]}, {"species": [{"element": "Si", "occu": 1}], "abc": [0.7500000031976072, 0.7499999968023939, 0.24999999862959754], "properties": {"phonopy_masses": 28.0855}, "label": "Si", "xyz": [4.104632289999998, 4.104632509999999, 1.368210669999999]}], "@version": null}} diff --git a/tests/test_data/aims/phonon-energy-si/inputs/control.in.gz b/tests/test_data/aims/phonon-energy-si/inputs/control.in.gz index ac8b0dece8..6e85e26f2c 100644 Binary files a/tests/test_data/aims/phonon-energy-si/inputs/control.in.gz and b/tests/test_data/aims/phonon-energy-si/inputs/control.in.gz differ diff --git a/tests/test_data/aims/phonon-energy-si/inputs/geometry.in.gz b/tests/test_data/aims/phonon-energy-si/inputs/geometry.in.gz index 82117575b8..b22b8f047b 100644 Binary files a/tests/test_data/aims/phonon-energy-si/inputs/geometry.in.gz and b/tests/test_data/aims/phonon-energy-si/inputs/geometry.in.gz differ diff --git a/tests/test_data/aims/phonon-energy-si/inputs/parameters.json b/tests/test_data/aims/phonon-energy-si/inputs/parameters.json index 5d4f5ed0e5..255009ebde 100644 --- a/tests/test_data/aims/phonon-energy-si/inputs/parameters.json +++ b/tests/test_data/aims/phonon-energy-si/inputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "compute_forces": true, "k_grid": [2, 2, 2]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "k_grid": [10, 10, 10]} diff --git a/tests/test_data/aims/phonon-energy-si/outputs/aims.out.gz b/tests/test_data/aims/phonon-energy-si/outputs/aims.out.gz index 661db658e2..7a89f9e7b0 100644 Binary files a/tests/test_data/aims/phonon-energy-si/outputs/aims.out.gz and b/tests/test_data/aims/phonon-energy-si/outputs/aims.out.gz differ diff --git a/tests/test_data/aims/phonon-energy-si/outputs/parameters.json b/tests/test_data/aims/phonon-energy-si/outputs/parameters.json index 5d4f5ed0e5..255009ebde 100644 --- a/tests/test_data/aims/phonon-energy-si/outputs/parameters.json +++ b/tests/test_data/aims/phonon-energy-si/outputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": null, "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001, "compute_forces": true, "k_grid": [2, 2, 2]} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "k_grid": [10, 10, 10]} diff --git a/tests/test_data/aims/phonon-relax-si/inputs/control.in.gz b/tests/test_data/aims/phonon-relax-si/inputs/control.in.gz index d8d8487f78..39f3102619 100644 Binary files a/tests/test_data/aims/phonon-relax-si/inputs/control.in.gz and b/tests/test_data/aims/phonon-relax-si/inputs/control.in.gz differ diff --git a/tests/test_data/aims/phonon-relax-si/inputs/geometry.in.gz b/tests/test_data/aims/phonon-relax-si/inputs/geometry.in.gz index dddd02f26d..f53b101d57 100644 Binary files a/tests/test_data/aims/phonon-relax-si/inputs/geometry.in.gz and b/tests/test_data/aims/phonon-relax-si/inputs/geometry.in.gz differ diff --git a/tests/test_data/aims/phonon-relax-si/inputs/parameters.json b/tests/test_data/aims/phonon-relax-si/inputs/parameters.json index 87e8bf2900..313de33a6c 100644 --- a/tests/test_data/aims/phonon-relax-si/inputs/parameters.json +++ b/tests/test_data/aims/phonon-relax-si/inputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "relax_geometry": "trm 1.000000e-03", "relax_unit_cell": "full", "k_grid": [2, 2, 2], "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": "all", "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "relax_geometry": "trm 1.000000e-03", "relax_unit_cell": "full", "k_grid": [10, 10, 10]} diff --git a/tests/test_data/aims/phonon-relax-si/outputs/aims.out.gz b/tests/test_data/aims/phonon-relax-si/outputs/aims.out.gz index a3e82c8eff..a9a7aa4c22 100644 Binary files a/tests/test_data/aims/phonon-relax-si/outputs/aims.out.gz and b/tests/test_data/aims/phonon-relax-si/outputs/aims.out.gz differ diff --git a/tests/test_data/aims/phonon-relax-si/outputs/geometry.in.next_step.gz b/tests/test_data/aims/phonon-relax-si/outputs/geometry.in.next_step.gz index 0e720654db..cb875f53a1 100644 Binary files a/tests/test_data/aims/phonon-relax-si/outputs/geometry.in.next_step.gz and b/tests/test_data/aims/phonon-relax-si/outputs/geometry.in.next_step.gz differ diff --git a/tests/test_data/aims/phonon-relax-si/outputs/hessian.aims.gz b/tests/test_data/aims/phonon-relax-si/outputs/hessian.aims.gz index 4d961a05c6..d6fdd9691c 100644 Binary files a/tests/test_data/aims/phonon-relax-si/outputs/hessian.aims.gz and b/tests/test_data/aims/phonon-relax-si/outputs/hessian.aims.gz differ diff --git a/tests/test_data/aims/phonon-relax-si/outputs/parameters.json b/tests/test_data/aims/phonon-relax-si/outputs/parameters.json index 87e8bf2900..313de33a6c 100644 --- a/tests/test_data/aims/phonon-relax-si/outputs/parameters.json +++ b/tests/test_data/aims/phonon-relax-si/outputs/parameters.json @@ -1 +1 @@ -{"xc": "pbe", "relativistic": "atomic_zora scalar", "relax_geometry": "trm 1.000000e-03", "relax_unit_cell": "full", "k_grid": [2, 2, 2], "species_dir": "/home/purcellt/git/atomate2/tests/aims/species_dir/light", "rlsy_symmetry": "all", "sc_accuracy_rho": 1e-06, "sc_accuracy_forces": 0.0001} +{"xc": "pbe", "relativistic": "atomic_zora scalar", "relax_geometry": "trm 1.000000e-03", "relax_unit_cell": "full", "k_grid": [10, 10, 10]} diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/INCAR.gz new file mode 100644 index 0000000000..e45db4b19e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POSCAR.gz new file mode 100644 index 0000000000..892f1faf8c Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..7886350134 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/CONTCAR.gz new file mode 100644 index 0000000000..cfce7f186b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/INCAR.gz new file mode 100644 index 0000000000..e45db4b19e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/OUTCAR.gz new file mode 100644 index 0000000000..58d221b3da Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POSCAR.gz new file mode 100644 index 0000000000..892f1faf8c Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..7886350134 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasp.out.gz new file mode 100644 index 0000000000..97b5a600e3 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..cd92e7fe73 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/INCAR.gz new file mode 100644 index 0000000000..0346ce0c7b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POSCAR.gz new file mode 100644 index 0000000000..0406c9df3e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..ac2d59e619 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/CONTCAR.gz new file mode 100644 index 0000000000..5408a79887 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/INCAR.gz new file mode 100644 index 0000000000..0346ce0c7b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/OUTCAR.gz new file mode 100644 index 0000000000..2b291e9860 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POSCAR.gz new file mode 100644 index 0000000000..0406c9df3e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..ac2d59e619 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasp.out.gz new file mode 100644 index 0000000000..3677681804 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..91ab4ca024 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/INCAR.gz new file mode 100644 index 0000000000..52cd7cc802 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POSCAR.gz new file mode 100644 index 0000000000..f14582aea4 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..5b45e0c9f5 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/CONTCAR.gz new file mode 100644 index 0000000000..706e9591f5 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/INCAR.gz new file mode 100644 index 0000000000..52cd7cc802 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/OUTCAR.gz new file mode 100644 index 0000000000..89e75c237e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POSCAR.gz new file mode 100644 index 0000000000..f14582aea4 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..5b45e0c9f5 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasp.out.gz new file mode 100644 index 0000000000..100a63d869 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..6562b07e2f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/INCAR.gz new file mode 100644 index 0000000000..eee188559f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POSCAR.gz new file mode 100644 index 0000000000..da370d7ba2 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..0bf3c0162e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/CONTCAR.gz new file mode 100644 index 0000000000..46aa83277d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/INCAR.gz new file mode 100644 index 0000000000..eee188559f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/OUTCAR.gz new file mode 100644 index 0000000000..660d0f19fc Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POSCAR.gz new file mode 100644 index 0000000000..da370d7ba2 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..0bf3c0162e Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasp.out.gz new file mode 100644 index 0000000000..010765f26b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..d518e99ed6 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_0/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/INCAR.gz new file mode 100644 index 0000000000..3571e1f639 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POSCAR.gz new file mode 100644 index 0000000000..67b6e6eae2 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..d5e93d9035 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/CONTCAR.gz new file mode 100644 index 0000000000..ef5c9019b1 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/INCAR.gz new file mode 100644 index 0000000000..3571e1f639 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/OUTCAR.gz new file mode 100644 index 0000000000..5ddff6c230 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POSCAR.gz new file mode 100644 index 0000000000..67b6e6eae2 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..d5e93d9035 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasp.out.gz new file mode 100644 index 0000000000..b672c42fae Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..b81380e82a Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_minus_4/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/INCAR.gz new file mode 100644 index 0000000000..0a6c96ee1f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POSCAR.gz new file mode 100644 index 0000000000..4ebb4e1239 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..f055780c9d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/CONTCAR.gz new file mode 100644 index 0000000000..aef3ce7539 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/INCAR.gz new file mode 100644 index 0000000000..0a6c96ee1f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/OUTCAR.gz new file mode 100644 index 0000000000..b5f0ebf0cf Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POSCAR.gz new file mode 100644 index 0000000000..4ebb4e1239 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..f055780c9d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasp.out.gz new file mode 100644 index 0000000000..1c66e769c2 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..d2cebfc443 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_1_plus_3/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/INCAR.gz new file mode 100644 index 0000000000..a6e562ecbd Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POSCAR.gz new file mode 100644 index 0000000000..8228c1bb51 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..59addec74d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..43ea025ea8 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/INCAR.gz new file mode 100644 index 0000000000..a6e562ecbd Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..ec3dcbfbc8 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POSCAR.gz new file mode 100644 index 0000000000..8228c1bb51 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..59addec74d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasp.out.gz new file mode 100644 index 0000000000..4ed8b26345 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..e3cf4d4140 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/INCAR.gz new file mode 100644 index 0000000000..9f3b59b30b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POSCAR.gz new file mode 100644 index 0000000000..3221e6bb5f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..300a90f56d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/CONTCAR.gz new file mode 100644 index 0000000000..2241bf2a30 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/INCAR.gz new file mode 100644 index 0000000000..9f3b59b30b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/OUTCAR.gz new file mode 100644 index 0000000000..3f6b85b4bc Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POSCAR.gz new file mode 100644 index 0000000000..3221e6bb5f Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..300a90f56d Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasp.out.gz new file mode 100644 index 0000000000..6416e66b3b Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..27347992d5 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_minus_6/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/INCAR.gz new file mode 100644 index 0000000000..a07f754f35 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POSCAR.gz new file mode 100644 index 0000000000..e71bb01910 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..0291dd21dd Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/CONTCAR.gz new file mode 100644 index 0000000000..16b7d950c7 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/INCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/INCAR.gz new file mode 100644 index 0000000000..a07f754f35 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/OUTCAR.gz new file mode 100644 index 0000000000..b576b86698 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POSCAR.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POSCAR.gz new file mode 100644 index 0000000000..e71bb01910 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..0291dd21dd Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasp.out.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasp.out.gz new file mode 100644 index 0000000000..3b625c52d5 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..85144b6b00 Binary files /dev/null and b/tests/test_data/vasp/Si_gruneisen_tutorial/tight_relax_2_plus_5/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha/static_eos_deformation_1/outputs/PCDAT.gz b/tests/test_data/vasp/Si_qha/static_eos_deformation_1/outputs/PCDAT.gz deleted file mode 100644 index 400f5481d5..0000000000 Binary files a/tests/test_data/vasp/Si_qha/static_eos_deformation_1/outputs/PCDAT.gz and /dev/null differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/INCAR.gz new file mode 100644 index 0000000000..1834dd1afa Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POSCAR.gz new file mode 100644 index 0000000000..e2f4b6771a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..9f407e3863 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/INCAR.gz new file mode 100644 index 0000000000..1834dd1afa Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..57746cd484 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POSCAR.gz new file mode 100644 index 0000000000..e2f4b6771a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasp.out.gz new file mode 100644 index 0000000000..eab05e83d5 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..c38840e7b1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/INCAR.gz new file mode 100644 index 0000000000..44ff780d53 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POSCAR.gz new file mode 100644 index 0000000000..22785ede32 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/CONTCAR.gz new file mode 100644 index 0000000000..d77c344362 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/INCAR.gz new file mode 100644 index 0000000000..44ff780d53 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/OUTCAR.gz new file mode 100644 index 0000000000..905cf22f4b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POSCAR.gz new file mode 100644 index 0000000000..22785ede32 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasp.out.gz new file mode 100644 index 0000000000..c4e5a89f67 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..23877fe994 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_2/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/INCAR.gz new file mode 100644 index 0000000000..4fa737dbee Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POSCAR.gz new file mode 100644 index 0000000000..116bb52e6f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/CONTCAR.gz new file mode 100644 index 0000000000..b99b55ce01 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/INCAR.gz new file mode 100644 index 0000000000..4fa737dbee Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/OUTCAR.gz new file mode 100644 index 0000000000..beda8ba7fe Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POSCAR.gz new file mode 100644 index 0000000000..116bb52e6f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasp.out.gz new file mode 100644 index 0000000000..ba1db63d5c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..2a79c5fe63 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_3/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/INCAR.gz new file mode 100644 index 0000000000..9d8f225319 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POSCAR.gz new file mode 100644 index 0000000000..e1bab599d9 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/CONTCAR.gz new file mode 100644 index 0000000000..0110debe6e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/INCAR.gz new file mode 100644 index 0000000000..9d8f225319 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/OUTCAR.gz new file mode 100644 index 0000000000..6549a5ae22 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POSCAR.gz new file mode 100644 index 0000000000..e1bab599d9 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasp.out.gz new file mode 100644 index 0000000000..8c4d5fb3ad Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..cbf7af0ffc Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_4/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/INCAR.gz new file mode 100644 index 0000000000..2b5953a8a0 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POSCAR.gz new file mode 100644 index 0000000000..91ea47a4d1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/CONTCAR.gz new file mode 100644 index 0000000000..79e75f588b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/INCAR.gz new file mode 100644 index 0000000000..2b5953a8a0 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/OUTCAR.gz new file mode 100644 index 0000000000..b3c4698bff Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POSCAR.gz new file mode 100644 index 0000000000..91ea47a4d1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasp.out.gz new file mode 100644 index 0000000000..1db37f6aa8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..bf68cb580a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_5/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/INCAR.gz new file mode 100644 index 0000000000..ab5f3f626b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POSCAR.gz new file mode 100644 index 0000000000..48ba723bc7 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/CONTCAR.gz new file mode 100644 index 0000000000..6755cdfe1c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/INCAR.gz new file mode 100644 index 0000000000..ab5f3f626b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/OUTCAR.gz new file mode 100644 index 0000000000..c901d7d071 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POSCAR.gz new file mode 100644 index 0000000000..48ba723bc7 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasp.out.gz new file mode 100644 index 0000000000..b2aca5da67 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..997294affc Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_6/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/INCAR.gz new file mode 100644 index 0000000000..5b6108061d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POSCAR.gz new file mode 100644 index 0000000000..086a735641 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/CONTCAR.gz new file mode 100644 index 0000000000..f9546b8d67 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/INCAR.gz new file mode 100644 index 0000000000..5b6108061d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/OUTCAR.gz new file mode 100644 index 0000000000..cb7f9ab24e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POSCAR.gz new file mode 100644 index 0000000000..086a735641 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasp.out.gz new file mode 100644 index 0000000000..0fc059e692 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..8d1ff97d44 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_1_1_eos_deformation_7/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHG.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHG.gz new file mode 100644 index 0000000000..a21c486cfc Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHG.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHGCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHGCAR.gz new file mode 100644 index 0000000000..9460d641e0 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CHGCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CONTCAR.gz new file mode 100644 index 0000000000..8ddd79a59c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/DOSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/DOSCAR.gz new file mode 100644 index 0000000000..fd4a099441 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/DOSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/EIGENVAL.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/EIGENVAL.gz new file mode 100644 index 0000000000..b084360ee9 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/EIGENVAL.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/IBZKPT.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/IBZKPT.gz new file mode 100644 index 0000000000..3be77bef83 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/IBZKPT.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.gz new file mode 100644 index 0000000000..3655fc8d83 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.orig.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.orig.gz new file mode 100644 index 0000000000..d49c587f99 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/INCAR.orig.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OSZICAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OSZICAR.gz new file mode 100644 index 0000000000..80f9fc240e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OSZICAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OUTCAR.gz new file mode 100644 index 0000000000..348a20cb5b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/PCDAT.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/PCDAT.gz new file mode 100644 index 0000000000..dcd9931f50 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/PCDAT.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.gz new file mode 100644 index 0000000000..375016e56c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.orig.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.orig.gz new file mode 100644 index 0000000000..ebb478fb9b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POSCAR.orig.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.orig.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.orig.gz new file mode 100644 index 0000000000..20a600d5d4 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.orig.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.spec.gz new file mode 100644 index 0000000000..b0bcd9e408 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/REPORT.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/REPORT.gz new file mode 100644 index 0000000000..2e5b08d863 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/REPORT.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/WAVECAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/WAVECAR.gz new file mode 100644 index 0000000000..8f91e8fa3a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/WAVECAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/XDATCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/XDATCAR.gz new file mode 100644 index 0000000000..ed21b68453 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/XDATCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/additional_store_data.json b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/additional_store_data.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/additional_store_data.json @@ -0,0 +1 @@ +[] diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/custodian.json.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/custodian.json.gz new file mode 100644 index 0000000000..6130a86adc Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/custodian.json.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/INCAR.gz new file mode 100644 index 0000000000..3655fc8d83 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POSCAR.gz new file mode 100644 index 0000000000..375016e56c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..b0bcd9e408 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_in.json b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_in.json new file mode 100644 index 0000000000..43282483a0 --- /dev/null +++ b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_in.json @@ -0,0 +1 @@ +{"job":{"@module":"jobflow.core.job","@class":"Job","@version":"0.1.18","function":{"@module":"atomate2.vasp.jobs.base","@callable":"BaseVaspMaker.make","@bound":{"@module":"atomate2.vasp.jobs.phonons","@class":"PhononDisplacementMaker","@version":"0.0.18","name":"dft phonon static eos deformation 1","input_set_generator":{"@module":"atomate2.vasp.sets.core","@class":"StaticSetGenerator","@version":"0.0.18","structure":null,"config_dict":{"PARENT":"VASPIncarBase","INCAR":{"ALGO":"Fast","EDIFF":0.00001,"EDIFFG":-0.02,"ENAUG":1360,"ENCUT":680,"IBRION":2,"ISIF":3,"ISMEAR":0,"ISPIN":2,"LAECHG":true,"LASPH":true,"LCHARG":true,"LELF":false,"LMIXTAU":true,"LORBIT":11,"LREAL":false,"LVTOT":true,"LWAVE":false,"NELM":200,"NSW":99,"PREC":"Accurate","SIGMA":0.05,"MAGMOM":{"Ce":5,"Ce3+":1,"Co":0.6,"Co3+":0.6,"Co4+":1,"Cr":5,"Dy3+":5,"Er3+":3,"Eu":10,"Eu2+":7,"Eu3+":6,"Fe":5,"Gd3+":7,"Ho3+":4,"La3+":0.6,"Lu3+":0.6,"Mn":5,"Mn3+":4,"Mn4+":3,"Mo":5,"Nd3+":3,"Ni":5,"Pm3+":4,"Pr3+":2,"Sm3+":5,"Tb3+":6,"Tm3+":2,"V":5,"W":5,"Yb3+":1},"GGA":"PS","LDAU":true,"LDAUJ":{"F":{"Co":0,"Cr":0,"Fe":0,"Mn":0,"Mo":0,"Ni":0,"V":0,"W":0},"O":{"Co":0,"Cr":0,"Fe":0,"Mn":0,"Mo":0,"Ni":0,"V":0,"W":0}},"LDAUL":{"F":{"Co":2,"Cr":2,"Fe":2,"Mn":2,"Mo":2,"Ni":2,"V":2,"W":2},"O":{"Co":2,"Cr":2,"Fe":2,"Mn":2,"Mo":2,"Ni":2,"V":2,"W":2}},"LDAUTYPE":2,"LDAUU":{"F":{"Co":3.32,"Cr":3.7,"Fe":5.3,"Mn":3.9,"Mo":4.38,"Ni":6.2,"V":3.25,"W":6.2},"O":{"Co":3.32,"Cr":3.7,"Fe":5.3,"Mn":3.9,"Mo":4.38,"Ni":6.2,"V":3.25,"W":6.2}},"LDAUPRINT":1},"POTCAR_FUNCTIONAL":"PBE_54","POTCAR":{"Ac":"Ac","Ag":"Ag","Al":"Al","Am":"Am","Ar":"Ar","As":"As","At":"At","Au":"Au","B":"B","Ba":"Ba_sv","Be":"Be","Bi":"Bi_d","Br":"Br","C":"C","Ca":"Ca_sv","Cd":"Cd","Ce":"Ce","Cf":"Cf","Cl":"Cl","Cm":"Cm","Co":"Co","Cr":"Cr_pv","Cs":"Cs_sv","Cu":"Cu","Dy":"Dy_3","Er":"Er_3","Eu":"Eu_2","F":"F","Fe":"Fe","Fr":"Fr_sv","Ga":"Ga_d","Gd":"Gd_3","Ge":"Ge_d","H":"H","He":"He","Hf":"Hf_pv","Hg":"Hg","Ho":"Ho_3","I":"I","In":"In_d","Ir":"Ir","K":"K_sv","Kr":"Kr","La":"La","Li":"Li_sv","Lu":"Lu_3","Mg":"Mg","Mn":"Mn_pv","Mo":"Mo_sv","N":"N","Na":"Na_pv","Nb":"Nb_sv","Nd":"Nd_3","Ne":"Ne","Ni":"Ni","Np":"Np","O":"O","Os":"Os","P":"P","Pa":"Pa","Pb":"Pb_d","Pd":"Pd","Pm":"Pm_3","Po":"Po_d","Pr":"Pr_3","Pt":"Pt","Pu":"Pu","Ra":"Ra_sv","Rb":"Rb_sv","Re":"Re","Rh":"Rh_pv","Rn":"Rn","Ru":"Ru_pv","S":"S","Sb":"Sb","Sc":"Sc_sv","Se":"Se","Si":"Si","Sm":"Sm_3","Sn":"Sn_d","Sr":"Sr_sv","Ta":"Ta_pv","Tb":"Tb_3","Tc":"Tc_pv","Te":"Te","Th":"Th","Ti":"Ti_sv","Tl":"Tl_d","Tm":"Tm_3","U":"U","V":"V_sv","W":"W_sv","Xe":"Xe","Y":"Y_sv","Yb":"Yb_3","Zn":"Zn","Zr":"Zr_sv"},"KPOINTS":{"reciprocal_density":64,"reciprocal_density_metal":200}},"files_to_transfer":{},"user_incar_settings":{"GGA":"PE","IBRION":-1,"ISPIN":1,"ISMEAR":0,"ISIF":3,"ENCUT":700,"EDIFF":1e-7,"LAECHG":false,"LREAL":false,"ALGO":"Normal","NSW":0,"LCHARG":false,"LWAVE":false,"LVTOT":false,"LORBIT":null,"LOPTICS":false,"SIGMA":0.05,"ISYM":0,"KSPACING":0.1,"NPAR":4},"user_kpoints_settings":{},"user_potcar_settings":{},"constrain_total_magmom":false,"sort_structure":true,"user_potcar_functional":"PBE_54","force_gamma":true,"reduce_structure":null,"vdw":null,"use_structure_charge":false,"standardize":false,"sym_prec":0.1,"international_monoclinic":true,"validate_magmom":true,"inherit_incar":false,"auto_kspacing":false,"auto_ismear":true,"auto_ispin":false,"auto_lreal":false,"auto_metal_kpoints":true,"bandgap_tol":0.0001,"bandgap":null,"prev_incar":null,"prev_kpoints":null,"_valid_potcars":null,"lepsilon":false,"lcalcpol":false},"write_input_set_kwargs":{},"copy_vasp_kwargs":{},"run_vasp_kwargs":{"handlers":{}},"task_document_kwargs":{},"stop_children_kwargs":{},"write_additional_data":{}}},"function_args":[],"function_kwargs":{"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"prev_dir":"i03r09c03s03.sng.lrz.de:/hppfs/scratch/00/di82tut/autoplex_test/run/00/0a/cc/000acc98-19af-49ee-9f52-378a2e2f0951_1"},"output_schema":{"@module":"emmet.core.tasks","@callable":"TaskDoc","@bound":null},"uuid":"8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1","index":1,"name":"dft phonon static eos deformation 1","metadata":{},"config":{"@module":"jobflow.core.job","@class":"JobConfig","@version":"0.1.18","resolve_references":true,"on_missing_references":"error","manager_config":{"resources":{"nodes":3,"partition":"micro","time":"02:55:00","ntasks":144,"qverbatim":"#SBATCH --get-user-env","mail_user":"your_email@adress","mail_type":"ALL","account":"pn73da"}},"expose_store":false,"pass_manager_config":true,"response_manager_config":{}},"hosts":["1c58eab1-79aa-4589-b8ca-a553c147b0ec","83dc9f79-ca39-42c0-810e-1fadbc7002e1","ed2bede8-1222-41e6-b874-b420bbe11000"],"metadata_updates":[],"config_updates":[{"config":{"manager_config":{"resources":{"nodes":3,"partition":"micro","time":"02:55:00","ntasks":144,"qverbatim":"#SBATCH --get-user-env","mail_user":"your_email@adress","mail_type":"ALL","account":"pn73da"}}},"name_filter":"dft phonon static","function_filter":null,"attributes":null}],"name_updates":[{"append_str":" eos deformation 1","prepend":false}],"data":[{"@module":"pymatgen.electronic_structure.bandstructure","@callable":"BandStructure","@bound":null},{"@module":"pymatgen.electronic_structure.bandstructure","@callable":"BandStructureSymmLine","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"DOS","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"Dos","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"CompleteDos","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Locpot","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Chgcar","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Wavecar","@bound":null},{"@module":"pymatgen.core.trajectory","@callable":"Trajectory","@bound":null},"force_constants","normalmode_eigenvecs","bandstructure"]},"store":{"@module":"jobflow.core.store","@class":"JobStore","@version":"0.1.18","docs_store":{"@module":"jobflow_remote.remote.data","@class":"StdJSONStore","@version":"0.1.4","paths":["/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/remote_job_data.json"]},"additional_stores":{"data":{"@module":"jobflow_remote.remote.data","@class":"StdJSONStore","@version":"0.1.4","paths":["/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/additional_store_data.json"]}},"save":{},"load":false}} diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_out.json b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_out.json new file mode 100644 index 0000000000..4ed9807532 --- /dev/null +++ b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/jfremote_out.json @@ -0,0 +1 @@ +{"response": {"output": null, "detour": null, "addition": null, "replace": null, "stored_data": {"custodian": [{"corrections": [], "job": {"@module": "custodian.vasp.jobs", "@class": "VaspJob", "@version": "2024.10.3", "vasp_cmd": ["vasp6", "-n", "144", ">vasp.out"], "output_file": "vasp.out", "stderr_file": "std_err.txt", "suffix": "", "final": true, "backup": true, "auto_npar": false, "auto_gamma": true, "settings_override": null, "gamma_vasp_cmd": ["vasp6", "-n", "144", "-s", "gam", ">vasp.out"], "copy_magmom": false, "auto_continue": false, "update_incar": false}, "@module": "emmet.core.tasks", "@class": "CustodianDoc", "@version": null}]}, "stop_children": false, "stop_jobflow": false, "job_dir": null, "@module": "jobflow.core.job", "@class": "Response", "@version": "0.1.18"}, "error": null, "start_time": {"@module": "datetime", "@class": "datetime", "string": "2025-02-12 10:21:44.978482"}, "end_time": {"@module": "datetime", "@class": "datetime", "string": "2025-02-12 10:24:33.289795"}} diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..8ddd79a59c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/INCAR.gz new file mode 100644 index 0000000000..3655fc8d83 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..348a20cb5b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POSCAR.gz new file mode 100644 index 0000000000..375016e56c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..b0bcd9e408 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasp.out.gz new file mode 100644 index 0000000000..0a69b29366 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..7d8a65e405 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/queue.err b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/queue.err new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/queue.out b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/queue.out new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/remote_job_data.json b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/remote_job_data.json new file mode 100644 index 0000000000..d6d998271f --- /dev/null +++ b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/remote_job_data.json @@ -0,0 +1 @@ +[{"uuid":"8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1","index":1,"output":{"builder_meta":{"emmet_version":"0.84.3rc3","pymatgen_version":"2024.10.3","run_id":null,"database_version":null,"build_date":"2025-02-12T10:24:33.110000","license":null},"nsites":8,"elements":["Si"],"nelements":1,"composition":{"Si":8.0},"composition_reduced":{"Si":1.0},"formula_pretty":"Si","formula_anonymous":"A","chemsys":"Si","volume":163.5635832932623,"density":2.2810490736943287,"density_atomic":20.445447911657787,"symmetry":{"crystal_system":"Cubic","symbol":"Fd-3m","number":227,"point_group":"m-3m","symprec":0.1,"angle_tolerance":5.0,"version":"2.5.0"},"tags":null,"dir_name":"i01r06c04s01.sng.lrz.de:/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1","state":"successful","calcs_reversed":[{"dir_name":"/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1","vasp_version":"6.1.2","has_vasp_completed":"successful","input":{"incar":{"PREC":"Accurate","ALGO":"Normal","ISPIN":1,"NELM":200,"IBRION":-1,"EDIFF":1e-7,"NSW":0,"ISIF":3,"ISYM":0,"ENCUT":700.0,"ENAUG":1360.0,"LREAL":false,"ISMEAR":0,"SIGMA":0.05,"KSPACING":0.1,"LWAVE":false,"LCHARG":false,"LVTOT":false,"LELF":false,"LOPTICS":false,"LASPH":true,"NPAR":4,"LAECHG":false,"GGA":"Pe","LMIXTAU":true},"kpoints":{"@module":"pymatgen.io.vasp.inputs","@class":"Kpoints","comment":"Kpoints from vasprun.xml","nkpoints":0,"generation_style":"Gamma","kpoints":[[12,12,12]],"usershift":[0.0,0.0,0.0],"kpts_weights":null,"coord_type":null,"labels":null,"tet_number":0,"tet_weight":0,"tet_connections":null},"nkpoints":868,"potcar":["PAW_PBE"],"potcar_spec":[{"titel":"PAW_PBE Si 05Jan2001","hash":"c27340a9c98542122fbad458bbb5d441","summary_stats":{"keywords":{"header":["dexc","eatom","eaug","enmax","enmin","icore","iunscr","lcor","lexch","lpaw","lultra","ndata","orbitaldescriptions","orbitals","pomass","raug","rcore","rdep","rdept","rmax","rpacor","rrkj","rwigs","step","titel","vrhfin","zval","nentries"],"data":["localpart","gradientcorrectionsusedforxc","corecharge-density(partial)","kineticenergydensity(partial)","atomicpseudocharge-density","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","pawradialsets","(5e20.12)","augmentationcharges(nonsperical)","uccopanciesinatom","grid","aepotential","corecharge-density","kineticenergy-density","mkineticenergy-densitypseudized","localpseudopotentialcore","pspotentialvalenceonly","corecharge-density(pseudized)","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","endofdataset"]},"stats":{"header":{"MEAN":9.198469218699186,"ABSMEAN":9.198469218699186,"VAR":1790.7147656424072,"MIN":0.0,"MAX":322.069},"data":{"MEAN":215.16613596661992,"ABSMEAN":237.9507629282115,"VAR":3381771.445249609,"MIN":-872.57185,"MAX":24929.6947974}}}}],"potcar_type":["PAW_PBE"],"parameters":{"SYSTEM":"unknown system","LCOMPAT":false,"PREC":"accura","ENMAX":700.0,"ENAUG":1360.0,"EDIFF":1e-7,"IALGO":38,"IWAVPR":10,"NBANDS":24,"NBANDSLOW":-1,"NBANDSHIGH":-1,"NELECT":32.0,"TURBO":0,"IRESTART":0,"NREBOOT":0,"NMIN":0,"EREF":0.0,"ISMEAR":0,"SIGMA":0.05,"KSPACING":0.1,"KGAMMA":true,"KBLOWUP":true,"LREAL":false,"ROPT":[0.0],"LMAXPAW":-100,"LMAXMIX":2,"NLSPLINE":false,"ISTART":0,"ICHARG":2,"INIWAV":1,"ISPIN":1,"LNONCOLLINEAR":false,"MAGMOM":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"NUPDOWN":-1.0,"LSORBIT":false,"SAXIS":[0.0,0.0,1.0],"LSPIRAL":false,"QSPIRAL":[0.0,0.0,0.0],"LZEROZ":false,"LASPH":true,"LMETAGGA":false,"NELM":200,"NELMDL":-5,"NELMIN":2,"ENINI":700.0,"LDIAG":true,"LSUBROT":false,"WEIMIN":0.0,"EBREAK":0.0,"DEPER":0.3,"NRMM":4,"TIME":0.4,"AMIX":0.4,"BMIX":1.0,"AMIN":0.1,"AMIX_MAG":1.6,"BMIX_MAG":1.0,"IMIX":4,"MIXFIRST":false,"MAXMIX":-45,"WC":100.0,"INIMIX":1,"MIXPRE":1,"MREMOVE":5,"LDIPOL":false,"LMONO":false,"IDIPOL":0,"EPSILON":1.0,"DIPOL":[-100.0,-100.0,-100.0],"EFIELD":0.0,"NGX":48,"NGY":48,"NGZ":48,"NGXF":96,"NGYF":96,"NGZF":96,"ADDGRID":false,"NSW":0,"IBRION":-1,"MDALGO":0,"ISIF":3,"PSTRESS":0.0,"EDIFFG":1e-6,"NFREE":0,"POTIM":0.5,"SMASS":-3.0,"SCALEE":1.0,"TEBEG":0.0001,"TEEND":0.0001,"NBLOCK":1,"KBLOCK":1,"NPACO":256,"APACO":16.0,"ISYM":0,"SYMPREC":0.00001,"LORBIT":0,"RWIGS":[-1.0],"NEDOS":301,"EMIN":10.0,"EMAX":-10.0,"EFERMI":0.0,"NWRITE":2,"LWAVE":false,"LDOWNSAMPLE":false,"LCHARG":false,"LPARD":false,"LVTOT":false,"LVHAR":false,"LELF":false,"LOPTICS":false,"STM":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"NPAR":4,"NSIM":4,"NBLK":-1,"LPLANE":true,"LSCALAPACK":true,"LSCAAWARE":false,"LSCALU":false,"LASYNC":false,"LORBITALREAL":false,"IDIOT":3,"PHON_NSTRUCT":-1,"LMUSIC":false,"POMASS":[28.085],"DARWINR":[0.0],"DARWINV":[1.0],"LCORR":true,"GGA_COMPAT":true,"LBERRY":false,"ICORELEVEL":0,"LDAU":false,"I_CONSTRAINED_M":0,"GGA":"PE","VOSKOWN":0,"LHFCALC":false,"PRECFOCK":"","LSYMGRAD":false,"LHFONE":false,"LRHFCALC":false,"LTHOMAS":false,"LMODELHF":false,"LFOCKACE":false,"ENCUT4O":-1.0,"EXXOEP":0,"FOURORBIT":0,"AEXX":0.0,"HFALPHA":0.0,"MCALPHA":0.0,"ALDAX":1.0,"AGGAX":1.0,"ALDAC":1.0,"AGGAC":1.0,"NKREDX":1,"NKREDY":1,"NKREDZ":1,"SHIFTRED":false,"ODDONLY":false,"EVENONLY":false,"LMAXFOCK":0,"NMAXFOCKAE":0,"LFOCKAEDFT":false,"HFSCREEN":0.0,"HFSCREENC":0.0,"NBANDSGWLOW":0,"LUSE_VDW":false,"Zab_VDW":-0.8491,"PARAM1":0.1234,"PARAM2":1.0,"PARAM3":0.0,"MODEL_GW":0,"MODEL_EPS0":12.26726875,"MODEL_ALPHA":1.0,"LEPSILON":false,"LRPA":false,"LNABLA":false,"LVEL":false,"KINTER":0,"CSHIFT":0.1,"OMEGAMAX":-1.0,"DEG_THRESHOLD":0.002,"RTIME":-0.1,"WPLASMAI":0.0,"DFIELD":[0.0,0.0,0.0],"WPLASMA":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"NUCIND":false,"MAGPOS":[0.0,0.0,0.0],"LNICSALL":true,"ORBITALMAG":false,"LMAGBLOCH":false,"LCHIMAG":false,"LGAUGE":true,"MAGATOM":0,"MAGDIPOL":[0.0,0.0,0.0],"AVECCONST":[0.0,0.0,0.0],"LFINITE_TEMPERATURE":false,"LADDER":false,"LRPAFORCE":false,"LFXC":false,"LHARTREE":true,"IBSE":0,"KPOINT":[-1,0,0,0],"LTCTC":false,"LTCTE":false,"LTETE":false,"LTRIPLET":false,"LFXCEPS":false,"LFXHEG":false,"NATURALO":2,"LHOLEGF":false,"L2ORDER":false,"LDMP1":false,"LMP2LT":false,"LSMP2LT":false,"LGWLF":false,"ENCUTGW":-2.0,"ENCUTGWSOFT":-2.0,"ENCUTLF":-1.0,"LESF_SPLINES":false,"LMAXMP2":-1,"SCISSOR":0.0,"NOMEGA":0,"NOMEGAR":0,"NBANDSGW":-1,"NBANDSO":-1,"NBANDSV":-1,"NELMHF":1,"DIM":3,"IESPILON":4,"ANTIRES":0,"OMEGAMIN":-30.0,"OMEGATL":-200.0,"OMEGAGRID":0,"LSELFENERGY":false,"LSPECTRAL":false,"LSPECTRALGW":false,"LSINGLES":false,"LFERMIGW":false,"ODDONLYGW":false,"EVENONLYGW":false,"NKREDLFX":1,"NKREDLFY":1,"NKREDLFZ":1,"MAXMEM":2800,"TELESCOPE":0,"NTAUPAR":-1,"NOMEGAPAR":-1,"LAMBDA":1.0,"OFIELD_KAPPA":0.0,"OFIELD_K":[0.0,0.0,0.0],"OFIELD_Q6_NEAR":0.0,"OFIELD_Q6_FAR":0.0,"OFIELD_A":0.0,"LSOL":false},"lattice_rec":{"@module":"pymatgen.core.lattice","@class":"Lattice","matrix":[[1.1489055547633664,0.0,0.0],[0.0,1.1489055568641864,-2.100819746111038e-9],[0.0,-2.100819746111038e-9,1.1489055547633664]],"pbc":[true,true,true]},"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.46884405,0.0,-0.0],[0.0,5.46884404,1e-8],[-0.0,1e-8,5.46884405]],"pbc":[true,true,true],"a":5.46884405,"b":5.46884404,"c":5.46884405,"alpha":89.99999979046474,"beta":90.0,"gamma":90.0,"volume":163.56358343368464},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.74999999,0.25],"properties":{},"label":"Si","xyz":[4.1016330375,4.101632977811559,1.36721102]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,0.5,0.49999999],"properties":{},"label":"Si","xyz":[5.46884405e-8,2.7344220249999998,2.7344219753115597]},{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.25,0.75],"properties":{},"label":"Si","xyz":[4.1016330375,1.3672110174999998,4.10163304]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,1.0,1e-8],"properties":{},"label":"Si","xyz":[5.46884405e-8,5.46884404,6.46884405e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.75,0.75],"properties":{},"label":"Si","xyz":[1.3672110125,4.101633037499999,4.101633045000001]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.5,1e-8],"properties":{},"label":"Si","xyz":[2.734422025,2.73442202,5.968844050000001e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.25000001,0.25],"properties":{},"label":"Si","xyz":[1.3672110125,1.3672110671884403,1.3672110150000003]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.0,0.49999999],"properties":{},"label":"Si","xyz":[2.734422025,4.9999999e-9,2.7344219703115598]}]},"is_hubbard":false,"hubbards":{}},"output":{"energy":-43.40057126,"energy_per_atom":-5.4250714075,"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"efermi":5.86131717,"is_metal":false,"bandgap":0.6105,"cbm":6.2256,"vbm":5.6151,"is_gap_direct":false,"direct_gap":0.7519999999999998,"transition":"(0.000,0.000,0.000)-(0.167,0.000,0.000)","mag_density":null,"dielectric":null,"optical_absorption_coeff":null,"epsilon_static":null,"epsilon_static_wolfe":null,"epsilon_ionic":null,"frequency_dependent_dielectric":{"real":null,"imaginary":null,"energy":null},"ionic_steps":[{"e_fr_energy":-43.40057126,"e_wo_entrp":-43.40057126,"e_0_energy":-43.40057126,"forces":[[-5.9e-7,-1e-8,1.3e-7],[-1.14e-6,4.5e-7,3.5e-7],[-5.2e-7,-2.2e-7,-8e-8],[-6.6e-7,-3.4e-7,-5.1e-7],[9e-8,4.9e-7,1e-8],[1.29e-6,2.6e-7,-1.4e-7],[6.2e-7,-5.6e-7,1.2e-7],[9e-7,-7e-8,1.2e-7]],"stress":[[-0.00119437,9.62e-6,-2.69e-6],[9.63e-6,-0.00119317,-0.00002408],[-2.65e-6,-0.00002408,-0.00119536]],"electronic_steps":[{"alphaZ":13.17188293,"ewald":-907.76037839,"hartreedc":-45.2974336,"XCdc":-74.74170754,"pawpsdc":704.99039692,"pawaedc":-564.24414232,"eentropy":-0.0024493,"bandstr":134.99700743,"atom":824.53298936,"e_fr_energy":85.6461655,"e_wo_entrp":85.6486148,"e_0_energy":85.64739015},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-37.74046023,"e_wo_entrp":-37.740442,"e_0_energy":-37.74045111},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.95417179,"e_wo_entrp":-43.95417179,"e_0_energy":-43.95417179},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-44.06970484,"e_wo_entrp":-44.06970484,"e_0_energy":-44.06970484},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-44.07257795,"e_wo_entrp":-44.07257795,"e_0_energy":-44.07257795},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.60900681,"e_wo_entrp":-43.60900681,"e_0_energy":-43.60900681},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.3949526,"e_wo_entrp":-43.3949526,"e_0_energy":-43.3949526},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.39954629,"e_wo_entrp":-43.39954629,"e_0_energy":-43.39954629},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.40034229,"e_wo_entrp":-43.40034229,"e_0_energy":-43.40034229},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.40056935,"e_wo_entrp":-43.40056935,"e_0_energy":-43.40056935},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.40057057,"e_wo_entrp":-43.40057057,"e_0_energy":-43.40057057},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.40057219,"e_wo_entrp":-43.40057219,"e_0_energy":-43.40057219},{"alphaZ":null,"ewald":null,"hartreedc":null,"XCdc":null,"pawpsdc":null,"pawaedc":null,"eentropy":null,"bandstr":null,"atom":null,"e_fr_energy":-43.40057123,"e_wo_entrp":-43.40057123,"e_0_energy":-43.40057123},{"alphaZ":13.17188293,"ewald":-907.76037839,"hartreedc":-60.68571069,"XCdc":-72.24823459,"pawpsdc":3311.90083296,"pawaedc":-3171.97503459,"eentropy":-0.0,"bandstr":19.66308173,"atom":824.53298936,"e_fr_energy":-43.40057126,"e_wo_entrp":-43.40057126,"e_0_energy":-43.40057126}],"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.46884405,0.0,-0.0],[0.0,5.46884404,1e-8],[-0.0,1e-8,5.46884405]],"pbc":[true,true,true],"a":5.46884405,"b":5.46884404,"c":5.46884405,"alpha":89.99999979046474,"beta":90.0,"gamma":90.0,"volume":163.56358343368464},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.74999999,0.25],"properties":{},"label":"Si","xyz":[4.1016330375,4.101632977811559,1.36721102]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,0.5,0.49999999],"properties":{},"label":"Si","xyz":[5.46884405e-8,2.7344220249999998,2.7344219753115597]},{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.25,0.75],"properties":{},"label":"Si","xyz":[4.1016330375,1.3672110174999998,4.10163304]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,1.0,1e-8],"properties":{},"label":"Si","xyz":[5.46884405e-8,5.46884404,6.46884405e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.75,0.75],"properties":{},"label":"Si","xyz":[1.3672110125,4.101633037499999,4.101633045000001]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.5,1e-8],"properties":{},"label":"Si","xyz":[2.734422025,2.73442202,5.968844050000001e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.25000001,0.25],"properties":{},"label":"Si","xyz":[1.3672110125,1.3672110671884403,1.3672110150000003]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.0,0.49999999],"properties":{},"label":"Si","xyz":[2.734422025,4.9999999e-9,2.7344219703115598]}]}}],"locpot":null,"outcar":{"@module":"pymatgen.io.vasp.outputs","@class":"Outcar","efermi":5.8613,"magnetization":[],"charge":[],"total_magnetization":null,"nelect":32.0,"is_stopped":false,"drift":[[-0.0,0.0,-0.0]],"ngf":[96,96,96],"sampling_radii":[0.9892],"electrostatic_potential":[-83.4847,-83.4847,-83.4847,-83.4847,-83.4847,-83.4847,-83.4847,-83.4847]},"force_constants":null,"normalmode_frequencies":null,"normalmode_eigenvals":null,"normalmode_eigenvecs":null,"elph_displaced_structures":{"temperatures":null,"structures":null},"dos_properties":{},"run_stats":{"average_memory":0.0,"max_memory":237376.0,"elapsed_time":158.855,"system_time":0.644,"user_time":157.386,"total_time":158.03,"cores":144}},"completed_at":"2025-02-12 11:24:31.510532","task_name":"standard","output_file_paths":{"chgcar":"CHGCAR"},"bader":null,"ddec6":null,"run_type":"PBE","task_type":"Static","calc_type":"PBE Static"}],"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"task_type":"Static","run_type":"PBE","calc_type":"PBE Static","task_id":null,"orig_inputs":{"incar":{"ALGO":"Normal","EDIFF":1e-7,"ENAUG":1360,"ENCUT":700,"GGA":"Pe","IBRION":-1,"ISIF":3,"ISMEAR":0,"ISPIN":1,"ISYM":0,"KSPACING":0.1,"LAECHG":false,"LASPH":true,"LCHARG":false,"LELF":false,"LMIXTAU":true,"LOPTICS":false,"LREAL":false,"LVTOT":false,"LWAVE":false,"NELM":200,"NPAR":4,"NSW":0,"PREC":"Accurate","SIGMA":0.05},"kpoints":null,"nkpoints":null,"potcar":[{"titel":"Si","hash":"c27340a9c98542122fbad458bbb5d441","summary_stats":{"keywords":{"header":["dexc","eatom","eaug","enmax","enmin","icore","iunscr","lcor","lexch","lpaw","lultra","ndata","orbitaldescriptions","orbitals","pomass","raug","rcore","rdep","rdept","rmax","rpacor","rrkj","rwigs","step","titel","vrhfin","zval","nentries"],"data":["localpart","gradientcorrectionsusedforxc","corecharge-density(partial)","kineticenergydensity(partial)","atomicpseudocharge-density","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","pawradialsets","(5e20.12)","augmentationcharges(nonsperical)","uccopanciesinatom","grid","aepotential","corecharge-density","kineticenergy-density","mkineticenergy-densitypseudized","localpseudopotentialcore","pspotentialvalenceonly","corecharge-density(pseudized)","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","endofdataset"]},"stats":{"header":{"MEAN":9.198469218699186,"ABSMEAN":9.198469218699186,"VAR":1790.7147656424072,"MIN":0.0,"MAX":322.069},"data":{"MEAN":215.16613596661992,"ABSMEAN":237.9507629282115,"VAR":3381771.445249609,"MIN":-872.57185,"MAX":24929.6947974}}}}],"potcar_spec":null,"potcar_type":null,"parameters":null,"lattice_rec":null,"structure":null,"is_hubbard":false,"hubbards":null,"poscar":{"@module":"pymatgen.io.vasp.inputs","@class":"Poscar","structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"true_names":true,"selective_dynamics":null,"velocities":null,"predictor_corrector":null,"comment":"Si8"}},"input":{"incar":{"PREC":"Accurate","ALGO":"Normal","ISPIN":1,"NELM":200,"IBRION":-1,"EDIFF":1e-7,"NSW":0,"ISIF":3,"ISYM":0,"ENCUT":700.0,"ENAUG":1360.0,"LREAL":false,"ISMEAR":0,"SIGMA":0.05,"KSPACING":0.1,"LWAVE":false,"LCHARG":false,"LVTOT":false,"LELF":false,"LOPTICS":false,"LASPH":true,"NPAR":4,"LAECHG":false,"GGA":"Pe","LMIXTAU":true},"kpoints":{"@module":"pymatgen.io.vasp.inputs","@class":"Kpoints","comment":"Kpoints from vasprun.xml","nkpoints":0,"generation_style":"Gamma","kpoints":[[12,12,12]],"usershift":[0.0,0.0,0.0],"kpts_weights":null,"coord_type":null,"labels":null,"tet_number":0,"tet_weight":0,"tet_connections":null},"nkpoints":868,"potcar":["PAW_PBE"],"potcar_spec":[{"titel":"PAW_PBE Si 05Jan2001","hash":"c27340a9c98542122fbad458bbb5d441","summary_stats":{"keywords":{"header":["dexc","eatom","eaug","enmax","enmin","icore","iunscr","lcor","lexch","lpaw","lultra","ndata","orbitaldescriptions","orbitals","pomass","raug","rcore","rdep","rdept","rmax","rpacor","rrkj","rwigs","step","titel","vrhfin","zval","nentries"],"data":["localpart","gradientcorrectionsusedforxc","corecharge-density(partial)","kineticenergydensity(partial)","atomicpseudocharge-density","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","pawradialsets","(5e20.12)","augmentationcharges(nonsperical)","uccopanciesinatom","grid","aepotential","corecharge-density","kineticenergy-density","mkineticenergy-densitypseudized","localpseudopotentialcore","pspotentialvalenceonly","corecharge-density(pseudized)","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","endofdataset"]},"stats":{"header":{"MEAN":9.198469218699186,"ABSMEAN":9.198469218699186,"VAR":1790.7147656424072,"MIN":0.0,"MAX":322.069},"data":{"MEAN":215.16613596661992,"ABSMEAN":237.9507629282115,"VAR":3381771.445249609,"MIN":-872.57185,"MAX":24929.6947974}}}}],"potcar_type":["PAW_PBE"],"parameters":{"SYSTEM":"unknown system","LCOMPAT":false,"PREC":"accura","ENMAX":700.0,"ENAUG":1360.0,"EDIFF":1e-7,"IALGO":38,"IWAVPR":10,"NBANDS":24,"NBANDSLOW":-1,"NBANDSHIGH":-1,"NELECT":32.0,"TURBO":0,"IRESTART":0,"NREBOOT":0,"NMIN":0,"EREF":0.0,"ISMEAR":0,"SIGMA":0.05,"KSPACING":0.1,"KGAMMA":true,"KBLOWUP":true,"LREAL":false,"ROPT":[0.0],"LMAXPAW":-100,"LMAXMIX":2,"NLSPLINE":false,"ISTART":0,"ICHARG":2,"INIWAV":1,"ISPIN":1,"LNONCOLLINEAR":false,"MAGMOM":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"NUPDOWN":-1.0,"LSORBIT":false,"SAXIS":[0.0,0.0,1.0],"LSPIRAL":false,"QSPIRAL":[0.0,0.0,0.0],"LZEROZ":false,"LASPH":true,"LMETAGGA":false,"NELM":200,"NELMDL":-5,"NELMIN":2,"ENINI":700.0,"LDIAG":true,"LSUBROT":false,"WEIMIN":0.0,"EBREAK":0.0,"DEPER":0.3,"NRMM":4,"TIME":0.4,"AMIX":0.4,"BMIX":1.0,"AMIN":0.1,"AMIX_MAG":1.6,"BMIX_MAG":1.0,"IMIX":4,"MIXFIRST":false,"MAXMIX":-45,"WC":100.0,"INIMIX":1,"MIXPRE":1,"MREMOVE":5,"LDIPOL":false,"LMONO":false,"IDIPOL":0,"EPSILON":1.0,"DIPOL":[-100.0,-100.0,-100.0],"EFIELD":0.0,"NGX":48,"NGY":48,"NGZ":48,"NGXF":96,"NGYF":96,"NGZF":96,"ADDGRID":false,"NSW":0,"IBRION":-1,"MDALGO":0,"ISIF":3,"PSTRESS":0.0,"EDIFFG":1e-6,"NFREE":0,"POTIM":0.5,"SMASS":-3.0,"SCALEE":1.0,"TEBEG":0.0001,"TEEND":0.0001,"NBLOCK":1,"KBLOCK":1,"NPACO":256,"APACO":16.0,"ISYM":0,"SYMPREC":0.00001,"LORBIT":0,"RWIGS":[-1.0],"NEDOS":301,"EMIN":10.0,"EMAX":-10.0,"EFERMI":0.0,"NWRITE":2,"LWAVE":false,"LDOWNSAMPLE":false,"LCHARG":false,"LPARD":false,"LVTOT":false,"LVHAR":false,"LELF":false,"LOPTICS":false,"STM":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"NPAR":4,"NSIM":4,"NBLK":-1,"LPLANE":true,"LSCALAPACK":true,"LSCAAWARE":false,"LSCALU":false,"LASYNC":false,"LORBITALREAL":false,"IDIOT":3,"PHON_NSTRUCT":-1,"LMUSIC":false,"POMASS":[28.085],"DARWINR":[0.0],"DARWINV":[1.0],"LCORR":true,"GGA_COMPAT":true,"LBERRY":false,"ICORELEVEL":0,"LDAU":false,"I_CONSTRAINED_M":0,"GGA":"PE","VOSKOWN":0,"LHFCALC":false,"PRECFOCK":"","LSYMGRAD":false,"LHFONE":false,"LRHFCALC":false,"LTHOMAS":false,"LMODELHF":false,"LFOCKACE":false,"ENCUT4O":-1.0,"EXXOEP":0,"FOURORBIT":0,"AEXX":0.0,"HFALPHA":0.0,"MCALPHA":0.0,"ALDAX":1.0,"AGGAX":1.0,"ALDAC":1.0,"AGGAC":1.0,"NKREDX":1,"NKREDY":1,"NKREDZ":1,"SHIFTRED":false,"ODDONLY":false,"EVENONLY":false,"LMAXFOCK":0,"NMAXFOCKAE":0,"LFOCKAEDFT":false,"HFSCREEN":0.0,"HFSCREENC":0.0,"NBANDSGWLOW":0,"LUSE_VDW":false,"Zab_VDW":-0.8491,"PARAM1":0.1234,"PARAM2":1.0,"PARAM3":0.0,"MODEL_GW":0,"MODEL_EPS0":12.26726875,"MODEL_ALPHA":1.0,"LEPSILON":false,"LRPA":false,"LNABLA":false,"LVEL":false,"KINTER":0,"CSHIFT":0.1,"OMEGAMAX":-1.0,"DEG_THRESHOLD":0.002,"RTIME":-0.1,"WPLASMAI":0.0,"DFIELD":[0.0,0.0,0.0],"WPLASMA":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"NUCIND":false,"MAGPOS":[0.0,0.0,0.0],"LNICSALL":true,"ORBITALMAG":false,"LMAGBLOCH":false,"LCHIMAG":false,"LGAUGE":true,"MAGATOM":0,"MAGDIPOL":[0.0,0.0,0.0],"AVECCONST":[0.0,0.0,0.0],"LFINITE_TEMPERATURE":false,"LADDER":false,"LRPAFORCE":false,"LFXC":false,"LHARTREE":true,"IBSE":0,"KPOINT":[-1,0,0,0],"LTCTC":false,"LTCTE":false,"LTETE":false,"LTRIPLET":false,"LFXCEPS":false,"LFXHEG":false,"NATURALO":2,"LHOLEGF":false,"L2ORDER":false,"LDMP1":false,"LMP2LT":false,"LSMP2LT":false,"LGWLF":false,"ENCUTGW":-2.0,"ENCUTGWSOFT":-2.0,"ENCUTLF":-1.0,"LESF_SPLINES":false,"LMAXMP2":-1,"SCISSOR":0.0,"NOMEGA":0,"NOMEGAR":0,"NBANDSGW":-1,"NBANDSO":-1,"NBANDSV":-1,"NELMHF":1,"DIM":3,"IESPILON":4,"ANTIRES":0,"OMEGAMIN":-30.0,"OMEGATL":-200.0,"OMEGAGRID":0,"LSELFENERGY":false,"LSPECTRAL":false,"LSPECTRALGW":false,"LSINGLES":false,"LFERMIGW":false,"ODDONLYGW":false,"EVENONLYGW":false,"NKREDLFX":1,"NKREDLFY":1,"NKREDLFZ":1,"MAXMEM":2800,"TELESCOPE":0,"NTAUPAR":-1,"NOMEGAPAR":-1,"LAMBDA":1.0,"OFIELD_KAPPA":0.0,"OFIELD_K":[0.0,0.0,0.0],"OFIELD_Q6_NEAR":0.0,"OFIELD_Q6_FAR":0.0,"OFIELD_A":0.0,"LSOL":false},"lattice_rec":{"@module":"pymatgen.core.lattice","@class":"Lattice","matrix":[[1.1489055547633664,0.0,0.0],[0.0,1.1489055568641864,-2.100819746111038e-9],[0.0,-2.100819746111038e-9,1.1489055547633664]],"pbc":[true,true,true]},"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.46884405,0.0,-0.0],[0.0,5.46884404,1e-8],[-0.0,1e-8,5.46884405]],"pbc":[true,true,true],"a":5.46884405,"b":5.46884404,"c":5.46884405,"alpha":89.99999979046474,"beta":90.0,"gamma":90.0,"volume":163.56358343368464},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.74999999,0.25],"properties":{},"label":"Si","xyz":[4.1016330375,4.101632977811559,1.36721102]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,0.5,0.49999999],"properties":{},"label":"Si","xyz":[5.46884405e-8,2.7344220249999998,2.7344219753115597]},{"species":[{"element":"Si","occu":1}],"abc":[0.75,0.25,0.75],"properties":{},"label":"Si","xyz":[4.1016330375,1.3672110174999998,4.10163304]},{"species":[{"element":"Si","occu":1}],"abc":[1e-8,1.0,1e-8],"properties":{},"label":"Si","xyz":[5.46884405e-8,5.46884404,6.46884405e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.75,0.75],"properties":{},"label":"Si","xyz":[1.3672110125,4.101633037499999,4.101633045000001]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.5,1e-8],"properties":{},"label":"Si","xyz":[2.734422025,2.73442202,5.968844050000001e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.25,0.25000001,0.25],"properties":{},"label":"Si","xyz":[1.3672110125,1.3672110671884403,1.3672110150000003]},{"species":[{"element":"Si","occu":1}],"abc":[0.5,0.0,0.49999999],"properties":{},"label":"Si","xyz":[2.734422025,4.9999999e-9,2.7344219703115598]}]},"is_hubbard":false,"hubbards":{},"pseudo_potentials":{"pot_type":"PAW","functional":"P_B_E","symbols":["PAW_PBE"]},"xc_override":"PE","is_lasph":true,"magnetic_moments":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]},"output":{"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"density":2.2810490736943287,"energy":-43.40057126,"forces":[[-5.9e-7,-1e-8,1.3e-7],[-1.14e-6,4.5e-7,3.5e-7],[-5.2e-7,-2.2e-7,-8e-8],[-6.6e-7,-3.4e-7,-5.1e-7],[9e-8,4.9e-7,1e-8],[1.29e-6,2.6e-7,-1.4e-7],[6.2e-7,-5.6e-7,1.2e-7],[9e-7,-7e-8,1.2e-7]],"stress":[[-0.00119437,9.62e-6,-2.69e-6],[9.63e-6,-0.00119317,-0.00002408],[-2.65e-6,-0.00002408,-0.00119536]],"energy_per_atom":-5.4250714075,"bandgap":0.6105},"included_objects":null,"vasp_objects":{},"entry":{"@module":"pymatgen.entries.computed_entries","@class":"ComputedEntry","energy":-43.40057126,"composition":{"Si":8.0},"entry_id":null,"correction":0.0,"energy_adjustments":[],"parameters":{"potcar_spec":[{"titel":"PAW_PBE Si 05Jan2001","hash":"c27340a9c98542122fbad458bbb5d441","summary_stats":{"keywords":{"header":["dexc","eatom","eaug","enmax","enmin","icore","iunscr","lcor","lexch","lpaw","lultra","ndata","orbitaldescriptions","orbitals","pomass","raug","rcore","rdep","rdept","rmax","rpacor","rrkj","rwigs","step","titel","vrhfin","zval","nentries"],"data":["localpart","gradientcorrectionsusedforxc","corecharge-density(partial)","kineticenergydensity(partial)","atomicpseudocharge-density","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","nonlocalpart","reciprocalspacepart","realspacepart","reciprocalspacepart","realspacepart","pawradialsets","(5e20.12)","augmentationcharges(nonsperical)","uccopanciesinatom","grid","aepotential","corecharge-density","kineticenergy-density","mkineticenergy-densitypseudized","localpseudopotentialcore","pspotentialvalenceonly","corecharge-density(pseudized)","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","pseudowavefunction","aewavefunction","endofdataset"]},"stats":{"header":{"MEAN":9.198469218699186,"ABSMEAN":9.198469218699186,"VAR":1790.7147656424072,"MIN":0.0,"MAX":322.069},"data":{"MEAN":215.16613596661992,"ABSMEAN":237.9507629282115,"VAR":3381771.445249609,"MIN":-872.57185,"MAX":24929.6947974}}}}],"run_type":"PBE","is_hubbard":false,"hubbards":{}},"data":{"oxide_type":"None","aspherical":true,"last_updated":"2025-02-12 10:24:33.111449+00:00"}},"task_label":"dft phonon static eos deformation 1","author":null,"icsd_id":null,"transformations":{},"additional_json":{"jfremote_out":{"start_time":{"@module":"datetime","@class":"datetime","string":"2025-02-12 10:21:44.978482"}},"remote_job_data":[],"additional_store_data":[],"jfremote_in":{"job":{"@module":"jobflow.core.job","@class":"Job","@version":"0.1.18","function":{"@module":"atomate2.vasp.jobs.base","@callable":"BaseVaspMaker.make","@bound":{"@module":"atomate2.vasp.jobs.phonons","@class":"PhononDisplacementMaker","@version":"0.0.18","name":"dft phonon static eos deformation 1","input_set_generator":{"@module":"atomate2.vasp.sets.core","@class":"StaticSetGenerator","@version":"0.0.18","structure":null,"config_dict":{"PARENT":"VASPIncarBase","INCAR":{"ALGO":"Fast","EDIFF":0.00001,"EDIFFG":-0.02,"ENAUG":1360,"ENCUT":680,"IBRION":2,"ISIF":3,"ISMEAR":0,"ISPIN":2,"LAECHG":true,"LASPH":true,"LCHARG":true,"LELF":false,"LMIXTAU":true,"LORBIT":11,"LREAL":false,"LVTOT":true,"LWAVE":false,"NELM":200,"NSW":99,"PREC":"Accurate","SIGMA":0.05,"MAGMOM":{"Ce":5,"Ce3+":1,"Co":0.6,"Co3+":0.6,"Co4+":1,"Cr":5,"Dy3+":5,"Er3+":3,"Eu":10,"Eu2+":7,"Eu3+":6,"Fe":5,"Gd3+":7,"Ho3+":4,"La3+":0.6,"Lu3+":0.6,"Mn":5,"Mn3+":4,"Mn4+":3,"Mo":5,"Nd3+":3,"Ni":5,"Pm3+":4,"Pr3+":2,"Sm3+":5,"Tb3+":6,"Tm3+":2,"V":5,"W":5,"Yb3+":1},"GGA":"PS","LDAU":true,"LDAUJ":{"F":{"Co":0,"Cr":0,"Fe":0,"Mn":0,"Mo":0,"Ni":0,"V":0,"W":0},"O":{"Co":0,"Cr":0,"Fe":0,"Mn":0,"Mo":0,"Ni":0,"V":0,"W":0}},"LDAUL":{"F":{"Co":2,"Cr":2,"Fe":2,"Mn":2,"Mo":2,"Ni":2,"V":2,"W":2},"O":{"Co":2,"Cr":2,"Fe":2,"Mn":2,"Mo":2,"Ni":2,"V":2,"W":2}},"LDAUTYPE":2,"LDAUU":{"F":{"Co":3.32,"Cr":3.7,"Fe":5.3,"Mn":3.9,"Mo":4.38,"Ni":6.2,"V":3.25,"W":6.2},"O":{"Co":3.32,"Cr":3.7,"Fe":5.3,"Mn":3.9,"Mo":4.38,"Ni":6.2,"V":3.25,"W":6.2}},"LDAUPRINT":1},"POTCAR_FUNCTIONAL":"PBE_54","POTCAR":{"Ac":"Ac","Ag":"Ag","Al":"Al","Am":"Am","Ar":"Ar","As":"As","At":"At","Au":"Au","B":"B","Ba":"Ba_sv","Be":"Be","Bi":"Bi_d","Br":"Br","C":"C","Ca":"Ca_sv","Cd":"Cd","Ce":"Ce","Cf":"Cf","Cl":"Cl","Cm":"Cm","Co":"Co","Cr":"Cr_pv","Cs":"Cs_sv","Cu":"Cu","Dy":"Dy_3","Er":"Er_3","Eu":"Eu_2","F":"F","Fe":"Fe","Fr":"Fr_sv","Ga":"Ga_d","Gd":"Gd_3","Ge":"Ge_d","H":"H","He":"He","Hf":"Hf_pv","Hg":"Hg","Ho":"Ho_3","I":"I","In":"In_d","Ir":"Ir","K":"K_sv","Kr":"Kr","La":"La","Li":"Li_sv","Lu":"Lu_3","Mg":"Mg","Mn":"Mn_pv","Mo":"Mo_sv","N":"N","Na":"Na_pv","Nb":"Nb_sv","Nd":"Nd_3","Ne":"Ne","Ni":"Ni","Np":"Np","O":"O","Os":"Os","P":"P","Pa":"Pa","Pb":"Pb_d","Pd":"Pd","Pm":"Pm_3","Po":"Po_d","Pr":"Pr_3","Pt":"Pt","Pu":"Pu","Ra":"Ra_sv","Rb":"Rb_sv","Re":"Re","Rh":"Rh_pv","Rn":"Rn","Ru":"Ru_pv","S":"S","Sb":"Sb","Sc":"Sc_sv","Se":"Se","Si":"Si","Sm":"Sm_3","Sn":"Sn_d","Sr":"Sr_sv","Ta":"Ta_pv","Tb":"Tb_3","Tc":"Tc_pv","Te":"Te","Th":"Th","Ti":"Ti_sv","Tl":"Tl_d","Tm":"Tm_3","U":"U","V":"V_sv","W":"W_sv","Xe":"Xe","Y":"Y_sv","Yb":"Yb_3","Zn":"Zn","Zr":"Zr_sv"},"KPOINTS":{"reciprocal_density":64,"reciprocal_density_metal":200}},"files_to_transfer":{},"user_incar_settings":{"GGA":"PE","IBRION":-1,"ISPIN":1,"ISMEAR":0,"ISIF":3,"ENCUT":700,"EDIFF":1e-7,"LAECHG":false,"LREAL":false,"ALGO":"Normal","NSW":0,"LCHARG":false,"LWAVE":false,"LVTOT":false,"LORBIT":null,"LOPTICS":false,"SIGMA":0.05,"ISYM":0,"KSPACING":0.1,"NPAR":4},"user_kpoints_settings":{},"user_potcar_settings":{},"constrain_total_magmom":false,"sort_structure":true,"user_potcar_functional":"PBE_54","force_gamma":true,"reduce_structure":null,"vdw":null,"use_structure_charge":false,"standardize":false,"sym_prec":0.1,"international_monoclinic":true,"validate_magmom":true,"inherit_incar":false,"auto_kspacing":false,"auto_ismear":true,"auto_ispin":false,"auto_lreal":false,"auto_metal_kpoints":true,"bandgap_tol":0.0001,"bandgap":null,"prev_incar":null,"prev_kpoints":null,"_valid_potcars":null,"lepsilon":false,"lcalcpol":false},"write_input_set_kwargs":{},"copy_vasp_kwargs":{},"run_vasp_kwargs":{"handlers":{}},"task_document_kwargs":{},"stop_children_kwargs":{},"write_additional_data":{}}},"function_args":[],"function_kwargs":{"structure":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0.0,"lattice":{"matrix":[[5.4688440475333735,1.9420841e-9,-1.3631176e-9],[1.8873996e-9,5.468844039752649,1.36496088e-8],[-1.6414625e-9,1.36385824e-8,5.468844048018874]],"pbc":[true,true,true],"a":5.4688440475333735,"b":5.468844039752649,"c":5.468844048018874,"alpha":89.99999971410811,"beta":90.00000003147827,"gamma":89.99999995987942,"volume":163.5635832932623},"properties":{},"sites":[{"species":[{"element":"Si","occu":1}],"abc":[0.7499999987630162,0.7499999947041829,0.2499999997033413],"properties":{},"label":"Si","xyz":[4.101633029890342,4.101633005718698,1.3672110195972067]},{"species":[{"element":"Si","occu":1}],"abc":[6.7221535e-9,0.4999999981637231,0.4999999924107712],"properties":{},"label":"Si","xyz":[3.688537771407228e-8,2.7344220166533035,2.7344219893299324]},{"species":[{"element":"Si","occu":1}],"abc":[0.7499999989151149,0.2500000047586823,0.7499999999638405],"properties":{},"label":"Si","xyz":[4.101633028957716,1.3672110476481534,4.101633038206469]},{"species":[{"element":"Si","occu":1}],"abc":[5.6380927e-9,0.9999999999281641,5.5413096e-9],"properties":{},"label":"Si","xyz":[3.272124929260494e-8,5.46884403935979,4.3954166815523935e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2500000002832934,0.7499999958083237,0.7500000001514664],"properties":{},"label":"Si","xyz":[1.3672110136170836,4.10163301760532,4.101633046738929]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999951448473,0.4999999996027782,6.4697545e-9],"properties":{},"label":"Si","xyz":[2.7344219981583135,2.7344220186750223,4.1525323990664546e-8]},{"species":[{"element":"Si","occu":1}],"abc":[0.2499999992626485,0.2500000068831767,0.2500000011144152],"properties":{},"label":"Si","xyz":[1.3672110079123674,1.3672110514763487,1.3672110211709045]},{"species":[{"element":"Si","occu":1}],"abc":[0.4999999952708336,1.509619e-10,0.4999999946451084],"properties":{},"label":"Si","xyz":[2.7344219970828822,8.615920254827166e-9,2.7344219940428114]}]},"prev_dir":"i03r09c03s03.sng.lrz.de:/hppfs/scratch/00/di82tut/autoplex_test/run/00/0a/cc/000acc98-19af-49ee-9f52-378a2e2f0951_1"},"output_schema":{"@module":"emmet.core.tasks","@callable":"TaskDoc","@bound":null},"uuid":"8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1","index":1,"name":"dft phonon static eos deformation 1","metadata":{},"config":{"@module":"jobflow.core.job","@class":"JobConfig","@version":"0.1.18","resolve_references":true,"on_missing_references":"error","manager_config":{"resources":{"nodes":3,"partition":"micro","time":"02:55:00","ntasks":144,"qverbatim":"#SBATCH --get-user-env","mail_user":"your_email@adress","mail_type":"ALL","account":"pn73da"}},"expose_store":false,"pass_manager_config":true,"response_manager_config":{}},"hosts":["1c58eab1-79aa-4589-b8ca-a553c147b0ec","83dc9f79-ca39-42c0-810e-1fadbc7002e1","ed2bede8-1222-41e6-b874-b420bbe11000"],"metadata_updates":[],"config_updates":[{"config":{"manager_config":{"resources":{"nodes":3,"partition":"micro","time":"02:55:00","ntasks":144,"qverbatim":"#SBATCH --get-user-env","mail_user":"your_email@adress","mail_type":"ALL","account":"pn73da"}}},"name_filter":"dft phonon static","function_filter":null,"attributes":null}],"name_updates":[{"append_str":" eos deformation 1","prepend":false}],"data":[{"@module":"pymatgen.electronic_structure.bandstructure","@callable":"BandStructure","@bound":null},{"@module":"pymatgen.electronic_structure.bandstructure","@callable":"BandStructureSymmLine","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"DOS","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"Dos","@bound":null},{"@module":"pymatgen.electronic_structure.dos","@callable":"CompleteDos","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Locpot","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Chgcar","@bound":null},{"@module":"pymatgen.io.vasp.outputs","@callable":"Wavecar","@bound":null},{"@module":"pymatgen.core.trajectory","@callable":"Trajectory","@bound":null},"force_constants","normalmode_eigenvecs","bandstructure"]},"store":{"@module":"jobflow.core.store","@class":"JobStore","@version":"0.1.18","docs_store":{"@module":"jobflow_remote.remote.data","@class":"StdJSONStore","@version":"0.1.4","paths":["/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/remote_job_data.json"]},"additional_stores":{"data":{"@module":"jobflow_remote.remote.data","@class":"StdJSONStore","@version":"0.1.4","paths":["/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/additional_store_data.json"]}},"save":{},"load":false}}},"custodian":[{"corrections":[],"job":{"@module":"custodian.vasp.jobs","@class":"VaspJob","@version":"2024.10.3","vasp_cmd":["vasp6","-n","144",">vasp.out"],"output_file":"vasp.out","stderr_file":"std_err.txt","suffix":"","final":true,"backup":true,"auto_npar":false,"auto_gamma":true,"settings_override":null,"gamma_vasp_cmd":["vasp6","-n","144","-s","gam",">vasp.out"],"copy_magmom":false,"auto_continue":false,"update_incar":false}}],"analysis":{"delta_volume":-1.4042234397493303e-7,"delta_volume_percent":-8.585183879385107e-8,"max_force":1.323366918129662e-6,"warnings":[],"errors":[]},"last_updated":"2025-02-12T10:21:50.660000","completed_at":"2025-02-12T11:24:31.510000","batch_id":null,"run_stats":{"average_memory":0,"max_memory":0,"elapsed_time":0,"system_time":0,"user_time":0,"total_time":0,"cores":0},"include_structure":true,"@module":"emmet.core.tasks","@class":"TaskDoc","@version":null},"completed_at":"2025-02-12T11:24:33.239258","metadata":{},"hosts":["1c58eab1-79aa-4589-b8ca-a553c147b0ec","83dc9f79-ca39-42c0-810e-1fadbc7002e1","ed2bede8-1222-41e6-b874-b420bbe11000"],"name":"dft phonon static eos deformation 1","@module":"jobflow.core.schemas","@class":"JobStoreDocument","@version":"0.1.18"}] diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/std_err.txt b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/std_err.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/submit.sh b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/submit.sh new file mode 100644 index 0000000000..b1b6caa0f9 --- /dev/null +++ b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/submit.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +#SBATCH --partition=micro +#SBATCH --job-name=dft_phonon_static_eos_deformation_1 +#SBATCH --nodes=3 +#SBATCH --ntasks=144 +#SBATCH --time=02:55:00 +#SBATCH --account=pn73da +#SBATCH --mail-user=your_email@adress +#SBATCH --mail-type=ALL +#SBATCH --output=/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/queue.out +#SBATCH --error=/hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1/queue.err +#SBATCH --get-user-env +cd /hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1 +export ATOMATE2_CONFIG_FILE="/dss/dsshome1/00/di82tut/.atomate2/config/atomate2.yaml" +source activate autoplex_test +module load slurm_setup +module load vasp/6.1.2 + +jf -fe execution run /hppfs/scratch/00/di82tut/autoplex_test/run/8a/70/ab/8a70ab31-57c5-4b5d-a2f3-1d23e48fc4a1_1 diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasp.out.gz new file mode 100644 index 0000000000..0a69b29366 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasprun.xml.gz new file mode 100644 index 0000000000..7d8a65e405 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_1/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/INCAR.gz new file mode 100644 index 0000000000..2dbdd3695a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POSCAR.gz new file mode 100644 index 0000000000..abbcea9b1d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/CONTCAR.gz new file mode 100644 index 0000000000..f431257969 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/INCAR.gz new file mode 100644 index 0000000000..2dbdd3695a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/OUTCAR.gz new file mode 100644 index 0000000000..5100eaa754 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POSCAR.gz new file mode 100644 index 0000000000..abbcea9b1d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasp.out.gz new file mode 100644 index 0000000000..a1bdae9085 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..ea69b9b5ef Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_2/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/INCAR.gz new file mode 100644 index 0000000000..4f6e101100 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POSCAR.gz new file mode 100644 index 0000000000..1bec7ecb45 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/CONTCAR.gz new file mode 100644 index 0000000000..ee334c2e11 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/INCAR.gz new file mode 100644 index 0000000000..4f6e101100 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/OUTCAR.gz new file mode 100644 index 0000000000..aef45bf53e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POSCAR.gz new file mode 100644 index 0000000000..1bec7ecb45 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasp.out.gz new file mode 100644 index 0000000000..f4d4f32e4a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..03047bc053 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_3/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/INCAR.gz new file mode 100644 index 0000000000..7474bcaf4f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POSCAR.gz new file mode 100644 index 0000000000..9337d3f56d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/CONTCAR.gz new file mode 100644 index 0000000000..0ce347e8b4 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/INCAR.gz new file mode 100644 index 0000000000..7474bcaf4f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/OUTCAR.gz new file mode 100644 index 0000000000..bdb754f8b6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POSCAR.gz new file mode 100644 index 0000000000..9337d3f56d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasp.out.gz new file mode 100644 index 0000000000..15d28d9e31 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..8faffd906c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_4/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/INCAR.gz new file mode 100644 index 0000000000..215fb3f942 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POSCAR.gz new file mode 100644 index 0000000000..2db06da6d5 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/CONTCAR.gz new file mode 100644 index 0000000000..81011ef4af Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/INCAR.gz new file mode 100644 index 0000000000..215fb3f942 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/OUTCAR.gz new file mode 100644 index 0000000000..c6d9401be6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POSCAR.gz new file mode 100644 index 0000000000..2db06da6d5 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasp.out.gz new file mode 100644 index 0000000000..9c08837499 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..12f3dade59 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_5/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/INCAR.gz new file mode 100644 index 0000000000..2a7011028e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POSCAR.gz new file mode 100644 index 0000000000..0a61229dd9 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/CONTCAR.gz new file mode 100644 index 0000000000..e7288ffb23 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/INCAR.gz new file mode 100644 index 0000000000..2a7011028e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/OUTCAR.gz new file mode 100644 index 0000000000..d3b0327266 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POSCAR.gz new file mode 100644 index 0000000000..0a61229dd9 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasp.out.gz new file mode 100644 index 0000000000..969fc8145d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..275c1a1da3 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_6/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/INCAR.gz new file mode 100644 index 0000000000..52c6ef4a0b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POSCAR.gz new file mode 100644 index 0000000000..75aa6e4a0b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/CONTCAR.gz new file mode 100644 index 0000000000..3b920f5a72 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/INCAR.gz new file mode 100644 index 0000000000..52c6ef4a0b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/OUTCAR.gz new file mode 100644 index 0000000000..b1fa6d217c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POSCAR.gz new file mode 100644 index 0000000000..75aa6e4a0b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..a2599715dd Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasp.out.gz new file mode 100644 index 0000000000..f8bf4bce3c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..326ff5ad4f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/dft_phonon_static_eos_deformation_7/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/INCAR.gz new file mode 100644 index 0000000000..f161e4cffe Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POSCAR.gz new file mode 100644 index 0000000000..d7c5aac7d6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..001978bd83 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/INCAR.gz new file mode 100644 index 0000000000..f161e4cffe Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..135dc56842 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POSCAR.gz new file mode 100644 index 0000000000..d7c5aac7d6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasp.out.gz new file mode 100644 index 0000000000..dfb567805f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..d0656e3c18 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/INCAR.gz new file mode 100644 index 0000000000..f117af6e8a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POSCAR.gz new file mode 100644 index 0000000000..71d458a1f8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/CONTCAR.gz new file mode 100644 index 0000000000..4c7bfccb90 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/INCAR.gz new file mode 100644 index 0000000000..f117af6e8a Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/OUTCAR.gz new file mode 100644 index 0000000000..70a4eac38d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POSCAR.gz new file mode 100644 index 0000000000..71d458a1f8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasp.out.gz new file mode 100644 index 0000000000..38bd019ba8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..dce8d48878 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d0/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/INCAR.gz new file mode 100644 index 0000000000..5f9923f1ca Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POSCAR.gz new file mode 100644 index 0000000000..c652012a02 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..36831605bc Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/INCAR.gz new file mode 100644 index 0000000000..5f9923f1ca Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..8c4c4f2b7f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POSCAR.gz new file mode 100644 index 0000000000..c652012a02 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasp.out.gz new file mode 100644 index 0000000000..f3ebf61503 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..d04b57ea2c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/INCAR.gz new file mode 100644 index 0000000000..bac2f161ca Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POSCAR.gz new file mode 100644 index 0000000000..c650767eb1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/CONTCAR.gz new file mode 100644 index 0000000000..8194b32a9f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/INCAR.gz new file mode 100644 index 0000000000..bac2f161ca Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/OUTCAR.gz new file mode 100644 index 0000000000..eb3e88ac85 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POSCAR.gz new file mode 100644 index 0000000000..c650767eb1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasp.out.gz new file mode 100644 index 0000000000..4b3b296d6d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..3692a247c2 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d2/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/INCAR.gz new file mode 100644 index 0000000000..b319b3318e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POSCAR.gz new file mode 100644 index 0000000000..f7e09b85f1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/CONTCAR.gz new file mode 100644 index 0000000000..eb0d4ba17b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/INCAR.gz new file mode 100644 index 0000000000..b319b3318e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/OUTCAR.gz new file mode 100644 index 0000000000..886c64356f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POSCAR.gz new file mode 100644 index 0000000000..f7e09b85f1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasp.out.gz new file mode 100644 index 0000000000..f8ae3d1788 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..3657f3f7d8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d3/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/INCAR.gz new file mode 100644 index 0000000000..aac252ef9e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POSCAR.gz new file mode 100644 index 0000000000..d6f1185fb1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/CONTCAR.gz new file mode 100644 index 0000000000..5ffd8e7dd6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/INCAR.gz new file mode 100644 index 0000000000..aac252ef9e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/OUTCAR.gz new file mode 100644 index 0000000000..6ce3f3473e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POSCAR.gz new file mode 100644 index 0000000000..d6f1185fb1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasp.out.gz new file mode 100644 index 0000000000..4ddc3e7551 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..e9a4dfa219 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d4/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/INCAR.gz new file mode 100644 index 0000000000..b4c3a76034 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POSCAR.gz new file mode 100644 index 0000000000..ce492fae21 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/CONTCAR.gz new file mode 100644 index 0000000000..99b469e600 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/INCAR.gz new file mode 100644 index 0000000000..b4c3a76034 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/OUTCAR.gz new file mode 100644 index 0000000000..c1310c5aff Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POSCAR.gz new file mode 100644 index 0000000000..ce492fae21 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasp.out.gz new file mode 100644 index 0000000000..6283d6876f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..6b51cd4182 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_1_d5/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/INCAR.gz new file mode 100644 index 0000000000..59010e175c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POSCAR.gz new file mode 100644 index 0000000000..7d7deaf09e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..8bdf214691 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/CONTCAR.gz new file mode 100644 index 0000000000..d2ad3a3b62 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/INCAR.gz new file mode 100644 index 0000000000..59010e175c Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/OUTCAR.gz new file mode 100644 index 0000000000..169aba1ee0 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POSCAR.gz new file mode 100644 index 0000000000..7d7deaf09e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..8bdf214691 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasp.out.gz new file mode 100644 index 0000000000..3250f8faef Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..097f7155df Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/INCAR.gz new file mode 100644 index 0000000000..ad635a41c1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POSCAR.gz new file mode 100644 index 0000000000..548523086b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/CONTCAR.gz new file mode 100644 index 0000000000..459efe4dd4 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/INCAR.gz new file mode 100644 index 0000000000..ad635a41c1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/OUTCAR.gz new file mode 100644 index 0000000000..8884da1ca1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POSCAR.gz new file mode 100644 index 0000000000..548523086b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasp.out.gz new file mode 100644 index 0000000000..88800f74c5 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..cbd97e0397 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d0/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/INCAR.gz new file mode 100644 index 0000000000..c51828000e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POSCAR.gz new file mode 100644 index 0000000000..1d89932125 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/CONTCAR.gz new file mode 100644 index 0000000000..8886f56530 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/INCAR.gz new file mode 100644 index 0000000000..c51828000e Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/OUTCAR.gz new file mode 100644 index 0000000000..f913a93805 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POSCAR.gz new file mode 100644 index 0000000000..1d89932125 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasp.out.gz new file mode 100644 index 0000000000..af7ffe78d0 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..13503460d1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d1/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/INCAR.gz new file mode 100644 index 0000000000..e42159d4d6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POSCAR.gz new file mode 100644 index 0000000000..6602d1d101 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/CONTCAR.gz new file mode 100644 index 0000000000..58bd21b610 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/INCAR.gz new file mode 100644 index 0000000000..e42159d4d6 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/OUTCAR.gz new file mode 100644 index 0000000000..8f5253ec6d Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POSCAR.gz new file mode 100644 index 0000000000..6602d1d101 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasp.out.gz new file mode 100644 index 0000000000..bbc06b3a45 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..7a81b2fe8b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d2/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/INCAR.gz new file mode 100644 index 0000000000..565ab58087 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POSCAR.gz new file mode 100644 index 0000000000..f2122b964f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/CONTCAR.gz new file mode 100644 index 0000000000..8bca24b5d4 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/INCAR.gz new file mode 100644 index 0000000000..565ab58087 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/OUTCAR.gz new file mode 100644 index 0000000000..1739d254bb Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POSCAR.gz new file mode 100644 index 0000000000..f2122b964f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasp.out.gz new file mode 100644 index 0000000000..a6053a118f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..b739bd37e1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d3/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/INCAR.gz new file mode 100644 index 0000000000..ad635a41c1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POSCAR.gz new file mode 100644 index 0000000000..95fd827dea Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/CONTCAR.gz new file mode 100644 index 0000000000..20c853a907 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/INCAR.gz new file mode 100644 index 0000000000..ad635a41c1 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/OUTCAR.gz new file mode 100644 index 0000000000..9c58ec6a06 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POSCAR.gz new file mode 100644 index 0000000000..95fd827dea Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasp.out.gz new file mode 100644 index 0000000000..6d7ecb02b8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..d73ef90fde Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d4/outputs/vasprun.xml.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/INCAR.gz new file mode 100644 index 0000000000..efae1d5dc8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POSCAR.gz new file mode 100644 index 0000000000..0db58d6e9f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/inputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/CONTCAR.gz new file mode 100644 index 0000000000..861dcae688 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/CONTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/INCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/INCAR.gz new file mode 100644 index 0000000000..efae1d5dc8 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/INCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/OUTCAR.gz new file mode 100644 index 0000000000..1868203986 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/OUTCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POSCAR.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POSCAR.gz new file mode 100644 index 0000000000..0db58d6e9f Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POSCAR.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POTCAR.spec.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POTCAR.spec.gz new file mode 100644 index 0000000000..44393de246 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/POTCAR.spec.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasp.out.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasp.out.gz new file mode 100644 index 0000000000..fb7a13ee2b Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasp.out.gz differ diff --git a/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasprun.xml.gz b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasprun.xml.gz new file mode 100644 index 0000000000..75f0fc8805 Binary files /dev/null and b/tests/test_data/vasp/Si_qha_2/tight_relax_2_d5/outputs/vasprun.xml.gz differ diff --git a/tests/vasp/flows/test_eos.py b/tests/vasp/flows/test_eos.py index 86b4d541d8..20614e664d 100644 --- a/tests/vasp/flows/test_eos.py +++ b/tests/vasp/flows/test_eos.py @@ -23,7 +23,11 @@ expected_incar_deform = expected_incar_relax | {"ISIF": 2} -expected_incar_static = expected_incar_relax | {"NSW": 0, "IBRION": -1, "ISMEAR": -5} +expected_incar_static = expected_incar_relax | { + "NSW": 0, + "IBRION": -1, + "ISMEAR": -5, +} expected_incar_static.pop("ISIF") @@ -77,15 +81,17 @@ def test_mp_eos_maker( n_frames: int = 2, linear_strain: tuple = (-0.05, 0.05), ): + relax_job_name_1 = "EOS MP GGA relax 1 EOS equilibrium relaxation" + relax_job_name_2 = "EOS MP GGA relax 2 EOS equilibrium relaxation" base_ref_path = "Si_EOS_MP_GGA/" ref_paths = {} expected_incars = { - "EOS MP GGA relax 1": expected_incar_relax_1, - "EOS MP GGA relax 2": expected_incar_relax, + relax_job_name_1: expected_incar_relax_1, + relax_job_name_2: expected_incar_relax, } for idx in range(2): - ref_paths[f"EOS MP GGA relax {idx + 1}"] = ( + ref_paths[f"EOS MP GGA relax {idx + 1} EOS equilibrium relaxation"] = ( f"mp-149-PBE-EOS_MP_GGA_relax_{idx + 1}" ) @@ -118,7 +124,7 @@ def test_mp_eos_maker( ) structure = Structure.from_file( - f"{vasp_test_dir}/{ref_paths['EOS MP GGA relax 1']}/inputs/POSCAR.gz" + f"{vasp_test_dir}/{ref_paths[relax_job_name_1]}/inputs/POSCAR.gz" ) # cannot perform least-squares fit for four parameters with only 3 data points @@ -153,7 +159,10 @@ def test_mp_eos_maker( # deformation jobs not included in this assert len(job_output) == len(ref_paths) - ref_energies = {"EOS MP GGA relax 1": -10.849349, "EOS MP GGA relax 2": -10.849357} + ref_energies = { + "EOS MP GGA relax 1 EOS equilibrium relaxation": -10.849349, + "EOS MP GGA relax 2 EOS equilibrium relaxation": -10.849357, + } if do_statics: ref_energies["EOS equilibrium static"] = -10.849357 diff --git a/tests/vasp/lobster/conftest.py b/tests/vasp/lobster/conftest.py index 9743334bd3..e7ef4fbce1 100644 --- a/tests/vasp/lobster/conftest.py +++ b/tests/vasp/lobster/conftest.py @@ -1,143 +1,16 @@ -from __future__ import annotations - -import logging -import shutil +from collections.abc import Callable, Generator from pathlib import Path -from typing import TYPE_CHECKING, Literal +from typing import Any import pytest -from pymatgen.io.lobster import Lobsterin - -import atomate2.lobster.jobs -import atomate2.lobster.run - -if TYPE_CHECKING: - from collections.abc import Sequence - -logger = logging.getLogger("atomate2") - -_LFILES = "lobsterin" -_DFT_FILES = ("WAVECAR", "POSCAR", "INCAR", "KPOINTS", "POTCAR") -_LOBS_REF_PATHS = {} -_FAKE_RUN_LOBSTER_KWARGS = {} - +from pytest import MonkeyPatch -@pytest.fixture(scope="session") -def lobster_test_dir(test_dir): - return test_dir / "lobster" +from atomate2.utils.testing.lobster import monkeypatch_lobster @pytest.fixture -def mock_lobster(monkeypatch, lobster_test_dir): - """ - This fixture allows one to mock (fake) running LOBSTER. - It works by monkeypatching (replacing) calls to run_lobster that will - work when the lobster executables - are not present. - The primary idea is that instead of running LOBSTER to generate the output files, - reference files will be copied into the directory instead. As we do not want to - test whether LOBSTER is giving the correct output rather that the calculation inputs - are generated correctly and that the outputs are parsed properly, this should be - sufficient for our needs. - To use the fixture successfully, the following steps must be followed: - 1. "mock_lobster" should be included as an argument to any test that would - like to use its functionally. - 2. For each job in your workflow, you should prepare a reference directory - containing two folders "inputs" (containing the reference input files - expected to be produced by Lobsterin.standard_calculations_from_vasp_files - and "outputs" (containing the expected - output files to be produced by run_lobster). These files should reside in a - subdirectory of "tests/test_data/lobster". - 3. Create a dictionary mapping each job name to its reference directory. - Note that you should supply the reference directory relative to the - "tests/test_data/lobster" folder. For example, if your calculation - has one job named "lobster_run_0" and the reference files are present in - "tests/test_data/lobster/Si_lobster_run_0", the dictionary - would look like: ``{"lobster_run_0": "Si_lobster_run_0"}``. - 4. Optional: create a dictionary mapping each job name to custom - keyword arguments that will be supplied to fake_run_lobster. - This way you can configure which lobsterin settings are expected for each job. - For example, if your calculation has one job named "lobster_run_0" - and you wish to validate that "basisfunctions" is set correctly - in the lobsterin, your dictionary would look like - ``{"lobster_run_0": {"lobsterin_settings": {"basisfunctions": Ba 5p 5s 6s}}``. - 5. Inside the test function, call `mock_lobster(ref_paths, fake_lobster_kwargs)`, - where ref_paths is the dictionary created in step 3 - and fake_lobster_kwargs is the - dictionary created in step 4. - 6. Run your lobster job after calling `mock_lobster`. - """ - - def mock_run_lobster(*args, **kwargs): - from jobflow import CURRENT_JOB - - name = CURRENT_JOB.job.name - ref_path = lobster_test_dir / _LOBS_REF_PATHS[name] - fake_run_lobster(ref_path, **_FAKE_RUN_LOBSTER_KWARGS.get(name, {})) - - monkeypatch.setattr(atomate2.lobster.run, "run_lobster", mock_run_lobster) - monkeypatch.setattr(atomate2.lobster.jobs, "run_lobster", mock_run_lobster) - - def _run(ref_paths, fake_run_lobster_kwargs): - _LOBS_REF_PATHS.update(ref_paths) - _FAKE_RUN_LOBSTER_KWARGS.update(fake_run_lobster_kwargs) - - yield _run - - monkeypatch.undo() - _LOBS_REF_PATHS.clear() - - -def fake_run_lobster( - ref_path: str | Path, - check_lobster_inputs: Sequence[Literal["lobsterin"]] = _LFILES, - check_dft_inputs: Sequence[Literal["WAVECAR", "POSCAR"]] = _DFT_FILES, - lobsterin_settings: Sequence[str] = (), -): - """ - Emulate running LOBSTER and validate LOBSTER input files. - Parameters - ---------- - ref_path - Path to reference directory with VASP input files in the folder named 'inputs' - and output files in the folder named 'outputs'. - check_lobster_inputs - A list of lobster input files to check. Supported options are "lobsterin.gz". - lobsterin_settings - A list of LOBSTER settings to check. - """ - logger.info("Running fake LOBSTER.") - ref_path = Path(ref_path) - - # Checks if DFT files have been copied - for file in check_dft_inputs: - Path(file).exists() - logger.info("Verified copying of VASP files successfully") - # zipped or not zipped? - if "lobsterin" in check_lobster_inputs: - verify_inputs(ref_path, lobsterin_settings) - - logger.info("Verified LOBSTER inputs successfully") - - copy_lobster_outputs(ref_path) - - # pretend to run LOBSTER by copying pre-generated outputs from reference dir - logger.info("ran fake LOBSTER, generated outputs") - - -def verify_inputs(ref_path: str | Path, lobsterin_settings: Sequence[str]): - user = Lobsterin.from_file("lobsterin") - - # Check lobsterin - ref = Lobsterin.from_file(ref_path / "inputs" / "lobsterin") - - for key in lobsterin_settings: - if user.get(key) != ref.get(key): - raise ValueError(f"lobsterin value of {key} is inconsistent!") - - -def copy_lobster_outputs(ref_path: str | Path): - output_path = ref_path / "outputs" - for output_file in output_path.iterdir(): - if output_file.is_file(): - shutil.copy(output_file, ".") +def mock_lobster( + monkeypatch: MonkeyPatch, lobster_test_dir: Path +) -> Generator[Callable[[Any, Any], Any], None, None]: + """ """ + yield from monkeypatch_lobster(monkeypatch, lobster_test_dir) diff --git a/tests/vasp/sets/test_matpes.py b/tests/vasp/sets/test_matpes.py deleted file mode 100644 index f29b31c870..0000000000 --- a/tests/vasp/sets/test_matpes.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Confirm with @janosh before changing any of the expected values below.""" - -import pytest -from pymatgen.io.vasp.sets import MatPESStaticSet - -from atomate2.vasp.sets.base import VaspInputGenerator -from atomate2.vasp.sets.matpes import ( - MatPesGGAStaticSetGenerator, - MatPesMetaGGAStaticSetGenerator, -) - - -@pytest.mark.parametrize( - "set_generator", - [MatPesGGAStaticSetGenerator, MatPesMetaGGAStaticSetGenerator], -) -def test_matpes_sets(set_generator: VaspInputGenerator) -> None: - with pytest.warns(FutureWarning): - matpes_set: VaspInputGenerator = set_generator() - - assert {*matpes_set.as_dict()} >= { - "@class", - "@module", - "@version", - "auto_ismear", - "auto_ispin", - "auto_kspacing", - "auto_lreal", - "auto_metal_kpoints", - "config_dict", - "constrain_total_magmom", - "force_gamma", - "inherit_incar", - "sort_structure", - "sym_prec", - "use_structure_charge", - "user_incar_settings", - "user_kpoints_settings", - "user_potcar_functional", - "user_potcar_settings", - "validate_magmom", - "vdw", - } - assert matpes_set.potcar_functional == "PBE_64" - assert isinstance(matpes_set.inherit_incar, list | tuple) - assert set(matpes_set.inherit_incar) == set(MatPESStaticSet.inherit_incar) - assert matpes_set.auto_ismear is False - assert matpes_set.auto_kspacing is False - assert matpes_set.auto_lreal is False - assert matpes_set.sort_structure is True - assert matpes_set.sym_prec == 0.1 - assert matpes_set.use_structure_charge is False - assert matpes_set.vdw is None diff --git a/tests/vasp/sets/test_mp.py b/tests/vasp/sets/test_mp.py deleted file mode 100644 index de35f6f05c..0000000000 --- a/tests/vasp/sets/test_mp.py +++ /dev/null @@ -1,65 +0,0 @@ -"""Confirm with @janosh before changing any of the expected values below.""" - -import pytest - -from atomate2.vasp.sets.base import VaspInputGenerator -from atomate2.vasp.sets.mp import ( - MPGGARelaxSetGenerator, - MPGGAStaticSetGenerator, - MPMetaGGARelaxSetGenerator, - MPMetaGGAStaticSetGenerator, -) - - -@pytest.mark.parametrize( - "set_generator", - [ - MPGGAStaticSetGenerator, - MPMetaGGAStaticSetGenerator, - MPGGARelaxSetGenerator, - MPMetaGGARelaxSetGenerator, - ], -) -def test_mp_sets(set_generator: VaspInputGenerator) -> None: - with pytest.warns(FutureWarning): - mp_set: VaspInputGenerator = set_generator() - assert {*mp_set.as_dict()} >= { - "@class", - "@module", - "@version", - "auto_ismear", - "auto_ispin", - "auto_kspacing", - "auto_lreal", - "auto_metal_kpoints", - "config_dict", - "constrain_total_magmom", - "force_gamma", - "inherit_incar", - "sort_structure", - "sym_prec", - "use_structure_charge", - "user_incar_settings", - "user_kpoints_settings", - "user_potcar_functional", - "user_potcar_settings", - "validate_magmom", - "vdw", - } - assert ( - mp_set.potcar_functional == "PBE_54" - if "Meta" in set_generator.__name__ - else "PBE" - ) - assert mp_set.inherit_incar is False - assert mp_set.auto_ismear is False - assert mp_set.auto_kspacing is ("Meta" in set_generator.__name__) - assert mp_set.auto_lreal is False - assert mp_set.auto_metal_kpoints is ("Meta" not in set_generator.__name__) - assert mp_set.force_gamma is ("Meta" not in set_generator.__name__) - assert mp_set.sort_structure is True - assert mp_set.sym_prec == 0.1 - assert mp_set.use_structure_charge is False - assert mp_set.vdw is None - bandgap_tol = getattr(mp_set, "bandgap_tol", None) - assert bandgap_tol == (1e-4 if "Meta" in set_generator.__name__ else None) diff --git a/tutorials/force_fields/__init__.py b/tutorials/force_fields/__init__.py new file mode 100644 index 0000000000..978848c13a --- /dev/null +++ b/tutorials/force_fields/__init__.py @@ -0,0 +1 @@ +"""Forcefield-based tutorials.""" diff --git a/tutorials/force_fields/phonon_workflow.ipynb b/tutorials/force_fields/phonon_workflow.ipynb new file mode 100644 index 0000000000..06da9e4f5c --- /dev/null +++ b/tutorials/force_fields/phonon_workflow.ipynb @@ -0,0 +1,178 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Phonon Workflow Tutorial with Force Fields" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "We start with imports necessary to test the tutorial automatically. In practice, you can load a structure file from any other place and you are also not required to generate the data in a temporary directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import tempfile\n", + "import warnings\n", + "from pathlib import Path\n", + "\n", + "tmp_dir = tempfile.mkdtemp()\n", + "TEST_ROOT = Path().cwd().parent.parent / \"tests\"\n", + "TEST_DIR = TEST_ROOT / \"test_data\"" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "First, we load a structure from a file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.core.structure import Structure\n", + "\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si.cif\")" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "Then, we load the `PhononMaker` and run_locally to perform the calculation directly here in the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import run_locally\n", + "\n", + "from atomate2.forcefields.flows.phonons import PhononMaker\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "flow = PhononMaker(\n", + " min_length=3.0,\n", + " born_maker=None,\n", + " use_symmetrized_structure=\"conventional\",\n", + " create_thermal_displacements=False,\n", + " store_force_constants=False,\n", + " prefer_90_degrees=False,\n", + " generate_frequencies_eigenvectors_kwargs={\"tstep\": 100},\n", + ").make(si_structure)\n", + "run_locally(flow, create_folders=True, raise_immediately=True, root_dir=tmp_dir)" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "One can switch to a different force field as well!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "flow = PhononMaker(\n", + " min_length=3.0,\n", + " use_symmetrized_structure=\"conventional\",\n", + " create_thermal_displacements=False,\n", + " store_force_constants=False,\n", + " prefer_90_degrees=False,\n", + " generate_frequencies_eigenvectors_kwargs={\"tstep\": 100},\n", + " static_energy_maker=ForceFieldStaticMaker(force_field_name=\"MACE_MP_0B3\"),\n", + " bulk_relax_maker=ForceFieldRelaxMaker(force_field_name=\"MACE_MP_0B3\"),\n", + " phonon_displacement_maker=ForceFieldStaticMaker(force_field_name=\"MACE_MP_0B3\"),\n", + ").make(si_structure)\n", + "\n", + "run_locally(flow, create_folders=True, raise_immediately=True, root_dir=tmp_dir)" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "Or by using the name only:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "PhononMaker.from_force_field_name(force_field_name=\"MACE_MP_0B3\")\n", + "run_locally(flow, create_folders=True, raise_immediately=True, root_dir=tmp_dir)" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "Now, we clean up the temporary directory that we made. In reality, you might want to keep this data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "shutil.rmtree(tmp_dir)" + ] + } + ], + "metadata": { + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/grueneisen_workflow.ipynb b/tutorials/grueneisen_workflow.ipynb new file mode 100644 index 0000000000..7cda61ac2f --- /dev/null +++ b/tutorials/grueneisen_workflow.ipynb @@ -0,0 +1,295 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Grüneisen Workflow (VASP)" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "This part is mocking the VASP calculation to facilitate the execution in the notebook.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "from mock_vasp import TEST_DIR, mock_vasp\n", + "\n", + "ref_paths = {\n", + " \"tight relax 1\": \"Si_gruneisen_tutorial/tight_relax_1_0\",\n", + " \"tight relax 2\": \"Si_gruneisen_tutorial/tight_relax_2_1\",\n", + " \"tight relax 1 plus\": \"Si_gruneisen_tutorial/tight_relax_1_plus_3\",\n", + " \"tight relax 2 plus\": \"Si_gruneisen_tutorial/tight_relax_2_plus_5\",\n", + " \"tight relax 1 minus\": \"Si_gruneisen_tutorial/tight_relax_1_minus_4\",\n", + " \"tight relax 2 minus\": \"Si_gruneisen_tutorial/tight_relax_2_minus_6\",\n", + " \"dft phonon static 1/1 ground\": \"Si_gruneisen_tutorial/dft_phonon_static_1_1_ground_24\",\n", + " \"dft phonon static 1/1 plus\": \"Si_gruneisen_tutorial/dft_phonon_static_1_1_plus_26\",\n", + " \"dft phonon static 1/1 minus\": \"Si_gruneisen_tutorial/dft_phonon_static_1_1_minus_28\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "Let's load all required Makers to set up the calculation settings for VASP." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.vasp.flows.core import DoubleRelaxMaker\n", + "from atomate2.vasp.jobs.core import TightRelaxMaker\n", + "from atomate2.vasp.jobs.phonons import PhononDisplacementMaker\n", + "from atomate2.vasp.sets.core import StaticSetGenerator, TightRelaxSetGenerator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "from pymatgen.core import Structure\n", + "\n", + "from atomate2.vasp.flows.gruneisen import GruneisenMaker, PhononMaker\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "job_store = JobStore(\n", + " MemoryStore(),\n", + " additional_stores={\"data\": MemoryStore()},\n", + ")\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si_diamond.cif\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "phonon_displacement_maker = PhononDisplacementMaker(\n", + " name=\"dft phonon static\",\n", + " run_vasp_kwargs={\"handlers\": ()},\n", + " input_set_generator=StaticSetGenerator(\n", + " user_incar_settings={\n", + " \"GGA\": \"PE\",\n", + " \"IBRION\": -1,\n", + " \"ISPIN\": 1,\n", + " \"ISMEAR\": 0,\n", + " \"ISIF\": 3,\n", + " \"ENCUT\": 700,\n", + " \"EDIFF\": 1e-7,\n", + " \"LAECHG\": False,\n", + " \"LREAL\": False,\n", + " \"ALGO\": \"Normal\",\n", + " \"NSW\": 0,\n", + " \"LCHARG\": False,\n", + " \"LWAVE\": False,\n", + " \"LVTOT\": False,\n", + " \"LORBIT\": None,\n", + " \"LOPTICS\": False,\n", + " \"SIGMA\": 0.05,\n", + " \"ISYM\": 0,\n", + " \"KSPACING\": 0.1,\n", + " \"NPAR\": 4,\n", + " },\n", + " auto_ispin=False,\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], + "source": [ + "phonon_bulk_relax_maker_isif3 = DoubleRelaxMaker.from_relax_maker(\n", + " TightRelaxMaker(\n", + " run_vasp_kwargs={\"handlers\": ()},\n", + " input_set_generator=TightRelaxSetGenerator(\n", + " user_incar_settings={\n", + " \"GGA\": \"PE\",\n", + " \"ISPIN\": 1,\n", + " \"KSPACING\": 0.1,\n", + " # \"EDIFFG\": 1e-5,\n", + " \"ALGO\": \"Normal\",\n", + " \"LAECHG\": False,\n", + " \"ISMEAR\": 0,\n", + " \"ENCUT\": 700,\n", + " \"IBRION\": 1,\n", + " \"ISYM\": 0,\n", + " \"SIGMA\": 0.05,\n", + " \"LCHARG\": False,\n", + " \"LWAVE\": False,\n", + " \"LVTOT\": False,\n", + " \"LORBIT\": None,\n", + " \"LOPTICS\": False,\n", + " \"LREAL\": False,\n", + " \"ISIF\": 3,\n", + " \"NPAR\": 4,\n", + " }\n", + " ),\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "8", + "metadata": {}, + "source": [ + "Then one can use the `GruneisenMaker` to generate a `Flow`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9", + "metadata": {}, + "outputs": [], + "source": [ + "flow = GruneisenMaker(\n", + " symprec=1e-4,\n", + " bulk_relax_maker=phonon_bulk_relax_maker_isif3,\n", + " phonon_maker=PhononMaker(\n", + " generate_frequencies_eigenvectors_kwargs={\n", + " \"tmin\": 0,\n", + " \"tmax\": 1000,\n", + " \"tstep\": 10,\n", + " },\n", + " min_length=10,\n", + " bulk_relax_maker=None,\n", + " born_maker=None,\n", + " static_energy_maker=None,\n", + " phonon_displacement_maker=phonon_displacement_maker,\n", + " ),\n", + ").make(structure=si_structure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "flow.draw_graph().show()" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "We can then run the code with \"mock_vasp\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": { + "jupyter": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "with mock_vasp(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "Let's then analyze outputs from the workflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "job_store.connect()\n", + "\n", + "result = job_store.query_one(\n", + " {\"name\": \"compute_gruneisen_param\"},\n", + " properties=[\n", + " \"output.gruneisen_band_structure\",\n", + " \"output.gruneisen_parameter\",\n", + " ],\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.phonon.gruneisen import GruneisenPhononBandStructureSymmLine\n", + "from pymatgen.phonon.plotter import GruneisenPhononBSPlotter\n", + "\n", + "bs = GruneisenPhononBandStructureSymmLine.from_dict(\n", + " result[\"output\"][\"gruneisen_band_structure\"]\n", + ")\n", + "plt = GruneisenPhononBSPlotter(bs=bs)\n", + "plt.get_plot_gs(plot_ph_bs_with_gruneisen=True)" + ] + } + ], + "metadata": { + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/lobster_workflow.ipynb b/tutorials/lobster_workflow.ipynb new file mode 100644 index 0000000000..8f6c4d78ad --- /dev/null +++ b/tutorials/lobster_workflow.ipynb @@ -0,0 +1,190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# LOBSTER Workflow Tutorial (Using VASP for DFT)" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "The first lines are needed to ensure that we can mock VASP and LOBSTER runs. The test files here might not belong to the same calculation but are good enough for testing." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "from mock_lobster import mock_lobster\n", + "from mock_vasp import TEST_DIR, mock_vasp\n", + "\n", + "ref_paths = {\n", + " \"relax 1\": \"Si_lobster_uniform/relax_1\",\n", + " \"relax 2\": \"Si_lobster_uniform/relax_2\",\n", + " \"static\": \"Si_lobster_uniform/static\",\n", + " \"non-scf uniform\": \"Si_lobster_uniform/non-scf_uniform\",\n", + "}\n", + "ref_paths_lobster = {\n", + " \"lobster_run_0\": \"Si_lobster/lobster_0\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "We first load a structure that we want to analyze with bonding analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "from pymatgen.core import Structure\n", + "\n", + "from atomate2.vasp.flows.lobster import LobsterMaker, VaspLobsterMaker\n", + "from atomate2.vasp.powerups import update_user_incar_settings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "job_store = JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()})\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si.cif\")" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "Then, we initialize a workflow:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "job = VaspLobsterMaker(\n", + " lobster_maker=LobsterMaker(\n", + " task_document_kwargs={\n", + " \"calc_quality_kwargs\": {\"potcar_symbols\": [\"Si\"], \"n_bins\": 10},\n", + " \"add_coxxcar_to_task_document\": True,\n", + " },\n", + " user_lobsterin_settings={\n", + " \"COHPstartEnergy\": -5.0,\n", + " \"COHPEndEnergy\": 5.0,\n", + " \"cohpGenerator\": \"from 0.1 to 3.0 orbitalwise\",\n", + " },\n", + " ),\n", + " delete_wavecars=True,\n", + ").make(si_structure)\n", + "job = update_user_incar_settings(job, {\"NPAR\": 4})\n", + "\n", + "# run the flow or job and ensure that it finished running successfully" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "We then run this workflow locally to show-case the capabilities. In real-life, you would omit the `mock*` parts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "with mock_vasp(ref_paths) as mf, mock_lobster(ref_paths_lobster) as mf2:\n", + " responses = run_locally(\n", + " job,\n", + " store=job_store,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "We can also analyze the data from the database" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.electronic_structure.cohp import Cohp\n", + "from pymatgen.electronic_structure.plotter import CohpPlotter\n", + "\n", + "store = job_store\n", + "\n", + "result = store.query_one(\n", + " {\"name\": \"lobster_run_0\"},\n", + " properties=[\n", + " \"output.lobsterpy_data.cohp_plot_data\",\n", + " \"output.lobsterpy_data_cation_anion.cohp_plot_data\",\n", + " ],\n", + " load=True,\n", + ")\n", + "\n", + "for key, cohp in result[\"output\"][\"lobsterpy_data\"][\"cohp_plot_data\"][\"data\"].items():\n", + " plotter = CohpPlotter()\n", + " cohp_obj = Cohp.from_dict(cohp)\n", + " plotter.add_cohp(key, cohp_obj)\n", + " plotter.show()\n", + "\n", + "for key, cohp in result[\"output\"][\"lobsterpy_data_cation_anion\"][\"cohp_plot_data\"][\n", + " \"data\"\n", + "].items():\n", + " plotter = CohpPlotter()\n", + " cohp_obj = Cohp.from_dict(cohp)\n", + " plotter.add_cohp(key, cohp_obj)\n", + " plotter.show()" + ] + } + ], + "metadata": { + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/mock_aims.py b/tutorials/mock_aims.py new file mode 100644 index 0000000000..9ea938f50a --- /dev/null +++ b/tutorials/mock_aims.py @@ -0,0 +1,39 @@ +"""Mock FHI-aims functions for executing tutorials.""" + +import contextlib +import os +import shutil +import tempfile +from collections.abc import Generator +from pathlib import Path + +from pytest import MonkeyPatch + +from atomate2.utils.testing.aims import monkeypatch_aims + +TEST_ROOT = Path(__file__).parent.parent / "tests" +TEST_DIR = TEST_ROOT / "test_data" + + +@contextlib.contextmanager +def mock_aims(ref_paths: dict) -> Generator: + """Mock FHI-aims functions. + + Parameters + ---------- + ref_paths (dict): A dictionary of reference paths to the test data. + + Yields + ------ + function: A function that mocks calls to FHI-aims. + """ + for mf in monkeypatch_aims(MonkeyPatch(), TEST_DIR / "aims"): + fake_run_aims_kwargs = {k: {"check_inputs": ()} for k in ref_paths} + old_cwd = os.getcwd() + new_path = tempfile.mkdtemp() + os.chdir(new_path) + try: + yield mf(ref_paths, fake_run_aims_kwargs) + finally: + os.chdir(old_cwd) + shutil.rmtree(new_path) diff --git a/tutorials/mock_lobster.py b/tutorials/mock_lobster.py new file mode 100644 index 0000000000..97c1ba01be --- /dev/null +++ b/tutorials/mock_lobster.py @@ -0,0 +1,40 @@ +"""Mock LOBSTER functions for executing tutorials.""" + +import contextlib +import os +import shutil +import tempfile +from collections.abc import Generator +from pathlib import Path + +from pytest import MonkeyPatch + +from atomate2.utils.testing.lobster import monkeypatch_lobster + +TEST_ROOT = Path(__file__).parent.parent / "tests" +TEST_DIR = TEST_ROOT / "test_data" + + +@contextlib.contextmanager +def mock_lobster(ref_paths: dict) -> Generator: + """Mock LOBSTER functions. + + Parameters + ---------- + ref_paths (dict): A dictionary of reference paths to the test data. + + Yields + ------ + function: A function that mocks calls to VASP. + """ + for mf in monkeypatch_lobster(MonkeyPatch(), TEST_DIR / "lobster"): + fake_run_lobster_kwargs = {k: {"check_lobster_inputs": ()} for k in ref_paths} + + old_cwd = os.getcwd() + new_path = tempfile.mkdtemp() + os.chdir(new_path) + try: + yield mf(ref_paths, fake_run_lobster_kwargs=fake_run_lobster_kwargs) + finally: + os.chdir(old_cwd) + shutil.rmtree(new_path) diff --git a/tutorials/openmm_tutorial.ipynb b/tutorials/openmm_tutorial.ipynb index 8cfb3baf9c..1d5124ad63 100644 --- a/tutorials/openmm_tutorial.ipynb +++ b/tutorials/openmm_tutorial.ipynb @@ -3,13 +3,21 @@ { "cell_type": "markdown", "id": "0", + "metadata": {}, + "source": [ + "# OpenMM Tutorial" + ] + }, + { + "cell_type": "markdown", + "id": "1", "metadata": { "jupyter": { "outputs_hidden": false } }, "source": [ - "### Installing Atomate2 From Source with OpenMM\n", + "## Installing Atomate2 From Source with OpenMM\n", "\n", "```bash\n", "# setting up our conda environment\n", @@ -50,20 +58,20 @@ }, { "cell_type": "markdown", - "id": "1", + "id": "2", "metadata": {}, "source": [ - "### Understanding Atomate2 OpenMM \n", + "## Understanding Atomate2 OpenMM\n", "\n", "Atomate2 is really just a collection of jobflow workflows relevant to materials science. In all the workflows, we pass our system of interest between different jobs to perform the desired simulation. Representing the intermediate state of a classical molecular dynamics simulation, however, is challenging. While the intermediate representation between stages of a periodic DFT simulation can include just the elements, xyz coordinates, and box vectors, classical molecular dynamics systems must also include velocities and forces. The latter is particularly challenging because all MD engines represent forces differently. Rather than implement our own representation, we use the `openff.interchange.Interchange` object, which catalogs the necessary system properties and interfaces with a variety of MD engines. This is the object that we pass between stages of a classical MD simulation and it is the starting point of our workflow." ] }, { "cell_type": "markdown", - "id": "2", + "id": "3", "metadata": {}, "source": [ - "### Pouring a Glass of Wine\n", + "## Pouring a Glass of Wine\n", "\n", "The first job we need to create generates the `Interchange` object. To specify the system of interest, we use give it the SMILES strings, counts, and names (optional) of the molecules we want to include." ] @@ -71,7 +79,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "4", "metadata": { "jupyter": { "outputs_hidden": false @@ -92,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "4", + "id": "5", "metadata": {}, "source": [ "If you are wondering what arguments are allowed in the dictionaries, check out the `create_mol_spec` function in the `atomate2.openff.utils` module. Under the hood, this is being called on each mol_spec dict. Meaning the code below is functionally identical to the code above." @@ -101,7 +109,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -114,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "6", + "id": "7", "metadata": {}, "source": [ "In a more complex simulation we might want to scale the ion charges and include custom partial charges. An example with the Gen2 electrolyte is shown below. This yields the `elyte_interchange_job` object, which we can pass to the next stage of the simulation.\n", @@ -125,7 +133,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "8", "metadata": { "jupyter": { "outputs_hidden": false @@ -170,10 +178,10 @@ }, { "cell_type": "markdown", - "id": "8", + "id": "9", "metadata": {}, "source": [ - "### The basic simulation\n", + "## The basic simulation\n", "\n", "To run a production simulation, we will create a production flow, link it to our `elyte_interchange_job`, and then run both locally.\n", "\n", @@ -184,7 +192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -215,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "10", + "id": "11", "metadata": {}, "source": [ "When the above code is executed, you should expect to see something like this:\n", @@ -242,10 +250,10 @@ }, { "cell_type": "markdown", - "id": "11", + "id": "12", "metadata": {}, "source": [ - "### Configuring the Simulation\n", + "## Configuring the Simulation\n", "\n", "All OpenMM jobs, i.e. anything in `atomate2.openmm.jobs`, inherits from the `BaseOpenMMMaker` class. `BaseOpenMMMaker` is highly configurable, you can change the timestep, temperature, reporting frequencies, output types, and a range of other properties. See the docstring for the full list of options.\n", "\n", @@ -255,7 +263,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -266,7 +274,7 @@ }, { "cell_type": "markdown", - "id": "13", + "id": "14", "metadata": {}, "source": [ "Perhaps we want to record a trajectory with velocities but only for the final NVT run. " @@ -274,10 +282,10 @@ }, { "cell_type": "markdown", - "id": "14", + "id": "15", "metadata": {}, "source": [ - "### Running with Databases\n", + "## Running with Databases\n", "\n", "Before trying this, you should have a basic understanding of JobFlow and [Stores](https://materialsproject.github.io/jobflow/stores.html).\n", "\n", @@ -363,10 +371,10 @@ }, { "cell_type": "markdown", - "id": "15", + "id": "16", "metadata": {}, "source": [ - "### Running on GPU(s)\n", + "## Running on GPU(s)\n", "\n", "Running on a GPU is nearly as simple as running on a CPU. The only difference is that you need to specify the `platform_properties` argument in the `EnergyMinimizationMaker` with the `DeviceIndex` of the GPU you want to use." ] @@ -374,7 +382,7 @@ { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -394,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "17", + "id": "18", "metadata": {}, "source": [ "To run on a system with multiple GPUs, the 'DeviceIndex' can be changed to a different number for each job." diff --git a/tutorials/phonon_worflow_aims.ipynb b/tutorials/phonon_worflow_aims.ipynb new file mode 100644 index 0000000000..7250a7ada5 --- /dev/null +++ b/tutorials/phonon_worflow_aims.ipynb @@ -0,0 +1,352 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "This first part is only needed as we have to mock FHI-aims here as we cannot run it directly in a jupyter notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "from mock_aims import TEST_DIR, mock_aims\n", + "\n", + "ref_paths = {\n", + " \"Relaxation calculation\": \"phonon-relax-si\",\n", + " \"phonon static aims 1/1\": \"phonon-disp-si\",\n", + " \"SCF Calculation\": \"phonon-energy-si\",\n", + " \"phonon static aims anharmonicity quant. 1/1\": \"anharm-si-full\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "# Phonon Workflow Tutorial with FHI-aims" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "This tutorial has been written based on the VASP version." + ] + }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "## Background\n", + "The Phonon workflow is based on the finite displacement approach as implemented in Phonopy.\n", + "\n", + "If you want to read more about Phonopy, please read Togo’s paper: https://doi.org/10.7566/JPSJ.92.012001" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## Let's run the workflow\n", + "Now, we load a structure and other important functions and classes for running the phonon workflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "from pymatgen.core import SETTINGS, Structure\n", + "\n", + "from atomate2.aims.flows.phonons import PhononMaker\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "job_store = JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()})\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si_diamond.cif\")\n", + "SETTINGS[\"AIMS_SPECIES_DIR\"] = TEST_DIR / \"../aims/species_dir/tight\"" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "Then one can use the `PhononMaker` to generate a `Flow`. For testing here, we are choosing a very small supercell length (`min_length`). Ideally, a larger cell should be chosen. For non-metallic systems with more than one element, one might need to add the non-analytical term correction considering very long-ranging forces by computing the `BORN` charges with the `born_maker`. Of course, the structure should also be relaxed in advance with the `bulk_relax_maker`. Please make sure this is done very accurately. For FHI-aims a `born_maker` still needs to be implemented." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "phonon_maker = PhononMaker(\n", + " min_length=3.0,\n", + " generate_frequencies_eigenvectors_kwargs={\"tstep\": 100},\n", + " create_thermal_displacements=True,\n", + " store_force_constants=True,\n", + " born_maker=None,\n", + " use_symmetrized_structure=\"primitive\",\n", + ")\n", + "flow = phonon_maker.make(si_structure)" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "The phonon run will first perform a bulk relaxation, then the displacements are generated and run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "flow.draw_graph().show()" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "We now run the flow with `run_locally`. We mock the run here. Normally, you would simply use `run_locally` without the `with mock_aims`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "with mock_aims(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine\n", + "from pymatgen.phonon.dos import PhononDos\n", + "from pymatgen.phonon.plotter import PhononBSPlotter, PhononDosPlotter\n", + "\n", + "job_store.connect()\n", + "\n", + "result = job_store.query_one(\n", + " {\"name\": \"generate_frequencies_eigenvectors\"},\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "ph_bs = PhononBandStructureSymmLine.from_dict(\n", + " result[\"output\"][\"phonon_bandstructure\"]\n", + ") # get pymatgen bandstructure object\n", + "ph_dos = PhononDos.from_dict(\n", + " result[\"output\"][\"phonon_dos\"]\n", + ") # get pymatgen phonon dos object\n", + "\n", + "# initialize dos plotter and visualize dos plot\n", + "dos_plot = PhononDosPlotter()\n", + "dos_plot.add_dos(label=\"a\", dos=ph_dos)\n", + "dos_plot.get_plot()\n", + "\n", + "# initialize Phonon bandstructure plotter and visualize band structure plot\n", + "bs_plot = PhononBSPlotter(bs=ph_bs)\n", + "bs_plot.get_plot()" + ] + }, + { + "cell_type": "markdown", + "id": "15", + "metadata": {}, + "source": [ + "One can run the same workflow with a forcefield or VASP as well." + ] + }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "## Anharmonicity Quantification" + ] + }, + { + "cell_type": "markdown", + "id": "17", + "metadata": {}, + "source": [ + "Now that we have a phonon calculation completed, we can quantify the anharmonicty ($\\sigma^A$) using the method first proposed in this paper: Phys. Rev. Materials 4, 083809 DOI: https://doi.org/10.1103/PhysRevMaterials.4.083809" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.aims.flows.anharmonicity import AnharmonicityMaker\n", + "from atomate2.common.schemas.phonons import PhononBSDOSDoc\n", + "\n", + "anharm_quant_maker = AnharmonicityMaker(phonon_maker=phonon_maker)\n", + "phonon_doc = PhononBSDOSDoc(**result[\"output\"])\n", + "\n", + "anharm_flow = anharm_quant_maker.make_from_phonon_doc(\n", + " phonon_doc=phonon_doc,\n", + " one_shot_approx=False,\n", + " seed=1234,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19", + "metadata": {}, + "outputs": [], + "source": [ + "with mock_aims(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " anharm_flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20", + "metadata": {}, + "outputs": [], + "source": [ + "result_anharm = job_store.query_one(\n", + " {\"name\": \"get_sigmas\"},\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")\n", + "print(f\"The estimated anharmonicity is {result_anharm['output']['full']}\") # noqa: T201" + ] + }, + { + "cell_type": "markdown", + "id": "21", + "metadata": {}, + "source": [ + "We can also use the oneshot method to approximate $\\sigma^A$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22", + "metadata": {}, + "outputs": [], + "source": [ + "anharm_os_flow = anharm_quant_maker.make_from_phonon_doc(\n", + " phonon_doc=phonon_doc,\n", + " one_shot_approx=True,\n", + " seed=1234,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23", + "metadata": {}, + "outputs": [], + "source": [ + "ref_paths = {\n", + " \"Relaxation calculation\": \"phonon-relax-si\",\n", + " \"phonon static aims 1/1\": \"phonon-disp-si\",\n", + " \"SCF Calculation\": \"phonon-energy-si\",\n", + " \"phonon static aims anharmonicity quant. 1/1\": \"anharm-os-si\",\n", + "}\n", + "with mock_aims(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " anharm_os_flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24", + "metadata": {}, + "outputs": [], + "source": [ + "result_anharm = job_store.query_one(\n", + " {\"name\": \"get_sigmas\"},\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")\n", + "print(f\"The estimated one-shot anharmonicity is {result_anharm['output']['one-shot']}\") # noqa: T201" + ] + } + ], + "metadata": { + "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.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/phonon_workflow.ipynb b/tutorials/phonon_workflow.ipynb new file mode 100644 index 0000000000..5d1d02b0f8 --- /dev/null +++ b/tutorials/phonon_workflow.ipynb @@ -0,0 +1,227 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "This first part is only needed as we have to mock VASP here as we cannot run it directly in a jupyter notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "from mock_vasp import TEST_DIR, mock_vasp\n", + "\n", + "ref_paths = {\n", + " \"phonon static 1/1\": \"Si_phonons_3/phonon_static_1_1\",\n", + " \"static\": \"Si_phonons_3/static\",\n", + " \"tight relax 1\": \"Si_phonons_3/tight_relax_1\",\n", + " \"tight relax 2\": \"Si_phonons_3/tight_relax_2\",\n", + " \"dielectric\": \"Si_phonons_3/dielectric\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "# Phonon Workflow Tutorial with VASP" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "This tutorial has been written based on a previous version from Aakash Naik." + ] + }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "## Background\n", + "The Phonon workflow is based on the finite displacement approach as implemented in Phonopy.\n", + "\n", + "If you want to read more about Phonopy, please read Togo’s paper: https://doi.org/10.7566/JPSJ.92.012001" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## Let's run the workflow\n", + "Now, we load a structure and other important functions and classes for running the phonon workflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "from pymatgen.core import Structure\n", + "\n", + "from atomate2.vasp.flows.phonons import PhononMaker\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "job_store = JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()})\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si.cif\")" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "Then one can use the `PhononMaker` to generate a `Flow`. For testing here, we are choosing a very small supercell length (`min_length`). Ideally, a larger cell should be chosen. For non-metallic systems with more than one element, one might need to add the non-analytical term correction considering very long-ranging forces by computing the `BORN` charges with the `born_maker`. Of course, the structure should also be relaxed in advance with the `bulk_relax_maker`. Please make sure this is done very accurately." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "flow = PhononMaker(\n", + " min_length=3.0,\n", + " use_symmetrized_structure=None,\n", + " generate_frequencies_eigenvectors_kwargs={\"tstep\": 100},\n", + " create_thermal_displacements=True,\n", + " store_force_constants=True,\n", + " born_maker=None,\n", + ").make(si_structure)" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "The phonon run will first perform a bulk relaxation, then the displacements are generated and run. As we currently don’t have a way to compute BORN charges with such potentials, a non-analytical term correction is not performed here. We can visualize the flow first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "flow.draw_graph().show()" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "We now run the flow with `run_locally`. We mock the run here. Normally, you would simply use `run_locally` without the `with mock_vasp`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "with mock_vasp(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine\n", + "from pymatgen.phonon.dos import PhononDos\n", + "from pymatgen.phonon.plotter import PhononBSPlotter, PhononDosPlotter\n", + "\n", + "job_store.connect()\n", + "\n", + "result = job_store.query_one(\n", + " {\"name\": \"generate_frequencies_eigenvectors\"},\n", + " properties=[\n", + " \"output.phonon_dos\",\n", + " \"output.phonon_bandstructure\",\n", + " ],\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "ph_bs = PhononBandStructureSymmLine.from_dict(\n", + " result[\"output\"][\"phonon_bandstructure\"]\n", + ") # get pymatgen bandstructure object\n", + "ph_dos = PhononDos.from_dict(\n", + " result[\"output\"][\"phonon_dos\"]\n", + ") # get pymatgen phonon dos object\n", + "\n", + "# initialize dos plotter and visualize dos plot\n", + "dos_plot = PhononDosPlotter()\n", + "dos_plot.add_dos(label=\"a\", dos=ph_dos)\n", + "dos_plot.get_plot()\n", + "\n", + "# initialize Phonon bandstructure plotter and visualize band structure plot\n", + "bs_plot = PhononBSPlotter(bs=ph_bs)\n", + "bs_plot.get_plot()" + ] + }, + { + "cell_type": "markdown", + "id": "15", + "metadata": {}, + "source": [ + "One can run the same workflow with a forcefield as well. Here, we cannot consider BORN charges yet as there is no forcefield equivalent. You can find this tutorial in the force field tutorials." + ] + } + ], + "metadata": { + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/qha_workflow.ipynb b/tutorials/qha_workflow.ipynb new file mode 100644 index 0000000000..f93e6ab17d --- /dev/null +++ b/tutorials/qha_workflow.ipynb @@ -0,0 +1,382 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Quasi-harmonic Workflow Tutorial with VASP" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "This first part is only needed as we have to mock VASP here as we cannot run it directly in a jupyter notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "from mock_vasp import TEST_DIR, mock_vasp\n", + "\n", + "ref_paths = {\n", + " \"phonon static 1/1\": \"Si_qha_2/phonon_static_1_1\",\n", + " \"static\": \"Si_qha_2/static\",\n", + " \"tight relax 1 EOS equilibrium relaxation\": \"Si_qha_2/tight_relax_1\",\n", + " \"tight relax 2 EOS equilibrium relaxation\": \"Si_qha_2/tight_relax_2\",\n", + " \"tight relax 1 deformation 0\": \"Si_qha_2/tight_relax_1_d0\",\n", + " \"tight relax 1 deformation 1\": \"Si_qha_2/tight_relax_1_d1\",\n", + " \"tight relax 1 deformation 2\": \"Si_qha_2/tight_relax_1_d2\",\n", + " \"tight relax 1 deformation 3\": \"Si_qha_2/tight_relax_1_d3\",\n", + " \"tight relax 1 deformation 4\": \"Si_qha_2/tight_relax_1_d4\",\n", + " \"tight relax 1 deformation 5\": \"Si_qha_2/tight_relax_1_d5\",\n", + " \"tight relax 2 deformation 0\": \"Si_qha_2/tight_relax_2_d0\",\n", + " \"tight relax 2 deformation 1\": \"Si_qha_2/tight_relax_2_d1\",\n", + " \"tight relax 2 deformation 2\": \"Si_qha_2/tight_relax_2_d2\",\n", + " \"tight relax 2 deformation 3\": \"Si_qha_2/tight_relax_2_d3\",\n", + " \"tight relax 2 deformation 4\": \"Si_qha_2/tight_relax_2_d4\",\n", + " \"tight relax 2 deformation 5\": \"Si_qha_2/tight_relax_2_d5\",\n", + " \"dft phonon static eos deformation 1\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_1\",\n", + " \"dft phonon static eos deformation 2\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_2\",\n", + " \"dft phonon static eos deformation 3\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_3\",\n", + " \"dft phonon static eos deformation 4\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_4\",\n", + " \"dft phonon static eos deformation 5\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_5\",\n", + " \"dft phonon static eos deformation 6\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_6\",\n", + " \"dft phonon static eos deformation 7\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_eos_deformation_7\",\n", + " \"dft phonon static 1/1 eos deformation 1\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_1\",\n", + " \"dft phonon static 1/1 eos deformation 2\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_2\",\n", + " \"dft phonon static 1/1 eos deformation 3\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_3\",\n", + " \"dft phonon static 1/1 eos deformation 4\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_4\",\n", + " \"dft phonon static 1/1 eos deformation 5\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_5\",\n", + " \"dft phonon static 1/1 eos deformation 6\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_6\",\n", + " \"dft phonon static 1/1 eos deformation 7\": \"Si_qha_2/\"\n", + " \"dft_phonon_static_1_1_eos_deformation_7\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "This tutorial will make use of a quasi-harmonic workflow that allows to include volume-dependent anharmonicity into the calculation of phonon free energies.\n", + "Please check out the paper by Togo to learn about the exact implementation as we will rely on Phonopy to perform the quasi-harmonic approximation: https://doi.org/10.7566/JPSJ.92.012001.\n", + "At the moment, we perform harmonic free energy calculation along a volume curve to arrive at free energy-volume curves that are the starting point for the quasi-harmonic approximation." + ] + }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "## Let's run the workflow\n", + "Now, we load a structure and other important functions and classes for running the qha workflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "from pymatgen.core import Structure\n", + "\n", + "from atomate2.vasp.flows.qha import QhaMaker\n", + "\n", + "job_store = JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()})\n", + "si_structure = Structure.from_file(TEST_DIR / \"structures\" / \"Si_diamond.cif\")" + ] + }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "Then one can use the `QhaMaker` to generate a `Flow`.\n", + "First, the structure will be optimized than the structures will be optimized at constant volume along an energy volume curve. \n", + "Please make sure the structural optimizations are tight enough. At each of these volumes, a phonon run will then be performed.\n", + "The quasi-harmonic approximation is only valid if the harmonic phonon curves don't show any imaginary modes. However, for testing, you\n", + "can also switch off this option." + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "Before we start the quasi-harmonic workflow, we adapt the first relaxation, the relaxation with different volumes and the static runs for the phonon calculation. As we deal with Si, we will not add the non-analytical term correction. For this we load the respective Makers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.vasp.flows.core import DoubleRelaxMaker\n", + "from atomate2.vasp.flows.phonons import PhononMaker\n", + "from atomate2.vasp.jobs.core import TightRelaxMaker\n", + "from atomate2.vasp.jobs.phonons import PhononDisplacementMaker\n", + "from atomate2.vasp.sets.core import StaticSetGenerator, TightRelaxSetGenerator\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "phonon_bulk_relax_maker_isif3 = DoubleRelaxMaker.from_relax_maker(\n", + " TightRelaxMaker(\n", + " run_vasp_kwargs={\"handlers\": ()},\n", + " input_set_generator=TightRelaxSetGenerator(\n", + " user_incar_settings={\n", + " \"GGA\": \"PE\",\n", + " \"ISPIN\": 1,\n", + " \"KSPACING\": 0.1,\n", + " \"ALGO\": \"Normal\",\n", + " \"LAECHG\": False,\n", + " \"ISMEAR\": 0,\n", + " \"ENCUT\": 700,\n", + " \"IBRION\": 1,\n", + " \"ISYM\": 0,\n", + " \"SIGMA\": 0.05,\n", + " \"LCHARG\": False,\n", + " \"LWAVE\": False,\n", + " \"LVTOT\": False,\n", + " \"LORBIT\": None,\n", + " \"LOPTICS\": False,\n", + " \"LREAL\": False,\n", + " \"ISIF\": 3,\n", + " \"NPAR\": 4,\n", + " }\n", + " ),\n", + " )\n", + ")\n", + "\n", + "phonon_displacement_maker = PhononDisplacementMaker(\n", + " run_vasp_kwargs={\"handlers\": ()},\n", + " input_set_generator=StaticSetGenerator(\n", + " user_incar_settings={\n", + " \"GGA\": \"PE\",\n", + " \"IBRION\": -1,\n", + " \"ISPIN\": 1,\n", + " \"ISMEAR\": 0,\n", + " \"ISIF\": 3,\n", + " \"ENCUT\": 700,\n", + " \"EDIFF\": 1e-7,\n", + " \"LAECHG\": False,\n", + " \"LREAL\": False,\n", + " \"ALGO\": \"Normal\",\n", + " \"NSW\": 0,\n", + " \"LCHARG\": False,\n", + " \"LWAVE\": False,\n", + " \"LVTOT\": False,\n", + " \"LORBIT\": None,\n", + " \"LOPTICS\": False,\n", + " \"SIGMA\": 0.05,\n", + " \"ISYM\": 0,\n", + " \"KSPACING\": 0.1,\n", + " \"NPAR\": 4,\n", + " },\n", + " auto_ispin=False,\n", + " ),\n", + ")\n", + "\n", + "\n", + "phonon_bulk_relax_maker_isif4 = DoubleRelaxMaker.from_relax_maker(\n", + " TightRelaxMaker(\n", + " run_vasp_kwargs={\"handlers\": ()},\n", + " input_set_generator=TightRelaxSetGenerator(\n", + " user_incar_settings={\n", + " \"GGA\": \"PE\",\n", + " \"ISPIN\": 1,\n", + " \"KSPACING\": 0.1,\n", + " \"ALGO\": \"Normal\",\n", + " \"LAECHG\": False,\n", + " \"ISMEAR\": 0,\n", + " \"ENCUT\": 700,\n", + " \"IBRION\": 1,\n", + " \"ISYM\": 0,\n", + " \"SIGMA\": 0.05,\n", + " \"LCHARG\": False,\n", + " \"LWAVE\": False,\n", + " \"LVTOT\": False,\n", + " \"LORBIT\": None,\n", + " \"LOPTICS\": False,\n", + " \"LREAL\": False,\n", + " \"ISIF\": 4,\n", + " \"NPAR\": 4,\n", + " }\n", + " ),\n", + " )\n", + ")\n", + "\n", + "phonon_displacement_maker.name = \"dft phonon static\"" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "Then we can construct a `QhaMaker` flow as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "flow = QhaMaker(\n", + " initial_relax_maker=phonon_bulk_relax_maker_isif3,\n", + " eos_relax_maker=phonon_bulk_relax_maker_isif4,\n", + " min_length=10,\n", + " phonon_maker=PhononMaker(\n", + " generate_frequencies_eigenvectors_kwargs={\n", + " \"tmin\": 0,\n", + " \"tmax\": 1000,\n", + " \"tstep\": 10,\n", + " },\n", + " bulk_relax_maker=None,\n", + " born_maker=None,\n", + " static_energy_maker=phonon_displacement_maker,\n", + " phonon_displacement_maker=phonon_displacement_maker,\n", + " ),\n", + " linear_strain=(-0.15, 0.15),\n", + " number_of_frames=6,\n", + " pressure=None,\n", + " t_max=None,\n", + " ignore_imaginary_modes=False,\n", + " skip_analysis=False,\n", + " eos_type=\"vinet\",\n", + ").make(structure=si_structure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11", + "metadata": { + "jupyter": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "with mock_vasp(ref_paths=ref_paths) as mf:\n", + " run_locally(\n", + " flow,\n", + " create_folders=True,\n", + " ensure_success=True,\n", + " raise_immediately=True,\n", + " store=job_store,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "## Let's retrieve the data and analyze it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], + "source": [ + "job_store.connect()\n", + "\n", + "result = job_store.query_one(\n", + " {\"name\": \"analyze_free_energy\"},\n", + " properties=[\n", + " \"output.helmholtz_volume\",\n", + " \"output.temperatures\",\n", + " \"output.volumes\",\n", + " ],\n", + " load=True,\n", + " sort={\"completed_at\": -1}, # to get the latest computation\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "14", + "metadata": {}, + "source": [ + "You can then plot some of the output free energy volume curves" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "for temp, energy_list in zip(\n", + " result[\"output\"][\"temperatures\"],\n", + " result[\"output\"][\"helmholtz_volume\"],\n", + " strict=False,\n", + "):\n", + " # Create the plot\n", + " plt.plot(\n", + " result[\"output\"][\"volumes\"],\n", + " energy_list,\n", + " marker=\"o\",\n", + " label=temp,\n", + " )\n", + " # Add labels and title\n", + "plt.xlabel(\"Volume\")\n", + "plt.ylabel(\"Free Energy\")\n", + "\n", + "# Show the plot\n", + "plt.show()" + ] + } + ], + "metadata": { + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/tutorials.md b/tutorials/tutorials.md new file mode 100644 index 0000000000..64674df50d --- /dev/null +++ b/tutorials/tutorials.md @@ -0,0 +1,17 @@ +(tutorials)= +[comment]: # This file will be copied to the docs to help including the tutorials +# Tutorials + +The section includes tutorials for workflows in atomate2. +They can also be found in the form of jupyter notebooks in: +[https://github.com/materialsproject/atomate2/tree/main/tutorials](https://github.com/materialsproject/atomate2/tree/main/tutorials) + +```{toctree} +blob_storage +lobster_workflow +openmm_tutorial +phonon_workflow +grueneisen_workflow +qha_workflow +force_fields/phonon_workflow +```